fix mozilla regression in search service (saving user-defined search engines)

this restores some API that is used by search engine management extensions, and
  tells "browser-search-engine-modified"/"engine-changed" signal to save user-defined
  search engines to "%PROFILE%/searchplugins", as it did in Good Old Times.
This commit is contained in:
Ketmar Dark 2018-09-05 19:03:19 +03:00 • committed by Roy Tam
commit 59440a335d

View file

@ -2237,7 +2237,10 @@ Engine.prototype = {
get lazySerializeTask() { get lazySerializeTask() {
if (!this._lazySerializeTask) { if (!this._lazySerializeTask) {
let task = function taskCallback() { 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); }.bind(this);
this._lazySerializeTask = new DeferredTask(task, LAZY_SERIALIZE_DELAY); this._lazySerializeTask = new DeferredTask(task, LAZY_SERIALIZE_DELAY);
} }
@ -2245,6 +2248,17 @@ Engine.prototype = {
return this._lazySerializeTask; 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. * Serializes the engine object to file.
*/ */
@ -3059,10 +3073,9 @@ SearchService.prototype = {
} }
// Write out serialized search engine files when rebuilding cache. // Write out serialized search engine files when rebuilding cache.
if (!engine._readOnly && engine._file) { // Do it lazily, to: 1) reuse existing API; 2) make browser interface more responsive
engine._serializeToFile(); engine._lazySerializeToFile();
}
let cacheKey = parent.path; let cacheKey = parent.path;
if (!cache.directories[cacheKey]) { if (!cache.directories[cacheKey]) {
let cacheEntry = {}; let cacheEntry = {};