Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Unified Diff: content/renderer/browser_plugin/browser_plugin.cc

Issue 11086025: Browser Plugin: Fix Events (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/renderer/browser_plugin/browser_plugin.cc
diff --git a/content/renderer/browser_plugin/browser_plugin.cc b/content/renderer/browser_plugin/browser_plugin.cc
index ed0f293678b2d13a4c5398ce6640fec90470115a..ae4fe8ffa2864663ccddffa7aa34c4db6ce5e235 100644
--- a/content/renderer/browser_plugin/browser_plugin.cc
+++ b/content/renderer/browser_plugin/browser_plugin.cc
@@ -324,16 +324,18 @@ void BrowserPlugin::GuestCrashed() {
if (!HasListeners(kCrashEventName))
return;
- EventListeners& listeners = event_listener_map_[kCrashEventName];
+ WebKit::WebFrame* frame = container()->element().document().frame();
+ v8::HandleScope handle_scope;
+ v8::Context::Scope context_scope(frame->mainWorldScriptContext());
+
+ EventListeners listeners(event_listener_map_[kCrashEventName]);
EventListeners::iterator it = listeners.begin();
for (; it != listeners.end(); ++it) {
- v8::Context::Scope context_scope(v8::Context::New());
v8::HandleScope handle_scope;
- container()->element().document().frame()->
- callFunctionEvenIfScriptDisabled(*it,
- v8::Object::New(),
- 0,
- NULL);
+ frame->callFunctionEvenIfScriptDisabled(*it,
abarth-chromium 2012/10/09 18:38:18 How do you know that this call doesn't destroy |fr
Fady Samuel 2012/10/09 20:25:11 Done.
+ v8::Object::New(),
+ 0,
+ NULL);
}
}
@@ -343,18 +345,20 @@ void BrowserPlugin::DidNavigate(const GURL& url, int process_id) {
if (!HasListeners(kNavigationEventName))
return;
- EventListeners& listeners = event_listener_map_[kNavigationEventName];
+ WebKit::WebFrame* frame = container()->element().document().frame();
+ v8::HandleScope handle_scope;
+ v8::Context::Scope context_scope(frame->mainWorldScriptContext());
+
+ v8::Local<v8::Value> param =
+ v8::Local<v8::Value>::New(v8::String::New(src_.c_str()));
abarth-chromium 2012/10/09 18:38:18 It's more efficient to the two-argument form of v8
Fady Samuel 2012/10/09 20:25:11 Done.
+
+ EventListeners listeners(event_listener_map_[kNavigationEventName]);
EventListeners::iterator it = listeners.begin();
for (; it != listeners.end(); ++it) {
- v8::Context::Scope context_scope(v8::Context::New());
- v8::HandleScope handle_scope;
- v8::Local<v8::Value> param =
- v8::Local<v8::Value>::New(v8::String::New(src_.c_str()));
- container()->element().document().frame()->
- callFunctionEvenIfScriptDisabled(*it,
- v8::Object::New(),
- 1,
- &param);
+ frame->callFunctionEvenIfScriptDisabled(*it,
+ v8::Object::New(),
+ 1,
+ &param);
}
}
@@ -362,27 +366,27 @@ void BrowserPlugin::LoadStart(const GURL& url, bool is_top_level) {
if (!HasListeners(kLoadStartEventName))
return;
- EventListeners& listeners = event_listener_map_[kLoadStartEventName];
- EventListeners::iterator it = listeners.begin();
-
- v8::Context::Scope context_scope(v8::Context::New());
+ WebKit::WebFrame* frame = container()->element().document().frame();
v8::HandleScope handle_scope;
+ v8::Context::Scope context_scope(frame->mainWorldScriptContext());
+
// Construct the loadStart event object.
- v8::Local<v8::Value> event =
+ v8::Local<v8::Object> event =
v8::Local<v8::Object>::New(v8::Object::New());
abarth-chromium 2012/10/09 18:38:18 v8::Object::New already returns a local handle. T
Fady Samuel 2012/10/09 20:25:11 Done.
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kURL, sizeof(kURL) - 1),
- v8::String::New(url.spec().c_str(), url.spec().size()));
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
- v8::Boolean::New(is_top_level));
+ event->Set(v8::String::New(kURL, sizeof(kURL) - 1),
+ v8::String::New(url.spec().c_str(), url.spec().size()));
abarth-chromium 2012/10/09 18:38:18 There's no reason to call c_str here because you d
Fady Samuel 2012/10/09 20:25:11 Done.
+ event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
+ v8::Boolean::New(is_top_level));
+ v8::Local<v8::Value> val = event;
+
+ EventListeners listeners(event_listener_map_[kLoadStartEventName]);
+ EventListeners::iterator it = listeners.begin();
for (; it != listeners.end(); ++it) {
// Fire the event listener.
- container()->element().document().frame()->
- callFunctionEvenIfScriptDisabled(*it,
- v8::Object::New(),
- 1,
- &event);
+ frame->callFunctionEvenIfScriptDisabled(*it,
+ v8::Object::New(),
+ 1,
+ &val);
}
}
@@ -392,30 +396,29 @@ void BrowserPlugin::LoadAbort(const GURL& url,
if (!HasListeners(kLoadAbortEventName))
return;
- EventListeners& listeners = event_listener_map_[kLoadAbortEventName];
- EventListeners::iterator it = listeners.begin();
-
- v8::Context::Scope context_scope(v8::Context::New());
+ WebKit::WebFrame* frame = container()->element().document().frame();
v8::HandleScope handle_scope;
+ v8::Context::Scope context_scope(frame->mainWorldScriptContext());
+
// Construct the loadAbort event object.
- v8::Local<v8::Value> event =
+ v8::Local<v8::Object> event =
v8::Local<v8::Object>::New(v8::Object::New());
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kURL, sizeof(kURL) - 1),
- v8::String::New(url.spec().c_str(), url.spec().size()));
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
- v8::Boolean::New(is_top_level));
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kType, sizeof(kType) - 1),
- v8::String::New(type.c_str(), type.size()));
+ event->Set(v8::String::New(kURL, sizeof(kURL) - 1),
+ v8::String::New(url.spec().c_str(), url.spec().size()));
+ event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
+ v8::Boolean::New(is_top_level));
+ event->Set(v8::String::New(kType, sizeof(kType) - 1),
+ v8::String::New(type.c_str(), type.size()));
+ v8::Local<v8::Value> val = event;
+
+ EventListeners listeners(event_listener_map_[kLoadAbortEventName]);
+ EventListeners::iterator it = listeners.begin();
for (; it != listeners.end(); ++it) {
// Fire the event listener.
- container()->element().document().frame()->
- callFunctionEvenIfScriptDisabled(*it,
- v8::Object::New(),
- 1,
- &event);
+ frame->callFunctionEvenIfScriptDisabled(*it,
+ v8::Object::New(),
+ 1,
+ &val);
}
}
@@ -425,31 +428,29 @@ void BrowserPlugin::LoadRedirect(const GURL& old_url,
if (!HasListeners(kLoadRedirectEventName))
return;
- EventListeners& listeners = event_listener_map_[kLoadRedirectEventName];
- EventListeners::iterator it = listeners.begin();
-
- v8::Context::Scope context_scope(v8::Context::New());
+ WebKit::WebFrame* frame = container()->element().document().frame();
v8::HandleScope handle_scope;
+ v8::Context::Scope context_scope(frame->mainWorldScriptContext());
// Construct the loadRedirect event object.
- v8::Local<v8::Value> event =
+ v8::Local<v8::Object> event =
v8::Local<v8::Object>::New(v8::Object::New());
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kOldURL, sizeof(kOldURL) - 1),
- v8::String::New(old_url.spec().c_str(), old_url.spec().size()));
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kNewURL, sizeof(kNewURL) - 1),
- v8::String::New(new_url.spec().c_str(), new_url.spec().size()));
- v8::Local<v8::Object>::Cast(event)->Set(
- v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
- v8::Boolean::New(is_top_level));
+ event->Set(v8::String::New(kOldURL, sizeof(kOldURL) - 1),
+ v8::String::New(old_url.spec().c_str(), old_url.spec().size()));
+ event->Set(v8::String::New(kNewURL, sizeof(kNewURL) - 1),
+ v8::String::New(new_url.spec().c_str(), new_url.spec().size()));
+ event->Set(v8::String::New(kIsTopLevel, sizeof(kIsTopLevel) - 1),
+ v8::Boolean::New(is_top_level));
+ v8::Local<v8::Value> val = event;
+
+ EventListeners listeners(event_listener_map_[kLoadRedirectEventName]);
+ EventListeners::iterator it = listeners.begin();
for (; it != listeners.end(); ++it) {
// Fire the event listener.
- container()->element().document().frame()->
- callFunctionEvenIfScriptDisabled(*it,
- v8::Object::New(),
- 1,
- &event);
+ frame->callFunctionEvenIfScriptDisabled(*it,
+ v8::Object::New(),
+ 1,
+ &val);
}
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698