зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1480951 - Make SessionStore respect sessionStorage.clear(). r=mikedeboer
Differential Revision: https://phabricator.services.mozilla.com/D5066 --HG-- extra : rebase_source : 447e78988d9657247b6870a68dc57bc066905092
This commit is contained in:
Родитель
badaa7a073
Коммит
d0b033bcb9
|
@ -524,7 +524,15 @@ class SessionStorageListener extends Handler {
|
||||||
if (!this._changes[domain]) {
|
if (!this._changes[domain]) {
|
||||||
this._changes[domain] = {};
|
this._changes[domain] = {};
|
||||||
}
|
}
|
||||||
this._changes[domain][key] = newValue;
|
|
||||||
|
// If the key isn't defined, then .clear() was called, and we send
|
||||||
|
// up null for this domain to indicate that storage has been cleared
|
||||||
|
// for it.
|
||||||
|
if (!key) {
|
||||||
|
this._changes[domain] = null;
|
||||||
|
} else {
|
||||||
|
this._changes[domain][key] = newValue;
|
||||||
|
}
|
||||||
|
|
||||||
this.messageQueue.push("storagechange", () => {
|
this.messageQueue.push("storagechange", () => {
|
||||||
let tmp = this._changes;
|
let tmp = this._changes;
|
||||||
|
|
|
@ -77,17 +77,23 @@ var TabStateCacheInternal = {
|
||||||
|
|
||||||
let storage = data.storage;
|
let storage = data.storage;
|
||||||
for (let domain of Object.keys(change)) {
|
for (let domain of Object.keys(change)) {
|
||||||
for (let key of Object.keys(change[domain])) {
|
if (!change[domain]) {
|
||||||
let value = change[domain][key];
|
// We were sent null in place of the change object, which means
|
||||||
if (value === null) {
|
// we should delete session storage entirely for this domain.
|
||||||
if (storage[domain] && storage[domain][key]) {
|
delete storage[domain];
|
||||||
delete storage[domain][key];
|
} else {
|
||||||
|
for (let key of Object.keys(change[domain])) {
|
||||||
|
let value = change[domain][key];
|
||||||
|
if (value === null) {
|
||||||
|
if (storage[domain] && storage[domain][key]) {
|
||||||
|
delete storage[domain][key];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!storage[domain]) {
|
||||||
|
storage[domain] = {};
|
||||||
|
}
|
||||||
|
storage[domain][key] = value;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (!storage[domain]) {
|
|
||||||
storage[domain] = {};
|
|
||||||
}
|
|
||||||
storage[domain][key] = value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче