Index: Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
diff --git a/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js b/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
index 52af59c9decd71f00a6306b0d78371a188fb7b5e..c6b8cb01a2d6aaf384a2d7e69c8304d4ac8bf6bd 100644 |
--- a/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
+++ b/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
@@ -11,27 +11,41 @@ WebInspector.ServiceWorkerCacheModel = function(target) |
{ |
WebInspector.SDKModel.call(this, WebInspector.ServiceWorkerCacheModel, target); |
- /** @type {!Set.<string>} */ |
- this._cacheNames = new Set(); |
+ /** @type {!Map<string, !Set.<string>>} */ |
+ this._cacheNamesBySecurityOrigin = new Map(); |
- this._agent = target.serviceWorkerCacheAgent(); |
+ this._agent = target.cacheStorageAgent(); |
+ |
+ /** @type {boolean} */ |
+ this._enabled = false; |
} |
WebInspector.ServiceWorkerCacheModel.EventTypes = { |
CacheAdded: "CacheAdded", |
- CacheRemoved: "CacheRemoved", |
+ CacheRemoved: "CacheRemoved" |
} |
WebInspector.ServiceWorkerCacheModel.prototype = { |
- _reset: function() |
+ enable: function() |
{ |
- this._updateCacheNames([]); |
- this._loadCacheNames(); |
+ if (this._enabled) |
+ return; |
+ |
+ this.target().resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginAdded, this._securityOriginAdded, this); |
+ this.target().resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginRemoved, this._securityOriginRemoved, this); |
+ |
+ var securityOrigins = this.target().resourceTreeModel.securityOrigins(); |
+ for (var i = 0; i < securityOrigins.length; ++i) |
+ this._addOrigin(securityOrigins[i]); |
+ this._enabled = true; |
}, |
refreshCacheNames: function() |
{ |
- this._loadCacheNames(); |
+ var securityOrigins = this.target().resourceTreeModel.securityOrigins(); |
+ for (var securityOrigin of securityOrigins) { |
+ this._loadCacheNames(securityOrigin); |
+ } |
}, |
/** |
@@ -39,6 +53,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
*/ |
deleteCache: function(cacheId) |
{ |
+ var securityOrigin = cacheId.securityOrigin; |
/** |
* @this {WebInspector.ServiceWorkerCacheModel} |
*/ |
@@ -48,9 +63,13 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- this._cacheRemoved(cacheId.name); |
+ var caches = this._cacheNamesBySecurityOrigin.get(securityOrigin); |
+ if (!caches) |
+ return; |
+ caches.delete(cacheId.name); |
+ this._cacheRemoved(securityOrigin, cacheId.name); |
} |
- this._agent.deleteCache(cacheId.name, callback.bind(this)); |
+ this._agent.deleteCache(securityOrigin, cacheId.name, callback.bind(this)); |
}, |
/** |
@@ -70,18 +89,51 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
caches: function() |
{ |
var result = []; |
- for (var cacheName of this._cacheNames) { |
- result.push(new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName)); |
+ /** @suppressReceiverCheck because you can never win. */ |
+ var mapEntriesToResults = function(caches, securityOrigin) { |
pfeldman
2015/04/10 12:35:34
Your patch does not apply to ToT. But you should:
dmurph
2015/04/13 18:23:03
Ended up being unneeded.
|
+ for (var cacheName of caches) |
+ result.push(new WebInspector.ServiceWorkerCacheModel.CacheId(securityOrigin, cacheName)); |
} |
+ this._cacheNamesBySecurityOrigin.forEach(mapEntriesToResults, this); |
return result; |
}, |
dispose: function() |
{ |
- this._updateCacheNames([]); |
+ for (var securityOrigin of this._cacheNamesBySecurityOrigin.keys()) |
+ this._updateCacheNames(securityOrigin, []); |
+ this._cacheNamesBySecurityOrigin.clear(); |
+ if (this._enabled) { |
+ this.target().resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginAdded, this._securityOriginAdded, this); |
+ this.target().resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginRemoved, this._securityOriginRemoved, this); |
+ } |
}, |
- _loadCacheNames: function() |
+ _addOrigin: function(securityOrigin) |
+ { |
+ console.assert(!this._cacheNamesBySecurityOrigin.has(securityOrigin)); |
+ this._cacheNamesBySecurityOrigin.set(securityOrigin, new Set()); |
+ this._loadCacheNames(securityOrigin); |
+ }, |
+ |
+ /** |
+ * @param {string} securityOrigin |
+ */ |
+ _removeOrigin: function(securityOrigin) |
+ { |
+ var cacheNames = this._cacheNamesBySecurityOrigin.get(securityOrigin); |
+ console.assert(cacheNames); |
+ if (cacheNames) { |
+ for (var cacheName of cacheNames) |
+ this._cacheRemoved(securityOrigin, cacheName); |
+ } |
+ this._cacheNamesBySecurityOrigin.delete(securityOrigin); |
+ }, |
+ |
+ /** |
+ * @param {string} securityOrigin |
+ */ |
+ _loadCacheNames: function(securityOrigin) |
{ |
/** |
* @param {?Protocol.Error} error |
@@ -94,52 +146,77 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- |
- if (!this._cacheNames) |
+ if (!this._cacheNamesBySecurityOrigin.has(securityOrigin)) |
return; |
- this._updateCacheNames(cacheNames); |
+ this._updateCacheNames(securityOrigin, cacheNames); |
} |
- |
- this._agent.requestCacheNames(callback.bind(this)); |
+ this._agent.requestCacheNames(securityOrigin, callback.bind(this)); |
}, |
/** |
+ * @param {string} securityOrigin |
* @param {!Array.<string>} cacheNames |
*/ |
- _updateCacheNames: function(cacheNames) |
+ _updateCacheNames: function(securityOrigin, cacheNames) |
{ |
- /** @type {!Set.<string>} */ |
+ /** @type {!Set<string>} */ |
var newCacheNames = new Set(cacheNames); |
- /** @type {!Set.<string>} */ |
- var oldCacheNames = this._cacheNames; |
+ /** @type {!Set<string>} */ |
+ var oldCacheNames; |
+ /** @type {!Set<string>|undefined} */ |
+ var tempOldCacheNames = this._cacheNamesBySecurityOrigin.get(securityOrigin); |
+ if (tempOldCacheNames) |
+ oldCacheNames = tempOldCacheNames; |
+ else |
+ oldCacheNames = new Set(); |
- this._cacheNames = new Set(cacheNames); |
+ this._cacheNamesBySecurityOrigin.set(securityOrigin, newCacheNames); |
for (var oldCacheName of oldCacheNames) { |
- if (!newCacheNames[oldCacheName]) |
- this._cacheRemoved(oldCacheName); |
+ if (!newCacheNames.has(oldCacheName)) |
+ this._cacheRemoved(securityOrigin, oldCacheName); |
} |
for (var newCacheName of newCacheNames) { |
- if (!oldCacheNames[newCacheName]) |
- this._cacheAdded(newCacheName); |
+ if (!oldCacheNames.has(newCacheName)) |
+ this._cacheAdded(securityOrigin, newCacheName); |
} |
}, |
/** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _securityOriginAdded: function(event) |
+ { |
+ var securityOrigin = /** @type {string} */ (event.data); |
+ this._addOrigin(securityOrigin); |
+ }, |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _securityOriginRemoved: function(event) |
+ { |
+ var securityOrigin = /** @type {string} */ (event.data); |
+ this._removeOrigin(securityOrigin); |
+ }, |
+ |
+ /** |
+ * @param {string} securityOrigin |
* @param {string} cacheName |
*/ |
- _cacheAdded: function(cacheName) |
+ _cacheAdded: function(securityOrigin, cacheName) |
{ |
- var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName); |
+ var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(securityOrigin, cacheName); |
this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheAdded, cacheId); |
}, |
/** |
+ * @param {string} securityOrigin |
* @param {string} cacheName |
*/ |
- _cacheRemoved: function(cacheName) |
+ _cacheRemoved: function(securityOrigin, cacheName) |
{ |
- var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName); |
+ var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(securityOrigin, cacheName); |
this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheRemoved, cacheId); |
}, |
@@ -164,8 +241,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- |
- if (!this._cacheNames) |
+ if (!this._cacheNamesBySecurityOrigin.has(cacheId.securityOrigin)) |
return; |
var entries = []; |
for (var i = 0; i < dataEntries.length; ++i) { |
@@ -175,8 +251,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
} |
callback(entries, hasMore); |
} |
- |
- this._agent.requestEntries(cacheName, skipCount, pageSize, innerCallback.bind(this)); |
+ this._agent.requestEntries(cacheId.securityOrigin, cacheName, skipCount, pageSize, innerCallback.bind(this)); |
}, |
__proto__: WebInspector.SDKModel.prototype |
@@ -195,10 +270,12 @@ WebInspector.ServiceWorkerCacheModel.Entry = function(request, response) |
/** |
* @constructor |
+ * @param {string} securityOrigin |
* @param {string} name |
*/ |
-WebInspector.ServiceWorkerCacheModel.CacheId = function(name) |
+WebInspector.ServiceWorkerCacheModel.CacheId = function(securityOrigin, name) |
{ |
+ this.securityOrigin = securityOrigin; |
this.name = name; |
} |
@@ -209,7 +286,7 @@ WebInspector.ServiceWorkerCacheModel.CacheId.prototype = { |
*/ |
equals: function(cacheId) |
{ |
- return this.name === cacheId.name; |
+ return this.name === cacheId.name && this.securityOrigin === cacheId.securityOrigin; |
} |
} |
@@ -220,4 +297,17 @@ WebInspector.ServiceWorkerCacheModel.CacheId.prototype = { |
WebInspector.ServiceWorkerCacheModel.Cache = function(cacheId) |
{ |
this.cacheId = cacheId; |
+} |
+ |
+WebInspector.ServiceWorkerCacheModel._symbol = Symbol("CacheStorageModel"); |
+/** |
+ * @param {!WebInspector.Target} target |
+ * @return {!WebInspector.ServiceWorkerCacheModel} |
+ */ |
+WebInspector.ServiceWorkerCacheModel.fromTarget = function(target) |
+{ |
+ if (!target[WebInspector.ServiceWorkerCacheModel._symbol]) |
+ target[WebInspector.ServiceWorkerCacheModel._symbol] = new WebInspector.ServiceWorkerCacheModel(target); |
+ |
+ return target[WebInspector.ServiceWorkerCacheModel._symbol]; |
} |