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

Unified Diff: chrome/browser/net/chrome_extensions_network_delegate.cc

Issue 2387323002: Fix blob URL blocking for apps that use <webview>. (Closed)
Patch Set: Fix comment Created 4 years, 2 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/net/chrome_extensions_network_delegate.cc
diff --git a/chrome/browser/net/chrome_extensions_network_delegate.cc b/chrome/browser/net/chrome_extensions_network_delegate.cc
index 502585cf85702d08e4beb93c5eae6995d59d80d6..535f6d0e74036d698efcb631ea2d6d8286155552 100644
--- a/chrome/browser/net/chrome_extensions_network_delegate.cc
+++ b/chrome/browser/net/chrome_extensions_network_delegate.cc
@@ -21,6 +21,7 @@
#include "extensions/browser/info_map.h"
#include "extensions/browser/process_manager.h"
#include "extensions/common/constants.h"
+#include "extensions/common/permissions/api_permission.h"
#include "net/url_request/url_request.h"
using content::BrowserThread;
@@ -169,10 +170,20 @@ int ChromeExtensionsNetworkDelegateImpl::OnBeforeURLRequest(
bool is_nested_url = url.SchemeIsFileSystem() || url.SchemeIsBlob();
bool is_navigation =
info && content::IsResourceTypeFrame(info->GetResourceType());
+ url::Origin origin(url);
if (is_nested_url && is_navigation && info->IsMainFrame() &&
- url::Origin(url).scheme() == extensions::kExtensionScheme &&
+ origin.scheme() == extensions::kExtensionScheme &&
!extension_info_map_->process_map().Contains(info->GetChildID())) {
- return net::ERR_ABORTED;
+ // Relax this restriction for apps that use <webview>. See
+ // https://crbug.com/652077.
+ const extensions::Extension* extension =
+ extension_info_map_->extensions().GetByID(origin.host());
+ bool has_webview_permission =
+ extension &&
+ extension->permissions_data()->HasAPIPermission(
+ extensions::APIPermission::kWebView);
+ if (!has_webview_permission)
+ return net::ERR_ABORTED;
}
return ExtensionWebRequestEventRouter::GetInstance()->OnBeforeRequest(

Powered by Google App Engine
This is Rietveld 408576698