2424#include " extensions/browser/updater/null_extension_cache.h"
2525#include " extensions/browser/url_request_util.h"
2626#include " extensions/common/features/feature_channel.h"
27+ #include " extensions/common/manifest_constants.h"
28+ #include " extensions/common/manifest_url_handlers.h"
29+ #include " services/network/public/mojom/url_loader.mojom.h"
2730#include " shell/browser/atom_browser_client.h"
2831#include " shell/browser/atom_browser_context.h"
2932#include " shell/browser/browser.h"
3033#include " shell/browser/extensions/api/runtime/atom_runtime_api_delegate.h"
3134#include " shell/browser/extensions/atom_extension_host_delegate.h"
3235#include " shell/browser/extensions/atom_extension_system_factory.h"
3336#include " shell/browser/extensions/atom_extension_web_contents_observer.h"
34- // #include "shell/browser/extensions/atom_extensions_api_client.h"
35- // #include "shell/browser/extensions/atom_extensions_browser_api_provider.h"
36- #include " services/network/public/mojom/url_loader.mojom.h"
3737#include " shell/browser/extensions/atom_navigation_ui_data.h"
3838#include " shell/browser/extensions/electron_extensions_api_client.h"
3939#include " shell/browser/extensions/electron_process_manager_delegate.h"
@@ -139,6 +139,37 @@ void AtomExtensionsBrowserClient::LoadResourceFromResourceBundle(
139139 NOTREACHED () << " Load resources from bundles not supported." ;
140140}
141141
142+ namespace {
143+ bool AllowCrossRendererResourceLoad (const GURL& url,
144+ content::ResourceType resource_type,
145+ ui::PageTransition page_transition,
146+ int child_id,
147+ bool is_incognito,
148+ const extensions::Extension* extension,
149+ const extensions::ExtensionSet& extensions,
150+ const extensions::ProcessMap& process_map,
151+ bool * allowed) {
152+ if (extensions::url_request_util::AllowCrossRendererResourceLoad (
153+ url, resource_type, page_transition, child_id, is_incognito,
154+ extension, extensions, process_map, allowed)) {
155+ return true ;
156+ }
157+
158+ // If there aren't any explicitly marked web accessible resources, the
159+ // load should be allowed only if it is by DevTools. A close approximation is
160+ // checking if the extension contains a DevTools page.
161+ if (extension && !extensions::ManifestURL::Get (
162+ extension, extensions::manifest_keys::kDevToolsPage )
163+ .is_empty ()) {
164+ *allowed = true ;
165+ return true ;
166+ }
167+
168+ // Couldn't determine if the resource is allowed or not.
169+ return false ;
170+ }
171+ } // namespace
172+
142173bool AtomExtensionsBrowserClient::AllowCrossRendererResourceLoad (
143174 const GURL& url,
144175 content::ResourceType resource_type,
@@ -149,7 +180,7 @@ bool AtomExtensionsBrowserClient::AllowCrossRendererResourceLoad(
149180 const extensions::ExtensionSet& extensions,
150181 const extensions::ProcessMap& process_map) {
151182 bool allowed = false ;
152- if (extensions::url_request_util ::AllowCrossRendererResourceLoad (
183+ if (:: electron ::AllowCrossRendererResourceLoad (
153184 url, resource_type, page_transition, child_id, is_incognito,
154185 extension, extensions, process_map, &allowed)) {
155186 return allowed;
0 commit comments