From 0bcc9b7713d9f36cdb0237dc1cc7ae7c41285e9f Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 23 Jan 2015 18:33:01 -0800 Subject: [PATCH] Don't handle browser messages before document object is created When we recevied messages from browser, we will try to transfer the message to web page, and when we do that blink will create an empty document when there is no document object yet, which will make our init script run when window.location is still about:blank. --- atom/renderer/atom_render_view_observer.cc | 8 +++++++- atom/renderer/atom_render_view_observer.h | 3 +++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index 7af2f3490be4..ceec7d60494a 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -31,7 +31,8 @@ AtomRenderViewObserver::AtomRenderViewObserver( content::RenderView* render_view, AtomRendererClient* renderer_client) : content::RenderViewObserver(render_view), - renderer_client_(renderer_client) { + renderer_client_(renderer_client), + document_created_(false) { } AtomRenderViewObserver::~AtomRenderViewObserver() { @@ -39,6 +40,8 @@ AtomRenderViewObserver::~AtomRenderViewObserver() { void AtomRenderViewObserver::DidCreateDocumentElement( blink::WebLocalFrame* frame) { + document_created_ = true; + // Read --zoom-factor from command line. std::string zoom_factor_str = CommandLine::ForCurrentProcess()-> GetSwitchValueASCII(switches::kZoomFactor);; @@ -76,6 +79,9 @@ bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) { void AtomRenderViewObserver::OnBrowserMessage(const base::string16& channel, const base::ListValue& args) { + if (!document_created_) + return; + renderer_client_->atom_bindings()->OnBrowserMessage( render_view(), channel, args); } diff --git a/atom/renderer/atom_render_view_observer.h b/atom/renderer/atom_render_view_observer.h index 12837af62a89..2745c5d8c3ea 100644 --- a/atom/renderer/atom_render_view_observer.h +++ b/atom/renderer/atom_render_view_observer.h @@ -36,6 +36,9 @@ class AtomRenderViewObserver : public content::RenderViewObserver { // Weak reference to renderer client. AtomRendererClient* renderer_client_; + // Whether the document object has been created. + bool document_created_; + DISALLOW_COPY_AND_ASSIGN(AtomRenderViewObserver); };