| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/web_contents/web_contents_impl.h" | 5 #include "content/browser/web_contents/web_contents_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 707 const NavigationControllerImpl& WebContentsImpl::GetController() const { | 707 const NavigationControllerImpl& WebContentsImpl::GetController() const { |
| 708 return controller_; | 708 return controller_; |
| 709 } | 709 } |
| 710 | 710 |
| 711 BrowserContext* WebContentsImpl::GetBrowserContext() const { | 711 BrowserContext* WebContentsImpl::GetBrowserContext() const { |
| 712 return controller_.GetBrowserContext(); | 712 return controller_.GetBrowserContext(); |
| 713 } | 713 } |
| 714 | 714 |
| 715 const GURL& WebContentsImpl::GetURL() const { | 715 const GURL& WebContentsImpl::GetURL() const { |
| 716 // We may not have a navigation entry yet | 716 // We may not have a navigation entry yet |
| 717 NavigationEntry* entry = controller_.GetVisibleEntry(); | 717 NavigationEntry* entry = controller_.GetActiveEntry(); |
| 718 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); | 718 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); |
| 719 } | 719 } |
| 720 | 720 |
| 721 WebContentsDelegate* WebContentsImpl::GetDelegate() { | 721 WebContentsDelegate* WebContentsImpl::GetDelegate() { |
| 722 return delegate_; | 722 return delegate_; |
| 723 } | 723 } |
| 724 | 724 |
| 725 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { | 725 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { |
| 726 // TODO(cbentzel): remove this debugging code? | 726 // TODO(cbentzel): remove this debugging code? |
| 727 if (delegate == delegate_) | 727 if (delegate == delegate_) |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 853 std::string accept_languages = | 853 std::string accept_languages = |
| 854 GetContentClient()->browser()->GetAcceptLangs( | 854 GetContentClient()->browser()->GetAcceptLangs( |
| 855 GetBrowserContext()); | 855 GetBrowserContext()); |
| 856 if (entry) { | 856 if (entry) { |
| 857 return entry->GetTitleForDisplay(accept_languages); | 857 return entry->GetTitleForDisplay(accept_languages); |
| 858 } | 858 } |
| 859 WebUI* our_web_ui = render_manager_.pending_web_ui() ? | 859 WebUI* our_web_ui = render_manager_.pending_web_ui() ? |
| 860 render_manager_.pending_web_ui() : render_manager_.web_ui(); | 860 render_manager_.pending_web_ui() : render_manager_.web_ui(); |
| 861 if (our_web_ui) { | 861 if (our_web_ui) { |
| 862 // Don't override the title in view source mode. | 862 // Don't override the title in view source mode. |
| 863 entry = controller_.GetVisibleEntry(); | 863 entry = controller_.GetActiveEntry(); |
| 864 if (!(entry && entry->IsViewSourceMode())) { | 864 if (!(entry && entry->IsViewSourceMode())) { |
| 865 // Give the Web UI the chance to override our title. | 865 // Give the Web UI the chance to override our title. |
| 866 const string16& title = our_web_ui->GetOverriddenTitle(); | 866 const string16& title = our_web_ui->GetOverriddenTitle(); |
| 867 if (!title.empty()) | 867 if (!title.empty()) |
| 868 return title; | 868 return title; |
| 869 } | 869 } |
| 870 } | 870 } |
| 871 | 871 |
| 872 // We use the title for the last committed entry rather than a pending | 872 // We use the title for the last committed entry rather than a pending |
| 873 // navigation entry. For example, when the user types in a URL, we want to | 873 // navigation entry. For example, when the user types in a URL, we want to |
| 874 // keep the old page's title until the new load has committed and we get a new | 874 // keep the old page's title until the new load has committed and we get a new |
| 875 // title. | 875 // title. |
| 876 entry = controller_.GetLastCommittedEntry(); | 876 entry = controller_.GetLastCommittedEntry(); |
| 877 | |
| 878 // We make an exception for initial navigations, because we can have a | |
| 879 // committed entry for an initial navigation when doing a history navigation | |
| 880 // in a new tab, such as Ctrl+Back. | |
| 881 if (entry && controller_.IsInitialNavigation()) | |
| 882 entry = controller_.GetVisibleEntry(); | |
| 883 | |
| 884 if (entry) { | 877 if (entry) { |
| 885 return entry->GetTitleForDisplay(accept_languages); | 878 return entry->GetTitleForDisplay(accept_languages); |
| 886 } | 879 } |
| 887 | 880 |
| 888 // |page_title_when_no_navigation_entry_| is finally used | 881 // |page_title_when_no_navigation_entry_| is finally used |
| 889 // if no title cannot be retrieved. | 882 // if no title cannot be retrieved. |
| 890 return page_title_when_no_navigation_entry_; | 883 return page_title_when_no_navigation_entry_; |
| 891 } | 884 } |
| 892 | 885 |
| 893 int32 WebContentsImpl::GetMaxPageID() { | 886 int32 WebContentsImpl::GetMaxPageID() { |
| (...skipping 1082 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1976 bool is_error_page = (url.spec() == kUnreachableWebDataURL); | 1969 bool is_error_page = (url.spec() == kUnreachableWebDataURL); |
| 1977 bool is_iframe_srcdoc = (url.spec() == chrome::kAboutSrcDocURL); | 1970 bool is_iframe_srcdoc = (url.spec() == chrome::kAboutSrcDocURL); |
| 1978 GURL validated_url(url); | 1971 GURL validated_url(url); |
| 1979 RenderProcessHost* render_process_host = | 1972 RenderProcessHost* render_process_host = |
| 1980 render_view_host->GetProcess(); | 1973 render_view_host->GetProcess(); |
| 1981 RenderViewHost::FilterURL(render_process_host, false, &validated_url); | 1974 RenderViewHost::FilterURL(render_process_host, false, &validated_url); |
| 1982 | 1975 |
| 1983 if (is_main_frame) | 1976 if (is_main_frame) |
| 1984 DidChangeLoadProgress(0); | 1977 DidChangeLoadProgress(0); |
| 1985 | 1978 |
| 1986 // Create a pending entry for this provisional load (if none exists) using the | |
| 1987 // current SiteInstance, and ensure the address bar updates accordingly. | |
| 1988 // We don't know the referrer or extra headers at this point, but the referrer | |
| 1989 // will be set properly upon commit. | |
| 1990 if (is_main_frame && !controller_.GetPendingEntry()) { | |
| 1991 NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry( | |
| 1992 controller_.CreateNavigationEntry(validated_url, | |
| 1993 content::Referrer(), | |
| 1994 content::PAGE_TRANSITION_LINK, | |
| 1995 true /* is_renderer_initiated */, | |
| 1996 std::string(), GetBrowserContext())); | |
| 1997 entry->set_site_instance( | |
| 1998 static_cast<SiteInstanceImpl*>(GetSiteInstance())); | |
| 1999 controller_.SetPendingEntry(entry); | |
| 2000 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL); | |
| 2001 } | |
| 2002 | |
| 2003 // Notify observers about the start of the provisional load. | 1979 // Notify observers about the start of the provisional load. |
| 2004 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1980 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 2005 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id, | 1981 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id, |
| 2006 is_main_frame, validated_url, is_error_page, | 1982 is_main_frame, validated_url, is_error_page, |
| 2007 is_iframe_srcdoc, render_view_host)); | 1983 is_iframe_srcdoc, render_view_host)); |
| 2008 | 1984 |
| 2009 if (is_main_frame) { | 1985 if (is_main_frame) { |
| 2010 // Notify observers about the provisional change in the main frame URL. | 1986 // Notify observers about the provisional change in the main frame URL. |
| 2011 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1987 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 2012 ProvisionalChangeToMainFrameUrl(validated_url, | 1988 ProvisionalChangeToMainFrameUrl(validated_url, |
| (...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2928 Source<WebContents>(opener_)); | 2904 Source<WebContents>(opener_)); |
| 2929 opener_ = NULL; | 2905 opener_ = NULL; |
| 2930 } | 2906 } |
| 2931 | 2907 |
| 2932 // Notify all swapped out RenderViewHosts for this tab. This is important | 2908 // Notify all swapped out RenderViewHosts for this tab. This is important |
| 2933 // in case we go back to them, or if another window in those processes tries | 2909 // in case we go back to them, or if another window in those processes tries |
| 2934 // to access window.opener. | 2910 // to access window.opener. |
| 2935 render_manager_.DidDisownOpener(rvh); | 2911 render_manager_.DidDisownOpener(rvh); |
| 2936 } | 2912 } |
| 2937 | 2913 |
| 2938 void WebContentsImpl::DidAccessInitialDocument() { | |
| 2939 // Update the URL display. | |
| 2940 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL); | |
| 2941 } | |
| 2942 | |
| 2943 void WebContentsImpl::DocumentAvailableInMainFrame( | 2914 void WebContentsImpl::DocumentAvailableInMainFrame( |
| 2944 RenderViewHost* render_view_host) { | 2915 RenderViewHost* render_view_host) { |
| 2945 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 2916 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 2946 DocumentAvailableInMainFrame()); | 2917 DocumentAvailableInMainFrame()); |
| 2947 } | 2918 } |
| 2948 | 2919 |
| 2949 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame( | 2920 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame( |
| 2950 RenderViewHost* render_view_host, | 2921 RenderViewHost* render_view_host, |
| 2951 int32 page_id) { | 2922 int32 page_id) { |
| 2952 NotificationService::current()->Notify( | 2923 NotificationService::current()->Notify( |
| (...skipping 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3438 } | 3409 } |
| 3439 | 3410 |
| 3440 BrowserPluginGuestManager* | 3411 BrowserPluginGuestManager* |
| 3441 WebContentsImpl::GetBrowserPluginGuestManager() const { | 3412 WebContentsImpl::GetBrowserPluginGuestManager() const { |
| 3442 return static_cast<BrowserPluginGuestManager*>( | 3413 return static_cast<BrowserPluginGuestManager*>( |
| 3443 GetBrowserContext()->GetUserData( | 3414 GetBrowserContext()->GetUserData( |
| 3444 browser_plugin::kBrowserPluginGuestManagerKeyName)); | 3415 browser_plugin::kBrowserPluginGuestManagerKeyName)); |
| 3445 } | 3416 } |
| 3446 | 3417 |
| 3447 } // namespace content | 3418 } // namespace content |
| OLD | NEW |