1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/browser/frame_host/render_widget_host_view_child_frame.h"
7 #include "content/browser/frame_host/cross_process_frame_connector.h"
8 #include "content/browser/renderer_host/render_widget_host_impl.h"
9 #include "content/common/gpu/gpu_messages.h"
10 #include "content/common/view_messages.h"
11 #include "content/public/browser/render_process_host.h"
15 RenderWidgetHostViewChildFrame::RenderWidgetHostViewChildFrame(
16 RenderWidgetHost* widget_host)
17 : host_(RenderWidgetHostImpl::From(widget_host)),
18 frame_connector_(NULL) {
22 RenderWidgetHostViewChildFrame::~RenderWidgetHostViewChildFrame() {
25 void RenderWidgetHostViewChildFrame::InitAsChild(
26 gfx::NativeView parent_view) {
30 RenderWidgetHost* RenderWidgetHostViewChildFrame::GetRenderWidgetHost() const {
34 void RenderWidgetHostViewChildFrame::SetSize(const gfx::Size& size) {
39 void RenderWidgetHostViewChildFrame::SetBounds(const gfx::Rect& rect) {
43 void RenderWidgetHostViewChildFrame::Focus() {
46 bool RenderWidgetHostViewChildFrame::HasFocus() const {
50 bool RenderWidgetHostViewChildFrame::IsSurfaceAvailableForCopy() const {
55 void RenderWidgetHostViewChildFrame::Show() {
59 void RenderWidgetHostViewChildFrame::Hide() {
63 bool RenderWidgetHostViewChildFrame::IsShowing() {
64 return !host_->is_hidden();
67 gfx::Rect RenderWidgetHostViewChildFrame::GetViewBounds() const {
70 rect = frame_connector_->ChildFrameRect();
71 rect.set_width(size_.width());
72 rect.set_height(size_.height());
76 gfx::NativeView RenderWidgetHostViewChildFrame::GetNativeView() const {
81 gfx::NativeViewId RenderWidgetHostViewChildFrame::GetNativeViewId() const {
86 gfx::NativeViewAccessible
87 RenderWidgetHostViewChildFrame::GetNativeViewAccessible() {
92 void RenderWidgetHostViewChildFrame::SetBackground(
93 const SkBitmap& background) {
96 gfx::Size RenderWidgetHostViewChildFrame::GetPhysicalBackingSize() const {
100 void RenderWidgetHostViewChildFrame::InitAsPopup(
101 RenderWidgetHostView* parent_host_view,
102 const gfx::Rect& pos) {
106 void RenderWidgetHostViewChildFrame::InitAsFullscreen(
107 RenderWidgetHostView* reference_host_view) {
111 void RenderWidgetHostViewChildFrame::ImeCancelComposition() {
115 #if defined(OS_MACOSX) || defined(OS_WIN) || defined(USE_AURA)
116 void RenderWidgetHostViewChildFrame::ImeCompositionRangeChanged(
117 const gfx::Range& range,
118 const std::vector<gfx::Rect>& character_bounds) {
123 void RenderWidgetHostViewChildFrame::DidUpdateBackingStore(
124 const gfx::Rect& scroll_rect,
125 const gfx::Vector2d& scroll_delta,
126 const std::vector<gfx::Rect>& copy_rects,
127 const std::vector<ui::LatencyInfo>& latency_info) {
131 void RenderWidgetHostViewChildFrame::WasShown() {
132 if (!host_->is_hidden())
137 void RenderWidgetHostViewChildFrame::WasHidden() {
138 if (host_->is_hidden())
143 void RenderWidgetHostViewChildFrame::MovePluginWindows(
144 const gfx::Vector2d& scroll_offset,
145 const std::vector<WebPluginGeometry>& moves) {
148 void RenderWidgetHostViewChildFrame::Blur() {
151 void RenderWidgetHostViewChildFrame::UpdateCursor(const WebCursor& cursor) {
154 void RenderWidgetHostViewChildFrame::SetIsLoading(bool is_loading) {
158 void RenderWidgetHostViewChildFrame::TextInputTypeChanged(
159 ui::TextInputType type,
160 ui::TextInputMode input_mode,
161 bool can_compose_inline) {
165 void RenderWidgetHostViewChildFrame::RenderProcessGone(
166 base::TerminationStatus status,
170 void RenderWidgetHostViewChildFrame::Destroy() {
171 frame_connector_ = NULL;
173 host_->SetView(NULL);
175 base::MessageLoop::current()->DeleteSoon(FROM_HERE, this);
178 void RenderWidgetHostViewChildFrame::SetTooltipText(
179 const base::string16& tooltip_text) {
182 void RenderWidgetHostViewChildFrame::SelectionChanged(
183 const base::string16& text,
185 const gfx::Range& range) {
188 void RenderWidgetHostViewChildFrame::SelectionBoundsChanged(
189 const ViewHostMsg_SelectionBounds_Params& params) {
192 void RenderWidgetHostViewChildFrame::ScrollOffsetChanged() {
195 void RenderWidgetHostViewChildFrame::OnAcceleratedCompositingStateChange() {
198 void RenderWidgetHostViewChildFrame::AcceleratedSurfaceInitialized(int host_id,
202 void RenderWidgetHostViewChildFrame::AcceleratedSurfaceBuffersSwapped(
203 const GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params& params,
205 if (frame_connector_)
206 frame_connector_->ChildFrameBuffersSwapped(params, gpu_host_id);
209 void RenderWidgetHostViewChildFrame::AcceleratedSurfacePostSubBuffer(
210 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params,
214 void RenderWidgetHostViewChildFrame::OnSwapCompositorFrame(
215 uint32 output_surface_id,
216 scoped_ptr<cc::CompositorFrame> frame) {
217 if (frame_connector_) {
218 frame_connector_->ChildFrameCompositorFrameSwapped(
220 host_->GetProcess()->GetID(),
221 host_->GetRoutingID(),
226 void RenderWidgetHostViewChildFrame::GetScreenInfo(
227 blink::WebScreenInfo* results) {
230 gfx::Rect RenderWidgetHostViewChildFrame::GetBoundsInRootWindow() {
231 // We do not have any root window specific parts in this view.
232 return GetViewBounds();
235 #if defined(OS_WIN) || defined(USE_AURA)
236 void RenderWidgetHostViewChildFrame::ProcessAckedTouchEvent(
237 const TouchEventWithLatencyInfo& touch,
238 InputEventAckState ack_result) {
240 #endif // defined(OS_WIN) || defined(USE_AURA)
242 bool RenderWidgetHostViewChildFrame::LockMouse() {
246 void RenderWidgetHostViewChildFrame::UnlockMouse() {
249 #if defined(OS_MACOSX)
250 void RenderWidgetHostViewChildFrame::SetActive(bool active) {
253 void RenderWidgetHostViewChildFrame::SetTakesFocusOnlyOnMouseDown(bool flag) {
256 void RenderWidgetHostViewChildFrame::SetWindowVisibility(bool visible) {
259 void RenderWidgetHostViewChildFrame::WindowFrameChanged() {
262 void RenderWidgetHostViewChildFrame::ShowDefinitionForSelection() {
265 bool RenderWidgetHostViewChildFrame::SupportsSpeech() const {
269 void RenderWidgetHostViewChildFrame::SpeakSelection() {
272 bool RenderWidgetHostViewChildFrame::IsSpeaking() const {
276 void RenderWidgetHostViewChildFrame::StopSpeaking() {
279 bool RenderWidgetHostViewChildFrame::PostProcessEventForPluginIme(
280 const NativeWebKeyboardEvent& event) {
283 #endif // defined(OS_MACOSX)
285 #if defined(OS_ANDROID)
286 void RenderWidgetHostViewChildFrame::ShowDisambiguationPopup(
287 const gfx::Rect& target_rect,
288 const SkBitmap& zoomed_bitmap) {
291 void RenderWidgetHostViewChildFrame::HasTouchEventHandlers(
292 bool need_touch_events) {
294 #endif // defined(OS_ANDROID)
296 #if defined(TOOLKIT_GTK)
297 GdkEventButton* RenderWidgetHostViewChildFrame::GetLastMouseDown() {
301 gfx::NativeView RenderWidgetHostViewChildFrame::BuildInputMethodsGtkMenu() {
304 #endif // defined(TOOLKIT_GTK)
306 BackingStore* RenderWidgetHostViewChildFrame::AllocBackingStore(
307 const gfx::Size& size) {
312 void RenderWidgetHostViewChildFrame::CopyFromCompositingSurface(
313 const gfx::Rect& src_subrect,
314 const gfx::Size& /* dst_size */,
315 const base::Callback<void(bool, const SkBitmap&)>& callback,
316 const SkBitmap::Config config) {
317 callback.Run(false, SkBitmap());
320 void RenderWidgetHostViewChildFrame::CopyFromCompositingSurfaceToVideoFrame(
321 const gfx::Rect& src_subrect,
322 const scoped_refptr<media::VideoFrame>& target,
323 const base::Callback<void(bool)>& callback) {
328 bool RenderWidgetHostViewChildFrame::CanCopyToVideoFrame() const {
332 void RenderWidgetHostViewChildFrame::AcceleratedSurfaceSuspend() {
336 void RenderWidgetHostViewChildFrame::AcceleratedSurfaceRelease() {
339 bool RenderWidgetHostViewChildFrame::HasAcceleratedSurface(
340 const gfx::Size& desired_size) {
344 gfx::GLSurfaceHandle RenderWidgetHostViewChildFrame::GetCompositingSurface() {
345 return gfx::GLSurfaceHandle(gfx::kNullPluginWindow, gfx::TEXTURE_TRANSPORT);
348 void RenderWidgetHostViewChildFrame::SetHasHorizontalScrollbar(
349 bool has_horizontal_scrollbar) {
352 void RenderWidgetHostViewChildFrame::SetScrollOffsetPinning(
353 bool is_pinned_to_left, bool is_pinned_to_right) {
357 void RenderWidgetHostViewChildFrame::SetParentNativeViewAccessible(
358 gfx::NativeViewAccessible accessible_parent) {
361 gfx::NativeViewId RenderWidgetHostViewChildFrame::GetParentForWindowlessPlugin()
365 #endif // defined(OS_WIN) && defined(USE_AURA)
367 } // namespace content