Chromium Code Reviews| Index: chrome/browser/extensions/chrome_extension_web_contents_observer.cc |
| diff --git a/chrome/browser/extensions/chrome_extension_web_contents_observer.cc b/chrome/browser/extensions/chrome_extension_web_contents_observer.cc |
| index b692dfbb0e01fcb1cc9de515061cfef4a3cda176..3c6aa49f0c29243a0ae2bc0119e92eb642ee086a 100644 |
| --- a/chrome/browser/extensions/chrome_extension_web_contents_observer.cc |
| +++ b/chrome/browser/extensions/chrome_extension_web_contents_observer.cc |
| @@ -8,7 +8,9 @@ |
| #include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/extensions/window_controller.h" |
| #include "chrome/common/extensions/chrome_extension_messages.h" |
| +#include "chrome/common/url_constants.h" |
| #include "content/public/browser/browser_context.h" |
| +#include "content/public/browser/child_process_security_policy.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/render_view_host.h" |
| @@ -34,6 +36,37 @@ void ChromeExtensionWebContentsObserver::RenderViewCreated( |
| content::RenderViewHost* render_view_host) { |
| ReloadIfTerminated(render_view_host); |
| ExtensionWebContentsObserver::RenderViewCreated(render_view_host); |
| + |
| + const Extension* extension = GetExtension(render_view_host); |
| + if (!extension) |
| + return; |
| + |
| + int process_id = render_view_host->GetProcess()->GetID(); |
| + auto policy = content::ChildProcessSecurityPolicy::GetInstance(); |
| + |
| + // Components of chrome that are implemented as extensions are allowed to use |
| + // chrome://resources/ URLs. |
| + if (extension->is_extension() && |
| + Manifest::IsComponentLocation(extension->location())) { |
| + std::string origin_url; |
| + base::SStringPrintf(&origin_url, "%s://%s/", content::kChromeUIScheme, |
|
Devlin
2015/09/29 19:06:30
And, both those said, I actually wouldn't be oppos
Devlin
2015/09/29 19:06:30
nit: Why SStringPrintf, instead of just StringPrin
Devlin
2015/09/29 19:06:30
nit: Also kStandardSchemeSeparator
Charlie Reis
2015/09/29 22:15:53
I'd be happy with that, similar to kChromeUINetwor
paulmeyer
2015/09/30 14:21:31
Done.
paulmeyer
2015/09/30 14:21:31
No particular reason, but I'm taking it out anyway
paulmeyer
2015/09/30 14:21:31
Done.
paulmeyer
2015/09/30 14:21:31
Acknowledged.
|
| + content::kChromeUIResourcesHost); |
| + policy->GrantOrigin(process_id, url::Origin(GURL(origin_url))); |
| + } |
| + |
| + // Extensions, legacy packaged apps, and component platform apps are allowed |
| + // to use chrome://favicon/ and chrome://extension-icon/ URLs. Hosted apps are |
| + // not allowed because they are served via web servers (and are generally |
| + // never given access to Chrome APIs). |
| + if (extension->is_extension() || |
| + extension->is_legacy_packaged_app() || |
| + (extension->is_platform_app() && |
| + Manifest::IsComponentLocation(extension->location()))) { |
| + policy->GrantOrigin(process_id, |
| + url::Origin(GURL(chrome::kChromeUIFaviconURL))); |
| + policy->GrantOrigin(process_id, |
| + url::Origin(GURL(chrome::kChromeUIExtensionIconURL))); |
| + } |
| } |
| bool ChromeExtensionWebContentsObserver::OnMessageReceived( |