Index: chrome/renderer/extensions/extension_resource_request_policy.cc |
diff --git a/chrome/renderer/extensions/extension_resource_request_policy.cc b/chrome/renderer/extensions/extension_resource_request_policy.cc |
index 188701ae8b774987fa358ac582683ea6447c7513..f88f1b5b76bc05dd1315aa02d8d7a2f652224f2e 100644 |
--- a/chrome/renderer/extensions/extension_resource_request_policy.cc |
+++ b/chrome/renderer/extensions/extension_resource_request_policy.cc |
@@ -13,24 +13,30 @@ |
// static |
bool ExtensionResourceRequestPolicy::CanRequestResource( |
const GURL& resource_url, |
- const GURL& frame_url, |
+ const GURL& requesting_origin, |
const ExtensionSet* loaded_extensions) { |
CHECK(resource_url.SchemeIs(chrome::kExtensionScheme)); |
+ const Extension* extension = loaded_extensions->GetByURL(resource_url); |
+ if (!extension) { |
+ LOG(ERROR) << "Denying load of " << resource_url.spec() << " for unloaded " |
+ << "extension."; |
+ return false; |
+ } |
+ |
// chrome:// URLs are always allowed to load chrome-extension:// resources. |
// The app launcher in the NTP uses this feature, as does dev tools. |
- if (frame_url.SchemeIs(chrome::kChromeDevToolsScheme) || |
- frame_url.SchemeIs(chrome::kChromeUIScheme)) |
+ if (requesting_origin.SchemeIs(chrome::kChromeDevToolsScheme) || |
+ requesting_origin.SchemeIs(chrome::kChromeUIScheme)) |
return true; |
// Disallow loading of packaged resources for hosted apps. We don't allow |
// hybrid hosted/packaged apps. The one exception is access to icons, since |
// some extensions want to be able to do things like create their own |
// launchers. |
- const Extension* extension = loaded_extensions->GetByURL(resource_url); |
std::string resource_root_relative_path = |
resource_url.path().empty() ? "" : resource_url.path().substr(1); |
- if (extension && extension->is_hosted_app() && |
+ if (extension->is_hosted_app() && |
!extension->icons().ContainsPath(resource_root_relative_path)) { |
LOG(ERROR) << "Denying load of " << resource_url.spec() << " from " |
<< "hosted app."; |
@@ -45,17 +51,19 @@ bool ExtensionResourceRequestPolicy::CanRequestResource( |
// - empty origin (needed for some edge cases when we have empty origins) |
// - chrome-extension:// (for legacy reasons -- some extensions interop) |
// - data: (basic HTML notifications use data URLs internally) |
- if (frame_url.is_empty() || |
- frame_url.SchemeIs(chrome::kExtensionScheme) | |
- frame_url.SchemeIs(chrome::kDataScheme)) { |
+ if (requesting_origin.is_empty() || |
+ requesting_origin.SchemeIs(chrome::kExtensionScheme) | |
+ requesting_origin.SchemeIs(chrome::kDataScheme)) { |
return true; |
} else { |
- if (extension->GetEffectiveHostPermissions().ContainsURL(frame_url)) { |
+ if (extension->GetEffectiveHostPermissions().ContainsURL( |
+ requesting_origin)) { |
return true; |
} else { |
LOG(ERROR) << "Denying load of " << resource_url.spec() << " from " |
- << frame_url.spec() << " because the extension does not have " |
- << "access to the requesting page."; |
+ << requesting_origin.spec() |
+ << " because the extension does not have access to the" |
+ << " requesting page."; |
return false; |
} |
} |