Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1603)

Unified Diff: Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js

Issue 1044203004: [Storage] Cache storage inspection on all the frames! (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: comments and rebase Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..899c5adc333418e6676deb083d0309da9be08d00 100644
--- a/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js
+++ b/Source/devtools/front_end/sdk/ServiceWorkerCacheModel.js
@@ -11,33 +11,46 @@ WebInspector.ServiceWorkerCacheModel = function(target)
{
WebInspector.SDKModel.call(this, WebInspector.ServiceWorkerCacheModel, target);
- /** @type {!Set.<string>} */
- this._cacheNames = new Set();
+ /** @type {!Map<string, !WebInspector.ServiceWorkerCacheModel.Cache>} */
+ this._caches = 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);
},
/**
- * @param {!WebInspector.ServiceWorkerCacheModel.CacheId} cacheId
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
*/
- deleteCache: function(cacheId)
+ deleteCache: function(cache)
{
/**
* @this {WebInspector.ServiceWorkerCacheModel}
@@ -45,128 +58,179 @@ WebInspector.ServiceWorkerCacheModel.prototype = {
function callback(error)
{
if (error) {
- console.error("ServiceWorkerCacheAgent error: ", error);
+ console.error("ServiceWorkerCacheAgent error deleting cache ", cache.toString(), ": ", error);
return;
}
- this._cacheRemoved(cacheId.name);
+ this._caches.delete(cache.cacheId);
+ this._cacheRemoved(cache);
}
- this._agent.deleteCache(cacheId.name, callback.bind(this));
+ this._agent.deleteCache(cache.cacheId, callback.bind(this));
},
/**
- * @param {!WebInspector.ServiceWorkerCacheModel.CacheId} cacheId
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
* @param {number} skipCount
* @param {number} pageSize
* @param {function(!Array.<!WebInspector.ServiceWorkerCacheModel.Entry>, boolean)} callback
*/
- loadCacheData: function(cacheId, skipCount, pageSize, callback)
+ loadCacheData: function(cache, skipCount, pageSize, callback)
{
- this._requestEntries(cacheId, cacheId.name, skipCount, pageSize, callback);
+ this._requestEntries(cache, skipCount, pageSize, callback);
},
/**
- * @return {!Array.<!WebInspector.ServiceWorkerCacheModel.CacheId>}
+ * @return {!Array.<!WebInspector.ServiceWorkerCacheModel.Cache>}
*/
caches: function()
{
- var result = [];
- for (var cacheName of this._cacheNames) {
- result.push(new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName));
- }
- return result;
+ var caches = new Array();
+ for (var cache of this._caches.values())
+ caches.push(cache);
+ return caches;
},
dispose: function()
{
- this._updateCacheNames([]);
+ for (var cache of this._caches.values())
+ this._cacheRemoved(cache);
+ this._caches.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);
+ }
+ },
+
+ _addOrigin: function(securityOrigin)
+ {
+ this._loadCacheNames(securityOrigin);
+ },
+
+ /**
+ * @param {string} securityOrigin
+ */
+ _removeOrigin: function(securityOrigin)
+ {
+ for (var opaqueId of this._caches.keys()) {
+ var cache = this._caches.get(opaqueId);
+ if (cache.securityOrigin == securityOrigin) {
+ this._caches.delete(opaqueId);
+ this._cacheRemoved(cache);
+ }
+ }
},
- _loadCacheNames: function()
+ /**
+ * @param {string} securityOrigin
+ */
+ _loadCacheNames: function(securityOrigin)
{
/**
* @param {?Protocol.Error} error
- * @param {!Array.<string>} cacheNames
+ * @param {!Array.<!WebInspector.ServiceWorkerCacheModel.Cache>} caches
* @this {WebInspector.ServiceWorkerCacheModel}
*/
- function callback(error, cacheNames)
+ function callback(error, caches)
{
if (error) {
- console.error("ServiceWorkerCacheAgent error: ", error);
+ console.error("ServiceWorkerCacheAgent error while loading caches: ", error);
return;
}
-
- if (!this._cacheNames)
- return;
- this._updateCacheNames(cacheNames);
+ this._updateCacheNames(securityOrigin, caches);
}
-
- this._agent.requestCacheNames(callback.bind(this));
+ this._agent.requestCacheNames(securityOrigin, callback.bind(this));
},
/**
- * @param {!Array.<string>} cacheNames
+ * @param {string} securityOrigin
+ * @param {!Array} cachesJson
*/
- _updateCacheNames: function(cacheNames)
+ _updateCacheNames: function(securityOrigin, cachesJson)
{
- /** @type {!Set.<string>} */
- var newCacheNames = new Set(cacheNames);
- /** @type {!Set.<string>} */
- var oldCacheNames = this._cacheNames;
+ /**
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
+ * @this {WebInspector.ServiceWorkerCacheModel}
+ */
+ function deleteAndSaveOldCaches(cache)
+ {
+ if (cache.securityOrigin == securityOrigin && !updatingCachesIds.has(cache.cacheId)) {
+ oldCaches.set(cache.cacheId, cache);
+ this._caches.delete(cache.cacheId);
+ }
+ }
- this._cacheNames = new Set(cacheNames);
+ /** @type {!Set<string>} */
+ var updatingCachesIds = new Set();
+ /** @type {!Map<string, !WebInspector.ServiceWorkerCacheModel.Cache>} */
+ var newCaches = new Map();
+ /** @type {!Map<string, !WebInspector.ServiceWorkerCacheModel.Cache>} */
+ var oldCaches = new Map();
- for (var oldCacheName of oldCacheNames) {
- if (!newCacheNames[oldCacheName])
- this._cacheRemoved(oldCacheName);
- }
- for (var newCacheName of newCacheNames) {
- if (!oldCacheNames[newCacheName])
- this._cacheAdded(newCacheName);
+ for (var cacheJson of cachesJson) {
+ var cache = new WebInspector.ServiceWorkerCacheModel.Cache(cacheJson.securityOrigin, cacheJson.cacheName, cacheJson.cacheId);
+ updatingCachesIds.add(cache.cacheId);
+ if (this._caches.has(cache.cacheId))
+ continue;
+ newCaches.set(cache.cacheId, cache);
+ this._caches.set(cache.cacheId, cache);
}
+ this._caches.forEach(deleteAndSaveOldCaches, this);
+ newCaches.forEach(this._cacheAdded, this);
+ oldCaches.forEach(this._cacheRemoved, this);
},
/**
- * @param {string} cacheName
+ * @param {!WebInspector.Event} event
*/
- _cacheAdded: function(cacheName)
+ _securityOriginAdded: function(event)
{
- var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName);
- this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheAdded, cacheId);
+ var securityOrigin = /** @type {string} */ (event.data);
+ this._addOrigin(securityOrigin);
},
/**
- * @param {string} cacheName
+ * @param {!WebInspector.Event} event
*/
- _cacheRemoved: function(cacheName)
+ _securityOriginRemoved: function(event)
{
- var cacheId = new WebInspector.ServiceWorkerCacheModel.CacheId(cacheName);
- this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheRemoved, cacheId);
+ var securityOrigin = /** @type {string} */ (event.data);
+ this._removeOrigin(securityOrigin);
},
/**
- * @param {!WebInspector.ServiceWorkerCacheModel.CacheId} cacheId
- * @param {string} cacheName
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
+ */
+ _cacheAdded: function(cache)
+ {
+ this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheAdded, cache);
+ },
+
+ /**
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
+ */
+ _cacheRemoved: function(cache)
+ {
+ this.dispatchEventToListeners(WebInspector.ServiceWorkerCacheModel.EventTypes.CacheRemoved, cache);
+ },
+
+ /**
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
* @param {number} skipCount
* @param {number} pageSize
* @param {function(!Array.<!WebInspector.ServiceWorkerCacheModel.Entry>, boolean)} callback
*/
- _requestEntries: function(cacheId, cacheName, skipCount, pageSize, callback)
+ _requestEntries: function(cache, skipCount, pageSize, callback)
{
/**
* @param {?Protocol.Error} error
* @param {!Array.<!WebInspector.ServiceWorkerCacheModel.Entry>} dataEntries
* @param {boolean} hasMore
- * @this {WebInspector.ServiceWorkerCacheModel}
*/
function innerCallback(error, dataEntries, hasMore)
{
if (error) {
- console.error("ServiceWorkerCacheAgent error: ", error);
+ console.error("ServiceWorkerCacheAgent error while requesting entries: ", error);
return;
}
-
- if (!this._cacheNames)
- return;
var entries = [];
for (var i = 0; i < dataEntries.length; ++i) {
var request = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].request));
@@ -175,8 +239,7 @@ WebInspector.ServiceWorkerCacheModel.prototype = {
}
callback(entries, hasMore);
}
-
- this._agent.requestEntries(cacheName, skipCount, pageSize, innerCallback.bind(this));
+ this._agent.requestEntries(cache.cacheId, skipCount, pageSize, innerCallback);
},
__proto__: WebInspector.SDKModel.prototype
@@ -195,29 +258,47 @@ WebInspector.ServiceWorkerCacheModel.Entry = function(request, response)
/**
* @constructor
- * @param {string} name
+ * @param {string} securityOrigin
+ * @param {string} cacheName
+ * @param {string} cacheId
*/
-WebInspector.ServiceWorkerCacheModel.CacheId = function(name)
+WebInspector.ServiceWorkerCacheModel.Cache = function(securityOrigin, cacheName, cacheId)
{
- this.name = name;
+ this.securityOrigin = securityOrigin;
+ this.cacheName = cacheName;
+ this.cacheId = cacheId;
}
-WebInspector.ServiceWorkerCacheModel.CacheId.prototype = {
+WebInspector.ServiceWorkerCacheModel.Cache.prototype = {
/**
- * @param {!WebInspector.ServiceWorkerCacheModel.CacheId} cacheId
+ * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache
* @return {boolean}
*/
- equals: function(cacheId)
+ equals: function(cache)
+ {
+ return this.cacheId == cache.cacheId;
+ },
+
+ /**
+ * @override
+ * @return {string}
+ */
+ toString: function()
{
- return this.name === cacheId.name;
+ return this.securityOrigin + this.cacheName;
}
}
+
+WebInspector.ServiceWorkerCacheModel._symbol = Symbol("CacheStorageModel");
/**
- * @constructor
- * @param {!WebInspector.ServiceWorkerCacheModel.CacheId} cacheId
+ * @param {!WebInspector.Target} target
+ * @return {!WebInspector.ServiceWorkerCacheModel}
*/
-WebInspector.ServiceWorkerCacheModel.Cache = function(cacheId)
+WebInspector.ServiceWorkerCacheModel.fromTarget = function(target)
{
- this.cacheId = cacheId;
+ if (!target[WebInspector.ServiceWorkerCacheModel._symbol])
+ target[WebInspector.ServiceWorkerCacheModel._symbol] = new WebInspector.ServiceWorkerCacheModel(target);
+
+ return target[WebInspector.ServiceWorkerCacheModel._symbol];
}

Powered by Google App Engine
This is Rietveld 408576698