OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con tainer.h" | 5 #include "extensions/renderer/guest_view/mime_handler_view/mime_handler_view_con tainer.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <set> | 8 #include <set> |
9 | 9 |
10 #include "components/guest_view/common/guest_view_constants.h" | 10 #include "components/guest_view/common/guest_view_constants.h" |
11 #include "components/guest_view/common/guest_view_messages.h" | 11 #include "components/guest_view/common/guest_view_messages.h" |
12 #include "content/public/child/v8_value_converter.h" | 12 #include "content/public/child/v8_value_converter.h" |
13 #include "content/public/renderer/render_frame.h" | 13 #include "content/public/renderer/render_frame.h" |
14 #include "content/public/renderer/render_view.h" | 14 #include "content/public/renderer/render_view.h" |
15 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h" | 15 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_cons tants.h" |
16 #include "extensions/common/extension_messages.h" | 16 #include "extensions/common/extension_messages.h" |
17 #include "extensions/common/guest_view/extensions_guest_view_messages.h" | 17 #include "extensions/common/guest_view/extensions_guest_view_messages.h" |
18 #include "gin/arguments.h" | 18 #include "gin/arguments.h" |
19 #include "gin/dictionary.h" | 19 #include "gin/dictionary.h" |
20 #include "gin/handle.h" | 20 #include "gin/handle.h" |
21 #include "gin/interceptor.h" | 21 #include "gin/interceptor.h" |
22 #include "gin/object_template_builder.h" | 22 #include "gin/object_template_builder.h" |
23 #include "gin/wrappable.h" | 23 #include "gin/wrappable.h" |
24 #include "third_party/WebKit/public/web/WebDocument.h" | 24 #include "third_party/WebKit/public/web/WebDocument.h" |
25 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 25 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
26 #include "third_party/WebKit/public/web/WebRemoteFrame.h" | |
26 #include "third_party/WebKit/public/web/WebView.h" | 27 #include "third_party/WebKit/public/web/WebView.h" |
27 | 28 |
28 namespace extensions { | 29 namespace extensions { |
29 | 30 |
30 namespace { | 31 namespace { |
31 | 32 |
32 const char kPostMessageName[] = "postMessage"; | 33 const char kPostMessageName[] = "postMessage"; |
33 | 34 |
34 // The gin-backed scriptable object which is exposed by the BrowserPlugin for | 35 // The gin-backed scriptable object which is exposed by the BrowserPlugin for |
35 // MimeHandlerViewContainer. This currently only implements "postMessage". | 36 // MimeHandlerViewContainer. This currently only implements "postMessage". |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
228 content::RenderView::FromRoutingID(guest_proxy_routing_id_); | 229 content::RenderView::FromRoutingID(guest_proxy_routing_id_); |
229 if (!guest_proxy_render_view) | 230 if (!guest_proxy_render_view) |
230 return; | 231 return; |
231 blink::WebFrame* guest_proxy_frame = | 232 blink::WebFrame* guest_proxy_frame = |
232 guest_proxy_render_view->GetWebView()->mainFrame(); | 233 guest_proxy_render_view->GetWebView()->mainFrame(); |
233 if (!guest_proxy_frame) | 234 if (!guest_proxy_frame) |
234 return; | 235 return; |
235 | 236 |
236 v8::Context::Scope context_scope( | 237 v8::Context::Scope context_scope( |
237 render_frame()->GetWebFrame()->mainWorldScriptContext()); | 238 render_frame()->GetWebFrame()->mainWorldScriptContext()); |
238 v8::Local<v8::Object> guest_proxy_window = | 239 |
239 guest_proxy_frame->mainWorldScriptContext()->Global(); | 240 v8::Local<v8::Object> guest_proxy_window; |
241 if (guest_proxy_frame->isWebLocalFrame()) { | |
Fady Samuel
2015/09/14 15:39:26
A comment or helper method would be very useful he
nasko
2015/09/14 16:24:21
Done.
| |
242 guest_proxy_window = | |
243 guest_proxy_frame->mainWorldScriptContext()->Global(); | |
244 } else { | |
245 guest_proxy_window = guest_proxy_frame->toWebRemoteFrame() | |
246 ->deprecatedMainWorldScriptContext() | |
247 ->Global(); | |
248 } | |
240 gin::Dictionary window_object(isolate, guest_proxy_window); | 249 gin::Dictionary window_object(isolate, guest_proxy_window); |
241 v8::Local<v8::Function> post_message; | 250 v8::Local<v8::Function> post_message; |
242 if (!window_object.Get(std::string(kPostMessageName), &post_message)) | 251 if (!window_object.Get(std::string(kPostMessageName), &post_message)) |
243 return; | 252 return; |
244 | 253 |
245 v8::Local<v8::Value> args[] = { | 254 v8::Local<v8::Value> args[] = { |
246 message, | 255 message, |
247 // Post the message to any domain inside the browser plugin. The embedder | 256 // Post the message to any domain inside the browser plugin. The embedder |
248 // should already know what is embedded. | 257 // should already know what is embedded. |
249 gin::StringToV8(isolate, "*")}; | 258 gin::StringToV8(isolate, "*")}; |
250 guest_proxy_frame->callFunctionEvenIfScriptDisabled( | 259 render_frame()->GetWebFrame()->callFunctionEvenIfScriptDisabled( |
Fady Samuel
2015/09/14 15:38:05
I thought we also wanted to avoid using callFuncti
nasko
2015/09/14 15:39:19
Yes, but on WebRemoteFrame, since it is not implem
| |
251 post_message.As<v8::Function>(), | 260 post_message.As<v8::Function>(), |
252 guest_proxy_window, | 261 guest_proxy_window, |
253 arraysize(args), | 262 arraysize(args), |
254 args); | 263 args); |
255 } | 264 } |
256 | 265 |
257 void MimeHandlerViewContainer::PostMessageFromValue( | 266 void MimeHandlerViewContainer::PostMessageFromValue( |
258 const base::Value& message) { | 267 const base::Value& message) { |
259 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 268 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
260 if (!frame) | 269 if (!frame) |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
319 if (!render_frame()) | 328 if (!render_frame()) |
320 return; | 329 return; |
321 | 330 |
322 render_frame()->Send( | 331 render_frame()->Send( |
323 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( | 332 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( |
324 render_frame()->GetRoutingID(), view_id_, element_instance_id(), | 333 render_frame()->GetRoutingID(), view_id_, element_instance_id(), |
325 element_size_)); | 334 element_size_)); |
326 } | 335 } |
327 | 336 |
328 } // namespace extensions | 337 } // namespace extensions |
OLD | NEW |