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

Unified Diff: chrome/browser/chrome_content_browser_client.cc

Issue 11362268: Implement the ability to obliterate a storage partition from disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Work around race on extension uninstall Created 8 years, 1 month 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/chrome_content_browser_client.cc
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc
index 677ab1f5bd7e5e336678ff0f004c181ea28d2404..6af8e23d6d3a617bd21c83e2d47b363b00e121e4 100644
--- a/chrome/browser/chrome_content_browser_client.cc
+++ b/chrome/browser/chrome_content_browser_client.cc
@@ -504,6 +504,38 @@ void ChromeContentBrowserClient::GetStoragePartitionConfigForSite(
std::string* partition_domain,
std::string* partition_name,
bool* in_memory) {
+ // Handle sites that may not use the default storage partition.
+ if (site.SchemeIs(chrome::kGuestScheme)) {
+ ParseNonDefaultStoragePartitionConfig(site, partition_domain,
+ partition_name, in_memory);
Charlie Reis 2012/11/16 01:45:10 nit: Wrong indent.
+ return;
+ }
+
+ const Extension* extension = NULL;
+ Profile* profile = Profile::FromBrowserContext(browser_context);
+ ExtensionService* extension_service =
+ extensions::ExtensionSystem::Get(profile)->extension_service();
+ if (extension_service) {
+ extension = extension_service->extensions()->
+ GetExtensionOrAppByURL(ExtensionURLInfo(site));
+ if (extension && extension->is_storage_isolated()) {
+ ParseNonDefaultStoragePartitionConfig(site, partition_domain,
+ partition_name, in_memory);
+ return;
+ }
+ }
+
+ // All other cases use the default, browser-wide, storage partition.
+ partition_domain->clear();
+ partition_name->clear();
+ *in_memory = false;
+}
+
+void ChromeContentBrowserClient::ParseNonDefaultStoragePartitionConfig(
+ const GURL& site,
+ std::string* partition_domain,
+ std::string* partition_name,
+ bool* in_memory) {
// For the webview tag, we create special guest processes, which host the
// tag content separately from the main application that embeds the tag.
// A webview tag can specify both the partition name and whether the storage
@@ -523,30 +555,21 @@ void ChromeContentBrowserClient::GetStoragePartitionConfigForSite(
// URL was created, so it needs to be decoded.
*partition_name = net::UnescapeURLComponent(site.query(),
net::UnescapeRule::NORMAL);
+ } else if (site.SchemeIs(extensions::kExtensionScheme)) {
+ CHECK(site.has_host());
+ // This function assumes the extension has isolated storage. For such sites,
+ // the host of the |site| is the |partition_domain|. The |in_memory| and
+ // |partition_name| are only used in guest schemes so they are cleared
+ // here.
+ *partition_domain = site.host();
+ *in_memory = false;
+ partition_name->clear();
+ } else {
+ // Serious logic error if this is being called on a |site| with an
+ // unexpected format.
+ LOG(FATAL) << "site has unexpected format: " << site;
return;
}
-
- const Extension* extension = NULL;
- Profile* profile = Profile::FromBrowserContext(browser_context);
- ExtensionService* extension_service =
- extensions::ExtensionSystem::Get(profile)->extension_service();
- if (extension_service) {
- extension = extension_service->extensions()->
- GetExtensionOrAppByURL(ExtensionURLInfo(site));
- if (extension && extension->is_storage_isolated()) {
- // Extensions which have storage isolation enabled (e.g., apps), use
- // the extension id as the |partition_domain|.
- *partition_domain = extension->id();
- partition_name->clear();
- *in_memory = false;
- return;
- }
- }
-
- // All other cases use the default, browser-wide, storage partition.
- partition_domain->clear();
- partition_name->clear();
- *in_memory = false;
}
content::WebContentsViewDelegate*

Powered by Google App Engine
This is Rietveld 408576698