Add DidClearWindowObject for renderer client

This commit is contained in:
Cheng Zhao 2015-01-21 15:35:43 -08:00
parent 7e33e26465
commit f142f572c3
2 changed files with 15 additions and 8 deletions

View file

@ -53,11 +53,14 @@ class AtomRenderFrameObserver : public content::RenderFrameObserver {
renderer_client_(renderer_client) {} renderer_client_(renderer_client) {}
// content::RenderFrameObserver: // content::RenderFrameObserver:
virtual void WillReleaseScriptContext(v8::Handle<v8::Context> context, void WillReleaseScriptContext(v8::Handle<v8::Context> context,
int world_id) OVERRIDE { int world_id) override {
renderer_client_->WillReleaseScriptContext( renderer_client_->WillReleaseScriptContext(
render_frame()->GetWebFrame(), context, world_id); render_frame()->GetWebFrame(), context, world_id);
} }
void DidClearWindowObject() override {
renderer_client_->DidClearWindowObject();
}
private: private:
AtomRendererClient* renderer_client_; AtomRendererClient* renderer_client_;
@ -70,7 +73,7 @@ class AtomRenderFrameObserver : public content::RenderFrameObserver {
AtomRendererClient::AtomRendererClient() AtomRendererClient::AtomRendererClient()
: node_bindings_(NodeBindings::Create(false)), : node_bindings_(NodeBindings::Create(false)),
atom_bindings_(new AtomRendererBindings), atom_bindings_(new AtomRendererBindings),
main_frame_(NULL) { main_frame_(nullptr) {
} }
AtomRendererClient::~AtomRendererClient() { AtomRendererClient::~AtomRendererClient() {
@ -133,7 +136,7 @@ void AtomRendererClient::DidCreateScriptContext(blink::WebFrame* frame,
int extension_group, int extension_group,
int world_id) { int world_id) {
// The first web frame is the main frame. // The first web frame is the main frame.
if (main_frame_ == NULL) if (main_frame_ == nullptr)
main_frame_ = frame; main_frame_ = frame;
v8::Context::Scope scope(context); v8::Context::Scope scope(context);
@ -156,19 +159,22 @@ void AtomRendererClient::DidCreateScriptContext(blink::WebFrame* frame,
web_page_envs_.push_back(env); web_page_envs_.push_back(env);
// Make uv loop being wrapped by window context. // Make uv loop being wrapped by window context.
if (node_bindings_->uv_env() == NULL) if (node_bindings_->uv_env() == nullptr)
node_bindings_->set_uv_env(env); node_bindings_->set_uv_env(env);
// Load everything. // Load everything.
node_bindings_->LoadEnvironment(env); node_bindings_->LoadEnvironment(env);
} }
void AtomRendererClient::DidClearWindowObject() {
}
void AtomRendererClient::WillReleaseScriptContext( void AtomRendererClient::WillReleaseScriptContext(
blink::WebLocalFrame* frame, blink::WebLocalFrame* frame,
v8::Handle<v8::Context> context, v8::Handle<v8::Context> context,
int world_id) { int world_id) {
node::Environment* env = node::Environment::GetCurrent(context); node::Environment* env = node::Environment::GetCurrent(context);
if (env == NULL) { if (env == nullptr) {
LOG(ERROR) << "Encounter a non-node context when releasing script context"; LOG(ERROR) << "Encounter a non-node context when releasing script context";
return; return;
} }
@ -190,7 +196,7 @@ void AtomRendererClient::WillReleaseScriptContext(
// Wrap the uv loop with another environment. // Wrap the uv loop with another environment.
if (env == node_bindings_->uv_env()) { if (env == node_bindings_->uv_env()) {
node::Environment* env = web_page_envs_.size() > 0 ? web_page_envs_[0] : node::Environment* env = web_page_envs_.size() > 0 ? web_page_envs_[0] :
NULL; nullptr;
node_bindings_->set_uv_env(env); node_bindings_->set_uv_env(env);
} }
} }

View file

@ -30,6 +30,7 @@ class AtomRendererClient : public content::ContentRendererClient,
void WillReleaseScriptContext(blink::WebLocalFrame* frame, void WillReleaseScriptContext(blink::WebLocalFrame* frame,
v8::Handle<v8::Context> context, v8::Handle<v8::Context> context,
int world_id); int world_id);
void DidClearWindowObject();
AtomRendererBindings* atom_bindings() const { return atom_bindings_.get(); } AtomRendererBindings* atom_bindings() const { return atom_bindings_.get(); }
@ -42,7 +43,7 @@ class AtomRendererClient : public content::ContentRendererClient,
}; };
// content::RenderProcessObserver: // content::RenderProcessObserver:
virtual void WebKitInitialized() OVERRIDE; void WebKitInitialized() override;
// content::ContentRendererClient: // content::ContentRendererClient:
void RenderThreadStarted() override; void RenderThreadStarted() override;