Bug 1217886 - Implement chrome.storage.local.clear. r=wmccloskey

This commit is contained in:
Johann Hofmann 2015-11-04 22:29:31 +01:00
parent dba190796b
commit 898c7be7cd
3 changed files with 50 additions and 10 deletions

View File

@ -81,12 +81,7 @@ this.ExtensionStorage = {
extData[prop] = items[prop];
}
let listeners = this.listeners.get(extensionId);
if (listeners) {
for (let listener of listeners) {
listener(changes);
}
}
this.notifyListeners(extensionId, changes);
return this.write(extensionId);
});
@ -106,13 +101,24 @@ this.ExtensionStorage = {
delete extData[prop];
}
let listeners = this.listeners.get(extensionId);
if (listeners) {
for (let listener of listeners) {
listener(changes);
this.notifyListeners(extensionId, changes);
return this.write(extensionId);
});
},
clear(extensionId) {
return this.read(extensionId).then(extData => {
let changes = {};
if (extData) {
for (let prop of Object.keys(extData)) {
changes[prop] = {oldValue: extData[prop]};
delete extData[prop];
}
}
this.notifyListeners(extensionId, changes);
return this.write(extensionId);
});
},
@ -158,6 +164,15 @@ this.ExtensionStorage = {
listeners.delete(listener);
},
notifyListeners(extensionId, changes) {
let listeners = this.listeners.get(extensionId);
if (listeners) {
for (let listener of listeners) {
listener(changes);
}
}
},
init() {
Services.obs.addObserver(this, "extension-invalidate-storage-cache", false);
Services.obs.addObserver(this, "xpcom-shutdown", false);

View File

@ -33,6 +33,13 @@ extensions.registerPrivilegedAPI("storage", (extension, context) => {
}
});
},
clear: function(callback) {
ExtensionStorage.clear(extension.id).then(() => {
if (callback) {
runSafe(context, callback);
}
});
},
},
onChanged: new EventManager(context, "storage.local.onChanged", fire => {

View File

@ -31,6 +31,12 @@ function backgroundScript() {
});
}
function clear(items) {
return new Promise(resolve => {
browser.storage.local.clear(resolve);
});
}
function check(prop, value) {
return get(null).then(data => {
browser.test.assertEq(data[prop], value, "null getter worked for " + prop);
@ -110,6 +116,18 @@ function backgroundScript() {
browser.test.assertFalse("test-prop1" in data, "prop1 absent");
browser.test.assertFalse("test-prop2" in data, "prop2 absent");
// test storage.clear
}).then(() => {
return set({"test-prop1": "value1", "test-prop2": "value2"});
}).then(() => {
return clear();
}).then(() => {
checkChanges({"test-prop1": {oldValue: "value1"}, "test-prop2": {oldValue: "value2"}});
return get(["test-prop1", "test-prop2"]);
}).then(data => {
browser.test.assertFalse("test-prop1" in data, "prop1 absent");
browser.test.assertFalse("test-prop2" in data, "prop2 absent");
// Test cache invalidation.
}).then(() => {
return set({"test-prop1": "value1", "test-prop2": "value2"});