Fix Debug building on Windows
[platform/framework/web/crosswalk-tizen.git] / atom / browser / osr / osr_render_widget_host_view.h
1 // Copyright (c) 2016 GitHub, Inc.
2 // Use of this source code is governed by the MIT license that can be
3 // found in the LICENSE file.
4
5 #ifndef ATOM_BROWSER_OSR_OSR_RENDER_WIDGET_HOST_VIEW_H_
6 #define ATOM_BROWSER_OSR_OSR_RENDER_WIDGET_HOST_VIEW_H_
7
8 #include <string>
9 #include <vector>
10
11 #if defined(OS_WIN)
12 #include <windows.h>
13 #endif
14
15 #include "atom/browser/native_window.h"
16 #include "atom/browser/native_window_observer.h"
17 #include "atom/browser/osr/osr_output_device.h"
18 #include "base/process/kill.h"
19 #include "base/threading/thread.h"
20 #include "base/time/time.h"
21 #include "cc/output/compositor_frame.h"
22 #include "cc/scheduler/begin_frame_source.h"
23 #include "content/browser/renderer_host/delegated_frame_host.h"
24 #include "content/browser/renderer_host/render_widget_host_impl.h"
25 #include "content/browser/renderer_host/render_widget_host_view_base.h"
26 #include "content/browser/renderer_host/resize_lock.h"
27 #include "third_party/WebKit/public/platform/WebVector.h"
28 #include "ui/base/ime/text_input_client.h"
29 #include "ui/compositor/compositor.h"
30 #include "ui/compositor/layer_delegate.h"
31 #include "ui/compositor/layer_owner.h"
32 #include "ui/gfx/geometry/point.h"
33
34 #if defined(OS_WIN)
35 #include "ui/gfx/win/window_impl.h"
36 #endif
37
38 #if defined(OS_MACOSX)
39 #include "content/browser/renderer_host/browser_compositor_view_mac.h"
40 #endif
41
42 #if defined(OS_MACOSX)
43 #ifdef __OBJC__
44 @class CALayer;
45 @class NSWindow;
46 #else
47 class CALayer;
48 class NSWindow;
49 #endif
50 #endif
51
52 namespace atom {
53
54 class AtomCopyFrameGenerator;
55 class AtomBeginFrameTimer;
56
57 #if defined(OS_MACOSX)
58 class MacHelper;
59 #endif
60
61 class OffScreenRenderWidgetHostView
62     : public content::RenderWidgetHostViewBase,
63       public ui::CompositorDelegate,
64 #if !defined(OS_MACOSX)
65       public content::DelegatedFrameHostClient,
66 #endif
67       public NativeWindowObserver {
68  public:
69   OffScreenRenderWidgetHostView(bool transparent,
70                                 const OnPaintCallback& callback,
71                                 content::RenderWidgetHost* render_widget_host,
72                                 NativeWindow* native_window);
73   ~OffScreenRenderWidgetHostView() override;
74
75   // content::RenderWidgetHostView:
76   bool OnMessageReceived(const IPC::Message&) override;
77   void InitAsChild(gfx::NativeView) override;
78   content::RenderWidgetHost* GetRenderWidgetHost(void) const override;
79   void SetSize(const gfx::Size &) override;
80   void SetBounds(const gfx::Rect &) override;
81   gfx::Vector2dF GetLastScrollOffset(void) const override;
82   gfx::NativeView GetNativeView(void) const override;
83   gfx::NativeViewAccessible GetNativeViewAccessible(void) override;
84   ui::TextInputClient* GetTextInputClient() override;
85   void Focus(void) override;
86   bool HasFocus(void) const override;
87   bool IsSurfaceAvailableForCopy(void) const override;
88   void Show(void) override;
89   void Hide(void) override;
90   bool IsShowing(void) override;
91   gfx::Rect GetViewBounds(void) const override;
92   gfx::Size GetVisibleViewportSize() const override;
93   void SetInsets(const gfx::Insets&) override;
94   void SetBackgroundColor(SkColor color) override;
95   bool LockMouse(void) override;
96   void UnlockMouse(void) override;
97   void SetNeedsBeginFrames(bool needs_begin_frames) override;
98 #if defined(OS_MACOSX)
99   ui::AcceleratedWidgetMac* GetAcceleratedWidgetMac() const override;
100   void SetActive(bool active) override;
101   void ShowDefinitionForSelection() override;
102   bool SupportsSpeech() const override;
103   void SpeakSelection() override;
104   bool IsSpeaking() const override;
105   void StopSpeaking() override;
106 #endif  // defined(OS_MACOSX)
107
108   // content::RenderWidgetHostViewBase:
109   void OnSwapCompositorFrame(uint32_t, cc::CompositorFrame)
110     override;
111   void ClearCompositorFrame(void) override;
112   void InitAsPopup(content::RenderWidgetHostView *rwhv, const gfx::Rect& rect)
113     override;
114   void InitAsFullscreen(content::RenderWidgetHostView *) override;
115   void UpdateCursor(const content::WebCursor &) override;
116   void SetIsLoading(bool is_loading) override;
117   void TextInputStateChanged(const content::TextInputState& params) override;
118   void ImeCancelComposition(void) override;
119   void RenderProcessGone(base::TerminationStatus, int) override;
120   void Destroy(void) override;
121   void SetTooltipText(const base::string16 &) override;
122 #if defined(OS_MACOSX)
123   void SelectionChanged(const base::string16& text,
124                         size_t offset,
125                         const gfx::Range& range) override;
126 #endif
127   void SelectionBoundsChanged(const ViewHostMsg_SelectionBounds_Params &)
128     override;
129   void CopyFromCompositingSurface(const gfx::Rect &,
130     const gfx::Size &,
131     const content::ReadbackRequestCallback &,
132     const SkColorType) override;
133   void CopyFromCompositingSurfaceToVideoFrame(
134     const gfx::Rect &,
135     const scoped_refptr<media::VideoFrame> &,
136     const base::Callback<void(const gfx::Rect &, bool),
137     base::internal::CopyMode::Copyable> &) override;
138   bool CanCopyToVideoFrame(void) const override;
139   void BeginFrameSubscription(
140     std::unique_ptr<content::RenderWidgetHostViewFrameSubscriber>) override;
141   void EndFrameSubscription() override;
142   bool HasAcceleratedSurface(const gfx::Size &) override;
143   gfx::Rect GetBoundsInRootWindow(void) override;
144   void LockCompositingSurface(void) override;
145   void UnlockCompositingSurface(void) override;
146   void ImeCompositionRangeChanged(
147     const gfx::Range &, const std::vector<gfx::Rect>&) override;
148   gfx::Size GetPhysicalBackingSize() const override;
149   gfx::Size GetRequestedRendererSize() const override;
150
151 #if !defined(OS_MACOSX)
152   // content::DelegatedFrameHostClient:
153   int DelegatedFrameHostGetGpuMemoryBufferClientId(void) const;
154   ui::Layer *DelegatedFrameHostGetLayer(void) const override;
155   bool DelegatedFrameHostIsVisible(void) const override;
156   SkColor DelegatedFrameHostGetGutterColor(SkColor) const override;
157   gfx::Size DelegatedFrameHostDesiredSizeInDIP(void) const override;
158   bool DelegatedFrameCanCreateResizeLock(void) const override;
159   std::unique_ptr<content::ResizeLock> DelegatedFrameHostCreateResizeLock(
160     bool defer_compositor_lock) override;
161   void DelegatedFrameHostResizeLockWasReleased(void) override;
162   void DelegatedFrameHostSendReclaimCompositorResources(
163       int output_surface_id,
164       bool is_swap_ack,
165       const cc::ReturnedResourceArray& resources) override;
166   void SetBeginFrameSource(cc::BeginFrameSource* source) override;
167 #endif  // !defined(OS_MACOSX)
168
169   // ui::CompositorDelegate:
170   std::unique_ptr<cc::SoftwareOutputDevice> CreateSoftwareOutputDevice(
171       ui::Compositor* compositor) override;
172
173   bool InstallTransparency();
174   bool IsAutoResizeEnabled() const;
175
176   // NativeWindowObserver:
177   void OnWindowResize() override;
178   void OnWindowClosed() override;
179
180   void OnBeginFrameTimerTick();
181   void SendBeginFrame(base::TimeTicks frame_time,
182                       base::TimeDelta vsync_period);
183
184 #if defined(OS_MACOSX)
185   void CreatePlatformWidget();
186   void DestroyPlatformWidget();
187 #endif
188
189   void OnPaint(const gfx::Rect& damage_rect, const SkBitmap& bitmap);
190
191   void SetPainting(bool painting);
192   bool IsPainting() const;
193
194   void SetFrameRate(int frame_rate);
195   int GetFrameRate() const;
196
197   ui::Compositor* GetCompositor() const;
198   ui::Layer* GetRootLayer() const;
199   content::DelegatedFrameHost* GetDelegatedFrameHost() const;
200
201   void Invalidate();
202
203   content::RenderWidgetHostImpl* render_widget_host() const
204       { return render_widget_host_; }
205   NativeWindow* window() const { return native_window_; }
206   gfx::Size size() const { return size_; }
207   float scale_factor() const { return scale_factor_; }
208
209  private:
210   void SetupFrameRate(bool force);
211   void ResizeRootLayer();
212
213   // Weak ptrs.
214   content::RenderWidgetHostImpl* render_widget_host_;
215   NativeWindow* native_window_;
216   OffScreenOutputDevice* software_output_device_;
217
218   const bool transparent_;
219   OnPaintCallback callback_;
220
221   int frame_rate_;
222   int frame_rate_threshold_ms_;
223
224   base::Time last_time_;
225
226   float scale_factor_;
227   bool is_showing_;
228   gfx::Vector2dF last_scroll_offset_;
229   gfx::Size size_;
230   bool painting_;
231
232   std::unique_ptr<ui::Layer> root_layer_;
233   std::unique_ptr<ui::Compositor> compositor_;
234   std::unique_ptr<content::DelegatedFrameHost> delegated_frame_host_;
235
236   std::unique_ptr<AtomCopyFrameGenerator> copy_frame_generator_;
237   std::unique_ptr<AtomBeginFrameTimer> begin_frame_timer_;
238
239 #if defined(OS_MACOSX)
240   CALayer* background_layer_;
241   std::unique_ptr<content::BrowserCompositorMac> browser_compositor_;
242
243   // Can not be managed by smart pointer because its header can not be included
244   // in the file that has the destructor.
245   MacHelper* mac_helper_;
246
247   // Selected text on the renderer.
248   std::string selected_text_;
249 #endif
250
251   base::WeakPtrFactory<OffScreenRenderWidgetHostView> weak_ptr_factory_;
252
253   DISALLOW_COPY_AND_ASSIGN(OffScreenRenderWidgetHostView);
254 };
255
256 }  // namespace atom
257
258 #endif  // ATOM_BROWSER_OSR_OSR_RENDER_WIDGET_HOST_VIEW_H_