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

Unified Diff: third_party/WebKit/Source/devtools/front_end/resources/ClearStorageView.js

Issue 1960663003: DevTools: introduce the Clear storage pane in the resources panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: tests fixed Created 4 years, 7 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: third_party/WebKit/Source/devtools/front_end/resources/ClearStorageView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/resources/ClearStorageView.js b/third_party/WebKit/Source/devtools/front_end/resources/ClearStorageView.js
new file mode 100644
index 0000000000000000000000000000000000000000..569c45c2f50ab6e01f1ff5badc5ed301e97953da
--- /dev/null
+++ b/third_party/WebKit/Source/devtools/front_end/resources/ClearStorageView.js
@@ -0,0 +1,161 @@
+// Copyright (c) 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+/**
+ * @constructor
+ * @extends {WebInspector.VBox}
+ * @implements {WebInspector.TargetManager.Observer}
+ * @param {!WebInspector.ResourcesPanel} resourcesPanel
+ */
+WebInspector.ClearStorageView = function(resourcesPanel)
+{
+ WebInspector.VBox.call(this, true);
+
+ this._resourcesPanel = resourcesPanel;
+ this._reportView = new WebInspector.ReportView(WebInspector.UIString("Clear storage"));
+ this._reportView.registerRequiredCSS("resources/clearStorageView.css");
+ this._reportView.element.classList.add("clear-storage-header");
+ this._reportView.show(this.contentElement);
+
+ this._settings = new Map();
+ for (var type of [ StorageAgent.StorageType.Appcache,
+ StorageAgent.StorageType.Cache_storage,
+ StorageAgent.StorageType.Cookies,
+ StorageAgent.StorageType.Indexeddb,
+ StorageAgent.StorageType.Local_storage,
+ StorageAgent.StorageType.Service_workers,
+ StorageAgent.StorageType.Websql]) {
+ this._settings.set(type, WebInspector.settings.createSetting("clear-storage-" + type, true));
+ }
+
+ var application = this._reportView.appendSection(WebInspector.UIString("Application"));
+ this._appendItem(application, WebInspector.UIString("Unregister service workers"), "service_workers");
+
+ var storage = this._reportView.appendSection(WebInspector.UIString("Storage"));
+ this._appendItem(storage, WebInspector.UIString("Local and session storage"), "local_storage");
+ this._appendItem(storage, WebInspector.UIString("Indexed DB"), "indexeddb");
+ this._appendItem(storage, WebInspector.UIString("Web SQL"), "websql");
+ this._appendItem(storage, WebInspector.UIString("Cookies"), "cookies");
+
+ var caches = this._reportView.appendSection(WebInspector.UIString("Cache"));
+ this._appendItem(caches, WebInspector.UIString("Cache storage"), "cache_storage");
+ this._appendItem(caches, WebInspector.UIString("Application cache"), "appcache");
+
+ WebInspector.targetManager.observeTargets(this);
+ var footer = this._reportView.appendSection("", "clear-storage-button").appendRow();
+ this._clearButton = createTextButton(WebInspector.UIString("Clear selected"), this._clear.bind(this), WebInspector.UIString("Clear selected"));
+ footer.appendChild(this._clearButton);
+}
+
+WebInspector.ClearStorageView.prototype = {
+
+ /**
+ * @param {!WebInspector.ReportView.Section} section
+ * @param {string} title
+ * @param {string} settingName
+ */
+ _appendItem: function(section, title, settingName)
+ {
+ var row = section.appendRow();
+ row.appendChild(WebInspector.SettingsUI.createSettingCheckbox(title, this._settings.get(settingName), true));
+ },
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetAdded: function(target)
+ {
+ if (this._target)
+ return;
+ this._target = target;
+ this._updateOrigin(target.resourceTreeModel.mainFrame ? target.resourceTreeModel.mainFrame.url : "");
+ WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.MainFrameNavigated, this._updateFrame, this);
+ },
+
+ /**
+ * @param {!WebInspector.Event} event
+ */
+ _updateFrame: function(event)
+ {
+ var frame = /** *@type {!WebInspector.ResourceTreeFrame} */ (event.data);
+ this._updateOrigin(frame.url);
+ },
+
+ /**
+ * @param {string} url
+ */
+ _updateOrigin: function(url)
+ {
+ this._securityOrigin = new WebInspector.ParsedURL(url).securityOrigin();
+ this._reportView.setSubtitle(this._securityOrigin);
+ },
+
+ _clear: function()
+ {
+ var storageTypes = [];
+ for (var type of this._settings.keys()) {
+ if (this._settings.get(type).get())
+ storageTypes.push(type);
+ }
+
+ this._target.storageAgent().clearDataForOrigin(this._securityOrigin, storageTypes.join(","));
+
+ var set = new Set(storageTypes);
+ var hasAll = set.has(StorageAgent.StorageType.All);
+ if (set.has(StorageAgent.StorageType.Cookies) || hasAll)
+ this._resourcesPanel.clearCookies(this._securityOrigin);
+
+ if (set.has(StorageAgent.StorageType.Indexeddb) || hasAll) {
+ for (var target of WebInspector.targetManager.targets()) {
+ var indexedDBModel = WebInspector.IndexedDBModel.fromTarget(target);
+ if (indexedDBModel)
+ indexedDBModel.clearForOrigin(this._securityOrigin);
+ }
+ }
+
+ if (set.has(StorageAgent.StorageType.Local_storage) || hasAll) {
+ var storageModel = WebInspector.DOMStorageModel.fromTarget(this._target);
+ if (storageModel)
+ storageModel.clearForOrigin(this._securityOrigin);
+ }
+
+ if (set.has(StorageAgent.StorageType.Websql) || hasAll) {
+ var databaseModel = WebInspector.DatabaseModel.fromTarget(this._target);
+ if (databaseModel) {
+ databaseModel.disable();
+ databaseModel.enable();
+ }
+ }
+
+ if (set.has(StorageAgent.StorageType.Cache_storage) || hasAll) {
+ for (var target of WebInspector.targetManager.targets()) {
+ var model = WebInspector.ServiceWorkerCacheModel.fromTarget(target);
+ if (model)
+ model.clearForOrigin(this._securityOrigin);
+ }
+ }
+
+ if (set.has(StorageAgent.StorageType.Appcache) || hasAll) {
+ var appcacheModel = WebInspector.ApplicationCacheModel.fromTarget(this._target);
+ if (appcacheModel)
+ appcacheModel.reset();
+ }
+
+ this._clearButton.disabled = true;
+ setTimeout(() => {
+ this._clearButton.disabled = false;
+ }, 500);
+ },
+
+ /**
+ * @override
+ * @param {!WebInspector.Target} target
+ */
+ targetRemoved: function(target)
+ {
+ },
+
+ __proto__: WebInspector.VBox.prototype
+}

Powered by Google App Engine
This is Rietveld 408576698