1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/addon-sdk/source/lib/sdk/places/history.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,64 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +"use strict"; 1.9 + 1.10 +module.metadata = { 1.11 + "stability": "unstable", 1.12 + "engines": { 1.13 + "Firefox": "*" 1.14 + } 1.15 +}; 1.16 + 1.17 +/* 1.18 + * Requiring hosts so they can subscribe to client messages 1.19 + */ 1.20 +require('./host/host-bookmarks'); 1.21 +require('./host/host-tags'); 1.22 +require('./host/host-query'); 1.23 + 1.24 +const { Cc, Ci } = require('chrome'); 1.25 +const { Class } = require('../core/heritage'); 1.26 +const { events, send } = require('../addon/events'); 1.27 +const { defer, reject, all } = require('../core/promise'); 1.28 +const { uuid } = require('../util/uuid'); 1.29 +const { flatten } = require('../util/array'); 1.30 +const { has, extend, merge, pick } = require('../util/object'); 1.31 +const { emit } = require('../event/core'); 1.32 +const { defer: async } = require('../lang/functional'); 1.33 +const { EventTarget } = require('../event/target'); 1.34 +const { 1.35 + urlQueryParser, createQuery, createQueryOptions 1.36 +} = require('./utils'); 1.37 + 1.38 +/* 1.39 + * Constant used by nsIHistoryQuery; 0 is a history query 1.40 + * https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsINavHistoryQueryOptions 1.41 + */ 1.42 +const HISTORY_QUERY = 0; 1.43 + 1.44 +let search = function query (queries, options) { 1.45 + queries = [].concat(queries); 1.46 + let emitter = EventTarget(); 1.47 + let queryObjs = queries.map(createQuery.bind(null, HISTORY_QUERY)); 1.48 + let optionsObj = createQueryOptions(HISTORY_QUERY, options); 1.49 + 1.50 + // Can remove after `Promise.jsm` is implemented in Bug 881047, 1.51 + // which will guarantee next tick execution 1.52 + async(() => { 1.53 + send('sdk-places-query', { 1.54 + query: queryObjs, 1.55 + options: optionsObj 1.56 + }).then(results => { 1.57 + results.map(item => emit(emitter, 'data', item)); 1.58 + emit(emitter, 'end', results); 1.59 + }, reason => { 1.60 + emit(emitter, 'error', reason); 1.61 + emit(emitter, 'end', []); 1.62 + }); 1.63 + })(); 1.64 + 1.65 + return emitter; 1.66 +}; 1.67 +exports.search = search;