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..a670185dbb00da50c58dfa402ac42ae25373e160 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" |
@@ -33,6 +35,24 @@ ChromeExtensionWebContentsObserver::~ChromeExtensionWebContentsObserver() {} |
void ChromeExtensionWebContentsObserver::RenderViewCreated( |
content::RenderViewHost* render_view_host) { |
ReloadIfTerminated(render_view_host); |
+ |
+ // Some extensions use "chrome://favicon/" and "chrome://extension-icon" URLs. |
Charlie Reis
2015/09/22 17:38:15
Why are these cases handled here vs chrome://resou
paulmeyer
2015/09/22 22:13:57
The reason was because the host constants are from
|
+ const Extension* extension = GetExtension(render_view_host); |
+ if (extension) { |
+ Manifest::Type type = extension->GetType(); |
+ if (type == Manifest::TYPE_EXTENSION || |
+ type == Manifest::TYPE_LEGACY_PACKAGED_APP || |
+ (type == Manifest::TYPE_PLATFORM_APP && |
+ extension->location() == Manifest::COMPONENT)) { |
Charlie Reis
2015/09/22 17:38:15
This block is subtle in terms of which types of ex
paulmeyer
2015/09/22 22:13:56
Done.
|
+ int process_id = render_view_host->GetProcess()->GetID(); |
+ content::ChildProcessSecurityPolicy::GetInstance()->GrantSchemeHost( |
+ process_id, content::kChromeUIScheme, chrome::kChromeUIFaviconHost); |
+ content::ChildProcessSecurityPolicy::GetInstance()->GrantSchemeHost( |
+ process_id, content::kChromeUIScheme, |
+ chrome::kChromeUIExtensionIconHost); |
+ } |
+ } |
+ |
ExtensionWebContentsObserver::RenderViewCreated(render_view_host); |
} |