| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/frame_host/interstitial_page_impl.h" | 5 #include "content/browser/frame_host/interstitial_page_impl.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| (...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 } | 395 } |
| 396 | 396 |
| 397 void InterstitialPageImpl::RenderFrameCreated( | 397 void InterstitialPageImpl::RenderFrameCreated( |
| 398 RenderFrameHost* render_frame_host) { | 398 RenderFrameHost* render_frame_host) { |
| 399 // Note this is only for subframes in the interstitial, the notification for | 399 // Note this is only for subframes in the interstitial, the notification for |
| 400 // the main frame happens in RenderViewCreated. | 400 // the main frame happens in RenderViewCreated. |
| 401 controller_->delegate()->RenderFrameForInterstitialPageCreated( | 401 controller_->delegate()->RenderFrameForInterstitialPageCreated( |
| 402 render_frame_host); | 402 render_frame_host); |
| 403 } | 403 } |
| 404 | 404 |
| 405 void InterstitialPageImpl::UpdateTitle( |
| 406 RenderFrameHost* render_frame_host, |
| 407 int32 page_id, |
| 408 const base::string16& title, |
| 409 base::i18n::TextDirection title_direction) { |
| 410 if (!enabled()) |
| 411 return; |
| 412 |
| 413 RenderViewHost* render_view_host = render_frame_host->GetRenderViewHost(); |
| 414 DCHECK(render_view_host == render_view_host_); |
| 415 NavigationEntry* entry = controller_->GetVisibleEntry(); |
| 416 if (!entry) { |
| 417 // Crash reports from the field indicate this can be NULL. |
| 418 // This is unexpected as InterstitialPages constructed with the |
| 419 // new_navigation flag set to true create a transient navigation entry |
| 420 // (that is returned as the active entry). And the only case so far of |
| 421 // interstitial created with that flag set to false is with the |
| 422 // SafeBrowsingBlockingPage, when the resource triggering the interstitial |
| 423 // is a sub-resource, meaning the main page has already been loaded and a |
| 424 // navigation entry should have been created. |
| 425 NOTREACHED(); |
| 426 return; |
| 427 } |
| 428 |
| 429 // If this interstitial is shown on an existing navigation entry, we'll need |
| 430 // to remember its title so we can revert to it when hidden. |
| 431 if (!new_navigation_ && !should_revert_web_contents_title_) { |
| 432 original_web_contents_title_ = entry->GetTitle(); |
| 433 should_revert_web_contents_title_ = true; |
| 434 } |
| 435 // TODO(evan): make use of title_direction. |
| 436 // http://code.google.com/p/chromium/issues/detail?id=27094 |
| 437 entry->SetTitle(title); |
| 438 controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE); |
| 439 } |
| 440 |
| 405 RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() { | 441 RenderViewHostDelegateView* InterstitialPageImpl::GetDelegateView() { |
| 406 return rvh_delegate_view_.get(); | 442 return rvh_delegate_view_.get(); |
| 407 } | 443 } |
| 408 | 444 |
| 409 const GURL& InterstitialPageImpl::GetMainFrameLastCommittedURL() const { | 445 const GURL& InterstitialPageImpl::GetMainFrameLastCommittedURL() const { |
| 410 return url_; | 446 return url_; |
| 411 } | 447 } |
| 412 | 448 |
| 413 void InterstitialPageImpl::RenderViewTerminated( | 449 void InterstitialPageImpl::RenderViewTerminated( |
| 414 RenderViewHost* render_view_host, | 450 RenderViewHost* render_view_host, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 // Notify the tab we are not loading so the throbber is stopped. It also | 495 // Notify the tab we are not loading so the throbber is stopped. It also |
| 460 // causes a WebContentsObserver::DidStopLoading callback that the | 496 // causes a WebContentsObserver::DidStopLoading callback that the |
| 461 // AutomationProvider (used by the UI tests) expects to consider a navigation | 497 // AutomationProvider (used by the UI tests) expects to consider a navigation |
| 462 // as complete. Without this, navigating in a UI test to a URL that triggers | 498 // as complete. Without this, navigating in a UI test to a URL that triggers |
| 463 // an interstitial would hang. | 499 // an interstitial would hang. |
| 464 web_contents_was_loading_ = controller_->delegate()->IsLoading(); | 500 web_contents_was_loading_ = controller_->delegate()->IsLoading(); |
| 465 controller_->delegate()->SetIsLoading( | 501 controller_->delegate()->SetIsLoading( |
| 466 controller_->delegate()->GetRenderViewHost(), false, true, NULL); | 502 controller_->delegate()->GetRenderViewHost(), false, true, NULL); |
| 467 } | 503 } |
| 468 | 504 |
| 469 void InterstitialPageImpl::UpdateTitle( | |
| 470 RenderViewHost* render_view_host, | |
| 471 int32 page_id, | |
| 472 const base::string16& title, | |
| 473 base::i18n::TextDirection title_direction) { | |
| 474 if (!enabled()) | |
| 475 return; | |
| 476 | |
| 477 DCHECK(render_view_host == render_view_host_); | |
| 478 NavigationEntry* entry = controller_->GetVisibleEntry(); | |
| 479 if (!entry) { | |
| 480 // Crash reports from the field indicate this can be NULL. | |
| 481 // This is unexpected as InterstitialPages constructed with the | |
| 482 // new_navigation flag set to true create a transient navigation entry | |
| 483 // (that is returned as the active entry). And the only case so far of | |
| 484 // interstitial created with that flag set to false is with the | |
| 485 // SafeBrowsingBlockingPage, when the resource triggering the interstitial | |
| 486 // is a sub-resource, meaning the main page has already been loaded and a | |
| 487 // navigation entry should have been created. | |
| 488 NOTREACHED(); | |
| 489 return; | |
| 490 } | |
| 491 | |
| 492 // If this interstitial is shown on an existing navigation entry, we'll need | |
| 493 // to remember its title so we can revert to it when hidden. | |
| 494 if (!new_navigation_ && !should_revert_web_contents_title_) { | |
| 495 original_web_contents_title_ = entry->GetTitle(); | |
| 496 should_revert_web_contents_title_ = true; | |
| 497 } | |
| 498 // TODO(evan): make use of title_direction. | |
| 499 // http://code.google.com/p/chromium/issues/detail?id=27094 | |
| 500 entry->SetTitle(title); | |
| 501 controller_->delegate()->NotifyNavigationStateChanged(INVALIDATE_TYPE_TITLE); | |
| 502 } | |
| 503 | |
| 504 RendererPreferences InterstitialPageImpl::GetRendererPrefs( | 505 RendererPreferences InterstitialPageImpl::GetRendererPrefs( |
| 505 BrowserContext* browser_context) const { | 506 BrowserContext* browser_context) const { |
| 506 delegate_->OverrideRendererPrefs(&renderer_preferences_); | 507 delegate_->OverrideRendererPrefs(&renderer_preferences_); |
| 507 return renderer_preferences_; | 508 return renderer_preferences_; |
| 508 } | 509 } |
| 509 | 510 |
| 510 WebPreferences InterstitialPageImpl::GetWebkitPrefs() { | 511 WebPreferences InterstitialPageImpl::GetWebkitPrefs() { |
| 511 if (!enabled()) | 512 if (!enabled()) |
| 512 return WebPreferences(); | 513 return WebPreferences(); |
| 513 | 514 |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 | 904 |
| 904 web_contents->GetDelegateView()->TakeFocus(reverse); | 905 web_contents->GetDelegateView()->TakeFocus(reverse); |
| 905 } | 906 } |
| 906 | 907 |
| 907 void InterstitialPageImpl::InterstitialPageRVHDelegateView::OnFindReply( | 908 void InterstitialPageImpl::InterstitialPageRVHDelegateView::OnFindReply( |
| 908 int request_id, int number_of_matches, const gfx::Rect& selection_rect, | 909 int request_id, int number_of_matches, const gfx::Rect& selection_rect, |
| 909 int active_match_ordinal, bool final_update) { | 910 int active_match_ordinal, bool final_update) { |
| 910 } | 911 } |
| 911 | 912 |
| 912 } // namespace content | 913 } // namespace content |
| OLD | NEW |