fix(extensions): set lowest isolated world id (#22212)
* fix(extensions): set lowest isolated world id * refactor: move world IDs into separate header file Several files are including electron_render_frame_observer.h just for the world IDs.
This commit is contained in:
parent
68c6d53156
commit
8cc0435d9c
7 changed files with 45 additions and 33 deletions
|
@ -558,6 +558,7 @@ filenames = {
|
|||
"shell/common/skia_util.h",
|
||||
"shell/common/v8_value_converter.cc",
|
||||
"shell/common/v8_value_converter.h",
|
||||
"shell/common/world_ids.h",
|
||||
"shell/renderer/api/context_bridge/render_frame_context_bridge_store.cc",
|
||||
"shell/renderer/api/context_bridge/render_frame_context_bridge_store.h",
|
||||
"shell/renderer/api/electron_api_context_bridge.cc",
|
||||
|
|
31
shell/common/world_ids.h
Normal file
31
shell/common/world_ids.h
Normal file
|
@ -0,0 +1,31 @@
|
|||
// Copyright (c) 2020 Samuel Maddock
|
||||
// Use of this source code is governed by the MIT license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#ifndef SHELL_COMMON_WORLD_IDS_H_
|
||||
#define SHELL_COMMON_WORLD_IDS_H_
|
||||
|
||||
#include "third_party/blink/public/platform/web_isolated_world_ids.h"
|
||||
|
||||
namespace electron {
|
||||
|
||||
enum WorldIDs : int32_t {
|
||||
MAIN_WORLD_ID = 0,
|
||||
|
||||
// Use a high number far away from 0 to not collide with any other world
|
||||
// IDs created internally by Chrome.
|
||||
ISOLATED_WORLD_ID = 999,
|
||||
|
||||
// Numbers for isolated worlds for extensions are set in
|
||||
// lib/renderer/content-script-injector.ts, and are greater than or equal to
|
||||
// this number, up to ISOLATED_WORLD_ID_EXTENSIONS_END.
|
||||
ISOLATED_WORLD_ID_EXTENSIONS = 1 << 20,
|
||||
|
||||
// Last valid isolated world ID.
|
||||
ISOLATED_WORLD_ID_EXTENSIONS_END =
|
||||
blink::IsolatedWorldId::kEmbedderWorldIdLimit - 1
|
||||
};
|
||||
|
||||
} // namespace electron
|
||||
|
||||
#endif // SHELL_COMMON_WORLD_IDS_H_
|
|
@ -20,8 +20,8 @@
|
|||
#include "shell/common/gin_helper/dictionary.h"
|
||||
#include "shell/common/gin_helper/promise.h"
|
||||
#include "shell/common/node_includes.h"
|
||||
#include "shell/common/world_ids.h"
|
||||
#include "shell/renderer/api/context_bridge/render_frame_context_bridge_store.h"
|
||||
#include "shell/renderer/electron_render_frame_observer.h"
|
||||
#include "third_party/blink/public/web/web_local_frame.h"
|
||||
|
||||
namespace electron {
|
||||
|
@ -477,7 +477,7 @@ void ExposeAPIInMainWorld(const std::string& key,
|
|||
}
|
||||
|
||||
v8::Local<v8::Context> isolated_context =
|
||||
frame->WorldScriptContext(args->isolate(), World::ISOLATED_WORLD);
|
||||
frame->WorldScriptContext(args->isolate(), WorldIDs::ISOLATED_WORLD_ID);
|
||||
|
||||
v8::Context::Scope main_context_scope(main_context);
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "net/grit/net_resources.h"
|
||||
#include "services/service_manager/public/cpp/interface_provider.h"
|
||||
#include "shell/common/options_switches.h"
|
||||
#include "shell/common/world_ids.h"
|
||||
#include "third_party/blink/public/platform/web_isolated_world_info.h"
|
||||
#include "third_party/blink/public/web/blink.h"
|
||||
#include "third_party/blink/public/web/web_document.h"
|
||||
|
@ -90,8 +91,8 @@ void ElectronRenderFrameObserver::DidInstallConditionalFeatures(
|
|||
}
|
||||
|
||||
#if !BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS)
|
||||
if (world_id >= World::ISOLATED_WORLD_EXTENSIONS &&
|
||||
world_id <= World::ISOLATED_WORLD_EXTENSIONS_END) {
|
||||
if (world_id >= WorldIDs::ISOLATED_WORLD_ID_EXTENSIONS &&
|
||||
world_id <= WorldIDs::ISOLATED_WORLD_ID_EXTENSIONS_END) {
|
||||
renderer_client_->SetupExtensionWorldOverrides(context, render_frame_,
|
||||
world_id);
|
||||
}
|
||||
|
@ -136,19 +137,19 @@ void ElectronRenderFrameObserver::CreateIsolatedWorldContext() {
|
|||
blink::WebString::FromUTF8("Electron Isolated Context");
|
||||
// Setup document's origin policy in isolated world
|
||||
info.security_origin = frame->GetDocument().GetSecurityOrigin();
|
||||
frame->SetIsolatedWorldInfo(World::ISOLATED_WORLD, info);
|
||||
frame->SetIsolatedWorldInfo(WorldIDs::ISOLATED_WORLD_ID, info);
|
||||
|
||||
// Create initial script context in isolated world
|
||||
blink::WebScriptSource source("void 0");
|
||||
frame->ExecuteScriptInIsolatedWorld(World::ISOLATED_WORLD, source);
|
||||
frame->ExecuteScriptInIsolatedWorld(WorldIDs::ISOLATED_WORLD_ID, source);
|
||||
}
|
||||
|
||||
bool ElectronRenderFrameObserver::IsMainWorld(int world_id) {
|
||||
return world_id == World::MAIN_WORLD;
|
||||
return world_id == WorldIDs::MAIN_WORLD_ID;
|
||||
}
|
||||
|
||||
bool ElectronRenderFrameObserver::IsIsolatedWorld(int world_id) {
|
||||
return world_id == World::ISOLATED_WORLD;
|
||||
return world_id == WorldIDs::ISOLATED_WORLD_ID;
|
||||
}
|
||||
|
||||
bool ElectronRenderFrameObserver::ShouldNotifyClient(int world_id) {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "content/public/renderer/render_frame_observer.h"
|
||||
#include "ipc/ipc_platform_file.h"
|
||||
#include "shell/renderer/renderer_client_base.h"
|
||||
#include "third_party/blink/public/platform/web_isolated_world_ids.h"
|
||||
#include "third_party/blink/public/web/web_local_frame.h"
|
||||
|
||||
namespace base {
|
||||
|
@ -20,23 +19,6 @@ class ListValue;
|
|||
|
||||
namespace electron {
|
||||
|
||||
enum World {
|
||||
MAIN_WORLD = 0,
|
||||
|
||||
// Use a high number far away from 0 to not collide with any other world
|
||||
// IDs created internally by Chrome.
|
||||
ISOLATED_WORLD = 999,
|
||||
|
||||
// Numbers for isolated worlds for extensions are set in
|
||||
// lib/renderer/content-script-injector.ts, and are greater than or equal to
|
||||
// this number, up to ISOLATED_WORLD_EXTENSIONS_END.
|
||||
ISOLATED_WORLD_EXTENSIONS = 1 << 20,
|
||||
|
||||
// Last valid isolated world ID.
|
||||
ISOLATED_WORLD_EXTENSIONS_END =
|
||||
blink::IsolatedWorldId::kEmbedderWorldIdLimit - 1
|
||||
};
|
||||
|
||||
// Helper class to forward the messages to the client.
|
||||
class ElectronRenderFrameObserver : public content::RenderFrameObserver {
|
||||
public:
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include "content/public/renderer/render_thread.h"
|
||||
#include "extensions/renderer/dispatcher.h"
|
||||
#include "shell/common/world_ids.h"
|
||||
#include "shell/renderer/extensions/electron_extensions_dispatcher_delegate.h"
|
||||
|
||||
namespace electron {
|
||||
|
@ -24,11 +25,7 @@ bool ElectronExtensionsRendererClient::IsIncognitoProcess() const {
|
|||
}
|
||||
|
||||
int ElectronExtensionsRendererClient::GetLowestIsolatedWorldId() const {
|
||||
// app_shell doesn't need to reserve world IDs for anything other than
|
||||
// extensions, so we always return 1. Note that 0 is reserved for the global
|
||||
// world.
|
||||
// TODO(samuelmaddock): skip electron worlds
|
||||
return 10;
|
||||
return WorldIDs::ISOLATED_WORLD_ID_EXTENSIONS;
|
||||
}
|
||||
|
||||
extensions::Dispatcher* ElectronExtensionsRendererClient::GetDispatcher() {
|
||||
|
|
|
@ -24,11 +24,11 @@
|
|||
#include "shell/common/color_util.h"
|
||||
#include "shell/common/gin_helper/dictionary.h"
|
||||
#include "shell/common/options_switches.h"
|
||||
#include "shell/common/world_ids.h"
|
||||
#include "shell/renderer/browser_exposed_renderer_interfaces.h"
|
||||
#include "shell/renderer/content_settings_observer.h"
|
||||
#include "shell/renderer/electron_api_service_impl.h"
|
||||
#include "shell/renderer/electron_autofill_agent.h"
|
||||
#include "shell/renderer/electron_render_frame_observer.h"
|
||||
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
|
||||
#include "third_party/blink/public/web/blink.h"
|
||||
#include "third_party/blink/public/web/web_custom_element.h" // NOLINT(build/include_alpha)
|
||||
|
@ -424,7 +424,7 @@ v8::Local<v8::Context> RendererClientBase::GetContext(
|
|||
blink::WebLocalFrame* frame,
|
||||
v8::Isolate* isolate) const {
|
||||
if (isolated_world())
|
||||
return frame->WorldScriptContext(isolate, World::ISOLATED_WORLD);
|
||||
return frame->WorldScriptContext(isolate, WorldIDs::ISOLATED_WORLD_ID);
|
||||
else
|
||||
return frame->MainWorldScriptContext();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue