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() {
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 +2248,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.
*/
@ -3059,10 +3073,9 @@ SearchService.prototype = {
}
// Write out serialized search engine files when rebuilding cache.
if (!engine._readOnly && engine._file) {
engine._serializeToFile();
}
// 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 = {};