| 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 return gfx::kNullPluginWindow; |
| 226 } |
| 227 |
| 228 void PrerenderRenderWidgetHostView::DestroyFakePluginWindowHandle( |
| 229 gfx::PluginWindowHandle window) { |
| 230 NOTREACHED(); |
| 231 } |
| 232 |
| 233 void PrerenderRenderWidgetHostView::AcceleratedSurfaceSetIOSurface( |
| 234 gfx::PluginWindowHandle window, |
| 235 int32 width, |
| 236 int32 height, |
| 237 uint64 io_surface_identifier) { |
| 238 } |
| 239 |
| 240 void PrerenderRenderWidgetHostView::AcceleratedSurfaceSetTransportDIB( |
| 241 gfx::PluginWindowHandle window, |
| 242 int32 width, |
| 243 int32 height, |
| 244 TransportDIB::Handle transport_dib) { |
| 245 } |
| 246 |
| 247 void PrerenderRenderWidgetHostView::AcceleratedSurfaceBuffersSwapped( |
| 248 gfx::PluginWindowHandle window, |
| 249 uint64 surface_id, |
| 250 int renderer_id, |
| 251 int32 route_id, |
| 252 int gpu_host_id, |
| 253 uint64 swap_buffers_count) { |
| 254 } |
| 255 |
| 256 void PrerenderRenderWidgetHostView::GpuRenderingStateDidChange() { |
| 257 } |
| 258 #endif // defined(OS_MACOSX) |
| 259 |
| 260 #if defined(TOOLKIT_USES_GTK) |
| 261 void PrerenderRenderWidgetHostView::CreatePluginContainer( |
| 262 gfx::PluginWindowHandle id) { |
| 263 // Since plugins are not loaded until the prerendered page is loaded, this |
| 264 // should never be called. |
| 265 NOTREACHED(); |
| 266 } |
| 267 |
| 268 void PrerenderRenderWidgetHostView::DestroyPluginContainer( |
| 269 gfx::PluginWindowHandle id) { |
| 270 } |
| 271 |
| 272 void PrerenderRenderWidgetHostView::AcceleratedCompositingActivated( |
| 273 bool activated) { |
| 274 } |
| 275 #endif // defined(TOOLKIT_USES_GTK) |
| 276 |
| 277 #if defined(OS_WIN) |
| 278 void PrerenderRenderWidgetHostView::WillWmDestroy() { |
| 279 } |
| 280 |
| 281 void PrerenderRenderWidgetHostView::ShowCompositorHostWindow(bool show) { |
| 282 } |
| 283 #endif // defined(OS_WIN) |
| 284 |
| 285 gfx::PluginWindowHandle |
| 286 PrerenderRenderWidgetHostView::GetCompositingSurface() { |
| 287 return gfx::kNullPluginWindow; |
| 288 } |
| 289 |
| 290 void PrerenderRenderWidgetHostView::SetVisuallyDeemphasized( |
| 291 const SkColor* color, bool animate) { |
| 292 // This will not be called until the RVH is swapped into a tab. |
| 293 NOTREACHED(); |
| 294 } |
| 295 |
| 296 void PrerenderRenderWidgetHostView::SetBackground(const SkBitmap& background) { |
| 297 // This will not be called for HTTP RenderViews. |
| 298 NOTREACHED(); |
| 299 } |
| 300 |
| 301 bool PrerenderRenderWidgetHostView::ContainsNativeView( |
| 302 gfx::NativeView native_view) const { |
| 303 return false; |
| 304 } |
| 305 |
| 306 } // namespace prerender |
| OLD | NEW |