Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Side by Side Diff: chrome/browser/prerender/prerender_render_widget_host_view.cc

Issue 6685012: Give prerendering RVH's RenderWidgetHostViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Response to Scott's comments. Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2011 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.
4
5 #include "chrome/browser/prerender/prerender_render_widget_host_view.h"
6
7 #include "base/logging.h"
8 #include "chrome/browser/prerender/prerender_contents.h"
9 #include "chrome/browser/prerender/prerender_final_status.h"
10 #include "content/browser/renderer_host/render_widget_host.h"
11
12 namespace prerender {
13
14 PrerenderRenderWidgetHostView::PrerenderRenderWidgetHostView(
15 RenderWidgetHost* render_widget_host,
16 PrerenderContents* prerender_contents)
17 : render_widget_host_(render_widget_host),
18 prerender_contents_(prerender_contents) {
19 render_widget_host_->set_view(this);
20 }
21
22 PrerenderRenderWidgetHostView::~PrerenderRenderWidgetHostView() {
23 }
24
25 void PrerenderRenderWidgetHostView::Init(RenderWidgetHostView* view) {
26 #if defined(OS_MACOSX)
27 cocoa_view_bounds_ = view->GetViewBounds();
cbentzel 2011/04/19 17:42:41 Should this be done inside of SetBounds?
mmenke 2011/04/19 20:00:01 We need the original view to do get those bounds,
28 root_window_rect_ = view->GetRootWindowRect();
29 #endif // defined(OS_MACOSX)
30 SetBounds(view->GetViewBounds());
31
32 // PrerenderRenderWidgetHostViews are always hidden. This has reduces the
cbentzel 2011/04/19 17:42:41 nit: This reduces the
mmenke 2011/04/19 20:00:01 Fixed.
33 // process priority of the render process while prerendering, and prevents it
34 // from painting anything until the page is actually displayed.
35 WasHidden();
36 }
37
38 void PrerenderRenderWidgetHostView::InitAsPopup(
39 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) {
40 NOTREACHED();
41 }
42
43 void PrerenderRenderWidgetHostView::InitAsFullscreen() {
cbentzel 2011/04/19 17:42:41 What happens if a prerender is triggered while Chr
mmenke 2011/04/19 20:00:01 It seems to work fine. There's no is_fullscreen()
44 NOTREACHED();
45 }
46
47 RenderWidgetHost* PrerenderRenderWidgetHostView::GetRenderWidgetHost() const {
48 return render_widget_host_;
49 }
50
51 void PrerenderRenderWidgetHostView::DidBecomeSelected() {
52 // The View won't be shown during prerendering.
53 NOTREACHED();
54 }
55
56 void PrerenderRenderWidgetHostView::WasHidden() {
57 render_widget_host_->WasHidden();
58 }
59
60 void PrerenderRenderWidgetHostView::SetSize(const gfx::Size& size) {
61 SetBounds(gfx::Rect(GetViewBounds().origin(), size));
62 }
63
64 void PrerenderRenderWidgetHostView::SetBounds(const gfx::Rect& rect) {
65 bounds_ = rect;
66 if (render_widget_host_)
67 render_widget_host_->WasResized();
68 }
69
70 gfx::NativeView PrerenderRenderWidgetHostView::GetNativeView() {
71 return NULL;
72 }
73
74 void PrerenderRenderWidgetHostView::MovePluginWindows(
75 const std::vector<webkit::npapi::WebPluginGeometry>& moves) {
76 // Since a PrerenderRenderWidgetHostView is always hidden and plugins are not
77 // loaded during prerendering, this will never be called.
78 NOTREACHED();
79 }
80
81 void PrerenderRenderWidgetHostView::Focus() {
82 // A PrerenderRenderWidgetHostView can never be focused, as it's always
83 // hidden.
84 NOTREACHED();
85 }
86
87 void PrerenderRenderWidgetHostView::Blur() {
88 }
89
90 bool PrerenderRenderWidgetHostView::HasFocus() {
91 return false;
92 }
93
94 void PrerenderRenderWidgetHostView::Show() {
95 // A PrerenderRenderWidgetHostView can never be shown, as it is not yet
96 // associated with a tab.
97 NOTREACHED();
98 }
99
100 void PrerenderRenderWidgetHostView::Hide() {
101 WasHidden();
102 }
103
104 bool PrerenderRenderWidgetHostView::IsShowing() {
105 return false;
106 }
107
108 gfx::Rect PrerenderRenderWidgetHostView::GetViewBounds() const {
109 return bounds_;
110 }
111
112 void PrerenderRenderWidgetHostView::UpdateCursor(const WebCursor& cursor) {
113 // The cursor should only be updated in response to a mouse event, which
114 // hidden RenderViews don't have.
115 NOTREACHED();
116 }
117
118 void PrerenderRenderWidgetHostView::SetIsLoading(bool is_loading) {
119 // Do nothing. PrerenderContents manages this flag.
120 }
121
122 void PrerenderRenderWidgetHostView::ImeUpdateTextInputState(
123 WebKit::WebTextInputType type,
124 const gfx::Rect& caret_rect) {
125 // Not called on hidden views.
126 NOTREACHED();
127 }
128
129 void PrerenderRenderWidgetHostView::ImeCancelComposition() {
130 // Not called on hidden views.
131 NOTREACHED();
132 }
133
134 void PrerenderRenderWidgetHostView::DidUpdateBackingStore(
135 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy,
136 const std::vector<gfx::Rect>& copy_rects) {
137 // Since prerendering RenderViewsHosts are always hidden, this will not be
138 // be called.
139 NOTREACHED();
140 }
141
142 void PrerenderRenderWidgetHostView::RenderViewGone(
143 base::TerminationStatus status, int error_code) {
144 // TODO(mmenke): This should result in the PrerenderContents cancelling the
145 // prerender itself.
146 Destroy();
147 }
148
149 void PrerenderRenderWidgetHostView::WillDestroyRenderWidget(
150 RenderWidgetHost* rwh) {
151 if (rwh == render_widget_host_)
152 render_widget_host_ = NULL;
153 }
154
155 void PrerenderRenderWidgetHostView::Destroy() {
156 delete this;
157 }
158
159 void PrerenderRenderWidgetHostView::SetTooltipText(
160 const std::wstring& tooltip_text) {
161 // Since this is only set on mouse move and the View can't be focused, this
162 // will never be called.
163 NOTREACHED();
164 }
165
166 BackingStore* PrerenderRenderWidgetHostView::AllocBackingStore(
167 const gfx::Size& size) {
168 // Since prerendering RenderViewsHosts are always hidden, this will not be
169 // be called.
170 NOTREACHED();
171 return NULL;
172 }
173
174 #if defined(OS_MACOSX)
175 void PrerenderRenderWidgetHostView::SetTakesFocusOnlyOnMouseDown(bool flag) {
176 // This is only used by on RenderWidgetHosts currently in a TabContents.
177 NOTREACHED();
178 }
179
180 gfx::Rect PrerenderRenderWidgetHostView::GetViewCocoaBounds() const {
181 return cocoa_view_bounds_;
182 }
183
184 gfx::Rect PrerenderRenderWidgetHostView::GetRootWindowRect() {
185 return root_window_rect_;
186 }
187
188 void PrerenderRenderWidgetHostView::SetActive(bool active) {
189 // This view can never be made visible.
190 NOTREACHED();
191 }
192
193 void PrerenderRenderWidgetHostView::SetWindowVisibility(bool visible) {
194 // This view can never be made visible.
195 NOTREACHED();
196 }
197
198 void PrerenderRenderWidgetHostView::WindowFrameChanged() {
199 // Since there's no frame, and nothing to notify |this| of its change, this
200 // will never get called.
201 NOTREACHED();
202 }
203
204 // Since plugins are not loaded until the prerendered page is displayed, none of
205 // the following functions will be called.
206 void PrerenderRenderWidgetHostView::PluginFocusChanged(bool focused,
207 int plugin_id) {
208 NOTREACHED();
209 }
210
211 void PrerenderRenderWidgetHostView::StartPluginIme() {
212 NOTREACHED();
213 }
214
215 bool PrerenderRenderWidgetHostView::PostProcessEventForPluginIme(
216 const NativeWebKeyboardEvent& event) {
217 NOTREACHED();
218 return false;
219 }
220
221 gfx::PluginWindowHandle
222 PrerenderRenderWidgetHostView::AllocateFakePluginWindowHandle(
223 bool opaque, bool root) {
224 NOTREACHED();
cbentzel 2011/04/19 17:42:41 Why is this NOTREACHED() with stuff below it? Wher
mmenke 2011/04/19 20:00:01 On at least some platforms, compositing calls in t
225 prerender_contents_->set_pending_final_status(FINAL_STATUS_COMPOSITING);
226 return gfx::kNullPluginWindow;
227 }
228
229 void PrerenderRenderWidgetHostView::DestroyFakePluginWindowHandle(
230 gfx::PluginWindowHandle window) {
231 NOTREACHED();
232 }
233
234 void PrerenderRenderWidgetHostView::AcceleratedSurfaceSetIOSurface(
235 gfx::PluginWindowHandle window,
236 int32 width,
237 int32 height,
238 uint64 io_surface_identifier) {
239 NOTREACHED();
240 }
241
242 void PrerenderRenderWidgetHostView::AcceleratedSurfaceSetTransportDIB(
243 gfx::PluginWindowHandle window,
244 int32 width,
245 int32 height,
246 TransportDIB::Handle transport_dib) {
247 NOTREACHED();
248 }
249
250 void PrerenderRenderWidgetHostView::AcceleratedSurfaceBuffersSwapped(
251 gfx::PluginWindowHandle window,
252 uint64 surface_id,
253 int renderer_id,
254 int32 route_id,
255 int gpu_host_id,
256 uint64 swap_buffers_count) {
257 NOTREACHED();
258 }
259
260 void PrerenderRenderWidgetHostView::GpuRenderingStateDidChange() {
261 // This will not be called, since AcquireCompositingSurface returns a NULL
262 // window handle.
263 NOTREACHED();
264 }
265 #endif // defined(OS_MACOSX)
266
267 #if defined(TOOLKIT_USES_GTK)
268 void PrerenderRenderWidgetHostView::CreatePluginContainer(
269 gfx::PluginWindowHandle id) {
270 // Since plugins are not loaded until the prerendered page is loaded, this
271 // should never be called.
272 NOTREACHED();
273 }
274
275 void PrerenderRenderWidgetHostView::DestroyPluginContainer(
276 gfx::PluginWindowHandle id) {
277 // Since plugins are not loaded until the prerendered page is loaded, this
278 // should never be called.
279 NOTREACHED();
280 }
281
282 void PrerenderRenderWidgetHostView::AcceleratedCompositingActivated(
283 bool activated) {
284 // This will not be called, since AcquireCompositingSurface returns a NULL
285 // window handle.
286 DCHECK(!activated);
287 if (activated)
288 prerender_contents_->set_pending_final_status(FINAL_STATUS_COMPOSITING);
289 }
290 #endif // defined(TOOLKIT_USES_GTK)
291
292 #if defined(OS_WIN)
293 void PrerenderRenderWidgetHostView::WillWmDestroy() {
294 // Will never be called for a view not in a TabContents.
295 NOTREACHED();
296 }
297
298 void PrerenderRenderWidgetHostView::ShowCompositorHostWindow(bool show) {
299 // This will not be called, since AcquireCompositingSurface returns a NULL
300 // window handle.
301 DCHECK(!show);
302 if (show)
303 prerender_contents_->set_pending_final_status(FINAL_STATUS_COMPOSITING);
304 }
305 #endif // defined(OS_WIN)
306
307 gfx::PluginWindowHandle
308 PrerenderRenderWidgetHostView::AcquireCompositingSurface() {
309 // Cancel prerendering if try to use a compositing surface.
310 prerender_contents_->set_pending_final_status(FINAL_STATUS_COMPOSITING);
311 return gfx::kNullPluginWindow;
312 }
313
314 void PrerenderRenderWidgetHostView::ReleaseCompositingSurface(
315 gfx::PluginWindowHandle surface) {
316 // This should not be called, since AcquireCompositingSurface returns a null
317 // window.
318 DCHECK_EQ(surface, gfx::kNullPluginWindow);
319 }
320
321 void PrerenderRenderWidgetHostView::SetVisuallyDeemphasized(
322 const SkColor* color, bool animate) {
323 // This will not be called until the RVH is swapped into a tab.
324 NOTREACHED();
325 }
326
327 void PrerenderRenderWidgetHostView::SetBackground(const SkBitmap& background) {
328 // This will not be called for HTTP RenderViews.
329 NOTREACHED();
330 }
331
332 bool PrerenderRenderWidgetHostView::ContainsNativeView(
333 gfx::NativeView native_view) const {
334 return false;
335 }
336
337 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_render_widget_host_view.h ('k') | chrome/browser/prerender/prerender_resource_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698