diff options
Diffstat (limited to 'toolkit/components/search')
-rw-r--r-- | toolkit/components/search/current/nsSearchService.js | 41 | ||||
-rw-r--r-- | toolkit/components/search/moz.build | 6 | ||||
-rw-r--r-- | toolkit/components/search/orginal/nsSearchService.js | 52 |
3 files changed, 48 insertions, 51 deletions
diff --git a/toolkit/components/search/current/nsSearchService.js b/toolkit/components/search/current/nsSearchService.js index 9f9003516..2a8601078 100644 --- a/toolkit/components/search/current/nsSearchService.js +++ b/toolkit/components/search/current/nsSearchService.js @@ -21,8 +21,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Task", "resource://gre/modules/Task.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TelemetryStopwatch", - "resource://gre/modules/TelemetryStopwatch.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "Deprecated", + "resource://gre/modules/Deprecated.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "SearchStaticData", "resource://gre/modules/SearchStaticData.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "setTimeout", @@ -234,7 +234,7 @@ var LOG = function() {}; if (AppConstants.DEBUG) { LOG = function (aText) { - if (getBoolPref(BROWSER_SEARCH_PREF + "log", false)) { + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "log", false)) { DO_LOG(aText); } }; @@ -908,18 +908,6 @@ function getLocalizedPref(aPrefName, aDefault) { } /** - * Wrapper for nsIPrefBranch::getBoolPref. - * @param aPrefName - * The name of the pref to get. - * @returns aDefault if the requested pref doesn't exist. - */ -function getBoolPref(aName, aDefault) { - if (Services.prefs.getPrefType(aName) != Ci.nsIPrefBranch.PREF_BOOL) - return aDefault; - return Services.prefs.getBoolPref(aName); -} - -/** * @return a sanitized name to be used as a filename, or a random name * if a sanitized name cannot be obtained (if aName contains * no valid characters). @@ -1534,7 +1522,7 @@ Engine.prototype = { stringBundle.formatStringFromName("addEngineConfirmation", [this._name, this._uri.host], 2); var checkboxMessage = null; - if (!getBoolPref(BROWSER_SEARCH_PREF + "noCurrentEngine", false)) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "noCurrentEngine", false)) checkboxMessage = stringBundle.GetStringFromName("addEngineAsCurrentText"); var addButtonLabel = @@ -2658,7 +2646,7 @@ function checkForSyncCompletion(aPromise) { // nsIBrowserSearchService function SearchService() { // Replace empty LOG function with the useful one if the log pref is set. - if (getBoolPref(BROWSER_SEARCH_PREF + "log", false)) + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "log", false)) LOG = DO_LOG; this._initObservers = Promise.defer(); @@ -2693,6 +2681,13 @@ SearchService.prototype = { return; } + let performanceWarning = + "Search service falling back to synchronous initialization. " + + "This is generally the consequence of an add-on using a deprecated " + + "search service API."; + Deprecated.perfWarning(performanceWarning, "https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIBrowserSearchService#async_warning"); + LOG(performanceWarning); + this._syncInit(); if (!Components.isSuccessCode(this._initRV)) { throw this._initRV; @@ -3763,7 +3758,7 @@ SearchService.prototype = { // If the user has specified a custom engine order, read the order // information from the metadata instead of the default prefs. - if (getBoolPref(BROWSER_SEARCH_PREF + "useDBForOrder", false)) { + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "useDBForOrder", false)) { LOG("_buildSortedEngineList: using db for order"); // Flag to keep track of whether or not we need to call _saveSortedEngineList. @@ -3873,21 +3868,17 @@ SearchService.prototype = { LOG("SearchService.init"); let self = this; if (!this._initStarted) { - TelemetryStopwatch.start("SEARCH_SERVICE_INIT_MS"); this._initStarted = true; Task.spawn(function* task() { try { // Complete initialization by calling asynchronous initializer. yield self._asyncInit(); - TelemetryStopwatch.finish("SEARCH_SERVICE_INIT_MS"); } catch (ex) { if (ex.result == Cr.NS_ERROR_ALREADY_INITIALIZED) { // No need to pursue asynchronous because synchronous fallback was // called and has finished. - TelemetryStopwatch.finish("SEARCH_SERVICE_INIT_MS"); } else { self._initObservers.reject(ex); - TelemetryStopwatch.cancel("SEARCH_SERVICE_INIT_MS"); } } }); @@ -4621,7 +4612,7 @@ SearchService.prototype = { notify: function SRCH_SVC_notify(aTimer) { LOG("_notify: checking for updates"); - if (!getBoolPref(BROWSER_SEARCH_PREF + "update", true)) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update", true)) return; // Our timer has expired, but unfortunately, we can't get any data from it. @@ -4732,7 +4723,7 @@ const SEARCH_UPDATE_LOG_PREFIX = "*** Search update: "; * logging pref (browser.search.update.log) is set to true. */ function ULOG(aText) { - if (getBoolPref(BROWSER_SEARCH_PREF + "update.log", false)) { + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update.log", false)) { dump(SEARCH_UPDATE_LOG_PREFIX + aText + "\n"); Services.console.logStringMessage(aText); } @@ -4748,7 +4739,7 @@ var engineUpdateService = { update: function eus_Update(aEngine) { let engine = aEngine.wrappedJSObject; ULOG("update called for " + aEngine._name); - if (!getBoolPref(BROWSER_SEARCH_PREF + "update", true) || !engine._hasUpdates) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update", true) || !engine._hasUpdates) return; let testEngine = null; diff --git a/toolkit/components/search/moz.build b/toolkit/components/search/moz.build index 4cc86ff9e..2accffd00 100644 --- a/toolkit/components/search/moz.build +++ b/toolkit/components/search/moz.build @@ -6,10 +6,10 @@ XPCSHELL_TESTS_MANIFESTS += ['tests/xpcshell/xpcshell.ini'] -if CONFIG['MC_PALEMOON']: - DIRS += ['orginal'] -else: +if CONFIG['MC_BASILISK'] or CONFIG['HYPE_ICEWEASEL'] or CONFIG['HYPE_ICEDOVE']: DIRS += ['current'] +else: + DIRS += ['orginal'] with Files('**'): BUG_COMPONENT = ('Firefox', 'Search') diff --git a/toolkit/components/search/orginal/nsSearchService.js b/toolkit/components/search/orginal/nsSearchService.js index 56d378b39..5b5ce7a57 100644 --- a/toolkit/components/search/orginal/nsSearchService.js +++ b/toolkit/components/search/orginal/nsSearchService.js @@ -248,7 +248,7 @@ function DO_LOG(aText) { * to allow enabling/disabling without a restart. */ function PREF_LOG(aText) { - if (getBoolPref(BROWSER_SEARCH_PREF + "log", false)) + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "log", false)) DO_LOG(aText); } var LOG = PREF_LOG; @@ -934,18 +934,6 @@ function setLocalizedPref(aPrefName, aValue) { } /** - * Wrapper for nsIPrefBranch::getBoolPref. - * @param aPrefName - * The name of the pref to get. - * @returns aDefault if the requested pref doesn't exist. - */ -function getBoolPref(aName, aDefault) { - if (Services.prefs.getPrefType(aName) != Ci.nsIPrefBranch.PREF_BOOL) - return aDefault; - return Services.prefs.getBoolPref(aName); -} - -/** * Get a unique nsIFile object with a sanitized name, based on the engine name. * @param aName * A name to "sanitize". Can be an empty string, in which case a random @@ -1591,7 +1579,7 @@ Engine.prototype = { stringBundle.formatStringFromName("addEngineConfirmation", [this._name, this._uri.host], 2); var checkboxMessage = null; - if (!getBoolPref(BROWSER_SEARCH_PREF + "noCurrentEngine", false)) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "noCurrentEngine", false)) checkboxMessage = stringBundle.GetStringFromName("addEngineAsCurrentText"); var addButtonLabel = @@ -2237,7 +2225,10 @@ Engine.prototype = { get lazySerializeTask() { if (!this._lazySerializeTask) { let task = function taskCallback() { - this._serializeToFile(); + // This check should be done by caller, but it is better to be safe than sorry. + if (!this._readOnly && this._file) { + this._serializeToFile(); + } }.bind(this); this._lazySerializeTask = new DeferredTask(task, LAZY_SERIALIZE_DELAY); } @@ -2245,6 +2236,17 @@ Engine.prototype = { return this._lazySerializeTask; }, + // This API is required by some search engine management extensions, so let's restore it. + // Old API was using a timer to do its work, but this can lead us too far. If extension is + // rely on such subtle internal details, that extension should be fixed, not browser. + _lazySerializeToFile: function SRCH_ENG_lazySerializeToFile() { + // This check should be done by caller, but it is better to be safe than sorry. + // Besides, we don't have to create a task for r/o or non-file engines. + if (!this._readOnly && this._file) { + this.lazySerializeTask.arm(); + } + }, + /** * Serializes the engine object to file. */ @@ -2875,7 +2877,7 @@ function checkForSyncCompletion(aPromise) { // nsIBrowserSearchService function SearchService() { // Replace empty LOG function with the useful one if the log pref is set. - if (getBoolPref(BROWSER_SEARCH_PREF + "log", false)) + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "log", false)) LOG = DO_LOG; this._initObservers = Promise.defer(); @@ -2903,12 +2905,12 @@ SearchService.prototype = { return; } - let warning = + let performanceWarning = "Search service falling back to synchronous initialization. " + "This is generally the consequence of an add-on using a deprecated " + "search service API."; - Deprecated.warning(warning, "https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIBrowserSearchService#async_warning"); - LOG(warning); + Deprecated.perfWarning(performanceWarning, "https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIBrowserSearchService#async_warning"); + LOG(performanceWarning); engineMetadataService.syncInit(); this._syncInit(); @@ -3058,6 +3060,10 @@ SearchService.prototype = { continue; } + // Write out serialized search engine files when rebuilding cache. + // Do it lazily, to: 1) reuse existing API; 2) make browser interface more responsive + engine._lazySerializeToFile(); + let cacheKey = parent.path; if (!cache.directories[cacheKey]) { let cacheEntry = {}; @@ -3796,7 +3802,7 @@ SearchService.prototype = { // If the user has specified a custom engine order, read the order // information from the engineMetadataService instead of the default // prefs. - if (getBoolPref(BROWSER_SEARCH_PREF + "useDBForOrder", false)) { + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "useDBForOrder", false)) { LOG("_buildSortedEngineList: using db for order"); // Flag to keep track of whether or not we need to call _saveSortedEngineList. @@ -4577,7 +4583,7 @@ SearchService.prototype = { notify: function SRCH_SVC_notify(aTimer) { LOG("_notify: checking for updates"); - if (!getBoolPref(BROWSER_SEARCH_PREF + "update", true)) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update", true)) return; // Our timer has expired, but unfortunately, we can't get any data from it. @@ -4920,7 +4926,7 @@ const SEARCH_UPDATE_LOG_PREFIX = "*** Search update: "; * logging pref (browser.search.update.log) is set to true. */ function ULOG(aText) { - if (getBoolPref(BROWSER_SEARCH_PREF + "update.log", false)) { + if (Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update.log", false)) { dump(SEARCH_UPDATE_LOG_PREFIX + aText + "\n"); Services.console.logStringMessage(aText); } @@ -4937,7 +4943,7 @@ var engineUpdateService = { update: function eus_Update(aEngine) { let engine = aEngine.wrappedJSObject; ULOG("update called for " + aEngine._name); - if (!getBoolPref(BROWSER_SEARCH_PREF + "update", true) || !engine._hasUpdates) + if (!Services.prefs.getBoolPref(BROWSER_SEARCH_PREF + "update", true) || !engine._hasUpdates) return; let testEngine = null; |