mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-10 21:28:04 +02:00
MozReview-Commit-ID: JqAm9x1XGCM --HG-- extra : rebase_source : e9215288195f1fe683832db53d87dbe77c697b4c
99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
"use strict";
|
|
|
|
this.EXPORTED_SYMBOLS = ["NewTabSearchProvider"];
|
|
|
|
const {utils: Cu, interfaces: Ci} = Components;
|
|
const CURRENT_ENGINE = "browser-search-engine-modified";
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/Services.jsm");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "ContentSearch",
|
|
"resource:///modules/ContentSearch.jsm");
|
|
|
|
XPCOMUtils.defineLazyGetter(this, "EventEmitter", function() {
|
|
const {EventEmitter} = Cu.import("resource://gre/modules/EventEmitter.jsm", {});
|
|
return EventEmitter;
|
|
});
|
|
|
|
function SearchProvider() {
|
|
EventEmitter.decorate(this);
|
|
}
|
|
|
|
SearchProvider.prototype = {
|
|
|
|
observe(subject, topic, data) { // jshint unused:false
|
|
// all other topics are not relevant to content searches and can be
|
|
// ignored by NewTabSearchProvider
|
|
if (data === "engine-current" && topic === CURRENT_ENGINE) {
|
|
(async () => {
|
|
try {
|
|
let state = await ContentSearch.currentStateObj(true);
|
|
let engine = state.currentEngine;
|
|
this.emit(CURRENT_ENGINE, engine);
|
|
} catch (e) {
|
|
Cu.reportError(e);
|
|
}
|
|
})();
|
|
}
|
|
},
|
|
|
|
init() {
|
|
try {
|
|
Services.obs.addObserver(this, CURRENT_ENGINE, true);
|
|
} catch (e) {
|
|
Cu.reportError(e);
|
|
}
|
|
},
|
|
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
|
|
Ci.nsISupportsWeakReference
|
|
]),
|
|
|
|
uninit() {
|
|
try {
|
|
Services.obs.removeObserver(this, CURRENT_ENGINE);
|
|
} catch (e) {
|
|
Cu.reportError(e);
|
|
}
|
|
},
|
|
|
|
get searchSuggestionUIStrings() {
|
|
return ContentSearch.searchSuggestionUIStrings;
|
|
},
|
|
|
|
removeFormHistory({browser}, suggestion) {
|
|
ContentSearch.removeFormHistoryEntry({target: browser}, suggestion);
|
|
},
|
|
|
|
manageEngines(browser) {
|
|
const browserWin = browser.ownerGlobal;
|
|
browserWin.openPreferences("paneGeneral", { origin: "contentSearch" });
|
|
},
|
|
|
|
async asyncGetState() {
|
|
let state = await ContentSearch.currentStateObj(true);
|
|
return state;
|
|
},
|
|
|
|
async asyncPerformSearch({browser}, searchData) {
|
|
ContentSearch.performSearch({target: browser}, searchData);
|
|
await ContentSearch.addFormHistoryEntry({target: browser}, searchData.searchString);
|
|
},
|
|
|
|
async asyncCycleEngine(engineName) {
|
|
Services.search.currentEngine = Services.search.getEngineByName(engineName);
|
|
let state = await ContentSearch.currentStateObj(true);
|
|
let newEngine = state.currentEngine;
|
|
this.emit(CURRENT_ENGINE, newEngine);
|
|
},
|
|
|
|
async asyncGetSuggestions(engineName, searchString, target) {
|
|
let suggestions = ContentSearch.getSuggestions(engineName, searchString, target.browser);
|
|
return suggestions;
|
|
},
|
|
};
|
|
|
|
const NewTabSearchProvider = {
|
|
search: new SearchProvider(),
|
|
};
|