|
32 | 32 | #include "third_party/WebKit/public/web/WebView.h"
|
33 | 33 | #include "v8/include/v8.h"
|
34 | 34 |
|
| 35 | +#undef LOG |
| 36 | +#undef ASSERT |
| 37 | +#include "third_party/WebKit/Source/config.h" |
| 38 | +#include "third_party/WebKit/Source/core/frame/Frame.h" |
| 39 | +#include "third_party/WebKit/Source/web/WebFrameImpl.h" |
| 40 | +#include "V8HTMLElement.h" |
| 41 | + |
35 | 42 | namespace nwapi {
|
36 | 43 |
|
37 | 44 | Dispatcher::Dispatcher(content::RenderView* render_view)
|
@@ -90,26 +97,68 @@ void Dispatcher::OnEvent(int object_id,
|
90 | 97 | node::MakeCallback(objects_registry, "handleEvent", 3, argv);
|
91 | 98 | }
|
92 | 99 |
|
| 100 | +v8::Handle<v8::Object> Dispatcher::GetObjectRegistry() { |
| 101 | + v8::Handle<v8::Value> registry = |
| 102 | + node::g_context->Global()->Get(v8::String::New("__nwObjectsRegistry")); |
| 103 | + // if (registry->IsNull() || registry->IsUndefined()) |
| 104 | + // return v8::Undefined(); |
| 105 | + return registry->ToObject(); |
| 106 | +} |
| 107 | + |
| 108 | +v8::Handle<v8::Value> Dispatcher::GetWindowId(WebKit::WebFrame* frame) { |
| 109 | + v8::Handle<v8::Value> v8win = frame->mainWorldScriptContext()->Global(); |
| 110 | + v8::Handle<v8::Value> val = v8win->ToObject()->Get(v8::String::New("__nwWindowId")); |
| 111 | + |
| 112 | + return val; |
| 113 | +} |
| 114 | + |
93 | 115 | void Dispatcher::ZoomLevelChanged() {
|
94 | 116 | WebKit::WebView* web_view = render_view()->GetWebView();
|
95 | 117 | float zoom_level = web_view->zoomLevel();
|
96 |
| - v8::Handle<v8::Value> v8win = web_view->mainFrame()-> |
97 |
| - mainWorldScriptContext()->Global(); |
98 |
| - v8::Handle<v8::Value> val = v8win->ToObject()->Get(v8::String::New("__nwWindowId")); |
| 118 | + |
| 119 | + v8::Handle<v8::Value> val = GetWindowId(web_view->mainFrame()); |
99 | 120 |
|
100 | 121 | if (val->IsNull() || val->IsUndefined())
|
101 | 122 | return;
|
102 | 123 |
|
103 |
| - v8::Handle<v8::Value> registry = |
104 |
| - node::g_context->Global()->Get(v8::String::New("__nwObjectsRegistry")); |
105 |
| - if (registry->IsNull() || registry->IsUndefined()) |
| 124 | + v8::Handle<v8::Object> objects_registry = GetObjectRegistry(); |
| 125 | + if (objects_registry->IsUndefined()) |
106 | 126 | return;
|
107 |
| - v8::Handle<v8::Object> objects_registry = registry->ToObject(); |
108 | 127 |
|
109 | 128 | v8::Local<v8::Array> args = v8::Array::New();
|
110 | 129 | args->Set(0, v8::Number::New(zoom_level));
|
111 | 130 | v8::Handle<v8::Value> argv[] = {val, v8::String::New("zoom"), args };
|
112 | 131 |
|
113 | 132 | node::MakeCallback(objects_registry, "handleEvent", 3, argv);
|
114 | 133 | }
|
| 134 | + |
| 135 | +void Dispatcher::DidFinishDocumentLoad(WebKit::WebFrame* frame) { |
| 136 | + WebKit::WebView* web_view = render_view()->GetWebView(); |
| 137 | + |
| 138 | + if (!web_view) |
| 139 | + return; |
| 140 | + v8::Context::Scope cscope (web_view->mainFrame()->mainWorldScriptContext()); |
| 141 | + |
| 142 | + v8::Handle<v8::Value> val = GetWindowId(web_view->mainFrame()); |
| 143 | + if (val->IsNull() || val->IsUndefined()) |
| 144 | + return; |
| 145 | + |
| 146 | + v8::Handle<v8::Object> objects_registry = GetObjectRegistry(); |
| 147 | + if (objects_registry->IsUndefined()) |
| 148 | + return; |
| 149 | + |
| 150 | + v8::Local<v8::Array> args = v8::Array::New(); |
| 151 | + v8::Handle<v8::Value> element = v8::Null(); |
| 152 | + WebCore::Frame* core_frame = WebKit::toWebFrameImpl(frame)->frame(); |
| 153 | + if (core_frame->ownerElement()) { |
| 154 | + element = WebCore::toV8((WebCore::HTMLElement*)core_frame->ownerElement(), |
| 155 | + frame->mainWorldScriptContext()->Global(), |
| 156 | + frame->mainWorldScriptContext()->GetIsolate()); |
| 157 | + } |
| 158 | + args->Set(0, element); |
| 159 | + v8::Handle<v8::Value> argv[] = {val, v8::String::New("document-end"), args }; |
| 160 | + |
| 161 | + node::MakeCallback(objects_registry, "handleEvent", 3, argv); |
| 162 | +} |
| 163 | + |
115 | 164 | } // namespace nwapi
|
0 commit comments