Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(357)

Side by Side Diff: content/browser/web_contents/web_contents_impl.cc

Issue 12541018: Allow showing pending URL for new tab navigations, but only if safe. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix title in new and cloned tabs. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/view_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 730 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 const NavigationControllerImpl& WebContentsImpl::GetController() const { 741 const NavigationControllerImpl& WebContentsImpl::GetController() const {
742 return controller_; 742 return controller_;
743 } 743 }
744 744
745 BrowserContext* WebContentsImpl::GetBrowserContext() const { 745 BrowserContext* WebContentsImpl::GetBrowserContext() const {
746 return controller_.GetBrowserContext(); 746 return controller_.GetBrowserContext();
747 } 747 }
748 748
749 const GURL& WebContentsImpl::GetURL() const { 749 const GURL& WebContentsImpl::GetURL() const {
750 // We may not have a navigation entry yet 750 // We may not have a navigation entry yet
751 NavigationEntry* entry = controller_.GetActiveEntry(); 751 NavigationEntry* entry = controller_.GetVisibleEntry();
752 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); 752 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL();
753 } 753 }
754 754
755 WebContentsDelegate* WebContentsImpl::GetDelegate() { 755 WebContentsDelegate* WebContentsImpl::GetDelegate() {
756 return delegate_; 756 return delegate_;
757 } 757 }
758 758
759 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { 759 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) {
760 // TODO(cbentzel): remove this debugging code? 760 // TODO(cbentzel): remove this debugging code?
761 if (delegate == delegate_) 761 if (delegate == delegate_)
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
887 std::string accept_languages = 887 std::string accept_languages =
888 GetContentClient()->browser()->GetAcceptLangs( 888 GetContentClient()->browser()->GetAcceptLangs(
889 GetBrowserContext()); 889 GetBrowserContext());
890 if (entry) { 890 if (entry) {
891 return entry->GetTitleForDisplay(accept_languages); 891 return entry->GetTitleForDisplay(accept_languages);
892 } 892 }
893 WebUI* our_web_ui = render_manager_.pending_web_ui() ? 893 WebUI* our_web_ui = render_manager_.pending_web_ui() ?
894 render_manager_.pending_web_ui() : render_manager_.web_ui(); 894 render_manager_.pending_web_ui() : render_manager_.web_ui();
895 if (our_web_ui) { 895 if (our_web_ui) {
896 // Don't override the title in view source mode. 896 // Don't override the title in view source mode.
897 entry = controller_.GetActiveEntry(); 897 entry = controller_.GetVisibleEntry();
898 if (!(entry && entry->IsViewSourceMode())) { 898 if (!(entry && entry->IsViewSourceMode())) {
899 // Give the Web UI the chance to override our title. 899 // Give the Web UI the chance to override our title.
900 const string16& title = our_web_ui->GetOverriddenTitle(); 900 const string16& title = our_web_ui->GetOverriddenTitle();
901 if (!title.empty()) 901 if (!title.empty())
902 return title; 902 return title;
903 } 903 }
904 } 904 }
905 905
906 // We use the title for the last committed entry rather than a pending 906 // We use the title for the last committed entry rather than a pending
907 // navigation entry. For example, when the user types in a URL, we want to 907 // navigation entry. For example, when the user types in a URL, we want to
908 // keep the old page's title until the new load has committed and we get a new 908 // keep the old page's title until the new load has committed and we get a new
909 // title. 909 // title.
910 entry = controller_.GetLastCommittedEntry(); 910 entry = controller_.GetLastCommittedEntry();
911
912 // We make an exception for initial navigations, because we can have a
913 // committed entry for an initial navigation when doing a history navigation
914 // in a new tab, such as Ctrl+Back.
915 if (entry && controller_.IsInitialNavigation())
916 entry = controller_.GetVisibleEntry();
917
911 if (entry) { 918 if (entry) {
912 return entry->GetTitleForDisplay(accept_languages); 919 return entry->GetTitleForDisplay(accept_languages);
913 } 920 }
914 921
915 // |page_title_when_no_navigation_entry_| is finally used 922 // |page_title_when_no_navigation_entry_| is finally used
916 // if no title cannot be retrieved. 923 // if no title cannot be retrieved.
917 return page_title_when_no_navigation_entry_; 924 return page_title_when_no_navigation_entry_;
918 } 925 }
919 926
920 int32 WebContentsImpl::GetMaxPageID() { 927 int32 WebContentsImpl::GetMaxPageID() {
(...skipping 1145 matching lines...) Expand 10 before | Expand all | Expand 10 after
2066 bool is_error_page = (url.spec() == kUnreachableWebDataURL); 2073 bool is_error_page = (url.spec() == kUnreachableWebDataURL);
2067 bool is_iframe_srcdoc = (url.spec() == chrome::kAboutSrcDocURL); 2074 bool is_iframe_srcdoc = (url.spec() == chrome::kAboutSrcDocURL);
2068 GURL validated_url(url); 2075 GURL validated_url(url);
2069 RenderProcessHost* render_process_host = 2076 RenderProcessHost* render_process_host =
2070 render_view_host->GetProcess(); 2077 render_view_host->GetProcess();
2071 RenderViewHost::FilterURL(render_process_host, false, &validated_url); 2078 RenderViewHost::FilterURL(render_process_host, false, &validated_url);
2072 2079
2073 if (is_main_frame) 2080 if (is_main_frame)
2074 DidChangeLoadProgress(0); 2081 DidChangeLoadProgress(0);
2075 2082
2083 // Create a pending entry for this provisional load (if none exists) using the
2084 // current SiteInstance, and ensure the address bar updates accordingly.
2085 // We don't know the referrer or extra headers at this point, but the referrer
2086 // will be set properly upon commit.
2087 if (is_main_frame && !controller_.GetPendingEntry()) {
2088 NavigationEntryImpl* entry = NavigationEntryImpl::FromNavigationEntry(
2089 controller_.CreateNavigationEntry(validated_url,
2090 content::Referrer(),
2091 content::PAGE_TRANSITION_LINK,
2092 true /* is_renderer_initiated */,
2093 std::string(), GetBrowserContext()));
2094 entry->set_site_instance(
2095 static_cast<SiteInstanceImpl*>(GetSiteInstance()));
2096 controller_.SetPendingEntry(entry);
2097 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL);
2098 }
2099
2076 // Notify observers about the start of the provisional load. 2100 // Notify observers about the start of the provisional load.
2077 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2101 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2078 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id, 2102 DidStartProvisionalLoadForFrame(frame_id, parent_frame_id,
2079 is_main_frame, validated_url, is_error_page, 2103 is_main_frame, validated_url, is_error_page,
2080 is_iframe_srcdoc, render_view_host)); 2104 is_iframe_srcdoc, render_view_host));
2081 2105
2082 if (is_main_frame) { 2106 if (is_main_frame) {
2083 // Notify observers about the provisional change in the main frame URL. 2107 // Notify observers about the provisional change in the main frame URL.
2084 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 2108 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
2085 ProvisionalChangeToMainFrameUrl(validated_url, 2109 ProvisionalChangeToMainFrameUrl(validated_url,
(...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after
3000 // Notify all swapped out RenderViewHosts for this tab. This is important 3024 // Notify all swapped out RenderViewHosts for this tab. This is important
3001 // in case we go back to them, or if another window in those processes tries 3025 // in case we go back to them, or if another window in those processes tries
3002 // to access window.opener. 3026 // to access window.opener.
3003 render_manager_.DidDisownOpener(rvh); 3027 render_manager_.DidDisownOpener(rvh);
3004 } 3028 }
3005 3029
3006 void WebContentsImpl::DidUpdateFrameTree(RenderViewHost* rvh) { 3030 void WebContentsImpl::DidUpdateFrameTree(RenderViewHost* rvh) {
3007 render_manager_.DidUpdateFrameTree(rvh); 3031 render_manager_.DidUpdateFrameTree(rvh);
3008 } 3032 }
3009 3033
3034 void WebContentsImpl::DidAccessInitialDocument() {
3035 // Update the URL display.
3036 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL);
3037 }
3038
3010 void WebContentsImpl::DocumentAvailableInMainFrame( 3039 void WebContentsImpl::DocumentAvailableInMainFrame(
3011 RenderViewHost* render_view_host) { 3040 RenderViewHost* render_view_host) {
3012 FOR_EACH_OBSERVER(WebContentsObserver, observers_, 3041 FOR_EACH_OBSERVER(WebContentsObserver, observers_,
3013 DocumentAvailableInMainFrame()); 3042 DocumentAvailableInMainFrame());
3014 } 3043 }
3015 3044
3016 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame( 3045 void WebContentsImpl::DocumentOnLoadCompletedInMainFrame(
3017 RenderViewHost* render_view_host, 3046 RenderViewHost* render_view_host,
3018 int32 page_id) { 3047 int32 page_id) {
3019 NotificationService::current()->Notify( 3048 NotificationService::current()->Notify(
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
3510 } 3539 }
3511 3540
3512 BrowserPluginGuestManager* 3541 BrowserPluginGuestManager*
3513 WebContentsImpl::GetBrowserPluginGuestManager() const { 3542 WebContentsImpl::GetBrowserPluginGuestManager() const {
3514 return static_cast<BrowserPluginGuestManager*>( 3543 return static_cast<BrowserPluginGuestManager*>(
3515 GetBrowserContext()->GetUserData( 3544 GetBrowserContext()->GetUserData(
3516 browser_plugin::kBrowserPluginGuestManagerKeyName)); 3545 browser_plugin::kBrowserPluginGuestManagerKeyName));
3517 } 3546 }
3518 3547
3519 } // namespace content 3548 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/web_contents/web_contents_impl.h ('k') | content/common/view_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698