15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_ANDROID_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_ANDROID_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <map> 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <queue> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/i18n/rtl.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/memory/weak_ptr.h" 16a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "base/process/process.h" 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/layers/delegated_frame_resource_collection.h" 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/texture_layer_client.h" 197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "cc/output/begin_frame_args.h" 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/browser/accessibility/browser_accessibility_manager.h" 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/browser/renderer_host/image_transport_factory_android.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/ime_adapter_android.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_view_base.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "gpu/command_buffer/common/mailbox.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "third_party/WebKit/public/platform/WebGraphicsContext3D.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "ui/base/android/window_android_observer.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/vector2d_f.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ViewHostMsg_TextInputState_Params; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 37c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdochclass CopyOutputResult; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class DelegatedFrameProvider; 39b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class DelegatedRendererLayer; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer; 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)class SingleReleaseCallback; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TextureLayer; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebExternalTextureLayer; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebTouchEvent; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMouseEvent; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentViewCoreImpl; 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class OverscrollGlow; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHost; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderWidgetHostImpl; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct NativeWebKeyboardEvent; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------- 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// See comments in render_widget_host_view.h about this class and its members. 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ----------------------------------------------------------------------------- 61b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class RenderWidgetHostViewAndroid 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) : public RenderWidgetHostViewBase, 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public BrowserAccessibilityDelegate, 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public cc::DelegatedFrameResourceCollectionClient, 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public ImageTransportFactoryAndroidObserver, 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public ui::WindowAndroidObserver { 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostViewAndroid(RenderWidgetHostImpl* widget, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* content_view_core); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~RenderWidgetHostViewAndroid(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // RenderWidgetHostView implementation. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitAsChild(gfx::NativeView parent_view) OVERRIDE; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitAsPopup(RenderWidgetHostView* parent_host_view, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& pos) OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void InitAsFullscreen( 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostView* reference_host_view) OVERRIDE; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual RenderWidgetHost* GetRenderWidgetHost() const OVERRIDE; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WasShown() OVERRIDE; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void WasHidden() OVERRIDE; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetSize(const gfx::Size& size) OVERRIDE; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBounds(const gfx::Rect& rect) OVERRIDE; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeView GetNativeView() const OVERRIDE; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeViewId GetNativeViewId() const OVERRIDE; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::NativeViewAccessible GetNativeViewAccessible() OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void MovePluginWindows( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Vector2d& scroll_offset, 89ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const std::vector<WebPluginGeometry>& moves) OVERRIDE; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Focus() OVERRIDE; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Blur() OVERRIDE; 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasFocus() const OVERRIDE; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsSurfaceAvailableForCopy() const OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Show() OVERRIDE; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Hide() OVERRIDE; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool IsShowing() OVERRIDE; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetViewBounds() const OVERRIDE; 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::Size GetPhysicalBackingSize() const OVERRIDE; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual float GetOverdrawBottomHeight() const OVERRIDE; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateCursor(const WebCursor& cursor) OVERRIDE; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetIsLoading(bool is_loading) OVERRIDE; 1027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void TextInputTypeChanged(ui::TextInputType type, 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ui::TextInputMode input_mode, 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool can_compose_inline) OVERRIDE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ImeCancelComposition() OVERRIDE; 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidUpdateBackingStore( 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& scroll_rect, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2d& scroll_delta, 109868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::vector<gfx::Rect>& copy_rects, 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const ui::LatencyInfo& latency_info) OVERRIDE; 1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void RenderProcessGone(base::TerminationStatus status, 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int error_code) OVERRIDE; 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Destroy() OVERRIDE; 114a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SetTooltipText(const base::string16& tooltip_text) OVERRIDE; 115a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void SelectionChanged(const base::string16& text, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t offset, 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const gfx::Range& range) OVERRIDE; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SelectionBoundsChanged( 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ViewHostMsg_SelectionBounds_Params& params) OVERRIDE; 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void ScrollOffsetChanged() OVERRIDE; 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual BackingStore* AllocBackingStore(const gfx::Size& size) OVERRIDE; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAcceleratedCompositingStateChange() OVERRIDE; 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void AcceleratedSurfaceInitialized(int host_id, 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int route_id) OVERRIDE; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedSurfaceBuffersSwapped( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int gpu_host_id) OVERRIDE; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedSurfacePostSubBuffer( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int gpu_host_id) OVERRIDE; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void AcceleratedSurfaceSuspend() OVERRIDE; 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AcceleratedSurfaceRelease() OVERRIDE; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasAcceleratedSurface(const gfx::Size& desired_size) OVERRIDE; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetBackground(const SkBitmap& background) OVERRIDE; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void CopyFromCompositingSurface( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Rect& src_subrect, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& dst_size, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<void(bool, const SkBitmap&)>& callback) OVERRIDE; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CopyFromCompositingSurfaceToVideoFrame( 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Rect& src_subrect, 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const scoped_refptr<media::VideoFrame>& target, 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Callback<void(bool)>& callback) OVERRIDE; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanCopyToVideoFrame() const OVERRIDE; 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void GetScreenInfo(blink::WebScreenInfo* results) OVERRIDE; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Rect GetBoundsInRootWindow() OVERRIDE; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual gfx::GLSurfaceHandle GetCompositingSurface() OVERRIDE; 1477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void ProcessAckedTouchEvent(const TouchEventWithLatencyInfo& touch, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InputEventAckState ack_result) OVERRIDE; 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetHasHorizontalScrollbar( 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool has_horizontal_scrollbar) OVERRIDE; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetScrollOffsetPinning( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_pinned_to_left, bool is_pinned_to_right) OVERRIDE; 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void UnhandledWheelEvent( 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebMouseWheelEvent& event) OVERRIDE; 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual InputEventAckState FilterInputEvent( 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebInputEvent& input_event) OVERRIDE; 15768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnSetNeedsFlushInput() OVERRIDE; 158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual void GestureEventAck(int gesture_event_type, 159a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) InputEventAckState ack_result) OVERRIDE; 16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual void OnAccessibilityEvents( 16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::vector<AccessibilityHostMsg_EventParams>& 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) params) OVERRIDE; 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool LockMouse() OVERRIDE; 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UnlockMouse() OVERRIDE; 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void HasTouchEventHandlers(bool need_touch_events) OVERRIDE; 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnSwapCompositorFrame( 167ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch uint32 output_surface_id, 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<cc::CompositorFrame> frame) OVERRIDE; 16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void OnOverscrolled(gfx::Vector2dF accumulated_overscroll, 17090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) gfx::Vector2dF current_fling_velocity) OVERRIDE; 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ShowDisambiguationPopup(const gfx::Rect& target_rect, 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const SkBitmap& zoomed_bitmap) OVERRIDE; 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual scoped_ptr<SyntheticGestureTarget> CreateSyntheticGestureTarget() 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) OVERRIDE; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Implementation of BrowserAccessibilityDelegate: 1777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void SetAccessibilityFocus(int acc_obj_id) OVERRIDE; 1787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void AccessibilityDoDefaultAction(int acc_obj_id) OVERRIDE; 1797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void AccessibilityScrollToMakeVisible( 1807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int acc_obj_id, gfx::Rect subfocus) OVERRIDE; 1817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void AccessibilityScrollToPoint( 1827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int acc_obj_id, gfx::Point point) OVERRIDE; 1837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void AccessibilitySetTextSelection( 1847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int acc_obj_id, int start_offset, int end_offset) OVERRIDE; 1857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual gfx::Point GetLastTouchEventLocation() const OVERRIDE; 1867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void FatalAccessibilityTreeError() OVERRIDE; 1877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 1884e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // cc::DelegatedFrameResourceCollectionClient implementation. 1894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void UnusedResourcesAreAvailable() OVERRIDE; 190b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 191f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // ui::WindowAndroidObserver implementation. 192f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnCompositingDidCommit() OVERRIDE; 193f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnAttachCompositor() OVERRIDE {} 194f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnDetachCompositor() OVERRIDE; 195f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 1967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // ImageTransportFactoryAndroidObserver implementation. 1977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void OnLostResources() OVERRIDE; 1987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Non-virtual methods 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetContentViewCore(ContentViewCoreImpl* content_view_core); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor GetCachedBackgroundColor() const; 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendKeyEvent(const NativeWebKeyboardEvent& event); 203f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendTouchEvent(const blink::WebTouchEvent& event); 204f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendMouseEvent(const blink::WebMouseEvent& event); 205f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event); 206f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SendGestureEvent(const blink::WebGestureEvent& event); 2077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void SendBeginFrame(const cc::BeginFrameArgs& args); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnTextInputStateChanged(const ViewHostMsg_TextInputState_Params& params); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDidChangeBodyBackgroundColor(SkColor color); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnStartContentIntent(const GURL& content_url); 21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnSetNeedsBeginFrame(bool enabled); 213d8f2b4b00825da44f52b775a415bc945dcd54811Torne (Richard Coles) void OnSmartClipDataExtracted(const string16& result); 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int GetNativeImeAdapter(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void WasResized(); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 219f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebGLId GetScaledContentTexture(float scale, gfx::Size* out_size); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool PopulateBitmapWithContents(jobject jbitmap); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasValidFrame() const; 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select all text between the given coordinates. 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SelectRange(const gfx::Point& start, const gfx::Point& end); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void MoveCaret(const gfx::Point& point); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RequestContentClipping(const gfx::Rect& clipping, 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const gfx::Size& content_size); 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Returns true when animation ticks are still needed. This avoids a separate 23390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // round-trip for requesting follow-up animation. 23490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool Animate(base::TimeTicks frame_time); 23590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2365e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) void SynchronousFrameMetadata( 2375e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) const cc::CompositorFrameMetadata& frame_metadata); 2385e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void BuffersSwapped(const gpu::Mailbox& mailbox, 241a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) uint32_t output_surface_id, 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::Closure& ack_callback); 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void RunAckCallbacks(); 245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void DestroyDelegatedContent(); 247ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SwapDelegatedFrame(uint32 output_surface_id, 248ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_ptr<cc::DelegatedFrameData> frame_data); 249ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch void SendDelegatedFrameAck(uint32 output_surface_id); 250b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 2515e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) void UpdateContentViewCoreFrameMetadata( 2525e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) const cc::CompositorFrameMetadata& frame_metadata); 2535e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) void ComputeContentsSize(const cc::CompositorFrameMetadata& frame_metadata); 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetClipping(); 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClipContents(const gfx::Rect& clipping, const gfx::Size& content_size); 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void AttachLayers(); 25890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RemoveLayers(); 25990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2605e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles) void UpdateAnimationSize(const cc::CompositorFrameMetadata& frame_metadata); 26190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 262c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // Called after async screenshot task completes. Scales and crops the result 263c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch // of the copy. 264c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch static void PrepareTextureCopyOutputResult( 265c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const gfx::Size& dst_size_in_pixel, 266c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const base::Callback<void(bool, const SkBitmap&)>& callback, 267c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch scoped_ptr<cc::CopyOutputResult> result); 268c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch static void PrepareBitmapCopyOutputResult( 269c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const gfx::Size& dst_size_in_pixel, 270c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch const base::Callback<void(bool, const SkBitmap&)>& callback, 271c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch scoped_ptr<cc::CopyOutputResult> result); 272c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch 273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // DevTools ScreenCast support for Android WebView. 274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void SynchronousCopyContents( 275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const gfx::Rect& src_subrect_in_pixel, 276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const gfx::Size& dst_size_in_pixel, 277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Callback<void(bool, const SkBitmap&)>& callback); 278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The model object. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderWidgetHostImpl* host_; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Used to track whether this render widget needs a BeginFrame. 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool needs_begin_frame_; 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether or not this widget is potentially attached to the view hierarchy. 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This view may not actually be attached if this is true, but it should be 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // treated as such, because as soon as a ContentViewCore is set the layer 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // will be attached automatically. 28990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool are_layers_attached_; 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentViewCoreImpl is our interface to the view system. 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCoreImpl* content_view_core_; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ImeAdapterAndroid ime_adapter_android_; 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Body background color of the underlying document. 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SkColor cached_background_color_; 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The texture layer for this view when using browser-side compositing. 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<cc::TextureLayer> texture_layer_; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<cc::DelegatedFrameResourceCollection> resource_collection_; 3034e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<cc::DelegatedFrameProvider> frame_provider_; 304b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_refptr<cc::DelegatedRendererLayer> delegated_renderer_layer_; 305b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The layer used for rendering the contents of this view. 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // It is either owned by texture_layer_ or surface_texture_transport_ 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // depending on the mode. 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<cc::Layer> layer_; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The most recent texture id that was pushed to the texture layer. 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int texture_id_in_layer_; 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The most recent texture size that was pushed to the texture layer. 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size texture_size_in_layer_; 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 317c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // The most recent content size that was pushed to the texture layer. 318c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Size content_size_in_layer_; 319c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The mailbox of the previously received frame. 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gpu::Mailbox current_mailbox_; 3220f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 3230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // The output surface id of the last received frame. 3240f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) uint32_t last_output_surface_id_; 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 326b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::WeakPtrFactory<RenderWidgetHostViewAndroid> weak_ptr_factory_; 327b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 328c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::queue<base::Closure> ack_callbacks_; 329c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 330a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const bool overscroll_effect_enabled_; 33190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Used to render overscroll overlays. 332a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Note: |overscroll_effect_| will never be NULL, even if it's never enabled. 33390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<OverscrollGlow> overscroll_effect_; 33490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 33568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) bool flush_input_requested_; 33668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 337f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int accelerated_surface_route_id_; 338f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 339f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Size to use if we have no backing ContentViewCore 340f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) gfx::Size default_size_; 341f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 342f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const bool using_synchronous_compositor_; 343f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderWidgetHostViewAndroid); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_BROWSER_RENDERER_HOST_RENDER_WIDGET_HOST_VIEW_ANDROID_H_ 350