| 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 LOG(WARNING) << "Here?"; |
| 20 render_widget_host_->set_view(this); |
| 21 } |
| 22 |
| 23 PrerenderRenderWidgetHostView::~PrerenderRenderWidgetHostView() { |
| 24 } |
| 25 |
| 26 void PrerenderRenderWidgetHostView::Init(RenderWidgetHostView* view) { |
| 27 #if defined(OS_MACOSX) |
| 28 cocoa_view_bounds_ = view->GetViewBounds(); |
| 29 root_window_rect_ = view->GetRootWindowRect(); |
| 30 #endif // defined(OS_MACOSX) |
| 31 SetBounds(view->GetViewBounds()); |
| 32 |
| 33 // PrerenderRenderWidgetHostViews are always hidden. This reduces the |
| 34 // process priority of the render process while prerendering, and prevents it |
| 35 // from painting anything until the page is actually displayed. |
| 36 WasHidden(); |
| 37 } |
| 38 |
| 39 void PrerenderRenderWidgetHostView::InitAsPopup( |
| 40 RenderWidgetHostView* parent_host_view, const gfx::Rect& pos) { |
| 41 NOTREACHED(); |
| 42 } |
| 43 |
| 44 void PrerenderRenderWidgetHostView::InitAsFullscreen() { |
| 45 NOTREACHED(); |
| 46 } |
| 47 |
| 48 RenderWidgetHost* PrerenderRenderWidgetHostView::GetRenderWidgetHost() const { |
| 49 return render_widget_host_; |
| 50 } |
| 51 |
| 52 void PrerenderRenderWidgetHostView::DidBecomeSelected() { |
| 53 // The View won't be shown during prerendering. |
| 54 NOTREACHED(); |
| 55 } |
| 56 |
| 57 void PrerenderRenderWidgetHostView::WasHidden() { |
| 58 render_widget_host_->WasHidden(); |
| 59 } |
| 60 |
| 61 void PrerenderRenderWidgetHostView::SetSize(const gfx::Size& size) { |
| 62 SetBounds(gfx::Rect(GetViewBounds().origin(), size)); |
| 63 } |
| 64 |
| 65 void PrerenderRenderWidgetHostView::SetBounds(const gfx::Rect& rect) { |
| 66 bounds_ = rect; |
| 67 if (render_widget_host_) |
| 68 render_widget_host_->WasResized(); |
| 69 } |
| 70 |
| 71 gfx::NativeView PrerenderRenderWidgetHostView::GetNativeView() { |
| 72 return NULL; |
| 73 } |
| 74 |
| 75 void PrerenderRenderWidgetHostView::MovePluginWindows( |
| 76 const std::vector<webkit::npapi::WebPluginGeometry>& moves) { |
| 77 // Since a PrerenderRenderWidgetHostView is always hidden and plugins are not |
| 78 // loaded during prerendering, this will never be called. |
| 79 NOTREACHED(); |
| 80 } |
| 81 |
| 82 void PrerenderRenderWidgetHostView::Focus() { |
| 83 // A PrerenderRenderWidgetHostView can never be focused, as it's always |
| 84 // hidden. |
| 85 NOTREACHED(); |
| 86 } |
| 87 |
| 88 void PrerenderRenderWidgetHostView::Blur() { |
| 89 } |
| 90 |
| 91 bool PrerenderRenderWidgetHostView::HasFocus() { |
| 92 return false; |
| 93 } |
| 94 |
| 95 void PrerenderRenderWidgetHostView::Show() { |
| 96 // A PrerenderRenderWidgetHostView can never be shown, as it is not yet |
| 97 // associated with a tab. |
| 98 NOTREACHED(); |
| 99 } |
| 100 |
| 101 void PrerenderRenderWidgetHostView::Hide() { |
| 102 WasHidden(); |
| 103 } |
| 104 |
| 105 bool PrerenderRenderWidgetHostView::IsShowing() { |
| 106 return false; |
| 107 } |
| 108 |
| 109 gfx::Rect PrerenderRenderWidgetHostView::GetViewBounds() const { |
| 110 return bounds_; |
| 111 } |
| 112 |
| 113 void PrerenderRenderWidgetHostView::UpdateCursor(const WebCursor& cursor) { |
| 114 // The cursor should only be updated in response to a mouse event, which |
| 115 // hidden RenderViews don't have. |
| 116 NOTREACHED(); |
| 117 } |
| 118 |
| 119 void PrerenderRenderWidgetHostView::SetIsLoading(bool is_loading) { |
| 120 // Do nothing. PrerenderContents manages this flag. |
| 121 } |
| 122 |
| 123 void PrerenderRenderWidgetHostView::ImeUpdateTextInputState( |
| 124 WebKit::WebTextInputType type, |
| 125 const gfx::Rect& caret_rect) { |
| 126 // Not called on hidden views. |
| 127 NOTREACHED(); |
| 128 } |
| 129 |
| 130 void PrerenderRenderWidgetHostView::ImeCancelComposition() { |
| 131 // Not called on hidden views. |
| 132 NOTREACHED(); |
| 133 } |
| 134 |
| 135 void PrerenderRenderWidgetHostView::DidUpdateBackingStore( |
| 136 const gfx::Rect& scroll_rect, int scroll_dx, int scroll_dy, |
| 137 const std::vector<gfx::Rect>& copy_rects) { |
| 138 // Since prerendering RenderViewsHosts are always hidden, this will not be |
| 139 // be called. |
| 140 NOTREACHED(); |
| 141 } |
| 142 |
| 143 void PrerenderRenderWidgetHostView::RenderViewGone( |
| 144 base::TerminationStatus status, int error_code) { |
| 145 // TODO(mmenke): This should result in the PrerenderContents cancelling the |
| 146 // prerender itself. |
| 147 Destroy(); |
| 148 } |
| 149 |
| 150 void PrerenderRenderWidgetHostView::WillDestroyRenderWidget( |
| 151 RenderWidgetHost* rwh) { |
| 152 if (rwh == render_widget_host_) |
| 153 render_widget_host_ = NULL; |
| 154 } |
| 155 |
| 156 void PrerenderRenderWidgetHostView::Destroy() { |
| 157 delete this; |
| 158 } |
| 159 |
| 160 void PrerenderRenderWidgetHostView::SetTooltipText( |
| 161 const std::wstring& tooltip_text) { |
| 162 // Since this is only set on mouse move and the View can't be focused, this |
| 163 // will never be called. |
| 164 NOTREACHED(); |
| 165 } |
| 166 |
| 167 BackingStore* PrerenderRenderWidgetHostView::AllocBackingStore( |
| 168 const gfx::Size& size) { |
| 169 // Since prerendering RenderViewsHosts are always hidden, this will not be |
| 170 // be called. |
| 171 NOTREACHED(); |
| 172 return NULL; |
| 173 } |
| 174 |
| 175 #if defined(OS_MACOSX) |
| 176 void PrerenderRenderWidgetHostView::SetTakesFocusOnlyOnMouseDown(bool flag) { |
| 177 // This is only used by on RenderWidgetHosts currently in a TabContents. |
| 178 NOTREACHED(); |
| 179 } |
| 180 |
| 181 gfx::Rect PrerenderRenderWidgetHostView::GetViewCocoaBounds() const { |
| 182 return cocoa_view_bounds_; |
| 183 } |
| 184 |
| 185 gfx::Rect PrerenderRenderWidgetHostView::GetRootWindowRect() { |
| 186 return root_window_rect_; |
| 187 } |
| 188 |
| 189 void PrerenderRenderWidgetHostView::SetActive(bool active) { |
| 190 // This view can never be made visible. |
| 191 NOTREACHED(); |
| 192 } |
| 193 |
| 194 void PrerenderRenderWidgetHostView::SetWindowVisibility(bool visible) { |
| 195 // This view can never be made visible. |
| 196 NOTREACHED(); |
| 197 } |
| 198 |
| 199 void PrerenderRenderWidgetHostView::WindowFrameChanged() { |
| 200 // Since there's no frame, and nothing to notify |this| of its change, this |
| 201 // will never get called. |
| 202 NOTREACHED(); |
| 203 } |
| 204 |
| 205 // Since plugins are not loaded until the prerendered page is displayed, none of |
| 206 // the following functions will be called. |
| 207 void PrerenderRenderWidgetHostView::PluginFocusChanged(bool focused, |
| 208 int plugin_id) { |
| 209 NOTREACHED(); |
| 210 } |
| 211 |
| 212 void PrerenderRenderWidgetHostView::StartPluginIme() { |
| 213 NOTREACHED(); |
| 214 } |
| 215 |
| 216 bool PrerenderRenderWidgetHostView::PostProcessEventForPluginIme( |
| 217 const NativeWebKeyboardEvent& event) { |
| 218 NOTREACHED(); |
| 219 return false; |
| 220 } |
| 221 |
| 222 gfx::PluginWindowHandle |
| 223 PrerenderRenderWidgetHostView::AllocateFakePluginWindowHandle( |
| 224 bool opaque, bool root) { |
| 225 NOTREACHED(); |
| 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 } |
| 240 |
| 241 void PrerenderRenderWidgetHostView::AcceleratedSurfaceSetTransportDIB( |
| 242 gfx::PluginWindowHandle window, |
| 243 int32 width, |
| 244 int32 height, |
| 245 TransportDIB::Handle transport_dib) { |
| 246 } |
| 247 |
| 248 void PrerenderRenderWidgetHostView::AcceleratedSurfaceBuffersSwapped( |
| 249 gfx::PluginWindowHandle window, |
| 250 uint64 surface_id, |
| 251 int renderer_id, |
| 252 int32 route_id, |
| 253 int gpu_host_id, |
| 254 uint64 swap_buffers_count) { |
| 255 } |
| 256 |
| 257 void PrerenderRenderWidgetHostView::GpuRenderingStateDidChange() { |
| 258 } |
| 259 #endif // defined(OS_MACOSX) |
| 260 |
| 261 #if defined(TOOLKIT_USES_GTK) |
| 262 void PrerenderRenderWidgetHostView::CreatePluginContainer( |
| 263 gfx::PluginWindowHandle id) { |
| 264 // Since plugins are not loaded until the prerendered page is loaded, this |
| 265 // should never be called. |
| 266 NOTREACHED(); |
| 267 } |
| 268 |
| 269 void PrerenderRenderWidgetHostView::DestroyPluginContainer( |
| 270 gfx::PluginWindowHandle id) { |
| 271 } |
| 272 |
| 273 void PrerenderRenderWidgetHostView::AcceleratedCompositingActivated( |
| 274 bool activated) { |
| 275 } |
| 276 #endif // defined(TOOLKIT_USES_GTK) |
| 277 |
| 278 #if defined(OS_WIN) |
| 279 void PrerenderRenderWidgetHostView::WillWmDestroy() { |
| 280 } |
| 281 |
| 282 void PrerenderRenderWidgetHostView::ShowCompositorHostWindow(bool show) { |
| 283 } |
| 284 #endif // defined(OS_WIN) |
| 285 |
| 286 gfx::PluginWindowHandle |
| 287 PrerenderRenderWidgetHostView::GetCompositingSurface() { |
| 288 return gfx::kNullPluginWindow; |
| 289 } |
| 290 |
| 291 void PrerenderRenderWidgetHostView::SetVisuallyDeemphasized( |
| 292 const SkColor* color, bool animate) { |
| 293 // This will not be called until the RVH is swapped into a tab. |
| 294 NOTREACHED(); |
| 295 } |
| 296 |
| 297 void PrerenderRenderWidgetHostView::SetBackground(const SkBitmap& background) { |
| 298 // This will not be called for HTTP RenderViews. |
| 299 NOTREACHED(); |
| 300 } |
| 301 |
| 302 bool PrerenderRenderWidgetHostView::ContainsNativeView( |
| 303 gfx::NativeView native_view) const { |
| 304 return false; |
| 305 } |
| 306 |
| 307 } // namespace prerender |
| OLD | NEW |