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

Unified Diff: chrome/browser/ui/webui/options/website_settings_handler.cc

Issue 493383004: Add a button to clear local storage for a given origin to Website Settings dialog. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Whoops. Forgot to commit these changes. Created 6 years, 4 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: chrome/browser/ui/webui/options/website_settings_handler.cc
diff --git a/chrome/browser/ui/webui/options/website_settings_handler.cc b/chrome/browser/ui/webui/options/website_settings_handler.cc
index 0a7354e5f12bc0af1ed0cba0747ffdaac308183d..1dd298734b4d9b1ed4db3afe5a232ab51a4a9a52 100644
--- a/chrome/browser/ui/webui/options/website_settings_handler.cc
+++ b/chrome/browser/ui/webui/options/website_settings_handler.cc
@@ -4,10 +4,18 @@
#include "chrome/browser/ui/webui/options/website_settings_handler.h"
+#include "apps/app_window_registry.h"
#include "chrome/browser/content_settings/content_settings_utils.h"
#include "chrome/browser/content_settings/host_content_settings_map.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/tab_contents/tab_contents_iterator.h"
+#include "content/public/browser/dom_storage_context.h"
+#include "content/public/browser/storage_partition.h"
+#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h"
+#include "extensions/browser/extension_registry.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/extension.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/l10n/time_format.h"
@@ -53,6 +61,7 @@ void WebsiteSettingsHandler::GetLocalizedValues(
IDS_WEBSITE_SETTINGS_MEDIASTREAM_DESCRIPTION},
{"websitesNotificationsDescription",
IDS_WEBSITE_SETTINGS_NOTIFICATIONS_DESCRIPTION},
+ {"websitesButtonClear", IDS_WEBSITE_SETTINGS_STORAGE_CLEAR_BUTTON},
};
RegisterStrings(localized_strings, resources, arraysize(resources));
@@ -96,6 +105,16 @@ void WebsiteSettingsHandler::RegisterMessages() {
"maybeShowEditPage",
base::Bind(&WebsiteSettingsHandler::HandleMaybeShowEditPage,
base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "deleteLocalStorage",
+ base::Bind(&WebsiteSettingsHandler::HandleDeleteLocalStorage,
+ base::Unretained(this)));
+
+ web_ui()->RegisterMessageCallback(
+ "stopOrigin",
+ base::Bind(&WebsiteSettingsHandler::HandleStopOrigin,
+ base::Unretained(this)));
}
// content_settings::Observer implementation.
@@ -164,7 +183,8 @@ void WebsiteSettingsHandler::HandleMaybeShowEditPage(
void WebsiteSettingsHandler::OnLocalStorageFetched(const std::list<
BrowsingDataLocalStorageHelper::LocalStorageInfo>& storage) {
local_storage_list_ = storage;
- UpdateLocalStorage();
+ Update();
+ GetInfoForOrigin(last_site_, false);
}
void WebsiteSettingsHandler::Update() {
@@ -256,7 +276,7 @@ void WebsiteSettingsHandler::HandleGetOriginInfo(const base::ListValue* args) {
if (!origin.is_valid())
return;
- GetInfoForOrigin(origin);
+ GetInfoForOrigin(origin, true);
}
void WebsiteSettingsHandler::HandleSetOriginPermission(
@@ -324,7 +344,19 @@ void WebsiteSettingsHandler::HandleSetOriginPermission(
info);
}
-void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url) {
+void WebsiteSettingsHandler::HandleDeleteLocalStorage(
+ const base::ListValue* args) {
+ DCHECK(!last_site_.is_empty());
+ DeleteLocalStorage(last_site_);
+}
+
+void WebsiteSettingsHandler::HandleStopOrigin(const base::ListValue* args) {
+ DCHECK(!last_site_.is_empty());
+ StopOrigin(last_site_);
+}
+
+void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url,
+ bool show_page) {
Profile* profile = Profile::FromWebUI(web_ui());
HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
@@ -396,8 +428,10 @@ void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url) {
base::Value* storage_used = new base::StringValue(l10n_util::GetStringFUTF16(
IDS_WEBSITE_SETTINGS_STORAGE_USED, ui::FormatBytes(storage)));
- web_ui()->CallJavascriptFunction(
- "WebsiteSettingsEditor.populateOrigin", *storage_used, *permissions);
+ web_ui()->CallJavascriptFunction("WebsiteSettingsEditor.populateOrigin",
+ *storage_used,
+ *permissions,
+ base::FundamentalValue(show_page));
}
void WebsiteSettingsHandler::UpdateLocalStorage() {
@@ -421,4 +455,41 @@ void WebsiteSettingsHandler::UpdateLocalStorage() {
local_storage_map);
}
+void WebsiteSettingsHandler::StopOrigin(const GURL& site_url) {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ if (site_url.SchemeIs(extensions::kExtensionScheme)) {
+ const extensions::Extension* extension =
+ extensions::ExtensionRegistry::Get(profile)
+ ->enabled_extensions()
+ .GetHostedAppByURL(site_url);
+ if (extension) {
+ apps::AppWindowRegistry::Get(profile)
+ ->CloseAllAppWindowsForApp(extension->id());
+ }
+ }
+
+ for (TabContentsIterator it; !it.done(); it.Next()) {
+ if (it->GetLastCommittedURL().GetOrigin() == site_url &&
+ profile == Profile::FromBrowserContext(it->GetBrowserContext())) {
Bernhard Bauer 2014/08/22 20:42:39 How does this interact with incognito?
Daniel Nishi 2014/08/22 21:45:25 Incognito isn't affected. I'm pretty sure it is be
Bernhard Bauer 2014/08/22 21:54:36 Yeah, I was more wondering whether that's somethin
Daniel Nishi 2014/08/22 22:12:47 I did a little experiment -- you can see OTR conte
Bernhard Bauer 2014/08/22 22:41:27 Yeah, I think so. We could probably mark them up d
+ it->Close();
Bernhard Bauer 2014/08/22 20:42:39 This closes the tabs completely, right? Is that th
Daniel Nishi 2014/08/22 21:45:25 Ooh. I didn't know about the Discard functionality
+ }
+ }
+}
+
+void WebsiteSettingsHandler::DeleteLocalStorage(const GURL& site_url) {
+ Profile* profile = Profile::FromWebUI(web_ui());
+ content::DOMStorageContext* dom_storage_context_ =
+ content::BrowserContext::GetDefaultStoragePartition(profile)
+ ->GetDOMStorageContext();
+ dom_storage_context_->DeleteLocalStorage(site_url);
+
+ // Load a new BrowsingDataLocalStorageHelper to update.
+ local_storage_ = NULL;
Bernhard Bauer 2014/08/22 20:42:39 Is this assignment really necessary?
Daniel Nishi 2014/08/22 21:45:25 Hmm. I think I misunderstood a comment in the scop
+ local_storage_ = new BrowsingDataLocalStorageHelper(profile);
+
+ local_storage_->StartFetching(
+ base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched,
+ weak_ptr_factory_.GetWeakPtr()));
+}
+
} // namespace options

Powered by Google App Engine
This is Rietveld 408576698