Index: extensions/browser/url_request_util.cc |
diff --git a/extensions/browser/url_request_util.cc b/extensions/browser/url_request_util.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8884c2236ce55bbe377b3c2edee268013400baaa |
--- /dev/null |
+++ b/extensions/browser/url_request_util.cc |
@@ -0,0 +1,51 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "extensions/browser/url_request_util.h" |
+ |
+#include <string> |
+ |
+#include "content/public/browser/resource_request_info.h" |
+#include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" |
+#include "extensions/browser/info_map.h" |
+#include "extensions/common/extension.h" |
+#include "extensions/common/manifest_handlers/webview_info.h" |
+#include "net/url_request/url_request.h" |
+ |
+namespace extensions { |
+namespace url_request_util { |
+ |
+bool AllowCrossRendererResourceLoad(net::URLRequest* request, |
+ bool is_incognito, |
+ const Extension* extension, |
+ InfoMap* extension_info_map) { |
+ const content::ResourceRequestInfo* info = |
+ content::ResourceRequestInfo::ForRequest(request); |
+ |
+ // Extensions with webview: allow loading certain resources by guest renderers |
+ // with privileged partition IDs as specified in the manifest file. |
+ std::string partition_id; |
+ bool is_guest = WebViewRendererState::GetInstance()->GetPartitionID( |
+ info->GetChildID(), &partition_id); |
+ std::string resource_path = request->url().path(); |
+ if (is_guest && WebviewInfo::IsResourceWebviewAccessible( |
+ extension, partition_id, resource_path)) { |
+ return true; |
+ } |
+ |
+ // No special exception. Block the load. |
+ return false; |
+} |
+ |
+bool IsWebViewRequest(net::URLRequest* request) { |
+ const content::ResourceRequestInfo* info = |
+ content::ResourceRequestInfo::ForRequest(request); |
+ // |info| can be NULL sometimes: http://crbug.com/370070. |
+ if (!info) |
+ return false; |
+ return WebViewRendererState::GetInstance()->IsGuest(info->GetChildID()); |
+} |
+ |
+} // namespace url_request_util |
+} // namespace extensions |