Chromium Code Reviews| 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 |