| Index: chrome/renderer/extensions/event_bindings.cc
|
| ===================================================================
|
| --- chrome/renderer/extensions/event_bindings.cc (revision 18701)
|
| +++ chrome/renderer/extensions/event_bindings.cc (working copy)
|
| @@ -12,16 +12,17 @@
|
| #include "chrome/renderer/js_only_v8_extensions.h"
|
| #include "chrome/renderer/render_thread.h"
|
| #include "grit/renderer_resources.h"
|
| +#include "webkit/api/public/WebScriptSource.h"
|
| +#include "webkit/glue/webframe.h"
|
|
|
| +using WebKit::WebScriptSource;
|
| +using WebKit::WebString;
|
| +
|
| namespace {
|
|
|
| // Keep a local cache of RenderThread so that we can mock it out for unit tests.
|
| static RenderThreadBase* render_thread = NULL;
|
|
|
| -static RenderThreadBase* GetRenderThread() {
|
| - return render_thread ? render_thread : RenderThread::current();
|
| -}
|
| -
|
| // Keep a list of contexts that have registered themselves with us. This lets
|
| // us know where to dispatch events when we receive them.
|
| typedef std::list< v8::Persistent<v8::Context> > ContextList;
|
| @@ -91,7 +92,7 @@
|
| if (args[0]->IsString()) {
|
| std::string event_name(*v8::String::AsciiValue(args[0]));
|
| if (EventIncrementListenerCount(event_name) == 1) {
|
| - GetRenderThread()->Send(
|
| + EventBindings::GetRenderThread()->Send(
|
| new ViewHostMsg_ExtensionAddListener(event_name));
|
| }
|
| }
|
| @@ -122,7 +123,7 @@
|
| if (args[0]->IsString()) {
|
| std::string event_name(*v8::String::AsciiValue(args[0]));
|
| if (EventDecrementListenerCount(event_name) == 0) {
|
| - GetRenderThread()->Send(
|
| + EventBindings::GetRenderThread()->Send(
|
| new ViewHostMsg_ExtensionRemoveListener(event_name));
|
| }
|
| }
|
| @@ -164,6 +165,24 @@
|
| render_thread = thread;
|
| }
|
|
|
| +// static
|
| +RenderThreadBase* EventBindings::GetRenderThread() {
|
| + return render_thread ? render_thread : RenderThread::current();
|
| +}
|
| +
|
| +// static
|
| +void EventBindings::HandleDocumentReady(WebFrame* frame) {
|
| + frame->ExecuteScript(WebScriptSource(WebString::fromUTF8(
|
| + "chrome.dispatchOnLoad_();")));
|
| +}
|
| +
|
| +// static
|
| +void EventBindings::HandleDocumentClose(WebFrame* frame) {
|
| + frame->ExecuteScript(WebScriptSource(WebString::fromUTF8(
|
| + "chrome.dispatchOnUnload_();")));
|
| +}
|
| +
|
| +// static
|
| void EventBindings::CallFunction(const std::string& function_name,
|
| int argc, v8::Handle<v8::Value>* argv) {
|
| for (ContextList::iterator it = GetRegisteredContexts().begin();
|
|
|