| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/tab_contents/interstitial_page.h" | 5 #include "chrome/browser/tab_contents/interstitial_page.h" |
| 6 | 6 |
| 7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
| 8 #include "base/thread.h" | 8 #include "base/thread.h" |
| 9 #include "chrome/browser/browser.h" | 9 #include "chrome/browser/browser.h" |
| 10 #include "chrome/browser/browser_list.h" | 10 #include "chrome/browser/browser_list.h" |
| 11 #include "chrome/browser/dom_operation_notification_details.h" | 11 #include "chrome/browser/dom_operation_notification_details.h" |
| 12 #include "chrome/browser/tab_contents/navigation_controller.h" | 12 #include "chrome/browser/tab_contents/navigation_controller.h" |
| 13 #include "chrome/browser/tab_contents/navigation_entry.h" | 13 #include "chrome/browser/tab_contents/navigation_entry.h" |
| 14 #include "chrome/browser/tab_contents/web_contents.h" | 14 #include "chrome/browser/tab_contents/web_contents.h" |
| 15 #include "chrome/common/notification_service.h" | 15 #include "chrome/common/notification_service.h" |
| 16 #include "chrome/views/window_delegate.h" | 16 #include "chrome/views/window_delegate.h" |
| 17 #include "grit/browser_resources.h" | 17 #include "grit/browser_resources.h" |
| 18 #include "net/base/escape.h" | 18 #include "net/base/escape.h" |
| 19 | 19 |
| 20 #if defined(OS_WIN) | 20 #if defined(OS_WIN) |
| 21 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" | 21 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" |
| 22 #include "chrome/browser/tab_contents/web_contents_view_win.h" | 22 #include "chrome/browser/tab_contents/web_contents_view_win.h" |
| 23 #include "chrome/views/window.h" | 23 #include "chrome/views/window.h" |
| 24 #else |
| 25 #include "chrome/browser/renderer_host/render_widget_host_view.h" |
| 26 #include "chrome/browser/tab_contents/web_contents_view.h" |
| 24 #endif | 27 #endif |
| 25 | 28 |
| 26 namespace { | 29 namespace { |
| 27 | 30 |
| 28 class ResourceRequestTask : public Task { | 31 class ResourceRequestTask : public Task { |
| 29 public: | 32 public: |
| 30 ResourceRequestTask(int process_id, | 33 ResourceRequestTask(int process_id, |
| 31 int render_view_host_id, | 34 int render_view_host_id, |
| 32 ResourceRequestAction action) | 35 ResourceRequestAction action) |
| 33 : action_(action), | 36 : action_(action), |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 view->set_parent_hwnd(tab_->GetContentNativeView()); | 259 view->set_parent_hwnd(tab_->GetContentNativeView()); |
| 257 WebContentsViewWin* web_contents_view = | 260 WebContentsViewWin* web_contents_view = |
| 258 static_cast<WebContentsViewWin*>(tab_->view()); | 261 static_cast<WebContentsViewWin*>(tab_->view()); |
| 259 render_view_host->AllowDomAutomationBindings(); | 262 render_view_host->AllowDomAutomationBindings(); |
| 260 render_view_host->CreateRenderView(); | 263 render_view_host->CreateRenderView(); |
| 261 // SetSize must be called after CreateRenderView or the HWND won't show. | 264 // SetSize must be called after CreateRenderView or the HWND won't show. |
| 262 view->SetSize(web_contents_view->GetContainerSize()); | 265 view->SetSize(web_contents_view->GetContainerSize()); |
| 263 | 266 |
| 264 return render_view_host; | 267 return render_view_host; |
| 265 #else | 268 #else |
| 266 // TODO(port): RenderWidgetHost* is implemented, but Create and | 269 // It is untested, whether this code is sufficiently generic that it |
| 267 // set_parent_hwnd are specific to RenderWidgetHostWin, so this should | 270 // works with Windows, and thus obsoletes the special-cased code above. |
| 268 // probably be refactored. | 271 // If it does work, don't forget to also clean up the include statements! |
| 269 NOTIMPLEMENTED(); | 272 NOTIMPLEMENTED(); |
| 270 return NULL; | 273 |
| 274 RenderViewHost* render_view_host = new RenderViewHost( |
| 275 SiteInstance::CreateSiteInstance(tab()->profile()), |
| 276 this, MSG_ROUTING_NONE, NULL); |
| 277 WebContentsView* web_contents_view = tab()->view(); |
| 278 RenderWidgetHostView* view = |
| 279 web_contents_view->CreateViewForWidget(render_view_host); |
| 280 render_view_host->set_view(view); |
| 281 render_view_host->AllowDomAutomationBindings(); |
| 282 render_view_host->CreateRenderView(); |
| 283 view->SetSize(web_contents_view->GetContainerSize()); |
| 284 return render_view_host; |
| 271 #endif | 285 #endif |
| 272 } | 286 } |
| 273 | 287 |
| 274 void InterstitialPage::Proceed() { | 288 void InterstitialPage::Proceed() { |
| 275 if (action_taken_) { | 289 if (action_taken_) { |
| 276 NOTREACHED(); | 290 NOTREACHED(); |
| 277 return; | 291 return; |
| 278 } | 292 } |
| 279 Disable(); | 293 Disable(); |
| 280 action_taken_ = true; | 294 action_taken_ = true; |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 #endif | 355 #endif |
| 342 } | 356 } |
| 343 | 357 |
| 344 Profile* InterstitialPage::GetProfile() const { | 358 Profile* InterstitialPage::GetProfile() const { |
| 345 return tab_->profile(); | 359 return tab_->profile(); |
| 346 } | 360 } |
| 347 | 361 |
| 348 void InterstitialPage::DidNavigate( | 362 void InterstitialPage::DidNavigate( |
| 349 RenderViewHost* render_view_host, | 363 RenderViewHost* render_view_host, |
| 350 const ViewHostMsg_FrameNavigate_Params& params) { | 364 const ViewHostMsg_FrameNavigate_Params& params) { |
| 351 #if defined(OS_WIN) | |
| 352 // A fast user could have navigated away from the page that triggered the | 365 // A fast user could have navigated away from the page that triggered the |
| 353 // interstitial while the interstitial was loading, that would have disabled | 366 // interstitial while the interstitial was loading, that would have disabled |
| 354 // us. In that case we can dismiss ourselves. | 367 // us. In that case we can dismiss ourselves. |
| 355 if (!enabled_){ | 368 if (!enabled_){ |
| 356 DontProceed(); | 369 DontProceed(); |
| 357 return; | 370 return; |
| 358 } | 371 } |
| 359 | 372 |
| 360 // The RenderViewHost has loaded its contents, we can show it now. | 373 // The RenderViewHost has loaded its contents, we can show it now. |
| 361 render_view_host_->view()->Show(); | 374 render_view_host_->view()->Show(); |
| 362 tab_->set_interstitial_page(this); | 375 tab_->set_interstitial_page(this); |
| 363 | 376 |
| 364 // Notify the tab we are not loading so the throbber is stopped. It also | 377 // Notify the tab we are not loading so the throbber is stopped. It also |
| 365 // causes a NOTIFY_LOAD_STOP notification, that the AutomationProvider (used | 378 // causes a NOTIFY_LOAD_STOP notification, that the AutomationProvider (used |
| 366 // by the UI tests) expects to consider a navigation as complete. Without this
, | 379 // by the UI tests) expects to consider a navigation as complete. Without this
, |
| 367 // navigating in a UI test to a URL that triggers an interstitial would hang. | 380 // navigating in a UI test to a URL that triggers an interstitial would hang. |
| 368 tab_->SetIsLoading(false, NULL); | 381 tab_->SetIsLoading(false, NULL); |
| 369 #else | |
| 370 // TODO(port): we need RenderViewHost. | |
| 371 NOTIMPLEMENTED(); | |
| 372 #endif | |
| 373 } | 382 } |
| 374 | 383 |
| 375 void InterstitialPage::RenderViewGone(RenderViewHost* render_view_host) { | 384 void InterstitialPage::RenderViewGone(RenderViewHost* render_view_host) { |
| 376 // Our renderer died. This should not happen in normal cases. | 385 // Our renderer died. This should not happen in normal cases. |
| 377 // Just dismiss the interstitial. | 386 // Just dismiss the interstitial. |
| 378 DontProceed(); | 387 DontProceed(); |
| 379 } | 388 } |
| 380 | 389 |
| 381 void InterstitialPage::DomOperationResponse(const std::string& json_string, | 390 void InterstitialPage::DomOperationResponse(const std::string& json_string, |
| 382 int automation_id) { | 391 int automation_id) { |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 505 | 514 |
| 506 void InterstitialPage::InterstitialPageRVHViewDelegate:: | 515 void InterstitialPage::InterstitialPageRVHViewDelegate:: |
| 507 ForwardMessageToDevToolsClient(const IPC::Message& message) { | 516 ForwardMessageToDevToolsClient(const IPC::Message& message) { |
| 508 NOTREACHED() << "InterstitialPage does not support developer tools content."; | 517 NOTREACHED() << "InterstitialPage does not support developer tools content."; |
| 509 } | 518 } |
| 510 | 519 |
| 511 void InterstitialPage::InterstitialPageRVHViewDelegate::OnFindReply( | 520 void InterstitialPage::InterstitialPageRVHViewDelegate::OnFindReply( |
| 512 int request_id, int number_of_matches, const gfx::Rect& selection_rect, | 521 int request_id, int number_of_matches, const gfx::Rect& selection_rect, |
| 513 int active_match_ordinal, bool final_update) { | 522 int active_match_ordinal, bool final_update) { |
| 514 } | 523 } |
| 515 | |
| OLD | NEW |