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.
This commit is contained in:
Cheng Zhao 2015-01-23 18:33:01 -08:00
parent 4ba3e101f6
commit 0bcc9b7713
2 changed files with 10 additions and 1 deletions

View file

@ -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);
}

View file

@ -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);
};