Bug 1405491 Switch WebExtensions StartupCache to DeferredTask r=kmag

MozReview-Commit-ID: GfdM0hkAHqP

--HG--
extra : rebase_source : 6e3638436056041790d7e6ad99e0b99cfda6a8d7
This commit is contained in:
Andrew Swan 2017-10-16 21:01:43 -07:00
parent 5a55bb3e50
commit c0580db8aa

View File

@ -20,7 +20,8 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetters(this, { XPCOMUtils.defineLazyModuleGetters(this, {
AppConstants: "resource://gre/modules/AppConstants.jsm", AppConstants: "resource://gre/modules/AppConstants.jsm",
DeferredSave: "resource://gre/modules/DeferredSave.jsm", AsyncShutdown: "resource://gre/modules/AsyncShutdown.jsm",
DeferredTask: "resource://gre/modules/DeferredTask.jsm",
E10SUtils: "resource:///modules/E10SUtils.jsm", E10SUtils: "resource:///modules/E10SUtils.jsm",
MessageChannel: "resource://gre/modules/MessageChannel.jsm", MessageChannel: "resource://gre/modules/MessageChannel.jsm",
OS: "resource://gre/modules/osfile.jsm", OS: "resource://gre/modules/osfile.jsm",
@ -1418,26 +1419,28 @@ StartupCache = {
file: OS.Path.join(OS.Constants.Path.localProfileDir, "startupCache", "webext.sc.lz4"), file: OS.Path.join(OS.Constants.Path.localProfileDir, "startupCache", "webext.sc.lz4"),
get saver() { async _saveNow() {
if (!this._saver) { let data = new Uint8Array(aomStartup.encodeBlob(this._data));
await OS.File.writeAtomic(this.file, data, {tmpPath: `${this.file}.tmp`});
},
async save() {
if (!this._saveTask) {
OS.File.makeDir(OS.Path.dirname(this.file), { OS.File.makeDir(OS.Path.dirname(this.file), {
ignoreExisting: true, ignoreExisting: true,
from: OS.Constants.Path.localProfileDir, from: OS.Constants.Path.localProfileDir,
}); });
this._saver = new DeferredSave(this.file, this._saveTask = new DeferredTask(() => this._saveNow(), 5000);
() => this.getBlob(),
{delay: 5000}); AsyncShutdown.profileBeforeChange.addBlocker(
"Flush WebExtension StartupCache",
async () => {
await this._saveTask.finalize();
this._saveTask = null;
});
} }
return this._saver; return this._saveTask.arm();
},
async save() {
return this.saver.saveChanges();
},
getBlob() {
return new Uint8Array(aomStartup.encodeBlob(this._data));
}, },
_data: null, _data: null,