Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 11053003: Migrate Graphics2D to new design. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/bind.h" 7 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/linked_ptr.h" 10 #include "base/memory/linked_ptr.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 #include "webkit/plugins/ppapi/common.h" 71 #include "webkit/plugins/ppapi/common.h"
72 #include "webkit/plugins/ppapi/event_conversion.h" 72 #include "webkit/plugins/ppapi/event_conversion.h"
73 #include "webkit/plugins/ppapi/fullscreen_container.h" 73 #include "webkit/plugins/ppapi/fullscreen_container.h"
74 #include "webkit/plugins/ppapi/gfx_conversion.h" 74 #include "webkit/plugins/ppapi/gfx_conversion.h"
75 #include "webkit/plugins/ppapi/host_globals.h" 75 #include "webkit/plugins/ppapi/host_globals.h"
76 #include "webkit/plugins/ppapi/message_channel.h" 76 #include "webkit/plugins/ppapi/message_channel.h"
77 #include "webkit/plugins/ppapi/npapi_glue.h" 77 #include "webkit/plugins/ppapi/npapi_glue.h"
78 #include "webkit/plugins/ppapi/plugin_module.h" 78 #include "webkit/plugins/ppapi/plugin_module.h"
79 #include "webkit/plugins/ppapi/plugin_object.h" 79 #include "webkit/plugins/ppapi/plugin_object.h"
80 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" 80 #include "webkit/plugins/ppapi/ppb_buffer_impl.h"
81 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h"
82 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" 81 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h"
83 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" 82 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
84 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" 83 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h"
85 #include "webkit/plugins/ppapi/url_request_info_util.h" 84 #include "webkit/plugins/ppapi/url_request_info_util.h"
86 #include "webkit/plugins/ppapi/ppp_pdf.h" 85 #include "webkit/plugins/ppapi/ppp_pdf.h"
87 #include "webkit/plugins/sad_plugin.h" 86 #include "webkit/plugins/sad_plugin.h"
88 87
89 #if defined(OS_MACOSX) 88 #if defined(OS_MACOSX)
90 #include "printing/metafile_impl.h" 89 #include "printing/metafile_impl.h"
91 #if !defined(USE_SKIA) 90 #if !defined(USE_SKIA)
(...skipping 15 matching lines...) Expand all
107 #include "ui/gfx/codec/jpeg_codec.h" 106 #include "ui/gfx/codec/jpeg_codec.h"
108 #include "ui/gfx/gdi_util.h" 107 #include "ui/gfx/gdi_util.h"
109 #endif 108 #endif
110 109
111 using base::StringPrintf; 110 using base::StringPrintf;
112 using ppapi::InputEventData; 111 using ppapi::InputEventData;
113 using ppapi::PpapiGlobals; 112 using ppapi::PpapiGlobals;
114 using ppapi::PPB_InputEvent_Shared; 113 using ppapi::PPB_InputEvent_Shared;
115 using ppapi::PPB_View_Shared; 114 using ppapi::PPB_View_Shared;
116 using ppapi::PPP_Instance_Combined; 115 using ppapi::PPP_Instance_Combined;
116 using ppapi::Resource;
117 using ppapi::ScopedPPResource; 117 using ppapi::ScopedPPResource;
118 using ppapi::StringVar; 118 using ppapi::StringVar;
119 using ppapi::TrackedCallback; 119 using ppapi::TrackedCallback;
120 using ppapi::thunk::EnterResourceNoLock; 120 using ppapi::thunk::EnterResourceNoLock;
121 using ppapi::thunk::PPB_Buffer_API; 121 using ppapi::thunk::PPB_Buffer_API;
122 using ppapi::thunk::PPB_Graphics2D_API; 122 using ppapi::thunk::PPB_Graphics2D_API;
123 using ppapi::thunk::PPB_Graphics3D_API; 123 using ppapi::thunk::PPB_Graphics3D_API;
124 using ppapi::thunk::PPB_ImageData_API; 124 using ppapi::thunk::PPB_ImageData_API;
125 using ppapi::Var; 125 using ppapi::Var;
126 using ppapi::ArrayBufferVar; 126 using ppapi::ArrayBufferVar;
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 PluginModule* module, 411 PluginModule* module,
412 ::ppapi::PPP_Instance_Combined* instance_interface) 412 ::ppapi::PPP_Instance_Combined* instance_interface)
413 : delegate_(delegate), 413 : delegate_(delegate),
414 module_(module), 414 module_(module),
415 instance_interface_(instance_interface), 415 instance_interface_(instance_interface),
416 pp_instance_(0), 416 pp_instance_(0),
417 container_(NULL), 417 container_(NULL),
418 full_frame_(false), 418 full_frame_(false),
419 sent_initial_did_change_view_(false), 419 sent_initial_did_change_view_(false),
420 view_change_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 420 view_change_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
421 graphics_2d_platform_(NULL),
421 has_webkit_focus_(false), 422 has_webkit_focus_(false),
422 has_content_area_focus_(false), 423 has_content_area_focus_(false),
423 find_identifier_(-1), 424 find_identifier_(-1),
424 plugin_decryption_interface_(NULL), 425 plugin_decryption_interface_(NULL),
425 plugin_find_interface_(NULL), 426 plugin_find_interface_(NULL),
426 plugin_input_event_interface_(NULL), 427 plugin_input_event_interface_(NULL),
427 plugin_messaging_interface_(NULL), 428 plugin_messaging_interface_(NULL),
428 plugin_mouse_lock_interface_(NULL), 429 plugin_mouse_lock_interface_(NULL),
429 plugin_pdf_interface_(NULL), 430 plugin_pdf_interface_(NULL),
430 plugin_private_interface_(NULL), 431 plugin_private_interface_(NULL),
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 TRACE_EVENT0("ppapi", "PluginInstance::Paint"); 532 TRACE_EVENT0("ppapi", "PluginInstance::Paint");
532 if (module()->is_crashed()) { 533 if (module()->is_crashed()) {
533 // Crashed plugin painting. 534 // Crashed plugin painting.
534 if (!sad_plugin_) // Lazily initialize bitmap. 535 if (!sad_plugin_) // Lazily initialize bitmap.
535 sad_plugin_ = delegate_->GetSadPluginBitmap(); 536 sad_plugin_ = delegate_->GetSadPluginBitmap();
536 if (sad_plugin_) 537 if (sad_plugin_)
537 webkit::PaintSadPlugin(canvas, plugin_rect, *sad_plugin_); 538 webkit::PaintSadPlugin(canvas, plugin_rect, *sad_plugin_);
538 return; 539 return;
539 } 540 }
540 541
541 PPB_Graphics2D_Impl* bound_graphics_2d = GetBoundGraphics2D(); 542 PluginDelegate::PlatformGraphics2D* bound_graphics_2d = GetBoundGraphics2D();
542 if (bound_graphics_2d) 543 if (bound_graphics_2d)
543 bound_graphics_2d->Paint(canvas, plugin_rect, paint_rect); 544 bound_graphics_2d->Paint(canvas, plugin_rect, paint_rect);
544 } 545 }
545 546
546 void PluginInstance::InvalidateRect(const gfx::Rect& rect) { 547 void PluginInstance::InvalidateRect(const gfx::Rect& rect) {
547 if (fullscreen_container_) { 548 if (fullscreen_container_) {
548 if (rect.IsEmpty()) 549 if (rect.IsEmpty())
549 fullscreen_container_->Invalidate(); 550 fullscreen_container_->Invalidate();
550 else 551 else
551 fullscreen_container_->InvalidateRect(rect); 552 fullscreen_container_->InvalidateRect(rect);
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 } 991 }
991 992
992 bool PluginInstance::GetBitmapForOptimizedPluginPaint( 993 bool PluginInstance::GetBitmapForOptimizedPluginPaint(
993 const gfx::Rect& paint_bounds, 994 const gfx::Rect& paint_bounds,
994 TransportDIB** dib, 995 TransportDIB** dib,
995 gfx::Rect* location, 996 gfx::Rect* location,
996 gfx::Rect* clip, 997 gfx::Rect* clip,
997 float* scale_factor) { 998 float* scale_factor) {
998 if (!always_on_top_) 999 if (!always_on_top_)
999 return false; 1000 return false;
1000 if (!GetBoundGraphics2D() || !GetBoundGraphics2D()->is_always_opaque()) 1001 if (!GetBoundGraphics2D() || !GetBoundGraphics2D()->IsAlwaysOpaque())
1001 return false; 1002 return false;
1002 1003
1003 // We specifically want to compare against the area covered by the backing 1004 // We specifically want to compare against the area covered by the backing
1004 // store when seeing if we cover the given paint bounds, since the backing 1005 // store when seeing if we cover the given paint bounds, since the backing
1005 // store could be smaller than the declared plugin area. 1006 // store could be smaller than the declared plugin area.
1006 PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->image_data(); 1007 PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->ImageData();
1007 // ImageDatas created by NaCl don't have a PlatformImage, so can't be 1008 // ImageDatas created by NaCl don't have a PlatformImage, so can't be
1008 // optimized this way. 1009 // optimized this way.
1009 if (!image_data->PlatformImage()) 1010 if (!image_data->PlatformImage())
1010 return false; 1011 return false;
1011 1012
1012 gfx::Point plugin_origin = PP_ToGfxPoint(view_data_.rect.point); 1013 gfx::Point plugin_origin = PP_ToGfxPoint(view_data_.rect.point);
1013 // Convert |paint_bounds| to be relative to the left-top corner of the plugin. 1014 // Convert |paint_bounds| to be relative to the left-top corner of the plugin.
1014 gfx::Rect relative_paint_bounds(paint_bounds); 1015 gfx::Rect relative_paint_bounds(paint_bounds);
1015 relative_paint_bounds.Offset(-plugin_origin.x(), -plugin_origin.y()); 1016 relative_paint_bounds.Offset(-plugin_origin.x(), -plugin_origin.y());
1016 1017
(...skipping 861 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 skia::EndPlatformPaint(canvas); 1879 skia::EndPlatformPaint(canvas);
1879 } 1880 }
1880 #endif // defined(OS_WIN) 1881 #endif // defined(OS_WIN)
1881 1882
1882 return ret; 1883 return ret;
1883 #else // defined(ENABLE_PRINTING) 1884 #else // defined(ENABLE_PRINTING)
1884 return false; 1885 return false;
1885 #endif 1886 #endif
1886 } 1887 }
1887 1888
1888 PPB_Graphics2D_Impl* PluginInstance::GetBoundGraphics2D() const { 1889 PluginDelegate::PlatformGraphics2D* PluginInstance::GetBoundGraphics2D() const {
1889 if (bound_graphics_.get() == NULL) 1890 return graphics_2d_platform_;
1891 }
1892
1893 PPB_Graphics3D_Impl* PluginInstance::GetBoundGraphics3D() const {
1894 if (bound_graphics_3d_.get() == NULL)
1890 return NULL; 1895 return NULL;
1891 1896
1892 if (bound_graphics_->AsPPB_Graphics2D_API()) 1897 if (bound_graphics_3d_->AsPPB_Graphics3D_API())
brettw 2012/10/09 20:47:13 This if shouldn't be necessary since it should't g
victorhsieh 2012/10/11 22:56:23 Done.
1893 return static_cast<PPB_Graphics2D_Impl*>(bound_graphics_.get()); 1898 return static_cast<PPB_Graphics3D_Impl*>(bound_graphics_3d_.get());
1894 return NULL; 1899 return NULL;
1895 } 1900 }
1896 1901
1897 PPB_Graphics3D_Impl* PluginInstance::GetBoundGraphics3D() const {
1898 if (bound_graphics_.get() == NULL)
1899 return NULL;
1900
1901 if (bound_graphics_->AsPPB_Graphics3D_API())
1902 return static_cast<PPB_Graphics3D_Impl*>(bound_graphics_.get());
1903 return NULL;
1904 }
1905
1906 void PluginInstance::setBackingTextureId(unsigned int id, bool is_opaque) { 1902 void PluginInstance::setBackingTextureId(unsigned int id, bool is_opaque) {
1907 // If we have a fullscreen_container_ (under PPB_FlashFullscreen) 1903 // If we have a fullscreen_container_ (under PPB_FlashFullscreen)
1908 // or desired_fullscreen_state is true (under PPB_Fullscreen), 1904 // or desired_fullscreen_state is true (under PPB_Fullscreen),
1909 // then the plugin is fullscreen or transitioning to fullscreen 1905 // then the plugin is fullscreen or transitioning to fullscreen
1910 // and the parent context is not the one for the browser page, 1906 // and the parent context is not the one for the browser page,
1911 // but for the fullscreen window, and so the parent texture ID 1907 // but for the fullscreen window, and so the parent texture ID
1912 // doesn't correspond to anything in the page's context. 1908 // doesn't correspond to anything in the page's context.
1913 // 1909 //
1914 // TODO(alokp): It would be better at some point to have the equivalent 1910 // TODO(alokp): It would be better at some point to have the equivalent
1915 // in the FullscreenContainer so that we don't need to poll 1911 // in the FullscreenContainer so that we don't need to poll
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
2040 // Do nothing so that the pending user gesture will stay open for 2036 // Do nothing so that the pending user gesture will stay open for
2041 // kUserGestureDurationInSeconds. 2037 // kUserGestureDurationInSeconds.
2042 // TODO(yzshen): remove the code for closing pending user gesture. 2038 // TODO(yzshen): remove the code for closing pending user gesture.
2043 } 2039 }
2044 2040
2045 PP_Bool PluginInstance::BindGraphics(PP_Instance instance, 2041 PP_Bool PluginInstance::BindGraphics(PP_Instance instance,
2046 PP_Resource device) { 2042 PP_Resource device) {
2047 TRACE_EVENT0("ppapi", "PluginInstance::BindGraphics"); 2043 TRACE_EVENT0("ppapi", "PluginInstance::BindGraphics");
2048 // The Graphics3D instance can't be destroyed until we call 2044 // The Graphics3D instance can't be destroyed until we call
2049 // setBackingTextureId. 2045 // setBackingTextureId.
2050 scoped_refptr< ::ppapi::Resource> old_graphics = bound_graphics_; 2046 scoped_refptr< ::ppapi::Resource> old_graphics = bound_graphics_3d_;
2051 if (bound_graphics_.get()) { 2047 if (bound_graphics_3d_.get()) {
2052 if (GetBoundGraphics2D()) { 2048 if (GetBoundGraphics3D()) {
2053 GetBoundGraphics2D()->BindToInstance(NULL);
2054 } else if (GetBoundGraphics3D()) {
2055 GetBoundGraphics3D()->BindToInstance(false); 2049 GetBoundGraphics3D()->BindToInstance(false);
2056 } 2050 }
2057 bound_graphics_ = NULL; 2051 bound_graphics_3d_ = NULL;
2052 }
2053 if (graphics_2d_platform_) {
2054 GetBoundGraphics2D()->BindToInstance(NULL);
2055 graphics_2d_platform_ = NULL;
2058 } 2056 }
2059 2057
2060 // Special-case clearing the current device. 2058 // Special-case clearing the current device.
2061 if (!device) { 2059 if (!device) {
2062 setBackingTextureId(0, false); 2060 setBackingTextureId(0, false);
2063 InvalidateRect(gfx::Rect()); 2061 InvalidateRect(gfx::Rect());
2064 return PP_TRUE; 2062 return PP_TRUE;
2065 } 2063 }
2066 2064
2067 // Refuse to bind if in transition to fullscreen with PPB_FlashFullscreen or 2065 // Refuse to bind if in transition to fullscreen with PPB_FlashFullscreen or
2068 // to/from fullscreen with PPB_Fullscreen. 2066 // to/from fullscreen with PPB_Fullscreen.
2069 if ((fullscreen_container_ && !flash_fullscreen_) || 2067 if ((fullscreen_container_ && !flash_fullscreen_) ||
2070 desired_fullscreen_state_ != view_data_.is_fullscreen) 2068 desired_fullscreen_state_ != view_data_.is_fullscreen)
2071 return PP_FALSE; 2069 return PP_FALSE;
2072 2070
2073 EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false); 2071 graphics_2d_platform_ = delegate_->GetGraphics2D(this, device);
2074 PPB_Graphics2D_Impl* graphics_2d = enter_2d.succeeded() ?
2075 static_cast<PPB_Graphics2D_Impl*>(enter_2d.object()) : NULL;
2076 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false); 2072 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false);
2077 PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ? 2073 PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ?
2078 static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL; 2074 static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL;
2079 2075
2080 if (graphics_2d) { 2076 if (graphics_2d_platform_) {
2081 if (graphics_2d->pp_instance() != pp_instance()) 2077 if (!graphics_2d_platform_->BindToInstance(this))
2082 return PP_FALSE; // Can't bind other instance's contexts.
2083 if (!graphics_2d->BindToInstance(this))
2084 return PP_FALSE; // Can't bind to more than one instance. 2078 return PP_FALSE; // Can't bind to more than one instance.
2085 2079
2086 bound_graphics_ = graphics_2d; 2080 setBackingTextureId(0, graphics_2d_platform_->IsAlwaysOpaque());
2087 setBackingTextureId(0, graphics_2d->is_always_opaque());
2088 // BindToInstance will have invalidated the plugin if necessary. 2081 // BindToInstance will have invalidated the plugin if necessary.
2089 } else if (graphics_3d) { 2082 } else if (graphics_3d) {
2090 // Make sure graphics can only be bound to the instance it is 2083 // Make sure graphics can only be bound to the instance it is
2091 // associated with. 2084 // associated with.
2092 if (graphics_3d->pp_instance() != pp_instance()) 2085 if (graphics_3d->pp_instance() != pp_instance())
2093 return PP_FALSE; 2086 return PP_FALSE;
2094 if (!graphics_3d->BindToInstance(true)) 2087 if (!graphics_3d->BindToInstance(true))
2095 return PP_FALSE; 2088 return PP_FALSE;
2096 2089
2097 bound_graphics_ = graphics_3d; 2090 bound_graphics_3d_ = graphics_3d;
2098 setBackingTextureId(graphics_3d->GetBackingTextureId(), 2091 setBackingTextureId(graphics_3d->GetBackingTextureId(),
2099 graphics_3d->IsOpaque()); 2092 graphics_3d->IsOpaque());
2100 } else { 2093 } else {
2101 // The device is not a valid resource type. 2094 // The device is not a valid resource type.
2102 return PP_FALSE; 2095 return PP_FALSE;
2103 } 2096 }
2104 2097
2105 return PP_TRUE; 2098 return PP_TRUE;
2106 } 2099 }
2107 2100
(...skipping 600 matching lines...) Expand 10 before | Expand all | Expand 10 after
2708 screen_size_for_fullscreen_ = gfx::Size(); 2701 screen_size_for_fullscreen_ = gfx::Size();
2709 WebElement element = container_->element(); 2702 WebElement element = container_->element();
2710 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); 2703 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
2711 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); 2704 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_);
2712 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); 2705 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_);
2713 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); 2706 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
2714 } 2707 }
2715 2708
2716 } // namespace ppapi 2709 } // namespace ppapi
2717 } // namespace webkit 2710 } // namespace webkit
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | webkit/plugins/ppapi/ppb_graphics_2d_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698