Chromium Code Reviews
|
| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |