| 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(
|
|
|