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

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: rebase upstream 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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 #include "webkit/plugins/ppapi/common.h" 73 #include "webkit/plugins/ppapi/common.h"
74 #include "webkit/plugins/ppapi/event_conversion.h" 74 #include "webkit/plugins/ppapi/event_conversion.h"
75 #include "webkit/plugins/ppapi/fullscreen_container.h" 75 #include "webkit/plugins/ppapi/fullscreen_container.h"
76 #include "webkit/plugins/ppapi/gfx_conversion.h" 76 #include "webkit/plugins/ppapi/gfx_conversion.h"
77 #include "webkit/plugins/ppapi/host_globals.h" 77 #include "webkit/plugins/ppapi/host_globals.h"
78 #include "webkit/plugins/ppapi/message_channel.h" 78 #include "webkit/plugins/ppapi/message_channel.h"
79 #include "webkit/plugins/ppapi/npapi_glue.h" 79 #include "webkit/plugins/ppapi/npapi_glue.h"
80 #include "webkit/plugins/ppapi/plugin_module.h" 80 #include "webkit/plugins/ppapi/plugin_module.h"
81 #include "webkit/plugins/ppapi/plugin_object.h" 81 #include "webkit/plugins/ppapi/plugin_object.h"
82 #include "webkit/plugins/ppapi/ppb_buffer_impl.h" 82 #include "webkit/plugins/ppapi/ppb_buffer_impl.h"
83 #include "webkit/plugins/ppapi/ppb_graphics_2d_impl.h"
84 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h" 83 #include "webkit/plugins/ppapi/ppb_graphics_3d_impl.h"
85 #include "webkit/plugins/ppapi/ppb_image_data_impl.h" 84 #include "webkit/plugins/ppapi/ppb_image_data_impl.h"
86 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h" 85 #include "webkit/plugins/ppapi/ppb_url_loader_impl.h"
87 #include "webkit/plugins/ppapi/url_request_info_util.h" 86 #include "webkit/plugins/ppapi/url_request_info_util.h"
88 #include "webkit/plugins/ppapi/ppp_pdf.h" 87 #include "webkit/plugins/ppapi/ppp_pdf.h"
89 #include "webkit/plugins/sad_plugin.h" 88 #include "webkit/plugins/sad_plugin.h"
90 89
91 #if defined(OS_MACOSX) 90 #if defined(OS_MACOSX)
92 #include "printing/metafile_impl.h" 91 #include "printing/metafile_impl.h"
93 #if !defined(USE_SKIA) 92 #if !defined(USE_SKIA)
(...skipping 15 matching lines...) Expand all
109 #include "ui/gfx/codec/jpeg_codec.h" 108 #include "ui/gfx/codec/jpeg_codec.h"
110 #include "ui/gfx/gdi_util.h" 109 #include "ui/gfx/gdi_util.h"
111 #endif 110 #endif
112 111
113 using base::StringPrintf; 112 using base::StringPrintf;
114 using ppapi::InputEventData; 113 using ppapi::InputEventData;
115 using ppapi::PpapiGlobals; 114 using ppapi::PpapiGlobals;
116 using ppapi::PPB_InputEvent_Shared; 115 using ppapi::PPB_InputEvent_Shared;
117 using ppapi::PPB_View_Shared; 116 using ppapi::PPB_View_Shared;
118 using ppapi::PPP_Instance_Combined; 117 using ppapi::PPP_Instance_Combined;
118 using ppapi::Resource;
119 using ppapi::ScopedPPResource; 119 using ppapi::ScopedPPResource;
120 using ppapi::StringVar; 120 using ppapi::StringVar;
121 using ppapi::TrackedCallback; 121 using ppapi::TrackedCallback;
122 using ppapi::thunk::EnterResourceNoLock; 122 using ppapi::thunk::EnterResourceNoLock;
123 using ppapi::thunk::PPB_Buffer_API; 123 using ppapi::thunk::PPB_Buffer_API;
124 using ppapi::thunk::PPB_Graphics2D_API; 124 using ppapi::thunk::PPB_Graphics2D_API;
125 using ppapi::thunk::PPB_Graphics3D_API; 125 using ppapi::thunk::PPB_Graphics3D_API;
126 using ppapi::thunk::PPB_ImageData_API; 126 using ppapi::thunk::PPB_ImageData_API;
127 using ppapi::Var; 127 using ppapi::Var;
128 using ppapi::ArrayBufferVar; 128 using ppapi::ArrayBufferVar;
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 PluginModule* module, 440 PluginModule* module,
441 ::ppapi::PPP_Instance_Combined* instance_interface) 441 ::ppapi::PPP_Instance_Combined* instance_interface)
442 : delegate_(delegate), 442 : delegate_(delegate),
443 module_(module), 443 module_(module),
444 instance_interface_(instance_interface), 444 instance_interface_(instance_interface),
445 pp_instance_(0), 445 pp_instance_(0),
446 container_(NULL), 446 container_(NULL),
447 full_frame_(false), 447 full_frame_(false),
448 sent_initial_did_change_view_(false), 448 sent_initial_did_change_view_(false),
449 view_change_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 449 view_change_weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
450 graphics_2d_platform_(NULL),
450 has_webkit_focus_(false), 451 has_webkit_focus_(false),
451 has_content_area_focus_(false), 452 has_content_area_focus_(false),
452 find_identifier_(-1), 453 find_identifier_(-1),
453 plugin_decryption_interface_(NULL), 454 plugin_decryption_interface_(NULL),
454 plugin_find_interface_(NULL), 455 plugin_find_interface_(NULL),
455 plugin_input_event_interface_(NULL), 456 plugin_input_event_interface_(NULL),
456 plugin_messaging_interface_(NULL), 457 plugin_messaging_interface_(NULL),
457 plugin_mouse_lock_interface_(NULL), 458 plugin_mouse_lock_interface_(NULL),
458 plugin_pdf_interface_(NULL), 459 plugin_pdf_interface_(NULL),
459 plugin_private_interface_(NULL), 460 plugin_private_interface_(NULL),
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
560 TRACE_EVENT0("ppapi", "PluginInstance::Paint"); 561 TRACE_EVENT0("ppapi", "PluginInstance::Paint");
561 if (module()->is_crashed()) { 562 if (module()->is_crashed()) {
562 // Crashed plugin painting. 563 // Crashed plugin painting.
563 if (!sad_plugin_) // Lazily initialize bitmap. 564 if (!sad_plugin_) // Lazily initialize bitmap.
564 sad_plugin_ = delegate_->GetSadPluginBitmap(); 565 sad_plugin_ = delegate_->GetSadPluginBitmap();
565 if (sad_plugin_) 566 if (sad_plugin_)
566 webkit::PaintSadPlugin(canvas, plugin_rect, *sad_plugin_); 567 webkit::PaintSadPlugin(canvas, plugin_rect, *sad_plugin_);
567 return; 568 return;
568 } 569 }
569 570
570 PPB_Graphics2D_Impl* bound_graphics_2d = GetBoundGraphics2D(); 571 PluginDelegate::PlatformGraphics2D* bound_graphics_2d = GetBoundGraphics2D();
571 if (bound_graphics_2d) 572 if (bound_graphics_2d)
572 bound_graphics_2d->Paint(canvas, plugin_rect, paint_rect); 573 bound_graphics_2d->Paint(canvas, plugin_rect, paint_rect);
573 } 574 }
574 575
575 void PluginInstance::InvalidateRect(const gfx::Rect& rect) { 576 void PluginInstance::InvalidateRect(const gfx::Rect& rect) {
576 if (fullscreen_container_) { 577 if (fullscreen_container_) {
577 if (rect.IsEmpty()) 578 if (rect.IsEmpty())
578 fullscreen_container_->Invalidate(); 579 fullscreen_container_->Invalidate();
579 else 580 else
580 fullscreen_container_->InvalidateRect(rect); 581 fullscreen_container_->InvalidateRect(rect);
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after
1019 } 1020 }
1020 1021
1021 bool PluginInstance::GetBitmapForOptimizedPluginPaint( 1022 bool PluginInstance::GetBitmapForOptimizedPluginPaint(
1022 const gfx::Rect& paint_bounds, 1023 const gfx::Rect& paint_bounds,
1023 TransportDIB** dib, 1024 TransportDIB** dib,
1024 gfx::Rect* location, 1025 gfx::Rect* location,
1025 gfx::Rect* clip, 1026 gfx::Rect* clip,
1026 float* scale_factor) { 1027 float* scale_factor) {
1027 if (!always_on_top_) 1028 if (!always_on_top_)
1028 return false; 1029 return false;
1029 if (!GetBoundGraphics2D() || !GetBoundGraphics2D()->is_always_opaque()) 1030 if (!GetBoundGraphics2D() || !GetBoundGraphics2D()->IsAlwaysOpaque())
1030 return false; 1031 return false;
1031 1032
1032 // We specifically want to compare against the area covered by the backing 1033 // We specifically want to compare against the area covered by the backing
1033 // store when seeing if we cover the given paint bounds, since the backing 1034 // store when seeing if we cover the given paint bounds, since the backing
1034 // store could be smaller than the declared plugin area. 1035 // store could be smaller than the declared plugin area.
1035 PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->image_data(); 1036 PPB_ImageData_Impl* image_data = GetBoundGraphics2D()->ImageData();
1036 // ImageDatas created by NaCl don't have a PlatformImage, so can't be 1037 // ImageDatas created by NaCl don't have a PlatformImage, so can't be
1037 // optimized this way. 1038 // optimized this way.
1038 if (!image_data->PlatformImage()) 1039 if (!image_data->PlatformImage())
1039 return false; 1040 return false;
1040 1041
1041 gfx::Point plugin_origin = PP_ToGfxPoint(view_data_.rect.point); 1042 gfx::Point plugin_origin = PP_ToGfxPoint(view_data_.rect.point);
1042 // Convert |paint_bounds| to be relative to the left-top corner of the plugin. 1043 // Convert |paint_bounds| to be relative to the left-top corner of the plugin.
1043 gfx::Rect relative_paint_bounds(paint_bounds); 1044 gfx::Rect relative_paint_bounds(paint_bounds);
1044 relative_paint_bounds.Offset(-plugin_origin.x(), -plugin_origin.y()); 1045 relative_paint_bounds.Offset(-plugin_origin.x(), -plugin_origin.y());
1045 1046
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
1960 skia::EndPlatformPaint(canvas); 1961 skia::EndPlatformPaint(canvas);
1961 } 1962 }
1962 #endif // defined(OS_WIN) 1963 #endif // defined(OS_WIN)
1963 1964
1964 return ret; 1965 return ret;
1965 #else // defined(ENABLE_PRINTING) 1966 #else // defined(ENABLE_PRINTING)
1966 return false; 1967 return false;
1967 #endif 1968 #endif
1968 } 1969 }
1969 1970
1970 PPB_Graphics2D_Impl* PluginInstance::GetBoundGraphics2D() const { 1971 PluginDelegate::PlatformGraphics2D* PluginInstance::GetBoundGraphics2D() const {
1971 if (bound_graphics_.get() == NULL) 1972 return graphics_2d_platform_;
1972 return NULL;
1973
1974 if (bound_graphics_->AsPPB_Graphics2D_API())
1975 return static_cast<PPB_Graphics2D_Impl*>(bound_graphics_.get());
1976 return NULL;
1977 } 1973 }
1978 1974
1979 PPB_Graphics3D_Impl* PluginInstance::GetBoundGraphics3D() const { 1975 PPB_Graphics3D_Impl* PluginInstance::GetBoundGraphics3D() const {
1980 if (bound_graphics_.get() == NULL) 1976 if (bound_graphics_3d_.get() == NULL)
1981 return NULL; 1977 return NULL;
1982 1978 return static_cast<PPB_Graphics3D_Impl*>(bound_graphics_3d_.get());
1983 if (bound_graphics_->AsPPB_Graphics3D_API())
1984 return static_cast<PPB_Graphics3D_Impl*>(bound_graphics_.get());
1985 return NULL;
1986 } 1979 }
1987 1980
1988 void PluginInstance::setBackingTextureId(unsigned int id, bool is_opaque) { 1981 void PluginInstance::setBackingTextureId(unsigned int id, bool is_opaque) {
1989 // If we have a fullscreen_container_ (under PPB_FlashFullscreen) 1982 // If we have a fullscreen_container_ (under PPB_FlashFullscreen)
1990 // or desired_fullscreen_state is true (under PPB_Fullscreen), 1983 // or desired_fullscreen_state is true (under PPB_Fullscreen),
1991 // then the plugin is fullscreen or transitioning to fullscreen 1984 // then the plugin is fullscreen or transitioning to fullscreen
1992 // and the parent context is not the one for the browser page, 1985 // and the parent context is not the one for the browser page,
1993 // but for the fullscreen window, and so the parent texture ID 1986 // but for the fullscreen window, and so the parent texture ID
1994 // doesn't correspond to anything in the page's context. 1987 // doesn't correspond to anything in the page's context.
1995 // 1988 //
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
2122 // Do nothing so that the pending user gesture will stay open for 2115 // Do nothing so that the pending user gesture will stay open for
2123 // kUserGestureDurationInSeconds. 2116 // kUserGestureDurationInSeconds.
2124 // TODO(yzshen): remove the code for closing pending user gesture. 2117 // TODO(yzshen): remove the code for closing pending user gesture.
2125 } 2118 }
2126 2119
2127 PP_Bool PluginInstance::BindGraphics(PP_Instance instance, 2120 PP_Bool PluginInstance::BindGraphics(PP_Instance instance,
2128 PP_Resource device) { 2121 PP_Resource device) {
2129 TRACE_EVENT0("ppapi", "PluginInstance::BindGraphics"); 2122 TRACE_EVENT0("ppapi", "PluginInstance::BindGraphics");
2130 // The Graphics3D instance can't be destroyed until we call 2123 // The Graphics3D instance can't be destroyed until we call
2131 // setBackingTextureId. 2124 // setBackingTextureId.
2132 scoped_refptr< ::ppapi::Resource> old_graphics = bound_graphics_; 2125 scoped_refptr< ::ppapi::Resource> old_graphics = bound_graphics_3d_;
2133 if (bound_graphics_.get()) { 2126 if (bound_graphics_3d_.get()) {
2134 if (GetBoundGraphics2D()) { 2127 if (GetBoundGraphics3D()) {
2135 GetBoundGraphics2D()->BindToInstance(NULL);
2136 } else if (GetBoundGraphics3D()) {
2137 GetBoundGraphics3D()->BindToInstance(false); 2128 GetBoundGraphics3D()->BindToInstance(false);
2138 } 2129 }
2139 bound_graphics_ = NULL; 2130 bound_graphics_3d_ = NULL;
2131 }
2132 if (graphics_2d_platform_) {
2133 GetBoundGraphics2D()->BindToInstance(NULL);
2134 graphics_2d_platform_ = NULL;
2140 } 2135 }
2141 2136
2142 // Special-case clearing the current device. 2137 // Special-case clearing the current device.
2143 if (!device) { 2138 if (!device) {
2144 setBackingTextureId(0, false); 2139 setBackingTextureId(0, false);
2145 InvalidateRect(gfx::Rect()); 2140 InvalidateRect(gfx::Rect());
2146 return PP_TRUE; 2141 return PP_TRUE;
2147 } 2142 }
2148 2143
2149 // Refuse to bind if in transition to fullscreen with PPB_FlashFullscreen or 2144 // Refuse to bind if in transition to fullscreen with PPB_FlashFullscreen or
2150 // to/from fullscreen with PPB_Fullscreen. 2145 // to/from fullscreen with PPB_Fullscreen.
2151 if ((fullscreen_container_ && !flash_fullscreen_) || 2146 if ((fullscreen_container_ && !flash_fullscreen_) ||
2152 desired_fullscreen_state_ != view_data_.is_fullscreen) 2147 desired_fullscreen_state_ != view_data_.is_fullscreen)
2153 return PP_FALSE; 2148 return PP_FALSE;
2154 2149
2155 EnterResourceNoLock<PPB_Graphics2D_API> enter_2d(device, false); 2150 graphics_2d_platform_ = delegate_->GetGraphics2D(this, device);
2156 PPB_Graphics2D_Impl* graphics_2d = enter_2d.succeeded() ?
2157 static_cast<PPB_Graphics2D_Impl*>(enter_2d.object()) : NULL;
2158 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false); 2151 EnterResourceNoLock<PPB_Graphics3D_API> enter_3d(device, false);
2159 PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ? 2152 PPB_Graphics3D_Impl* graphics_3d = enter_3d.succeeded() ?
2160 static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL; 2153 static_cast<PPB_Graphics3D_Impl*>(enter_3d.object()) : NULL;
2161 2154
2162 if (graphics_2d) { 2155 if (graphics_2d_platform_) {
2163 if (graphics_2d->pp_instance() != pp_instance()) 2156 if (!graphics_2d_platform_->BindToInstance(this))
2164 return PP_FALSE; // Can't bind other instance's contexts.
2165 if (!graphics_2d->BindToInstance(this))
2166 return PP_FALSE; // Can't bind to more than one instance. 2157 return PP_FALSE; // Can't bind to more than one instance.
2167 2158
2168 bound_graphics_ = graphics_2d; 2159 setBackingTextureId(0, graphics_2d_platform_->IsAlwaysOpaque());
2169 setBackingTextureId(0, graphics_2d->is_always_opaque());
2170 // BindToInstance will have invalidated the plugin if necessary. 2160 // BindToInstance will have invalidated the plugin if necessary.
2171 } else if (graphics_3d) { 2161 } else if (graphics_3d) {
2172 // Make sure graphics can only be bound to the instance it is 2162 // Make sure graphics can only be bound to the instance it is
2173 // associated with. 2163 // associated with.
2174 if (graphics_3d->pp_instance() != pp_instance()) 2164 if (graphics_3d->pp_instance() != pp_instance())
2175 return PP_FALSE; 2165 return PP_FALSE;
2176 if (!graphics_3d->BindToInstance(true)) 2166 if (!graphics_3d->BindToInstance(true))
2177 return PP_FALSE; 2167 return PP_FALSE;
2178 2168
2179 bound_graphics_ = graphics_3d; 2169 bound_graphics_3d_ = graphics_3d;
2180 setBackingTextureId(graphics_3d->GetBackingTextureId(), 2170 setBackingTextureId(graphics_3d->GetBackingTextureId(),
2181 graphics_3d->IsOpaque()); 2171 graphics_3d->IsOpaque());
2182 } else { 2172 } else {
2183 // The device is not a valid resource type. 2173 // The device is not a valid resource type.
2184 return PP_FALSE; 2174 return PP_FALSE;
2185 } 2175 }
2186 2176
2187 return PP_TRUE; 2177 return PP_TRUE;
2188 } 2178 }
2189 2179
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
2831 screen_size_for_fullscreen_ = gfx::Size(); 2821 screen_size_for_fullscreen_ = gfx::Size();
2832 WebElement element = container_->element(); 2822 WebElement element = container_->element();
2833 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); 2823 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
2834 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); 2824 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_);
2835 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); 2825 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_);
2836 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); 2826 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
2837 } 2827 }
2838 2828
2839 } // namespace ppapi 2829 } // namespace ppapi
2840 } // namespace webkit 2830 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698