diff options
30 files changed, 146 insertions, 107 deletions
diff --git a/chrome/browser/external_tab_container_win.cc b/chrome/browser/external_tab_container_win.cc index e08b3b9..267b483 100644 --- a/chrome/browser/external_tab_container_win.cc +++ b/chrome/browser/external_tab_container_win.cc @@ -948,7 +948,7 @@ bool ExternalTabContainer::InitNavigationInfo(NavigationInfo* nav_info, nav_info->navigation_index = tab_contents_->controller().GetCurrentEntryIndex(); nav_info->url = entry->url(); - nav_info->referrer = entry->referrer(); + nav_info->referrer = entry->referrer().url; nav_info->title = UTF16ToWideHack(entry->title()); if (nav_info->title.empty()) nav_info->title = UTF8ToWide(nav_info->url.spec()); diff --git a/chrome/browser/net/gaia/gaia_oauth_fetcher.cc b/chrome/browser/net/gaia/gaia_oauth_fetcher.cc index ce7367f..4ede11e 100644 --- a/chrome/browser/net/gaia/gaia_oauth_fetcher.cc +++ b/chrome/browser/net/gaia/gaia_oauth_fetcher.cc @@ -282,7 +282,7 @@ namespace { // Based on Browser::OpenURLFromTab void OpenGetOAuthTokenURL(Browser* browser, const GURL& url, - const GURL& referrer, + const content::Referrer& referrer, WindowOpenDisposition disposition, content::PageTransition transition) { browser::NavigateParams params( @@ -292,7 +292,7 @@ void OpenGetOAuthTokenURL(Browser* browser, params.source_contents = browser->tabstrip_model()->GetTabContentsAt( browser->tabstrip_model()->GetWrapperIndex(NULL)); - params.referrer = GURL("chrome://settings/personal"); + params.referrer = referrer; params.disposition = disposition; params.tabstrip_add_types = TabStripModel::ADD_NONE; params.window_action = browser::NavigateParams::SHOW_WINDOW; @@ -317,7 +317,8 @@ void GaiaOAuthFetcher::StartGetOAuthToken() { OpenGetOAuthTokenURL(browser, MakeGetOAuthTokenUrl(GaiaUrls::GetInstance()->oauth1_login_scope(), l10n_util::GetStringUTF8(IDS_PRODUCT_NAME)), - GURL("chrome://settings/personal"), + content::Referrer(GURL("chrome://settings/personal"), + WebKit::WebReferrerPolicyDefault), NEW_POPUP, content::PAGE_TRANSITION_AUTO_BOOKMARK); popup_ = BrowserList::GetLastActiveWithProfile(profile_); diff --git a/chrome/browser/rlz/rlz_unittest.cc b/chrome/browser/rlz/rlz_unittest.cc index 9e06fac..6253a9f 100644 --- a/chrome/browser/rlz/rlz_unittest.cc +++ b/chrome/browser/rlz/rlz_unittest.cc @@ -237,7 +237,7 @@ void RlzLibTest::SimulateOmniboxUsage() { } void RlzLibTest::SimulateHomepageUsage() { - NavigationEntry entry(NULL, 0, GURL(), GURL(), string16(), + NavigationEntry entry(NULL, 0, GURL(), content::Referrer(), string16(), content::PAGE_TRANSITION_HOME_PAGE, false); tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, content::NotificationService::AllSources(), @@ -580,7 +580,7 @@ TEST_F(RlzLibTest, PingUpdatesRlzCache) { } TEST_F(RlzLibTest, ObserveHandlesBadArgs) { - NavigationEntry entry(NULL, 0, GURL(), GURL(), string16(), + NavigationEntry entry(NULL, 0, GURL(), content::Referrer(), string16(), content::PAGE_TRANSITION_LINK, false); tracker_.Observe(content::NOTIFICATION_NAV_ENTRY_PENDING, content::NotificationService::AllSources(), diff --git a/chrome/browser/safe_browsing/browser_feature_extractor.cc b/chrome/browser/safe_browsing/browser_feature_extractor.cc index 715cfdc..be9022d 100644 --- a/chrome/browser/safe_browsing/browser_feature_extractor.cc +++ b/chrome/browser/safe_browsing/browser_feature_extractor.cc @@ -51,12 +51,12 @@ static void AddNavigationFeatures(const std::string& feature_prefix, const std::vector<GURL>& redirect_chain, ClientPhishingRequest* request) { NavigationEntry* entry = controller.GetEntryAtIndex(index); - bool is_secure_referrer = entry->referrer().SchemeIsSecure(); + bool is_secure_referrer = entry->referrer().url.SchemeIsSecure(); if (!is_secure_referrer) { AddFeature(StringPrintf("%s%s=%s", feature_prefix.c_str(), features::kReferrer, - entry->referrer().spec().c_str()), + entry->referrer().url.spec().c_str()), 1.0, request); } diff --git a/chrome/browser/safe_browsing/malware_details.cc b/chrome/browser/safe_browsing/malware_details.cc index 9455d90..4f6a346 100644 --- a/chrome/browser/safe_browsing/malware_details.cc +++ b/chrome/browser/safe_browsing/malware_details.cc @@ -168,7 +168,7 @@ void MalwareDetails::StartCollection() { GURL referrer_url; NavigationEntry* nav_entry = tab_contents()->controller().GetActiveEntry(); if (nav_entry) { - referrer_url = nav_entry->referrer(); + referrer_url = nav_entry->referrer().url; if (IsPublicUrl(referrer_url)) { report_->set_referrer_url(referrer_url.spec()); } diff --git a/chrome/browser/safe_browsing/safe_browsing_service.cc b/chrome/browser/safe_browsing/safe_browsing_service.cc index 4d404ce..f792476 100644 --- a/chrome/browser/safe_browsing/safe_browsing_service.cc +++ b/chrome/browser/safe_browsing/safe_browsing_service.cc @@ -1056,7 +1056,7 @@ void SafeBrowsingService::DoDisplayBlockingPage( GURL referrer_url; NavigationEntry* entry = tab_contents->controller().GetActiveEntry(); if (entry) - referrer_url = entry->referrer(); + referrer_url = entry->referrer().url; // When the malicious url is on the main frame, and resource.original_url // is not the same as the resource.url, that means we have a redirect from diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc index 93e0826..36edcec 100644 --- a/chrome/browser/sessions/base_session_service.cc +++ b/chrome/browser/sessions/base_session_service.cc @@ -14,8 +14,11 @@ #include "chrome/browser/sessions/session_types.h" #include "chrome/common/url_constants.h" #include "content/browser/tab_contents/navigation_entry.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebReferrerPolicy.h" #include "webkit/glue/webkit_glue.h" +using WebKit::WebReferrerPolicy; + // InternalGetCommandsRequest ------------------------------------------------- BaseSessionService::InternalGetCommandsRequest::~InternalGetCommandsRequest() { @@ -178,7 +181,9 @@ SessionCommand* BaseSessionService::CreateUpdateTabNavigationCommand( pickle.WriteInt(type_mask); WriteStringToPickle(pickle, &bytes_written, max_state_size, - entry.referrer().is_valid() ? entry.referrer().spec() : std::string()); + entry.referrer().url.is_valid() ? + entry.referrer().url.spec() : std::string()); + pickle.WriteInt(entry.referrer().policy); // Adding more data? Be sure and update TabRestoreService too. return new SessionCommand(command_id, pickle); @@ -229,8 +234,17 @@ bool BaseSessionService::RestoreUpdateTabNavigationCommand( // stream. As such, we don't fail if it can't be read. std::string referrer_spec; pickle->ReadString(&iterator, &referrer_spec); - if (!referrer_spec.empty()) - navigation->referrer_ = GURL(referrer_spec); + // The "referrer policy" property was added even later, so we fall back to + // the default policy if the property is not present. + int policy_int; + WebReferrerPolicy policy; + if (pickle->ReadInt(&iterator, &policy_int)) + policy = static_cast<WebReferrerPolicy>(policy_int); + else + policy = WebKit::WebReferrerPolicyDefault; + navigation->referrer_ = content::Referrer( + referrer_spec.empty() ? GURL() : GURL(referrer_spec), + policy); } navigation->virtual_url_ = GURL(url_spec); diff --git a/chrome/browser/sessions/session_service_test_helper.cc b/chrome/browser/sessions/session_service_test_helper.cc index 11e1f43..24909d39 100644 --- a/chrome/browser/sessions/session_service_test_helper.cc +++ b/chrome/browser/sessions/session_service_test_helper.cc @@ -77,7 +77,8 @@ void SessionServiceTestHelper::AssertNavigationEquals( const TabNavigation& expected, const TabNavigation& actual) { EXPECT_TRUE(expected.virtual_url() == actual.virtual_url()); - EXPECT_EQ(expected.referrer(), actual.referrer()); + EXPECT_EQ(expected.referrer().url, actual.referrer().url); + EXPECT_EQ(expected.referrer().policy, actual.referrer().policy); EXPECT_EQ(expected.title(), actual.title()); EXPECT_EQ(expected.state(), actual.state()); EXPECT_EQ(expected.transition(), actual.transition()); diff --git a/chrome/browser/sessions/session_service_unittest.cc b/chrome/browser/sessions/session_service_unittest.cc index 75573db..f6cd26b 100644 --- a/chrome/browser/sessions/session_service_unittest.cc +++ b/chrome/browser/sessions/session_service_unittest.cc @@ -98,7 +98,8 @@ class SessionServiceTest : public BrowserWithTestWindowTest, bool CreateAndWriteSessionWithOneTab(bool pinned_state, bool write_always) { SessionID tab_id; TabNavigation nav1(0, GURL("http://google.com"), - GURL("http://www.referrer.com"), + content::Referrer(GURL("http://www.referrer.com"), + WebKit::WebReferrerPolicyDefault), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); @@ -146,7 +147,8 @@ TEST_F(SessionServiceTest, Basic) { ASSERT_NE(window_id.id(), tab_id.id()); TabNavigation nav1(0, GURL("http://google.com"), - GURL("http://www.referrer.com"), + content::Referrer(GURL("http://www.referrer.com"), + WebKit::WebReferrerPolicyDefault), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); @@ -174,7 +176,7 @@ TEST_F(SessionServiceTest, PersistPostData) { SessionID tab_id; ASSERT_NE(window_id.id(), tab_id.id()); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), std::string(), content::PAGE_TRANSITION_QUALIFIER_MASK); nav1.set_type_mask(TabNavigation::HAS_POST_DATA); @@ -193,10 +195,10 @@ TEST_F(SessionServiceTest, ClosingTabStaysClosed) { SessionID tab2_id; ASSERT_NE(tab_id.id(), tab2_id.id()); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -224,10 +226,10 @@ TEST_F(SessionServiceTest, ClosingTabStaysClosed) { TEST_F(SessionServiceTest, Pruning) { SessionID tab_id; - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -260,10 +262,10 @@ TEST_F(SessionServiceTest, TwoWindows) { SessionID tab1_id; SessionID tab2_id; - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -317,7 +319,7 @@ TEST_F(SessionServiceTest, WindowWithNoTabsGetsPruned) { SessionID tab1_id; SessionID tab2_id; - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); @@ -349,10 +351,10 @@ TEST_F(SessionServiceTest, ClosingWindowDoesntCloseTabs) { SessionID tab2_id; ASSERT_NE(tab_id.id(), tab2_id.id()); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -392,10 +394,10 @@ TEST_F(SessionServiceTest, WindowCloseCommittedAfterNavigate) { window_bounds, ui::SHOW_STATE_NORMAL); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -437,10 +439,10 @@ TEST_F(SessionServiceTest, IgnorePopups) { window_bounds, ui::SHOW_STATE_NORMAL); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -478,10 +480,10 @@ TEST_F(SessionServiceTest, RestorePopup) { window_bounds, ui::SHOW_STATE_NORMAL); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); - TabNavigation nav2(0, GURL("http://google2.com"), GURL(), + TabNavigation nav2(0, GURL("http://google2.com"), content::Referrer(), ASCIIToUTF16("abcd"), "defg", content::PAGE_TRANSITION_AUTO_BOOKMARK); @@ -524,7 +526,8 @@ TEST_F(SessionServiceTest, PruneFromFront) { // Add 5 navigations, with the 4th selected. for (int i = 0; i < 5; ++i) { - TabNavigation nav(0, GURL(base_url + base::IntToString(i)), GURL(), + TabNavigation nav(0, GURL(base_url + base::IntToString(i)), + content::Referrer(), ASCIIToUTF16("a"), "b", content::PAGE_TRANSITION_QUALIFIER_MASK); UpdateNavigation(window_id, tab_id, nav, i, (i == 3)); @@ -566,7 +569,8 @@ TEST_F(SessionServiceTest, PruneToEmpty) { // Add 5 navigations, with the 4th selected. for (int i = 0; i < 5; ++i) { - TabNavigation nav(0, GURL(base_url + base::IntToString(i)), GURL(), + TabNavigation nav(0, GURL(base_url + base::IntToString(i)), + content::Referrer(), ASCIIToUTF16("a"), "b", content::PAGE_TRANSITION_QUALIFIER_MASK); UpdateNavigation(window_id, tab_id, nav, i, (i == 3)); @@ -598,7 +602,7 @@ TEST_F(SessionServiceTest, PersistApplicationExtensionID) { ASSERT_NE(window_id.id(), tab_id.id()); std::string app_id("foo"); - TabNavigation nav1(0, GURL("http://google.com"), GURL(), + TabNavigation nav1(0, GURL("http://google.com"), content::Referrer(), ASCIIToUTF16("abc"), std::string(), content::PAGE_TRANSITION_QUALIFIER_MASK); @@ -665,7 +669,8 @@ TEST_F(SessionServiceTest, CloseTabUserGesture) { ASSERT_NE(window_id.id(), tab_id.id()); TabNavigation nav1(0, GURL("http://google.com"), - GURL("http://www.referrer.com"), + content::Referrer(GURL("http://www.referrer.com"), + WebKit::WebReferrerPolicyDefault), ASCIIToUTF16("abc"), "def", content::PAGE_TRANSITION_QUALIFIER_MASK); diff --git a/chrome/browser/sessions/session_types.cc b/chrome/browser/sessions/session_types.cc index 70c8b9e..39b92b8 100644 --- a/chrome/browser/sessions/session_types.cc +++ b/chrome/browser/sessions/session_types.cc @@ -20,7 +20,7 @@ TabNavigation::TabNavigation() TabNavigation::TabNavigation(int index, const GURL& virtual_url, - const GURL& referrer, + const content::Referrer& referrer, const string16& title, const std::string& state, content::PageTransition transition) diff --git a/chrome/browser/sessions/session_types.h b/chrome/browser/sessions/session_types.h index 01ed823..c56a508 100644 --- a/chrome/browser/sessions/session_types.h +++ b/chrome/browser/sessions/session_types.h @@ -14,6 +14,7 @@ #include "base/time.h" #include "chrome/browser/sessions/session_id.h" #include "content/public/common/page_transition_types.h" +#include "content/public/common/referrer.h" #include "googleurl/src/gurl.h" #include "ui/base/ui_base_types.h" #include "ui/gfx/rect.h" @@ -36,7 +37,7 @@ class TabNavigation { TabNavigation(); TabNavigation(int index, const GURL& virtual_url, - const GURL& referrer, + const content::Referrer& referrer, const string16& title, const std::string& state, content::PageTransition transition); @@ -56,7 +57,7 @@ class TabNavigation { const GURL& virtual_url() const { return virtual_url_; } // The referrer. - const GURL& referrer() const { return referrer_; } + const content::Referrer& referrer() const { return referrer_; } // The title of the page. void set_title(const string16& title) { title_ = title; } @@ -95,7 +96,7 @@ class TabNavigation { friend class BaseSessionService; GURL virtual_url_; - GURL referrer_; + content::Referrer referrer_; string16 title_; std::string state_; content::PageTransition transition_; diff --git a/chrome/browser/sync/glue/session_model_associator.cc b/chrome/browser/sync/glue/session_model_associator.cc index 4b4e83e..44c0727 100644 --- a/chrome/browser/sync/glue/session_model_associator.cc +++ b/chrome/browser/sync/glue/session_model_associator.cc @@ -381,7 +381,8 @@ void SessionModelAssociator::PopulateSessionSpecificsNavigation( sync_pb::TabNavigation* tab_navigation) { tab_navigation->set_index(navigation->index()); tab_navigation->set_virtual_url(navigation->virtual_url().spec()); - tab_navigation->set_referrer(navigation->referrer().spec()); + // FIXME(zea): Support referrer policy? + tab_navigation->set_referrer(navigation->referrer().url.spec()); tab_navigation->set_title(UTF16ToUTF8(navigation->title())); switch (navigation->transition()) { case content::PAGE_TRANSITION_LINK: @@ -875,8 +876,10 @@ void SessionModelAssociator::AppendSessionTabNavigation( } } } - TabNavigation tab_navigation(index, virtual_url, referrer, title, state, - transition); + TabNavigation tab_navigation( + index, virtual_url, + content::Referrer(referrer, WebKit::WebReferrerPolicyDefault), title, + state, transition); navigations->insert(navigations->end(), tab_navigation); } diff --git a/chrome/browser/sync/glue/session_model_associator_unittest.cc b/chrome/browser/sync/glue/session_model_associator_unittest.cc index 3928958..959d78d 100644 --- a/chrome/browser/sync/glue/session_model_associator_unittest.cc +++ b/chrome/browser/sync/glue/session_model_associator_unittest.cc @@ -22,7 +22,9 @@ TEST_F(SessionModelAssociatorTest, SessionWindowHasNoTabsToSync) { scoped_ptr<SessionTab> tab(new SessionTab()); win.tabs.push_back(tab.release()); ASSERT_TRUE(SessionWindowHasNoTabsToSync(win)); - TabNavigation nav(0, GURL("about:bubba"), GURL("about:referrer"), + TabNavigation nav(0, GURL("about:bubba"), + content::Referrer(GURL("about:referrer"), + WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), std::string("state"), content::PageTransitionFromInt(0)); win.tabs[0]->navigations.push_back(nav); @@ -33,14 +35,16 @@ TEST_F(SessionModelAssociatorTest, IsValidSessionTab) { SessionTab tab; ASSERT_FALSE(IsValidSessionTab(tab)); TabNavigation nav(0, GURL(chrome::kChromeUINewTabURL), - GURL("about:referrer"), + content::Referrer(GURL("about:referrer"), + WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), std::string("state"), content::PageTransitionFromInt(0)); tab.navigations.push_back(nav); // NewTab does not count as valid if it's the only navigation. ASSERT_FALSE(IsValidSessionTab(tab)); TabNavigation nav2(0, GURL("about:bubba"), - GURL("about:referrer"), + content::Referrer(GURL("about:referrer"), + WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), std::string("state"), content::PageTransitionFromInt(0)); tab.navigations.push_back(nav2); @@ -53,7 +57,8 @@ TEST_F(SessionModelAssociatorTest, IsValidSessionTabIgnoresFragmentForNtp) { ASSERT_FALSE(IsValidSessionTab(tab)); TabNavigation nav(0, GURL(std::string(chrome::kChromeUINewTabURL) + "#bookmarks"), - GURL("about:referrer"), + content::Referrer(GURL("about:referrer"), + WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), std::string("state"), content::PageTransitionFromInt(0)); tab.navigations.push_back(nav); @@ -118,7 +123,7 @@ TEST_F(SessionModelAssociatorTest, PopulateSessionTab) { ASSERT_TRUE(tab.pinned); ASSERT_EQ("app_id", tab.extension_app_id); ASSERT_EQ(12, tab.navigations[0].index()); - ASSERT_EQ(GURL("referrer"), tab.navigations[0].referrer()); + ASSERT_EQ(GURL("referrer"), tab.navigations[0].referrer().url); ASSERT_EQ(string16(ASCIIToUTF16("title")), tab.navigations[0].title()); ASSERT_EQ(content::PAGE_TRANSITION_TYPED, tab.navigations[0].transition()); ASSERT_EQ(GURL("http://foo/1"), tab.navigations[0].virtual_url()); diff --git a/chrome/browser/sync/glue/synced_session_tracker_unittest.cc b/chrome/browser/sync/glue/synced_session_tracker_unittest.cc index f63c77d..45dcaad 100644 --- a/chrome/browser/sync/glue/synced_session_tracker_unittest.cc +++ b/chrome/browser/sync/glue/synced_session_tracker_unittest.cc @@ -63,7 +63,8 @@ TEST_F(SyncedSessionTrackerTest, LookupAllForeignSessions) { SessionTab* tab = tracker.GetTab("tag1", 15); ASSERT_TRUE(tab); tab->navigations.push_back(TabNavigation( - 0, GURL("valid_url"), GURL("referrer"), + 0, GURL("valid_url"), + content::Referrer(GURL("referrer"), WebKit::WebReferrerPolicyDefault), string16(ASCIIToUTF16("title")), std::string("state"), content::PageTransitionFromInt(0))); ASSERT_TRUE(tracker.LookupAllForeignSessions(&sessions)); diff --git a/chrome/browser/sync/profile_sync_service_session_unittest.cc b/chrome/browser/sync/profile_sync_service_session_unittest.cc index 8a187e4..f703126 100644 --- a/chrome/browser/sync/profile_sync_service_session_unittest.cc +++ b/chrome/browser/sync/profile_sync_service_session_unittest.cc @@ -142,7 +142,7 @@ void VerifySyncedSession( ASSERT_EQ(1U, tab->navigations.size()); ASSERT_EQ(12, tab->navigations[0].index()); ASSERT_EQ(tab->navigations[0].virtual_url(), GURL("http://foo/1")); - ASSERT_EQ(tab->navigations[0].referrer(), GURL("referrer")); + ASSERT_EQ(tab->navigations[0].referrer().url, GURL("referrer")); ASSERT_EQ(tab->navigations[0].title(), string16(ASCIIToUTF16("title"))); ASSERT_EQ(tab->navigations[0].transition(), content::PAGE_TRANSITION_TYPED); diff --git a/chrome/browser/sync/test/integration/sessions_helper.cc b/chrome/browser/sync/test/integration/sessions_helper.cc index e05c6f5..374a08e 100644 --- a/chrome/browser/sync/test/integration/sessions_helper.cc +++ b/chrome/browser/sync/test/integration/sessions_helper.cc @@ -237,9 +237,9 @@ bool NavigationEquals(const TabNavigation& expected, << ", actual " << actual.virtual_url(); return false; } - if (expected.referrer() != actual.referrer()) { - LOG(ERROR) << "Expected referrer " << expected.referrer() - << ", actual " << actual.referrer(); + if (expected.referrer().url != actual.referrer().url) { + LOG(ERROR) << "Expected referrer " << expected.referrer().url + << ", actual " << actual.referrer().url; return false; } if (expected.title() != actual.title()) { diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index 98b39e7..956f8fd 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -3388,7 +3388,7 @@ TabContents* Browser::OpenURLFromTab(TabContents* source, nav_params.source_contents = tabstrip_model()->GetTabContentsAt( tabstrip_model()->GetWrapperIndex(source)); - nav_params.referrer = params.referrer.url; + nav_params.referrer = params.referrer; nav_params.disposition = params.disposition; nav_params.tabstrip_add_types = TabStripModel::ADD_NONE; nav_params.window_action = browser::NavigateParams::SHOW_WINDOW; diff --git a/chrome/browser/ui/browser_navigator.cc b/chrome/browser/ui/browser_navigator.cc index c3f9152..ab73fbc 100644 --- a/chrome/browser/ui/browser_navigator.cc +++ b/chrome/browser/ui/browser_navigator.cc @@ -249,19 +249,19 @@ void LoadURLInContents(TabContents* target_contents, if (params->transferred_global_request_id != GlobalRequestID()) { target_contents->controller().TransferURL( url, - content::Referrer(params->referrer, WebKit::WebReferrerPolicyDefault), + params->referrer, params->transition, extra_headers, params->transferred_global_request_id, params->is_renderer_initiated); } else if (params->is_renderer_initiated) { target_contents->controller().LoadURLFromRenderer( url, - content::Referrer(params->referrer, WebKit::WebReferrerPolicyDefault), + params->referrer, params->transition, extra_headers); } else { target_contents->controller().LoadURL( url, - content::Referrer(params->referrer, WebKit::WebReferrerPolicyDefault), + params->referrer, params->transition, extra_headers); } @@ -422,7 +422,7 @@ void Navigate(NavigateParams* params) { // A tab is being opened from a link from a different profile, we must reset // source information that may cause state to be shared. params->source_contents = NULL; - params->referrer = GURL(); + params->referrer = content::Referrer(); } // Make sure the Browser is shown if params call for it. diff --git a/chrome/browser/ui/browser_navigator.h b/chrome/browser/ui/browser_navigator.h index 9f40509..026dd40 100644 --- a/chrome/browser/ui/browser_navigator.h +++ b/chrome/browser/ui/browser_navigator.h @@ -10,6 +10,7 @@ #include "content/browser/renderer_host/global_request_id.h" #include "content/public/common/page_transition_types.h" +#include "content/public/common/referrer.h" #include "googleurl/src/gurl.h" #include "ui/gfx/rect.h" #include "webkit/glue/window_open_disposition.h" @@ -50,7 +51,7 @@ struct NavigateParams { // The URL/referrer to be loaded. Ignored if |target_contents| is non-NULL. GURL url; - GURL referrer; + content::Referrer referrer; // [in] A TabContents to be navigated or inserted into the target Browser's // tabstrip. If NULL, |url| or the homepage will be used instead. When diff --git a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm index de14a16..d88f11e 100644 --- a/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm +++ b/chrome/browser/ui/cocoa/history_menu_bridge_unittest.mm @@ -93,7 +93,7 @@ class HistoryMenuBridgeTest : public CocoaProfileTest { MockTRS::Tab tab; tab.current_navigation_index = 0; tab.navigations.push_back( - TabNavigation(0, url, GURL(), title, std::string(), + TabNavigation(0, url, content::Referrer(), title, std::string(), content::PAGE_TRANSITION_LINK)); return tab; } diff --git a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc index 228d618..c608471 100644 --- a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc +++ b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc @@ -36,7 +36,7 @@ TabContents* HtmlDialogTabContentsDelegate::OpenURLFromTab( Browser* browser = NULL; browser::NavigateParams nav_params(browser, params.url, params.transition); nav_params.profile = profile_; - nav_params.referrer = params.referrer.url; + nav_params.referrer = params.referrer; if (source && source->is_crashed() && params.disposition == CURRENT_TAB && params.transition == content::PAGE_TRANSITION_LINK) diff --git a/content/browser/site_instance_unittest.cc b/content/browser/site_instance_unittest.cc index 1c8b47c..9e439b4 100644 --- a/content/browser/site_instance_unittest.cc +++ b/content/browser/site_instance_unittest.cc @@ -173,7 +173,8 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) { &browsingDeleteCounter); EXPECT_EQ(0, siteDeleteCounter); - NavigationEntry* e1 = new NavigationEntry(instance, 0, url, GURL(), + NavigationEntry* e1 = new NavigationEntry(instance, 0, url, + content::Referrer(), string16(), content::PAGE_TRANSITION_LINK, false); @@ -184,7 +185,7 @@ TEST_F(SiteInstanceTest, SiteInstanceDestructor) { // Add a second reference NavigationEntry* e2 = new NavigationEntry(instance, 0, url, - GURL(), string16(), + content::Referrer(), string16(), content::PAGE_TRANSITION_LINK, false); @@ -239,8 +240,8 @@ TEST_F(SiteInstanceTest, CloneNavigationEntry) { TestSiteInstance::CreateTestSiteInstance(NULL, &siteDeleteCounter2, &browsingDeleteCounter); - NavigationEntry* e1 = new NavigationEntry(instance1, 0, url, GURL(), - string16(), + NavigationEntry* e1 = new NavigationEntry(instance1, 0, url, + content::Referrer(), string16(), content::PAGE_TRANSITION_LINK, false); // Clone the entry diff --git a/content/browser/tab_contents/navigation_controller.cc b/content/browser/tab_contents/navigation_controller.cc index 13a6766..a194a7e 100644 --- a/content/browser/tab_contents/navigation_controller.cc +++ b/content/browser/tab_contents/navigation_controller.cc @@ -223,7 +223,8 @@ bool NavigationController::IsInitialNavigation() { // static NavigationEntry* NavigationController::CreateNavigationEntry( - const GURL& url, const GURL& referrer, content::PageTransition transition, + const GURL& url, const content::Referrer& referrer, + content::PageTransition transition, bool is_renderer_initiated, const std::string& extra_headers, content::BrowserContext* browser_context) { // Allow the browser URL handler to rewrite the URL. This will, for example, @@ -508,7 +509,7 @@ void NavigationController::TransferURL( // The user initiated a load, we don't need to reload anymore. needs_reload_ = false; - NavigationEntry* entry = CreateNavigationEntry(url, referrer.url, transition, + NavigationEntry* entry = CreateNavigationEntry(url, referrer, transition, is_renderer_initiated, extra_headers, browser_context_); @@ -525,7 +526,7 @@ void NavigationController::LoadURL( // The user initiated a load, we don't need to reload anymore. needs_reload_ = false; - NavigationEntry* entry = CreateNavigationEntry(url, referrer.url, transition, + NavigationEntry* entry = CreateNavigationEntry(url, referrer, transition, false, extra_headers, browser_context_); @@ -541,7 +542,7 @@ void NavigationController::LoadURLFromRenderer( // The user initiated a load, we don't need to reload anymore. needs_reload_ = false; - NavigationEntry* entry = CreateNavigationEntry(url, referrer.url, transition, + NavigationEntry* entry = CreateNavigationEntry(url, referrer, transition, true, extra_headers, browser_context_); @@ -803,7 +804,7 @@ void NavigationController::RendererDidNavigateToNewPage( new_entry->set_url(params.url); if (update_virtual_url) UpdateVirtualURLToURL(new_entry, params.url); - new_entry->set_referrer(params.referrer.url); + new_entry->set_referrer(params.referrer); new_entry->set_page_id(params.page_id); new_entry->set_transition_type(params.transition); new_entry->set_site_instance(tab_contents_->GetSiteInstance()); diff --git a/content/browser/tab_contents/navigation_controller.h b/content/browser/tab_contents/navigation_controller.h index 710c33e..a5c5a9c 100644 --- a/content/browser/tab_contents/navigation_controller.h +++ b/content/browser/tab_contents/navigation_controller.h @@ -30,6 +30,7 @@ struct ViewHostMsg_FrameNavigate_Params; namespace content { class BrowserContext; struct LoadCommittedDetails; +struct Referrer; } // A NavigationController maintains the back-forward list for a single tab and @@ -352,7 +353,7 @@ class CONTENT_EXPORT NavigationController { // separated by \n. static NavigationEntry* CreateNavigationEntry( const GURL& url, - const GURL& referrer, + const content::Referrer& referrer, content::PageTransition transition, bool is_renderer_initiated, const std::string& extra_headers, diff --git a/content/browser/tab_contents/navigation_controller_unittest.cc b/content/browser/tab_contents/navigation_controller_unittest.cc index d9871d4..bcd87cb 100644 --- a/content/browser/tab_contents/navigation_controller_unittest.cc +++ b/content/browser/tab_contents/navigation_controller_unittest.cc @@ -1477,8 +1477,8 @@ TEST_F(NavigationControllerTest, RestoreNavigate) { GURL url("http://foo"); std::vector<NavigationEntry*> entries; NavigationEntry* entry = NavigationController::CreateNavigationEntry( - url, GURL(), content::PAGE_TRANSITION_RELOAD, false, std::string(), - browser_context()); + url, content::Referrer(), content::PAGE_TRANSITION_RELOAD, false, + std::string(), browser_context()); entry->set_page_id(0); entry->set_title(ASCIIToUTF16("Title")); entry->set_content_state("state"); @@ -1537,8 +1537,8 @@ TEST_F(NavigationControllerTest, RestoreNavigateAfterFailure) { GURL url("http://foo"); std::vector<NavigationEntry*> entries; NavigationEntry* entry = NavigationController::CreateNavigationEntry( - url, GURL(), content::PAGE_TRANSITION_RELOAD, false, std::string(), - browser_context()); + url, content::Referrer(), content::PAGE_TRANSITION_RELOAD, false, + std::string(), browser_context()); entry->set_page_id(0); entry->set_title(ASCIIToUTF16("Title")); entry->set_content_state("state"); diff --git a/content/browser/tab_contents/navigation_entry.cc b/content/browser/tab_contents/navigation_entry.cc index b84050a..8efaab4 100644 --- a/content/browser/tab_contents/navigation_entry.cc +++ b/content/browser/tab_contents/navigation_entry.cc @@ -49,7 +49,7 @@ NavigationEntry::NavigationEntry() NavigationEntry::NavigationEntry(SiteInstance* instance, int page_id, const GURL& url, - const GURL& referrer, + const content::Referrer& referrer, const string16& title, content::PageTransition transition_type, bool is_renderer_initiated) diff --git a/content/browser/tab_contents/navigation_entry.h b/content/browser/tab_contents/navigation_entry.h index 8648ebb..6b139a1 100644 --- a/content/browser/tab_contents/navigation_entry.h +++ b/content/browser/tab_contents/navigation_entry.h @@ -14,6 +14,7 @@ #include "content/common/content_export.h" #include "content/public/common/page_transition_types.h" #include "content/public/common/page_type.h" +#include "content/public/common/referrer.h" #include "content/public/common/security_style.h" #include "googleurl/src/gurl.h" #include "net/base/cert_status_flags.h" @@ -185,7 +186,7 @@ class CONTENT_EXPORT NavigationEntry { NavigationEntry(SiteInstance* instance, int page_id, const GURL& url, - const GURL& referrer, + const content::Referrer& referrer, const string16& title, content::PageTransition transition_type, bool is_renderer_initiated); @@ -237,10 +238,10 @@ class CONTENT_EXPORT NavigationEntry { } // The referring URL. Can be empty. - void set_referrer(const GURL& referrer) { + void set_referrer(const content::Referrer& referrer) { referrer_ = referrer; } - const GURL& referrer() const { + const content::Referrer& referrer() const { return referrer_; } @@ -434,7 +435,7 @@ class CONTENT_EXPORT NavigationEntry { scoped_refptr<SiteInstance> site_instance_; content::PageType page_type_; GURL url_; - GURL referrer_; + content::Referrer referrer_; GURL virtual_url_; bool update_virtual_url_with_url_; string16 title_; diff --git a/content/browser/tab_contents/navigation_entry_unittest.cc b/content/browser/tab_contents/navigation_entry_unittest.cc index 2dbece97..4d394ef 100644 --- a/content/browser/tab_contents/navigation_entry_unittest.cc +++ b/content/browser/tab_contents/navigation_entry_unittest.cc @@ -18,12 +18,13 @@ class NavigationEntryTest : public testing::Test { entry1_.reset(new NavigationEntry); instance_ = SiteInstance::CreateSiteInstance(NULL); - entry2_.reset(new NavigationEntry(instance_, 3, - GURL("test:url"), - GURL("from"), - ASCIIToUTF16("title"), - content::PAGE_TRANSITION_TYPED, - false)); + entry2_.reset(new NavigationEntry( + instance_, 3, + GURL("test:url"), + content::Referrer(GURL("from"), WebKit::WebReferrerPolicyDefault), + ASCIIToUTF16("title"), + content::PAGE_TRANSITION_TYPED, + false)); } virtual void TearDown() { @@ -151,10 +152,11 @@ TEST_F(NavigationEntryTest, NavigationEntryAccessors) { EXPECT_EQ(content::PAGE_TYPE_INTERSTITIAL, entry2_.get()->page_type()); // Referrer - EXPECT_EQ(GURL(), entry1_.get()->referrer()); - EXPECT_EQ(GURL("from"), entry2_.get()->referrer()); - entry2_.get()->set_referrer(GURL("from2")); - EXPECT_EQ(GURL("from2"), entry2_.get()->referrer()); + EXPECT_EQ(GURL(), entry1_.get()->referrer().url); + EXPECT_EQ(GURL("from"), entry2_.get()->referrer().url); + entry2_.get()->set_referrer( + content::Referrer(GURL("from2"), WebKit::WebReferrerPolicyDefault)); + EXPECT_EQ(GURL("from2"), entry2_.get()->referrer().url); // Title EXPECT_EQ(string16(), entry1_.get()->title()); diff --git a/content/browser/tab_contents/render_view_host_manager_unittest.cc b/content/browser/tab_contents/render_view_host_manager_unittest.cc index 0d0c02d..6d84a63 100644 --- a/content/browser/tab_contents/render_view_host_manager_unittest.cc +++ b/content/browser/tab_contents/render_view_host_manager_unittest.cc @@ -300,7 +300,7 @@ TEST_F(RenderViewHostManagerTest, Navigate) { // 1) The first navigation. -------------------------- const GURL kUrl1("http://www.google.com/"); NavigationEntry entry1(NULL /* instance */, -1 /* page_id */, kUrl1, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); host = manager.Navigate(entry1); @@ -319,10 +319,11 @@ TEST_F(RenderViewHostManagerTest, Navigate) { // 2) Navigate to next site. ------------------------- const GURL kUrl2("http://www.google.com/foo"); - NavigationEntry entry2(NULL /* instance */, -1 /* page_id */, kUrl2, - kUrl1 /* referrer */, string16() /* title */, - content::PAGE_TRANSITION_LINK, - true /* is_renderer_init */); + NavigationEntry entry2( + NULL /* instance */, -1 /* page_id */, kUrl2, + content::Referrer(kUrl1, WebKit::WebReferrerPolicyDefault), + string16() /* title */, content::PAGE_TRANSITION_LINK, + true /* is_renderer_init */); host = manager.Navigate(entry2); // The RenderViewHost created in Init will be reused. @@ -337,10 +338,11 @@ TEST_F(RenderViewHostManagerTest, Navigate) { // 3) Cross-site navigate to next site. -------------- const GURL kUrl3("http://webkit.org/"); - NavigationEntry entry3(NULL /* instance */, -1 /* page_id */, kUrl3, - kUrl2 /* referrer */, string16() /* title */, - content::PAGE_TRANSITION_LINK, - false /* is_renderer_init */); + NavigationEntry entry3( + NULL /* instance */, -1 /* page_id */, kUrl3, + content::Referrer(kUrl2, WebKit::WebReferrerPolicyDefault), + string16() /* title */, content::PAGE_TRANSITION_LINK, + false /* is_renderer_init */); host = manager.Navigate(entry3); // A new RenderViewHost should be created. @@ -384,7 +386,7 @@ TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { // 1) The first navigation. -------------------------- const GURL kUrl1("http://www.google.com/"); NavigationEntry entry1(NULL /* instance */, -1 /* page_id */, kUrl1, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); RenderViewHost* host = manager.Navigate(entry1); @@ -410,7 +412,7 @@ TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { // 2) Cross-site navigate to next site. ------------------------- const GURL kUrl2("http://www.example.com"); NavigationEntry entry2(NULL /* instance */, -1 /* page_id */, kUrl2, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); RenderViewHost* host2 = manager.Navigate(entry2); @@ -458,7 +460,7 @@ TEST_F(RenderViewHostManagerTest, NavigateWithEarlyReNavigation) { // 3) Cross-site navigate to next site before 2) has committed. -------------- const GURL kUrl3("http://webkit.org/"); NavigationEntry entry3(NULL /* instance */, -1 /* page_id */, kUrl3, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); RenderViewHost* host3 = manager.Navigate(entry3); @@ -510,7 +512,7 @@ TEST_F(RenderViewHostManagerTest, WebUI) { const GURL kUrl(chrome::kTestNewTabURL); NavigationEntry entry(NULL /* instance */, -1 /* page_id */, kUrl, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); RenderViewHost* host = manager.Navigate(entry); @@ -549,14 +551,14 @@ TEST_F(RenderViewHostManagerTest, NonWebUIChromeURLs) { // NTP is a Web UI page. const GURL kNtpUrl(chrome::kTestNewTabURL); NavigationEntry ntp_entry(NULL /* instance */, -1 /* page_id */, kNtpUrl, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); // A URL with the Chrome UI scheme, that isn't handled by Web UI. GURL about_url(kChromeUISchemeButNotWebUIURL); NavigationEntry about_entry(NULL /* instance */, -1 /* page_id */, about_url, - GURL() /* referrer */, string16() /* title */, + content::Referrer(), string16() /* title */, content::PAGE_TRANSITION_TYPED, false /* is_renderer_init */); diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc index 1e8881f..e716148 100644 --- a/content/browser/tab_contents/tab_contents.cc +++ b/content/browser/tab_contents/tab_contents.cc @@ -160,8 +160,7 @@ void MakeNavigateParams(const NavigationEntry& entry, params->current_history_list_offset = controller.last_committed_entry_index(); params->current_history_list_length = controller.entry_count(); params->url = entry.url(); - params->referrer = content::Referrer(entry.referrer(), - WebKit::WebReferrerPolicyDefault); + params->referrer = entry.referrer(); params->transition = entry.transition_type(); params->state = entry.content_state(); params->navigation_type = |