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..3d601178d60f084e9ec85e50e4a7cdaadc6eddf5 100644 |
--- a/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
+++ b/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js |
@@ -11,27 +11,48 @@ WebInspector.ServiceWorkerCacheModel = function(target) |
{ |
WebInspector.SDKModel.call(this, WebInspector.ServiceWorkerCacheModel, target); |
- /** @type {!Set.<string>} */ |
- this._cacheNames = new Set(); |
+ /** @type {!Object.<string, !Array.<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() |
+ /** |
+ * @return {boolean} |
+ */ |
+ isEnabled: function() |
{ |
- this._updateCacheNames([]); |
- this._loadCacheNames(); |
+ return this._enabled; |
+ }, |
+ enable: function() |
+ { |
+ 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 +60,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
*/ |
deleteCache: function(cacheId) |
{ |
+ var securityOrigin = cacheId.securityOrigin; |
/** |
* @this {WebInspector.ServiceWorkerCacheModel} |
*/ |
@@ -48,9 +70,16 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- this._cacheRemoved(cacheId.name); |
+ if (!this._cacheNamesBySecurityOrigin[securityOrigin]) |
pfeldman
2015/04/02 21:18:57
Now that this is a map, you should use .set, .get
dmurph
2015/04/02 23:23:18
Done.
|
+ return; |
+ var caches = this._cacheNamesBySecurityOrigin[securityOrigin]; |
+ var index = caches.indexOf(cacheId.name); |
pfeldman
2015/04/02 21:18:57
Arrays have .remove() in devtools.
dmurph
2015/04/02 23:23:17
Done.
|
+ if (index != -1) { |
pfeldman
2015/04/02 21:18:57
no {} around single-line blocks
dmurph
2015/04/02 23:23:17
Done.
|
+ caches.splice(index, 1); |
+ } |
+ this._cacheRemoved(securityOrigin, cacheId.name); |
} |
- this._agent.deleteCache(cacheId.name, callback.bind(this)); |
+ this._agent.deleteCache(securityOrigin, cacheId.name, callback.bind(this)); |
}, |
/** |
@@ -70,18 +99,44 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
caches: function() |
{ |
var result = []; |
- for (var cacheName of this._cacheNames) { |
- result.push(new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName)); |
+ for (var securityOrigin in this._cacheNamesBySecurityOrigin) { |
pfeldman
2015/04/02 21:18:58
this would be for (var caches of this._cacheNamesB
dmurph
2015/04/02 23:23:17
Done.
|
+ var caches = this._cacheNamesBySecurityOrigin[securityOrigin]; |
+ for (var cacheName of caches) { |
+ result.push(new WebInspector.ServiceWorkerCacheModel.CacheId(securityOrigin, cacheName)); |
+ } |
} |
return result; |
}, |
dispose: function() |
pfeldman
2015/04/02 21:18:58
unregister the listeners to resourceTreeModel here
dmurph
2015/04/02 23:23:17
done.
|
{ |
- this._updateCacheNames([]); |
+ for (var securityOrigin in this._cacheNamesBySecurityOrigin) { |
pfeldman
2015/04/02 21:18:57
of .keys()
dmurph
2015/04/02 23:23:17
Done.
|
+ this._updateCacheNames(securityOrigin, []); |
+ } |
+ this._cacheNamesBySecurityOrigin = {}; |
pfeldman
2015/04/02 21:18:57
.clear()
dmurph
2015/04/02 23:23:17
Done.
|
+ }, |
+ |
+ _addOrigin: function(securityOrigin) { |
+ console.assert(!this._cacheNamesBySecurityOrigin[securityOrigin]); |
pfeldman
2015/04/02 21:18:58
ditto
dmurph
2015/04/02 23:23:18
Done.
|
+ this._cacheNamesBySecurityOrigin[securityOrigin] = []; |
+ this._loadCacheNames(securityOrigin); |
+ }, |
+ |
+ /** |
+ * @param {string} securityOrigin |
+ */ |
+ _removeOrigin: function(securityOrigin) |
+ { |
+ console.assert(this._cacheNamesBySecurityOrigin[securityOrigin]); |
+ for (var cacheName of this._cacheNamesBySecurityOrigin[securityOrigin]) |
pfeldman
2015/04/02 21:18:58
ditto (and may times below)
dmurph
2015/04/02 23:23:17
Done
|
+ this._cacheRemoved(securityOrigin, cacheName); |
+ delete this._cacheNamesBySecurityOrigin[securityOrigin]; |
}, |
- _loadCacheNames: function() |
+ /** |
+ * @param {string} securityOrigin |
+ */ |
+ _loadCacheNames: function(securityOrigin) |
{ |
/** |
* @param {?Protocol.Error} error |
@@ -94,52 +149,71 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- |
- if (!this._cacheNames) |
+ if (!this._cacheNamesBySecurityOrigin[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>} */ |
- var newCacheNames = new Set(cacheNames); |
- /** @type {!Set.<string>} */ |
- var oldCacheNames = this._cacheNames; |
+ /** @type {!Object<string,boolean>} */ |
+ var newCacheNames = cacheNames.keySet(); |
+ /** @type {!Object<string,boolean>} */ |
+ var oldCacheNames = this._cacheNamesBySecurityOrigin[securityOrigin].keySet(); |
- this._cacheNames = new Set(cacheNames); |
+ this._cacheNamesBySecurityOrigin[securityOrigin] = cacheNames; |
- for (var oldCacheName of oldCacheNames) { |
+ for (var oldCacheName in oldCacheNames) { |
if (!newCacheNames[oldCacheName]) |
- this._cacheRemoved(oldCacheName); |
+ this._cacheRemoved(securityOrigin, oldCacheName); |
} |
- for (var newCacheName of newCacheNames) { |
+ for (var newCacheName in newCacheNames) { |
if (!oldCacheNames[newCacheName]) |
- this._cacheAdded(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 +238,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = { |
console.error("ServiceWorkerCacheAgent error: ", error); |
return; |
} |
- |
- if (!this._cacheNames) |
+ if (!this._cacheNamesBySecurityOrigin[cacheId.securityOrigin]) |
return; |
var entries = []; |
for (var i = 0; i < dataEntries.length; ++i) { |
@@ -175,8 +248,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 +267,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 +283,7 @@ WebInspector.ServiceWorkerCacheModel.CacheId.prototype = { |
*/ |
equals: function(cacheId) |
{ |
- return this.name === cacheId.name; |
+ return this.name === cacheId.name && this.securityOrigin === cacheId.securityOrigin; |
} |
} |
@@ -220,4 +294,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]; |
} |