michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: "use strict"; michael@0: michael@0: module.metadata = { michael@0: "stability": "unstable", michael@0: "engines": { michael@0: "Firefox": "*" michael@0: } michael@0: }; michael@0: michael@0: /* michael@0: * Requiring hosts so they can subscribe to client messages michael@0: */ michael@0: require('./host/host-bookmarks'); michael@0: require('./host/host-tags'); michael@0: require('./host/host-query'); michael@0: michael@0: const { Cc, Ci } = require('chrome'); michael@0: const { Class } = require('../core/heritage'); michael@0: const { events, send } = require('../addon/events'); michael@0: const { defer, reject, all } = require('../core/promise'); michael@0: const { uuid } = require('../util/uuid'); michael@0: const { flatten } = require('../util/array'); michael@0: const { has, extend, merge, pick } = require('../util/object'); michael@0: const { emit } = require('../event/core'); michael@0: const { defer: async } = require('../lang/functional'); michael@0: const { EventTarget } = require('../event/target'); michael@0: const { michael@0: urlQueryParser, createQuery, createQueryOptions michael@0: } = require('./utils'); michael@0: michael@0: /* michael@0: * Constant used by nsIHistoryQuery; 0 is a history query michael@0: * https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsINavHistoryQueryOptions michael@0: */ michael@0: const HISTORY_QUERY = 0; michael@0: michael@0: let search = function query (queries, options) { michael@0: queries = [].concat(queries); michael@0: let emitter = EventTarget(); michael@0: let queryObjs = queries.map(createQuery.bind(null, HISTORY_QUERY)); michael@0: let optionsObj = createQueryOptions(HISTORY_QUERY, options); michael@0: michael@0: // Can remove after `Promise.jsm` is implemented in Bug 881047, michael@0: // which will guarantee next tick execution michael@0: async(() => { michael@0: send('sdk-places-query', { michael@0: query: queryObjs, michael@0: options: optionsObj michael@0: }).then(results => { michael@0: results.map(item => emit(emitter, 'data', item)); michael@0: emit(emitter, 'end', results); michael@0: }, reason => { michael@0: emit(emitter, 'error', reason); michael@0: emit(emitter, 'end', []); michael@0: }); michael@0: })(); michael@0: michael@0: return emitter; michael@0: }; michael@0: exports.search = search;