| 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(); |
| 28 root_window_rect_ = view->GetRootWindowRect(); |
| 29 #endif // defined(OS_MACOSX) |
| 30 SetBounds(view->GetViewBounds()); |
| 31 |
| 32 // PrerenderRenderWidgetHostViews are always hidden. This reduces the |
| 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() { |
| 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(); |
| 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 |