Ensure only main frame get notifications
This commit is contained in:
parent
4b67ff9534
commit
ffcf609de1
2 changed files with 17 additions and 13 deletions
|
@ -47,22 +47,27 @@ class AtomRenderFrameObserver : public content::RenderFrameObserver {
|
||||||
AtomRenderFrameObserver(content::RenderFrame* frame,
|
AtomRenderFrameObserver(content::RenderFrame* frame,
|
||||||
AtomRendererClient* renderer_client)
|
AtomRendererClient* renderer_client)
|
||||||
: content::RenderFrameObserver(frame),
|
: content::RenderFrameObserver(frame),
|
||||||
|
world_id_(-1),
|
||||||
renderer_client_(renderer_client) {}
|
renderer_client_(renderer_client) {}
|
||||||
|
|
||||||
// content::RenderFrameObserver:
|
// content::RenderFrameObserver:
|
||||||
void DidCreateScriptContext(v8::Handle<v8::Context> context,
|
void DidCreateScriptContext(v8::Handle<v8::Context> context,
|
||||||
int extension_group,
|
int extension_group,
|
||||||
int world_id) override {
|
int world_id) override {
|
||||||
renderer_client_->DidCreateScriptContext(
|
if (world_id_ != -1)
|
||||||
render_frame()->GetWebFrame(), context);
|
return;
|
||||||
|
world_id_ = world_id;
|
||||||
|
renderer_client_->DidCreateScriptContext(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WillReleaseScriptContext(v8::Local<v8::Context> context,
|
void WillReleaseScriptContext(v8::Local<v8::Context> context,
|
||||||
int world_id) override {
|
int world_id) override {
|
||||||
|
if (world_id_ != world_id)
|
||||||
|
return;
|
||||||
renderer_client_->WillReleaseScriptContext(context);
|
renderer_client_->WillReleaseScriptContext(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int world_id_;
|
||||||
AtomRendererClient* renderer_client_;
|
AtomRendererClient* renderer_client_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AtomRenderFrameObserver);
|
DISALLOW_COPY_AND_ASSIGN(AtomRenderFrameObserver);
|
||||||
|
@ -82,6 +87,9 @@ void AtomRendererClient::WebKitInitialized() {
|
||||||
blink::WebCustomElement::addEmbedderCustomElementName("webview");
|
blink::WebCustomElement::addEmbedderCustomElementName("webview");
|
||||||
blink::WebCustomElement::addEmbedderCustomElementName("browserplugin");
|
blink::WebCustomElement::addEmbedderCustomElementName("browserplugin");
|
||||||
|
|
||||||
|
// Allow file scheme to handle service worker by default.
|
||||||
|
blink::WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers("file");
|
||||||
|
|
||||||
OverrideNodeArrayBuffer();
|
OverrideNodeArrayBuffer();
|
||||||
|
|
||||||
node_bindings_->Initialize();
|
node_bindings_->Initialize();
|
||||||
|
@ -113,10 +121,12 @@ void AtomRendererClient::RenderThreadStarted() {
|
||||||
void AtomRendererClient::RenderFrameCreated(
|
void AtomRendererClient::RenderFrameCreated(
|
||||||
content::RenderFrame* render_frame) {
|
content::RenderFrame* render_frame) {
|
||||||
new PepperHelper(render_frame);
|
new PepperHelper(render_frame);
|
||||||
new AtomRenderFrameObserver(render_frame, this);
|
|
||||||
|
|
||||||
// Allow file scheme to handle service worker by default.
|
// Only insert node integration for the main frame.
|
||||||
blink::WebSecurityPolicy::registerURLSchemeAsAllowingServiceWorkers("file");
|
if (!render_frame->IsMainFrame())
|
||||||
|
return;
|
||||||
|
|
||||||
|
new AtomRenderFrameObserver(render_frame, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomRendererClient::RenderViewCreated(content::RenderView* render_view) {
|
void AtomRendererClient::RenderViewCreated(content::RenderView* render_view) {
|
||||||
|
@ -144,12 +154,7 @@ bool AtomRendererClient::OverrideCreatePlugin(
|
||||||
}
|
}
|
||||||
|
|
||||||
void AtomRendererClient::DidCreateScriptContext(
|
void AtomRendererClient::DidCreateScriptContext(
|
||||||
blink::WebFrame* frame,
|
|
||||||
v8::Handle<v8::Context> context) {
|
v8::Handle<v8::Context> context) {
|
||||||
// Only insert node integration for the main frame.
|
|
||||||
if (frame->parent())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Give the node loop a run to make sure everything is ready.
|
// Give the node loop a run to make sure everything is ready.
|
||||||
node_bindings_->RunMessageLoop();
|
node_bindings_->RunMessageLoop();
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,7 @@ class AtomRendererClient : public content::ContentRendererClient,
|
||||||
AtomRendererClient();
|
AtomRendererClient();
|
||||||
virtual ~AtomRendererClient();
|
virtual ~AtomRendererClient();
|
||||||
|
|
||||||
void DidCreateScriptContext(blink::WebFrame* frame,
|
void DidCreateScriptContext(v8::Handle<v8::Context> context);
|
||||||
v8::Handle<v8::Context> context);
|
|
||||||
void WillReleaseScriptContext(v8::Handle<v8::Context> context);
|
void WillReleaseScriptContext(v8::Handle<v8::Context> context);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue