| OLD | NEW |
| 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 "content/renderer/render_widget_fullscreen_pepper.h" | 5 #include "content/renderer/render_widget_fullscreen_pepper.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 11 #include "base/message_loop/message_loop.h" | 11 #include "base/message_loop/message_loop.h" |
| 12 #include "content/common/gpu/client/gpu_channel_host.h" | 12 #include "content/common/gpu/client/gpu_channel_host.h" |
| 13 #include "content/common/view_messages.h" | 13 #include "content/common/view_messages.h" |
| 14 #include "content/public/common/content_switches.h" | 14 #include "content/public/common/content_switches.h" |
| 15 #include "content/renderer/gpu/render_widget_compositor.h" | 15 #include "content/renderer/gpu/render_widget_compositor.h" |
| 16 #include "content/renderer/pepper/pepper_platform_context_3d.h" | 16 #include "content/renderer/pepper/pepper_platform_context_3d.h" |
| 17 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" | 17 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" |
| 18 #include "content/renderer/render_thread_impl.h" | 18 #include "content/renderer/render_thread_impl.h" |
| 19 #include "gpu/command_buffer/client/gles2_implementation.h" | 19 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 20 #include "skia/ext/platform_canvas.h" | 20 #include "skia/ext/platform_canvas.h" |
| 21 #include "third_party/WebKit/public/platform/WebCanvas.h" | 21 #include "third_party/WebKit/public/platform/WebCanvas.h" |
| 22 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" | 22 #include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" |
| 23 #include "third_party/WebKit/public/platform/WebLayer.h" | 23 #include "third_party/WebKit/public/platform/WebLayer.h" |
| 24 #include "third_party/WebKit/public/platform/WebSize.h" | 24 #include "third_party/WebKit/public/platform/WebSize.h" |
| 25 #include "third_party/WebKit/public/web/WebCursorInfo.h" | 25 #include "third_party/WebKit/public/web/WebCursorInfo.h" |
| 26 #include "third_party/WebKit/public/web/WebWidget.h" | 26 #include "third_party/WebKit/public/web/WebWidget.h" |
| 27 #include "ui/gfx/size_conversions.h" | 27 #include "ui/gfx/size_conversions.h" |
| 28 #include "ui/gl/gpu_preference.h" | 28 #include "ui/gl/gpu_preference.h" |
| 29 | 29 |
| 30 using WebKit::WebCanvas; | 30 using blink::WebCanvas; |
| 31 using WebKit::WebCompositionUnderline; | 31 using blink::WebCompositionUnderline; |
| 32 using WebKit::WebCursorInfo; | 32 using blink::WebCursorInfo; |
| 33 using WebKit::WebGestureEvent; | 33 using blink::WebGestureEvent; |
| 34 using WebKit::WebInputEvent; | 34 using blink::WebInputEvent; |
| 35 using WebKit::WebMouseEvent; | 35 using blink::WebMouseEvent; |
| 36 using WebKit::WebMouseWheelEvent; | 36 using blink::WebMouseWheelEvent; |
| 37 using WebKit::WebPoint; | 37 using blink::WebPoint; |
| 38 using WebKit::WebRect; | 38 using blink::WebRect; |
| 39 using WebKit::WebSize; | 39 using blink::WebSize; |
| 40 using WebKit::WebString; | 40 using blink::WebString; |
| 41 using WebKit::WebTextDirection; | 41 using blink::WebTextDirection; |
| 42 using WebKit::WebTextInputType; | 42 using blink::WebTextInputType; |
| 43 using WebKit::WebVector; | 43 using blink::WebVector; |
| 44 using WebKit::WebWidget; | 44 using blink::WebWidget; |
| 45 using WebKit::WGC3Dintptr; | 45 using blink::WGC3Dintptr; |
| 46 | 46 |
| 47 namespace content { | 47 namespace content { |
| 48 | 48 |
| 49 namespace { | 49 namespace { |
| 50 | 50 |
| 51 class FullscreenMouseLockDispatcher : public MouseLockDispatcher { | 51 class FullscreenMouseLockDispatcher : public MouseLockDispatcher { |
| 52 public: | 52 public: |
| 53 explicit FullscreenMouseLockDispatcher(RenderWidgetFullscreenPepper* widget); | 53 explicit FullscreenMouseLockDispatcher(RenderWidgetFullscreenPepper* widget); |
| 54 virtual ~FullscreenMouseLockDispatcher(); | 54 virtual ~FullscreenMouseLockDispatcher(); |
| 55 | 55 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 | 302 |
| 303 virtual bool compositionRange(size_t* location, size_t* length) { | 303 virtual bool compositionRange(size_t* location, size_t* length) { |
| 304 return false; | 304 return false; |
| 305 } | 305 } |
| 306 | 306 |
| 307 virtual bool confirmComposition(const WebString& text) { | 307 virtual bool confirmComposition(const WebString& text) { |
| 308 return false; | 308 return false; |
| 309 } | 309 } |
| 310 | 310 |
| 311 virtual WebTextInputType textInputType() { | 311 virtual WebTextInputType textInputType() { |
| 312 return WebKit::WebTextInputTypeNone; | 312 return blink::WebTextInputTypeNone; |
| 313 } | 313 } |
| 314 | 314 |
| 315 virtual WebRect caretOrSelectionBounds() { | 315 virtual WebRect caretOrSelectionBounds() { |
| 316 return WebRect(); | 316 return WebRect(); |
| 317 } | 317 } |
| 318 | 318 |
| 319 virtual bool selectionRange(WebPoint& start, WebPoint& end) const { | 319 virtual bool selectionRange(WebPoint& start, WebPoint& end) const { |
| 320 return false; | 320 return false; |
| 321 } | 321 } |
| 322 | 322 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 338 DISALLOW_COPY_AND_ASSIGN(PepperWidget); | 338 DISALLOW_COPY_AND_ASSIGN(PepperWidget); |
| 339 }; | 339 }; |
| 340 | 340 |
| 341 } // anonymous namespace | 341 } // anonymous namespace |
| 342 | 342 |
| 343 // static | 343 // static |
| 344 RenderWidgetFullscreenPepper* RenderWidgetFullscreenPepper::Create( | 344 RenderWidgetFullscreenPepper* RenderWidgetFullscreenPepper::Create( |
| 345 int32 opener_id, | 345 int32 opener_id, |
| 346 PepperPluginInstanceImpl* plugin, | 346 PepperPluginInstanceImpl* plugin, |
| 347 const GURL& active_url, | 347 const GURL& active_url, |
| 348 const WebKit::WebScreenInfo& screen_info) { | 348 const blink::WebScreenInfo& screen_info) { |
| 349 DCHECK_NE(MSG_ROUTING_NONE, opener_id); | 349 DCHECK_NE(MSG_ROUTING_NONE, opener_id); |
| 350 scoped_refptr<RenderWidgetFullscreenPepper> widget( | 350 scoped_refptr<RenderWidgetFullscreenPepper> widget( |
| 351 new RenderWidgetFullscreenPepper(plugin, active_url, screen_info)); | 351 new RenderWidgetFullscreenPepper(plugin, active_url, screen_info)); |
| 352 widget->Init(opener_id); | 352 widget->Init(opener_id); |
| 353 widget->AddRef(); | 353 widget->AddRef(); |
| 354 return widget.get(); | 354 return widget.get(); |
| 355 } | 355 } |
| 356 | 356 |
| 357 RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper( | 357 RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper( |
| 358 PepperPluginInstanceImpl* plugin, | 358 PepperPluginInstanceImpl* plugin, |
| 359 const GURL& active_url, | 359 const GURL& active_url, |
| 360 const WebKit::WebScreenInfo& screen_info) | 360 const blink::WebScreenInfo& screen_info) |
| 361 : RenderWidgetFullscreen(screen_info), | 361 : RenderWidgetFullscreen(screen_info), |
| 362 active_url_(active_url), | 362 active_url_(active_url), |
| 363 plugin_(plugin), | 363 plugin_(plugin), |
| 364 layer_(NULL), | 364 layer_(NULL), |
| 365 mouse_lock_dispatcher_(new FullscreenMouseLockDispatcher( | 365 mouse_lock_dispatcher_(new FullscreenMouseLockDispatcher( |
| 366 this)) { | 366 this)) { |
| 367 } | 367 } |
| 368 | 368 |
| 369 RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() { | 369 RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() { |
| 370 } | 370 } |
| 371 | 371 |
| 372 void RenderWidgetFullscreenPepper::Invalidate() { | 372 void RenderWidgetFullscreenPepper::Invalidate() { |
| 373 InvalidateRect(gfx::Rect(size_.width(), size_.height())); | 373 InvalidateRect(gfx::Rect(size_.width(), size_.height())); |
| 374 } | 374 } |
| 375 | 375 |
| 376 void RenderWidgetFullscreenPepper::InvalidateRect(const WebKit::WebRect& rect) { | 376 void RenderWidgetFullscreenPepper::InvalidateRect(const blink::WebRect& rect) { |
| 377 didInvalidateRect(rect); | 377 didInvalidateRect(rect); |
| 378 } | 378 } |
| 379 | 379 |
| 380 void RenderWidgetFullscreenPepper::ScrollRect( | 380 void RenderWidgetFullscreenPepper::ScrollRect( |
| 381 int dx, int dy, const WebKit::WebRect& rect) { | 381 int dx, int dy, const blink::WebRect& rect) { |
| 382 didScrollRect(dx, dy, rect); | 382 didScrollRect(dx, dy, rect); |
| 383 } | 383 } |
| 384 | 384 |
| 385 void RenderWidgetFullscreenPepper::Destroy() { | 385 void RenderWidgetFullscreenPepper::Destroy() { |
| 386 // This function is called by the plugin instance as it's going away, so reset | 386 // This function is called by the plugin instance as it's going away, so reset |
| 387 // plugin_ to NULL to avoid calling into a dangling pointer e.g. on Close(). | 387 // plugin_ to NULL to avoid calling into a dangling pointer e.g. on Close(). |
| 388 plugin_ = NULL; | 388 plugin_ = NULL; |
| 389 | 389 |
| 390 // After calling Destroy(), the plugin instance assumes that the layer is not | 390 // After calling Destroy(), the plugin instance assumes that the layer is not |
| 391 // used by us anymore, so it may destroy the layer before this object goes | 391 // used by us anymore, so it may destroy the layer before this object goes |
| 392 // away. | 392 // away. |
| 393 SetLayer(NULL); | 393 SetLayer(NULL); |
| 394 | 394 |
| 395 Send(new ViewHostMsg_Close(routing_id_)); | 395 Send(new ViewHostMsg_Close(routing_id_)); |
| 396 Release(); | 396 Release(); |
| 397 } | 397 } |
| 398 | 398 |
| 399 void RenderWidgetFullscreenPepper::DidChangeCursor( | 399 void RenderWidgetFullscreenPepper::DidChangeCursor( |
| 400 const WebKit::WebCursorInfo& cursor) { | 400 const blink::WebCursorInfo& cursor) { |
| 401 didChangeCursor(cursor); | 401 didChangeCursor(cursor); |
| 402 } | 402 } |
| 403 | 403 |
| 404 void RenderWidgetFullscreenPepper::SetLayer(WebKit::WebLayer* layer) { | 404 void RenderWidgetFullscreenPepper::SetLayer(blink::WebLayer* layer) { |
| 405 layer_ = layer; | 405 layer_ = layer; |
| 406 bool compositing = !!layer_; | 406 bool compositing = !!layer_; |
| 407 if (compositing != is_accelerated_compositing_active_) { | 407 if (compositing != is_accelerated_compositing_active_) { |
| 408 if (compositing) { | 408 if (compositing) { |
| 409 if (!layerTreeView()) | 409 if (!layerTreeView()) |
| 410 initializeLayerTreeView(); | 410 initializeLayerTreeView(); |
| 411 if (!layerTreeView()) | 411 if (!layerTreeView()) |
| 412 return; | 412 return; |
| 413 layer_->setBounds(WebKit::WebSize(size())); | 413 layer_->setBounds(blink::WebSize(size())); |
| 414 layer_->setDrawsContent(true); | 414 layer_->setDrawsContent(true); |
| 415 compositor_->setDeviceScaleFactor(device_scale_factor_); | 415 compositor_->setDeviceScaleFactor(device_scale_factor_); |
| 416 compositor_->setRootLayer(*layer_); | 416 compositor_->setRootLayer(*layer_); |
| 417 didActivateCompositor(-1); | 417 didActivateCompositor(-1); |
| 418 } else { | 418 } else { |
| 419 didDeactivateCompositor(); | 419 didDeactivateCompositor(); |
| 420 } | 420 } |
| 421 } | 421 } |
| 422 } | 422 } |
| 423 | 423 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 468 if (plugin_ && plugin_->GetBitmapForOptimizedPluginPaint( | 468 if (plugin_ && plugin_->GetBitmapForOptimizedPluginPaint( |
| 469 paint_bounds, dib, location, clip, scale_factor)) { | 469 paint_bounds, dib, location, clip, scale_factor)) { |
| 470 return plugin_; | 470 return plugin_; |
| 471 } | 471 } |
| 472 return NULL; | 472 return NULL; |
| 473 } | 473 } |
| 474 | 474 |
| 475 void RenderWidgetFullscreenPepper::OnResize( | 475 void RenderWidgetFullscreenPepper::OnResize( |
| 476 const ViewMsg_Resize_Params& params) { | 476 const ViewMsg_Resize_Params& params) { |
| 477 if (layer_) | 477 if (layer_) |
| 478 layer_->setBounds(WebKit::WebSize(params.new_size)); | 478 layer_->setBounds(blink::WebSize(params.new_size)); |
| 479 RenderWidget::OnResize(params); | 479 RenderWidget::OnResize(params); |
| 480 } | 480 } |
| 481 | 481 |
| 482 WebWidget* RenderWidgetFullscreenPepper::CreateWebWidget() { | 482 WebWidget* RenderWidgetFullscreenPepper::CreateWebWidget() { |
| 483 return new PepperWidget(this); | 483 return new PepperWidget(this); |
| 484 } | 484 } |
| 485 | 485 |
| 486 GURL RenderWidgetFullscreenPepper::GetURLForGraphicsContext3D() { | 486 GURL RenderWidgetFullscreenPepper::GetURLForGraphicsContext3D() { |
| 487 return active_url_; | 487 return active_url_; |
| 488 } | 488 } |
| 489 | 489 |
| 490 void RenderWidgetFullscreenPepper::SetDeviceScaleFactor( | 490 void RenderWidgetFullscreenPepper::SetDeviceScaleFactor( |
| 491 float device_scale_factor) { | 491 float device_scale_factor) { |
| 492 RenderWidget::SetDeviceScaleFactor(device_scale_factor); | 492 RenderWidget::SetDeviceScaleFactor(device_scale_factor); |
| 493 if (compositor_) | 493 if (compositor_) |
| 494 compositor_->setDeviceScaleFactor(device_scale_factor); | 494 compositor_->setDeviceScaleFactor(device_scale_factor); |
| 495 } | 495 } |
| 496 | 496 |
| 497 } // namespace content | 497 } // namespace content |
| OLD | NEW |