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 |