Chromium Code Reviews| 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 |