OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" | 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/scoped_ptr.h" | 10 #include "base/scoped_ptr.h" |
11 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
12 #include "ppapi/c/dev/ppb_find_dev.h" | 12 #include "ppapi/c/dev/ppb_find_dev.h" |
13 #include "ppapi/c/dev/ppb_fullscreen_dev.h" | 13 #include "ppapi/c/dev/ppb_fullscreen_dev.h" |
| 14 #include "ppapi/c/dev/ppb_messaging_dev.h" |
14 #include "ppapi/c/dev/ppb_zoom_dev.h" | 15 #include "ppapi/c/dev/ppb_zoom_dev.h" |
15 #include "ppapi/c/dev/ppp_find_dev.h" | 16 #include "ppapi/c/dev/ppp_find_dev.h" |
| 17 #include "ppapi/c/dev/ppp_messaging_dev.h" |
16 #include "ppapi/c/dev/ppp_selection_dev.h" | 18 #include "ppapi/c/dev/ppp_selection_dev.h" |
17 #include "ppapi/c/dev/ppp_zoom_dev.h" | 19 #include "ppapi/c/dev/ppp_zoom_dev.h" |
18 #include "ppapi/c/pp_input_event.h" | 20 #include "ppapi/c/pp_input_event.h" |
19 #include "ppapi/c/pp_instance.h" | 21 #include "ppapi/c/pp_instance.h" |
20 #include "ppapi/c/pp_rect.h" | 22 #include "ppapi/c/pp_rect.h" |
21 #include "ppapi/c/pp_resource.h" | 23 #include "ppapi/c/pp_resource.h" |
22 #include "ppapi/c/pp_var.h" | 24 #include "ppapi/c/pp_var.h" |
23 #include "ppapi/c/ppb_core.h" | 25 #include "ppapi/c/ppb_core.h" |
24 #include "ppapi/c/ppb_instance.h" | 26 #include "ppapi/c/ppb_instance.h" |
25 #include "ppapi/c/ppp_instance.h" | 27 #include "ppapi/c/ppp_instance.h" |
26 #include "printing/units.h" | 28 #include "printing/units.h" |
27 #include "skia/ext/vector_platform_device.h" | 29 #include "skia/ext/vector_platform_device.h" |
28 #include "skia/ext/platform_canvas.h" | 30 #include "skia/ext/platform_canvas.h" |
29 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" | 31 #include "third_party/WebKit/Source/WebKit/chromium/public/WebBindings.h" |
30 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" | 32 #include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h" |
31 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" | 33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDocument.h" |
32 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" | 34 #include "third_party/WebKit/Source/WebKit/chromium/public/WebElement.h" |
33 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" |
34 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" | 36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h" |
35 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" | 37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginContainer.h" |
36 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" | 38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebRect.h" |
37 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" | 39 #include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
38 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" | 40 #include "third_party/WebKit/Source/WebKit/chromium/public/WebURLRequest.h" |
39 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 41 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
40 #include "ui/gfx/rect.h" | 42 #include "ui/gfx/rect.h" |
41 #include "ui/gfx/skia_util.h" | 43 #include "ui/gfx/skia_util.h" |
42 #include "webkit/plugins/ppapi/common.h" | 44 #include "webkit/plugins/ppapi/common.h" |
43 #include "webkit/plugins/ppapi/event_conversion.h" | 45 #include "webkit/plugins/ppapi/event_conversion.h" |
44 #include "webkit/plugins/ppapi/fullscreen_container.h" | 46 #include "webkit/plugins/ppapi/fullscreen_container.h" |
| 47 #include "webkit/plugins/ppapi/message_channel.h" |
45 #include "webkit/plugins/ppapi/plugin_delegate.h" | 48 #include "webkit/plugins/ppapi/plugin_delegate.h" |
46 #include "webkit/plugins/ppapi/plugin_module.h" | 49 #include "webkit/plugins/ppapi/plugin_module.h" |
47 #include "webkit/plugins/ppapi/plugin_object.h" | 50 #include "webkit/plugins/ppapi/plugin_object.h" |
48 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" | 51 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" |
49 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" | 52 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h" |
50 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" | 53 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" |
51 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" | 54 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" |
52 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" | 55 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" |
53 #include "webkit/plugins/ppapi/ppp_pdf.h" | 56 #include "webkit/plugins/ppapi/ppp_pdf.h" |
54 #include "webkit/plugins/ppapi/string.h" | 57 #include "webkit/plugins/ppapi/string.h" |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 typedef bool (*RenderPDFPageToDCProc)( | 96 typedef bool (*RenderPDFPageToDCProc)( |
94 const unsigned char* pdf_buffer, int buffer_size, int page_number, HDC dc, | 97 const unsigned char* pdf_buffer, int buffer_size, int page_number, HDC dc, |
95 int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y, | 98 int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y, |
96 int bounds_width, int bounds_height, bool fit_to_bounds, | 99 int bounds_width, int bounds_height, bool fit_to_bounds, |
97 bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds); | 100 bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds); |
98 #endif // defined(OS_WIN) | 101 #endif // defined(OS_WIN) |
99 | 102 |
100 namespace { | 103 namespace { |
101 | 104 |
102 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \ | 105 #define COMPILE_ASSERT_MATCHING_ENUM(webkit_name, np_name) \ |
103 COMPILE_ASSERT(int(WebCursorInfo::webkit_name) == int(np_name), \ | 106 COMPILE_ASSERT(static_cast<int>(WebCursorInfo::webkit_name) \ |
| 107 == static_cast<int>(np_name), \ |
104 mismatching_enums) | 108 mismatching_enums) |
105 | 109 |
106 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_CURSORTYPE_POINTER); | 110 COMPILE_ASSERT_MATCHING_ENUM(TypePointer, PP_CURSORTYPE_POINTER); |
107 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_CURSORTYPE_CROSS); | 111 COMPILE_ASSERT_MATCHING_ENUM(TypeCross, PP_CURSORTYPE_CROSS); |
108 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_CURSORTYPE_HAND); | 112 COMPILE_ASSERT_MATCHING_ENUM(TypeHand, PP_CURSORTYPE_HAND); |
109 COMPILE_ASSERT_MATCHING_ENUM(TypeIBeam, PP_CURSORTYPE_IBEAM); | 113 COMPILE_ASSERT_MATCHING_ENUM(TypeIBeam, PP_CURSORTYPE_IBEAM); |
110 COMPILE_ASSERT_MATCHING_ENUM(TypeWait, PP_CURSORTYPE_WAIT); | 114 COMPILE_ASSERT_MATCHING_ENUM(TypeWait, PP_CURSORTYPE_WAIT); |
111 COMPILE_ASSERT_MATCHING_ENUM(TypeHelp, PP_CURSORTYPE_HELP); | 115 COMPILE_ASSERT_MATCHING_ENUM(TypeHelp, PP_CURSORTYPE_HELP); |
112 COMPILE_ASSERT_MATCHING_ENUM(TypeEastResize, PP_CURSORTYPE_EASTRESIZE); | 116 COMPILE_ASSERT_MATCHING_ENUM(TypeEastResize, PP_CURSORTYPE_EASTRESIZE); |
113 COMPILE_ASSERT_MATCHING_ENUM(TypeNorthResize, PP_CURSORTYPE_NORTHRESIZE); | 117 COMPILE_ASSERT_MATCHING_ENUM(TypeNorthResize, PP_CURSORTYPE_NORTHRESIZE); |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 | 259 |
256 PP_Bool GetScreenSize(PP_Instance instance_id, PP_Size* size) { | 260 PP_Bool GetScreenSize(PP_Instance instance_id, PP_Size* size) { |
257 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); | 261 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
258 if (!instance || !size) | 262 if (!instance || !size) |
259 return PP_FALSE; | 263 return PP_FALSE; |
260 gfx::Size screen_size = instance->delegate()->GetScreenSize(); | 264 gfx::Size screen_size = instance->delegate()->GetScreenSize(); |
261 *size = PP_MakeSize(screen_size.width(), screen_size.height()); | 265 *size = PP_MakeSize(screen_size.width(), screen_size.height()); |
262 return PP_TRUE; | 266 return PP_TRUE; |
263 } | 267 } |
264 | 268 |
265 | |
266 const PPB_Fullscreen_Dev ppb_fullscreen = { | 269 const PPB_Fullscreen_Dev ppb_fullscreen = { |
267 &IsFullscreen, | 270 &IsFullscreen, |
268 &SetFullscreen, | 271 &SetFullscreen, |
269 &GetScreenSize | 272 &GetScreenSize |
270 }; | 273 }; |
271 | 274 |
| 275 void PostMessage(PP_Instance instance_id, PP_Var message) { |
| 276 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
| 277 if (!instance) |
| 278 return; |
| 279 instance->PostMessage(message); |
| 280 } |
| 281 |
| 282 const PPB_Messaging_Dev ppb_messaging = { |
| 283 &PostMessage |
| 284 }; |
| 285 |
272 void ZoomChanged(PP_Instance instance_id, double factor) { | 286 void ZoomChanged(PP_Instance instance_id, double factor) { |
273 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); | 287 PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
274 if (!instance) | 288 if (!instance) |
275 return; | 289 return; |
276 | 290 |
277 // We only want to tell the page to change its zoom if the whole page is the | 291 // We only want to tell the page to change its zoom if the whole page is the |
278 // plugin. If we're in an iframe, then don't do anything. | 292 // plugin. If we're in an iframe, then don't do anything. |
279 if (!instance->IsFullPagePlugin()) | 293 if (!instance->IsFullPagePlugin()) |
280 return; | 294 return; |
281 | 295 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 : delegate_(delegate), | 333 : delegate_(delegate), |
320 module_(module), | 334 module_(module), |
321 instance_interface_(instance_interface), | 335 instance_interface_(instance_interface), |
322 pp_instance_(0), | 336 pp_instance_(0), |
323 container_(NULL), | 337 container_(NULL), |
324 full_frame_(false), | 338 full_frame_(false), |
325 has_webkit_focus_(false), | 339 has_webkit_focus_(false), |
326 has_content_area_focus_(false), | 340 has_content_area_focus_(false), |
327 find_identifier_(-1), | 341 find_identifier_(-1), |
328 plugin_find_interface_(NULL), | 342 plugin_find_interface_(NULL), |
| 343 plugin_messaging_interface_(NULL), |
329 plugin_pdf_interface_(NULL), | 344 plugin_pdf_interface_(NULL), |
330 plugin_selection_interface_(NULL), | 345 plugin_selection_interface_(NULL), |
331 plugin_zoom_interface_(NULL), | 346 plugin_zoom_interface_(NULL), |
| 347 checked_for_plugin_messaging_interface_(false), |
332 #if defined(OS_LINUX) | 348 #if defined(OS_LINUX) |
333 canvas_(NULL), | 349 canvas_(NULL), |
334 #endif // defined(OS_LINUX) | 350 #endif // defined(OS_LINUX) |
335 plugin_print_interface_(NULL), | 351 plugin_print_interface_(NULL), |
336 plugin_graphics_3d_interface_(NULL), | 352 plugin_graphics_3d_interface_(NULL), |
337 always_on_top_(false), | 353 always_on_top_(false), |
338 fullscreen_container_(NULL), | 354 fullscreen_container_(NULL), |
339 fullscreen_(false), | 355 fullscreen_(false), |
| 356 message_channel_(NULL), |
340 sad_plugin_(NULL) { | 357 sad_plugin_(NULL) { |
341 pp_instance_ = ResourceTracker::Get()->AddInstance(this); | 358 pp_instance_ = ResourceTracker::Get()->AddInstance(this); |
342 | 359 |
343 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); | 360 memset(¤t_print_settings_, 0, sizeof(current_print_settings_)); |
344 DCHECK(delegate); | 361 DCHECK(delegate); |
345 module_->InstanceCreated(this); | 362 module_->InstanceCreated(this); |
346 delegate_->InstanceCreated(this); | 363 delegate_->InstanceCreated(this); |
| 364 message_channel_.reset(new MessageChannel(this)); |
347 } | 365 } |
348 | 366 |
349 PluginInstance::~PluginInstance() { | 367 PluginInstance::~PluginInstance() { |
350 // Free all the plugin objects. This will automatically clear the back- | 368 // Free all the plugin objects. This will automatically clear the back- |
351 // pointer from the NPObject so WebKit can't call into the plugin any more. | 369 // pointer from the NPObject so WebKit can't call into the plugin any more. |
352 // | 370 // |
353 // Swap out the set so we can delete from it (the objects will try to | 371 // Swap out the set so we can delete from it (the objects will try to |
354 // unregister themselves inside the delete call). | 372 // unregister themselves inside the delete call). |
355 PluginObjectSet plugin_object_copy; | 373 PluginObjectSet plugin_object_copy; |
356 live_plugin_objects_.swap(plugin_object_copy); | 374 live_plugin_objects_.swap(plugin_object_copy); |
(...skipping 19 matching lines...) Expand all Loading... |
376 const PPB_Find_Dev* PluginInstance::GetFindInterface() { | 394 const PPB_Find_Dev* PluginInstance::GetFindInterface() { |
377 return &ppb_find; | 395 return &ppb_find; |
378 } | 396 } |
379 | 397 |
380 // static | 398 // static |
381 const PPB_Fullscreen_Dev* PluginInstance::GetFullscreenInterface() { | 399 const PPB_Fullscreen_Dev* PluginInstance::GetFullscreenInterface() { |
382 return &ppb_fullscreen; | 400 return &ppb_fullscreen; |
383 } | 401 } |
384 | 402 |
385 // static | 403 // static |
| 404 const PPB_Messaging_Dev* PluginInstance::GetMessagingInterface() { |
| 405 return &ppb_messaging; |
| 406 } |
| 407 |
| 408 // static |
386 const PPB_Zoom_Dev* PluginInstance::GetZoomInterface() { | 409 const PPB_Zoom_Dev* PluginInstance::GetZoomInterface() { |
387 return &ppb_zoom; | 410 return &ppb_zoom; |
388 } | 411 } |
389 | 412 |
390 // NOTE: Any of these methods that calls into the plugin needs to take into | 413 // NOTE: Any of these methods that calls into the plugin needs to take into |
391 // account that the plugin may use Var to remove the <embed> from the DOM, which | 414 // account that the plugin may use Var to remove the <embed> from the DOM, which |
392 // will make the WebPluginImpl drop its reference, usually the last one. If a | 415 // will make the WebPluginImpl drop its reference, usually the last one. If a |
393 // method needs to access a member of the instance after the call has returned, | 416 // method needs to access a member of the instance after the call has returned, |
394 // then it needs to keep its own reference on the stack. | 417 // then it needs to keep its own reference on the stack. |
395 | 418 |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 try_catch.SetException("Exception caught"); | 620 try_catch.SetException("Exception caught"); |
598 WebBindings::releaseVariantValue(&result); | 621 WebBindings::releaseVariantValue(&result); |
599 return PP_MakeUndefined(); | 622 return PP_MakeUndefined(); |
600 } | 623 } |
601 | 624 |
602 PP_Var ret = Var::NPVariantToPPVar(this, &result); | 625 PP_Var ret = Var::NPVariantToPPVar(this, &result); |
603 WebBindings::releaseVariantValue(&result); | 626 WebBindings::releaseVariantValue(&result); |
604 return ret; | 627 return ret; |
605 } | 628 } |
606 | 629 |
| 630 void PluginInstance::PostMessage(PP_Var message) { |
| 631 message_channel_->PostMessageToJavaScript(message); |
| 632 } |
| 633 |
607 void PluginInstance::Delete() { | 634 void PluginInstance::Delete() { |
608 // Keep a reference on the stack. See NOTE above. | 635 // Keep a reference on the stack. See NOTE above. |
609 scoped_refptr<PluginInstance> ref(this); | 636 scoped_refptr<PluginInstance> ref(this); |
610 instance_interface_->DidDestroy(pp_instance()); | 637 instance_interface_->DidDestroy(pp_instance()); |
611 | 638 |
612 if (fullscreen_container_) { | 639 if (fullscreen_container_) { |
613 fullscreen_container_->Destroy(); | 640 fullscreen_container_->Destroy(); |
614 fullscreen_container_ = NULL; | 641 fullscreen_container_ = NULL; |
615 } | 642 } |
616 container_ = NULL; | 643 container_ = NULL; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 for (size_t i = 0; i < pp_events.size(); i++) { | 683 for (size_t i = 0; i < pp_events.size(); i++) { |
657 rv |= PPBoolToBool(instance_interface_->HandleInputEvent(pp_instance(), | 684 rv |= PPBoolToBool(instance_interface_->HandleInputEvent(pp_instance(), |
658 &pp_events[i])); | 685 &pp_events[i])); |
659 } | 686 } |
660 | 687 |
661 if (cursor_.get()) | 688 if (cursor_.get()) |
662 *cursor_info = *cursor_; | 689 *cursor_info = *cursor_; |
663 return rv; | 690 return rv; |
664 } | 691 } |
665 | 692 |
| 693 void PluginInstance::HandleMessage(PP_Var message) { |
| 694 // Keep a reference on the stack. See NOTE above. |
| 695 scoped_refptr<PluginInstance> ref(this); |
| 696 if (!LoadMessagingInterface()) |
| 697 return; |
| 698 plugin_messaging_interface_->HandleMessage(pp_instance(), message); |
| 699 } |
| 700 |
666 PP_Var PluginInstance::GetInstanceObject() { | 701 PP_Var PluginInstance::GetInstanceObject() { |
667 return instance_interface_->GetInstanceObject(pp_instance()); | 702 return instance_interface_->GetInstanceObject(pp_instance()); |
668 } | 703 } |
669 | 704 |
670 void PluginInstance::ViewChanged(const gfx::Rect& position, | 705 void PluginInstance::ViewChanged(const gfx::Rect& position, |
671 const gfx::Rect& clip) { | 706 const gfx::Rect& clip) { |
672 fullscreen_ = (fullscreen_container_ != NULL); | 707 fullscreen_ = (fullscreen_container_ != NULL); |
673 position_ = position; | 708 position_ = position; |
674 | 709 |
675 if (clip.IsEmpty()) { | 710 if (clip.IsEmpty()) { |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 bool PluginInstance::LoadFindInterface() { | 867 bool PluginInstance::LoadFindInterface() { |
833 if (!plugin_find_interface_) { | 868 if (!plugin_find_interface_) { |
834 plugin_find_interface_ = | 869 plugin_find_interface_ = |
835 reinterpret_cast<const PPP_Find_Dev*>(module_->GetPluginInterface( | 870 reinterpret_cast<const PPP_Find_Dev*>(module_->GetPluginInterface( |
836 PPP_FIND_DEV_INTERFACE)); | 871 PPP_FIND_DEV_INTERFACE)); |
837 } | 872 } |
838 | 873 |
839 return !!plugin_find_interface_; | 874 return !!plugin_find_interface_; |
840 } | 875 } |
841 | 876 |
| 877 bool PluginInstance::LoadMessagingInterface() { |
| 878 if (!checked_for_plugin_messaging_interface_) { |
| 879 checked_for_plugin_messaging_interface_ = true; |
| 880 plugin_messaging_interface_ = |
| 881 reinterpret_cast<const PPP_Messaging_Dev*>(module_->GetPluginInterface( |
| 882 PPP_MESSAGING_DEV_INTERFACE)); |
| 883 } |
| 884 |
| 885 return !!plugin_messaging_interface_; |
| 886 } |
| 887 |
842 bool PluginInstance::LoadPdfInterface() { | 888 bool PluginInstance::LoadPdfInterface() { |
843 if (!plugin_pdf_interface_) { | 889 if (!plugin_pdf_interface_) { |
844 plugin_pdf_interface_ = | 890 plugin_pdf_interface_ = |
845 reinterpret_cast<const PPP_Pdf*>(module_->GetPluginInterface( | 891 reinterpret_cast<const PPP_Pdf*>(module_->GetPluginInterface( |
846 PPP_PDF_INTERFACE)); | 892 PPP_PDF_INTERFACE)); |
847 } | 893 } |
848 | 894 |
849 return !!plugin_pdf_interface_; | 895 return !!plugin_pdf_interface_; |
850 } | 896 } |
851 | 897 |
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1366 return found->second; | 1412 return found->second; |
1367 } | 1413 } |
1368 | 1414 |
1369 bool PluginInstance::IsFullPagePlugin() const { | 1415 bool PluginInstance::IsFullPagePlugin() const { |
1370 WebFrame* frame = container()->element().document().frame(); | 1416 WebFrame* frame = container()->element().document().frame(); |
1371 return frame->view()->mainFrame()->document().isPluginDocument(); | 1417 return frame->view()->mainFrame()->document().isPluginDocument(); |
1372 } | 1418 } |
1373 | 1419 |
1374 } // namespace ppapi | 1420 } // namespace ppapi |
1375 } // namespace webkit | 1421 } // namespace webkit |
OLD | NEW |