Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1406)

Unified Diff: chrome/browser/extensions/extension_protocols.cc

Issue 22793018: <webview>: Implement support for package-local chrome-extension:// URLs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added a comment Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_protocols.cc
diff --git a/chrome/browser/extensions/extension_protocols.cc b/chrome/browser/extensions/extension_protocols.cc
index eb247ab74566558bcac840a1845cdede3191d7ee..68b9238e40197c7e10f8000cbdc1d562414de42c 100644
--- a/chrome/browser/extensions/extension_protocols.cc
+++ b/chrome/browser/extensions/extension_protocols.cc
@@ -24,6 +24,7 @@
#include "base/threading/thread_restrictions.h"
#include "build/build_config.h"
#include "chrome/browser/extensions/extension_info_map.h"
+#include "chrome/browser/extensions/extension_renderer_state.h"
#include "chrome/browser/extensions/image_loader.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/background_info.h"
@@ -35,6 +36,7 @@
#include "chrome/common/extensions/manifest_handlers/shared_module_info.h"
#include "chrome/common/extensions/manifest_url_handler.h"
#include "chrome/common/extensions/web_accessible_resources_handler.h"
+#include "chrome/common/extensions/webview_handler.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/resource_request_info.h"
@@ -345,11 +347,6 @@ bool AllowExtensionResourceLoad(net::URLRequest* request,
return true;
}
- if (is_incognito && !ExtensionCanLoadInIncognito(info, request->url().host(),
- extension_info_map)) {
- return false;
- }
-
// The following checks are meant to replicate similar set of checks in the
// renderer process, performed by ResourceRequestPolicy::CanRequestResource.
// These are not exactly equivalent, because we don't have the same bits of
@@ -368,6 +365,21 @@ bool AllowExtensionResourceLoad(net::URLRequest* request,
return true;
}
+ // Extensions with webview: allow loading certain resources by guest renderers
+ // with privileged partition IDs as specified in the manifest file.
+ ExtensionRendererState* renderer_state =
+ ExtensionRendererState::GetInstance();
+ ExtensionRendererState::WebViewInfo webview_info;
+ bool is_guest = renderer_state->GetWebViewInfo(info->GetChildID(),
+ info->GetRouteID(),
+ &webview_info);
+ std::string resource_path = request->url().path();
+ if (is_guest &&
+ extensions::WebviewInfo::IsResourceWebviewAccessible(
+ extension, webview_info.partition_id, resource_path)) {
+ return true;
+ }
+
if (!content::PageTransitionIsWebTriggerable(info->GetPageTransition()))
return false;
@@ -402,6 +414,12 @@ bool AllowExtensionResourceLoad(net::URLRequest* request,
return true;
}
+ if (is_incognito && !ExtensionCanLoadInIncognito(info, request->url().host(),
+ extension_info_map)) {
+ return false;
+ }
+
+
// If there aren't any explicitly marked web accessible resources, the
// load should be allowed only if it is by DevTools. A close approximation is
// checking if the extension contains a DevTools page.

Powered by Google App Engine
This is Rietveld 408576698