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