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 // TODO(lazyboy,nasko): The WebLocalFrame branch is not used when running |
| 241 // on top of out-of-process iframes. Remove it once the code is converted. |
| 242 v8::Local<v8::Object> guest_proxy_window; |
| 243 if (guest_proxy_frame->isWebLocalFrame()) { |
| 244 guest_proxy_window = |
| 245 guest_proxy_frame->mainWorldScriptContext()->Global(); |
| 246 } else { |
| 247 guest_proxy_window = guest_proxy_frame->toWebRemoteFrame() |
| 248 ->deprecatedMainWorldScriptContext() |
| 249 ->Global(); |
| 250 } |
240 gin::Dictionary window_object(isolate, guest_proxy_window); | 251 gin::Dictionary window_object(isolate, guest_proxy_window); |
241 v8::Local<v8::Function> post_message; | 252 v8::Local<v8::Function> post_message; |
242 if (!window_object.Get(std::string(kPostMessageName), &post_message)) | 253 if (!window_object.Get(std::string(kPostMessageName), &post_message)) |
243 return; | 254 return; |
244 | 255 |
245 v8::Local<v8::Value> args[] = { | 256 v8::Local<v8::Value> args[] = { |
246 message, | 257 message, |
247 // Post the message to any domain inside the browser plugin. The embedder | 258 // Post the message to any domain inside the browser plugin. The embedder |
248 // should already know what is embedded. | 259 // should already know what is embedded. |
249 gin::StringToV8(isolate, "*")}; | 260 gin::StringToV8(isolate, "*")}; |
250 guest_proxy_frame->callFunctionEvenIfScriptDisabled( | 261 render_frame()->GetWebFrame()->callFunctionEvenIfScriptDisabled( |
251 post_message.As<v8::Function>(), | 262 post_message.As<v8::Function>(), |
252 guest_proxy_window, | 263 guest_proxy_window, |
253 arraysize(args), | 264 arraysize(args), |
254 args); | 265 args); |
255 } | 266 } |
256 | 267 |
257 void MimeHandlerViewContainer::PostMessageFromValue( | 268 void MimeHandlerViewContainer::PostMessageFromValue( |
258 const base::Value& message) { | 269 const base::Value& message) { |
259 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 270 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
260 if (!frame) | 271 if (!frame) |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 if (!render_frame()) | 330 if (!render_frame()) |
320 return; | 331 return; |
321 | 332 |
322 render_frame()->Send( | 333 render_frame()->Send( |
323 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( | 334 new ExtensionsGuestViewHostMsg_CreateMimeHandlerViewGuest( |
324 render_frame()->GetRoutingID(), view_id_, element_instance_id(), | 335 render_frame()->GetRoutingID(), view_id_, element_instance_id(), |
325 element_size_)); | 336 element_size_)); |
326 } | 337 } |
327 | 338 |
328 } // namespace extensions | 339 } // namespace extensions |
OLD | NEW |