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

Unified Diff: chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc

Issue 2182633007: Avoid using ContentBrowserClient::IsIllegalOrigin in ResourceDispatcherHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile failures Created 4 years, 5 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/extensions/chrome_content_browser_client_extensions_part.cc
diff --git a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
index 8adeb96f87829a4b0395e697e12325fb4b7ac245..3a00e3800399e2c5fa4f9e74340a3f7c35978800 100644
--- a/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
+++ b/chrome/browser/extensions/chrome_content_browser_client_extensions_part.cc
@@ -27,6 +27,7 @@
#include "content/public/browser/browser_url_handler.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
+#include "content/public/browser/resource_dispatcher_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/vpn_service_proxy.h"
#include "content/public/browser/web_contents.h"
@@ -518,6 +519,32 @@ ChromeContentBrowserClientExtensionsPart::GetVpnServiceProxy(
#endif
}
+// static
+void ChromeContentBrowserClientExtensionsPart::AddExtension(
jam 2016/08/01 20:06:01 these two methods are only called by extension_sys
ananta 2016/08/02 00:40:49 Done. I did not want another PostTask to the RDH o
+ const content::ResourceContext* context,
+ const Extension* extension) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ // Check for platform app origins. These can only be committed by the app
+ // itself, or by one if its guests if there are accessible_resources.
+ if (extension->is_platform_app() &&
+ extension->GetManifestData(manifest_keys::kWebviewAccessibleResources)) {
+ DCHECK(content::ResourceDispatcherHost::Get());
+ content::ResourceDispatcherHost::Get()->AddOriginAccessInformation(
+ context, Extension::GetBaseURLFromExtensionId(extension->id()).spec());
+ }
+}
+
+void ChromeContentBrowserClientExtensionsPart::RemoveExtension(
+ const content::ResourceContext* context,
+ const std::string& extension_id) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ DCHECK(content::ResourceDispatcherHost::Get());
+ content::ResourceDispatcherHost::Get()->RemoveOriginAccessInformation(
+ context, Extension::GetBaseURLFromExtensionId(extension_id).spec());
+}
+
void ChromeContentBrowserClientExtensionsPart::RenderProcessWillLaunch(
content::RenderProcessHost* host) {
int id = host->GetID();
@@ -553,9 +580,12 @@ void ChromeContentBrowserClientExtensionsPart::SiteInstanceGotProcess(
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&InfoMap::RegisterExtensionProcess,
- ExtensionSystem::Get(context)->info_map(), extension->id(),
- site_instance->GetProcess()->GetID(), site_instance->GetId()));
+ base::Bind(&ChromeContentBrowserClientExtensionsPart::
+ RegisterExtensionProcessHelper,
+ base::RetainedRef(ExtensionSystem::Get(context)->info_map()),
+ base::RetainedRef(extension),
+ site_instance->GetProcess()->GetID(), site_instance->GetId(),
+ context->GetResourceContext()));
}
void ChromeContentBrowserClientExtensionsPart::SiteInstanceDeleting(
@@ -577,9 +607,12 @@ void ChromeContentBrowserClientExtensionsPart::SiteInstanceDeleting(
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
- base::Bind(&InfoMap::UnregisterExtensionProcess,
- ExtensionSystem::Get(context)->info_map(), extension->id(),
- site_instance->GetProcess()->GetID(), site_instance->GetId()));
+ base::Bind(&ChromeContentBrowserClientExtensionsPart::
+ UnregisterExtensionProcessHelper,
+ base::RetainedRef(ExtensionSystem::Get(context)->info_map()),
+ base::RetainedRef(extension),
+ site_instance->GetProcess()->GetID(), site_instance->GetId(),
+ context->GetResourceContext()));
}
void ChromeContentBrowserClientExtensionsPart::OverrideWebkitPrefs(
@@ -662,4 +695,42 @@ void ChromeContentBrowserClientExtensionsPart::
}
}
+// static
+void ChromeContentBrowserClientExtensionsPart::RegisterExtensionProcessHelper(
+ InfoMap* info_map,
+ const Extension* extension,
+ int process_id,
+ int site_instance_id,
+ const content::ResourceContext* context) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ info_map->RegisterExtensionProcess(extension->id(), process_id,
+ site_instance_id);
+
+ if (extension->is_platform_app()) {
+ DCHECK(content::ResourceDispatcherHost::Get());
+ content::ResourceDispatcherHost::Get()->AddOwnerForOrigin(
+ context, extension->id(), process_id);
+ }
+}
+
+// static
+void ChromeContentBrowserClientExtensionsPart::UnregisterExtensionProcessHelper(
+ InfoMap* info_map,
+ const Extension* extension,
+ int process_id,
+ int site_instance_id,
+ const content::ResourceContext* context) {
+ DCHECK_CURRENTLY_ON(BrowserThread::IO);
+
+ info_map->UnregisterExtensionProcess(extension->id(), process_id,
+ site_instance_id);
+
+ if (extension->is_platform_app()) {
+ DCHECK(content::ResourceDispatcherHost::Get());
+ content::ResourceDispatcherHost::Get()->RemoveOwnerForOrigin(
+ context, extension->id(), process_id);
+ }
+}
+
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698