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

Unified Diff: chrome/browser/sessions/session_types_unittest.cc

Issue 10917231: Revamp TabNavigation class (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix Mac Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sessions/session_types_unittest.cc
diff --git a/chrome/browser/sessions/session_types_unittest.cc b/chrome/browser/sessions/session_types_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0e8030ba57a7b21d16b80e4a71be7c86ca77807f
--- /dev/null
+++ b/chrome/browser/sessions/session_types_unittest.cc
@@ -0,0 +1,246 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include <cstddef>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/pickle.h"
+#include "base/string16.h"
+#include "base/time.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/browser/sessions/session_types.h"
+#include "chrome/browser/sessions/session_types_test_helper.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/common/page_transition_types.h"
+#include "content/public/common/referrer.h"
+#include "googleurl/src/gurl.h"
+#include "sync/protocol/session_specifics.pb.h"
+#include "sync/util/time.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebReferrerPolicy.h"
+
+namespace {
+
+const int kIndex = 3;
+const int kUniqueID = 50;
+const content::Referrer kReferrer =
+ content::Referrer(GURL("http://www.referrer.com"),
+ WebKit::WebReferrerPolicyAlways);
+const GURL kVirtualURL("http://www.virtual-url.com");
+const string16 kTitle = ASCIIToUTF16("title");
+const std::string kContentState = "content state";
+const content::PageTransition kTransitionType =
+ content::PAGE_TRANSITION_AUTO_SUBFRAME;
+const bool kHasPostData = true;
+const int64 kPostID = 100;
+const GURL kOriginalRequestURL("http://www.original-request.com");
+const bool kIsOverridingUserAgent = true;
+const base::Time kTimestamp = syncer::ProtoTimeToTime(100);
+
+const int kPageID = 10;
+
+// Create a NavigationEntry from the constants above.
+scoped_ptr<content::NavigationEntry> MakeNavigationEntryForTest() {
+ scoped_ptr<content::NavigationEntry> navigation_entry(
+ content::NavigationEntry::Create());
+ navigation_entry->SetReferrer(kReferrer);
+ navigation_entry->SetVirtualURL(kVirtualURL);
+ navigation_entry->SetTitle(kTitle);
+ navigation_entry->SetContentState(kContentState);
+ navigation_entry->SetTransitionType(kTransitionType);
+ navigation_entry->SetHasPostData(kHasPostData);
+ navigation_entry->SetPostID(kPostID);
+ navigation_entry->SetOriginalRequestURL(kOriginalRequestURL);
+ navigation_entry->SetIsOverridingUserAgent(kIsOverridingUserAgent);
+ return navigation_entry.Pass();
+}
+
+// Create a sync_pb::TabNavigation from the constants above.
+sync_pb::TabNavigation MakeSyncDataForTest() {
+ sync_pb::TabNavigation sync_data;
+ sync_data.set_virtual_url(kVirtualURL.spec());
+ sync_data.set_referrer(kReferrer.url.spec());
+ sync_data.set_title(UTF16ToUTF8(kTitle));
+ sync_data.set_state(kContentState);
+ sync_data.set_page_transition(
+ sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME);
+ sync_data.set_unique_id(kUniqueID);
+ sync_data.set_timestamp(syncer::TimeToProtoTime(kTimestamp));
+ return sync_data;
+}
+
+// Create a default TabNavigation. All its fields should be
+// initialized to their respective default values.
+TEST(TabNavigationTest, DefaultInitializer) {
+ const TabNavigation navigation;
+ EXPECT_EQ(-1, navigation.index());
+ EXPECT_EQ(0, navigation.unique_id());
+ EXPECT_EQ(GURL(), SessionTypesTestHelper::GetReferrer(navigation).url);
+ EXPECT_EQ(WebKit::WebReferrerPolicyDefault,
+ SessionTypesTestHelper::GetReferrer(navigation).policy);
+ EXPECT_EQ(GURL(), navigation.virtual_url());
+ EXPECT_TRUE(navigation.title().empty());
+ EXPECT_TRUE(navigation.content_state().empty());
+ EXPECT_EQ(content::PAGE_TRANSITION_TYPED,
+ SessionTypesTestHelper::GetTransitionType(navigation));
+ EXPECT_FALSE(SessionTypesTestHelper::GetHasPostData(navigation));
+ EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(navigation));
+ EXPECT_EQ(GURL(), SessionTypesTestHelper::GetOriginalRequestURL(navigation));
+ EXPECT_FALSE(SessionTypesTestHelper::GetIsOverridingUserAgent(navigation));
+ EXPECT_EQ(base::Time(), navigation.timestamp());
+}
+
+// Create a TabNavigation from a NavigationEntry. All its fields
+// should match the NavigationEntry's.
+TEST(TabNavigationTest, FromNavigationEntry) {
+ const scoped_ptr<content::NavigationEntry> navigation_entry(
+ MakeNavigationEntryForTest());
+
+ const TabNavigation& navigation =
+ TabNavigation::FromNavigationEntry(
+ kIndex, *navigation_entry, kTimestamp);
+
+ EXPECT_EQ(kIndex, navigation.index());
+
+ EXPECT_EQ(navigation_entry->GetUniqueID(), navigation.unique_id());
+ EXPECT_EQ(kReferrer.url,
+ SessionTypesTestHelper::GetReferrer(navigation).url);
+ EXPECT_EQ(kReferrer.policy,
+ SessionTypesTestHelper::GetReferrer(navigation).policy);
+ EXPECT_EQ(kVirtualURL, navigation.virtual_url());
+ EXPECT_EQ(kTitle, navigation.title());
+ EXPECT_EQ(kContentState, navigation.content_state());
+ EXPECT_EQ(kTransitionType,
+ SessionTypesTestHelper::GetTransitionType(navigation));
+ EXPECT_EQ(kHasPostData, SessionTypesTestHelper::GetHasPostData(navigation));
+ EXPECT_EQ(kPostID, SessionTypesTestHelper::GetPostID(navigation));
+ EXPECT_EQ(kOriginalRequestURL,
+ SessionTypesTestHelper::GetOriginalRequestURL(navigation));
+ EXPECT_EQ(kIsOverridingUserAgent,
+ SessionTypesTestHelper::GetIsOverridingUserAgent(navigation));
+ EXPECT_EQ(kTimestamp, navigation.timestamp());
+}
+
+// Create a TabNavigation from a sync_pb::TabNavigation. All its
+// fields should match the protocol buffer's if it exists there, and
+// sbould be set to the default value otherwise.
+TEST(TabNavigationTest, FromSyncData) {
+ const sync_pb::TabNavigation sync_data = MakeSyncDataForTest();
+
+ const TabNavigation& navigation =
+ TabNavigation::FromSyncData(kIndex, sync_data);
+
+ EXPECT_EQ(kIndex, navigation.index());
+ EXPECT_EQ(kUniqueID, navigation.unique_id());
+ EXPECT_EQ(kReferrer.url,
+ SessionTypesTestHelper::GetReferrer(navigation).url);
+ EXPECT_EQ(WebKit::WebReferrerPolicyDefault,
+ SessionTypesTestHelper::GetReferrer(navigation).policy);
+ EXPECT_EQ(kVirtualURL, navigation.virtual_url());
+ EXPECT_EQ(kTitle, navigation.title());
+ EXPECT_EQ(kContentState, navigation.content_state());
+ EXPECT_EQ(kTransitionType,
+ SessionTypesTestHelper::GetTransitionType(navigation));
+ EXPECT_FALSE(SessionTypesTestHelper::GetHasPostData(navigation));
+ EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(navigation));
+ EXPECT_EQ(GURL(), SessionTypesTestHelper::GetOriginalRequestURL(navigation));
+ EXPECT_FALSE(SessionTypesTestHelper::GetIsOverridingUserAgent(navigation));
+ EXPECT_EQ(kTimestamp, navigation.timestamp());
+}
+
+// Create a TabNavigation, pickle it, then create another one by
+// unpickling. The new one should match the old one except for fields
+// that aren't pickled, which should be set to default values.
+TEST(TabNavigationTest, Pickle) {
+ const TabNavigation& old_navigation =
+ TabNavigation::FromNavigationEntry(
+ kIndex, *MakeNavigationEntryForTest(), kTimestamp);
+
+ Pickle pickle;
+ old_navigation.WriteToPickle(&pickle);
+
+ TabNavigation new_navigation;
+ PickleIterator pickle_iterator(pickle);
+ EXPECT_TRUE(new_navigation.ReadFromPickle(&pickle_iterator));
+
+ EXPECT_EQ(kIndex, new_navigation.index());
+
+ EXPECT_EQ(0, new_navigation.unique_id());
+ EXPECT_EQ(kReferrer.url,
+ SessionTypesTestHelper::GetReferrer(new_navigation).url);
+ EXPECT_EQ(kReferrer.policy,
+ SessionTypesTestHelper::GetReferrer(new_navigation).policy);
+ EXPECT_EQ(kVirtualURL, new_navigation.virtual_url());
+ EXPECT_EQ(kTitle, new_navigation.title());
+ EXPECT_TRUE(new_navigation.content_state().empty());
+ EXPECT_EQ(kTransitionType,
+ SessionTypesTestHelper::GetTransitionType(new_navigation));
+ EXPECT_EQ(kHasPostData,
+ SessionTypesTestHelper::GetHasPostData(new_navigation));
+ EXPECT_EQ(-1, SessionTypesTestHelper::GetPostID(new_navigation));
+ EXPECT_EQ(kOriginalRequestURL,
+ SessionTypesTestHelper::GetOriginalRequestURL(new_navigation));
+ EXPECT_EQ(kIsOverridingUserAgent,
+ SessionTypesTestHelper::GetIsOverridingUserAgent(new_navigation));
+ EXPECT_EQ(base::Time(), new_navigation.timestamp());
+}
+
+// Create a NavigationEntry, then create another one by converting to
+// a TabNavigation and back. The new one should match the old one
+// except for fields that aren't preserved, which should be set to
+// expected values.
+TEST(TabNavigationTest, ToNavigationEntry) {
+ const scoped_ptr<content::NavigationEntry> old_navigation_entry(
+ MakeNavigationEntryForTest());
+
+ const TabNavigation& navigation =
+ TabNavigation::FromNavigationEntry(
+ kIndex, *old_navigation_entry, kTimestamp);
+
+ const scoped_ptr<content::NavigationEntry> new_navigation_entry(
+ navigation.ToNavigationEntry(kPageID, NULL));
+
+ EXPECT_EQ(kReferrer.url, new_navigation_entry->GetReferrer().url);
+ EXPECT_EQ(kReferrer.policy, new_navigation_entry->GetReferrer().policy);
+ EXPECT_EQ(kVirtualURL, new_navigation_entry->GetVirtualURL());
+ EXPECT_EQ(kTitle, new_navigation_entry->GetTitle());
+ EXPECT_EQ(kContentState, new_navigation_entry->GetContentState());
+ EXPECT_EQ(kPageID, new_navigation_entry->GetPageID());
+ EXPECT_EQ(content::PAGE_TRANSITION_RELOAD,
+ new_navigation_entry->GetTransitionType());
+ EXPECT_EQ(kHasPostData, new_navigation_entry->GetHasPostData());
+ EXPECT_EQ(kPostID, new_navigation_entry->GetPostID());
+ EXPECT_EQ(kOriginalRequestURL,
+ new_navigation_entry->GetOriginalRequestURL());
+ EXPECT_EQ(kIsOverridingUserAgent,
+ new_navigation_entry->GetIsOverridingUserAgent());
+}
+
+// Create a NavigationEntry, convert it to a TabNavigation, then
+// create a sync protocol buffer from it. The protocol buffer should
+// have matching fields to the NavigationEntry (when applicable).
+TEST(TabNavigationTest, ToSyncData) {
+ const scoped_ptr<content::NavigationEntry> navigation_entry(
+ MakeNavigationEntryForTest());
+
+ const TabNavigation& navigation =
+ TabNavigation::FromNavigationEntry(
+ kIndex, *navigation_entry, kTimestamp);
+
+ const sync_pb::TabNavigation sync_data = navigation.ToSyncData();
+
+ EXPECT_EQ(kVirtualURL.spec(), sync_data.virtual_url());
+ EXPECT_EQ(kReferrer.url.spec(), sync_data.referrer());
+ EXPECT_EQ(kTitle, ASCIIToUTF16(sync_data.title()));
+ EXPECT_TRUE(sync_data.state().empty());
+ EXPECT_EQ(sync_pb::SyncEnums_PageTransition_AUTO_SUBFRAME,
+ sync_data.page_transition());
+ EXPECT_FALSE(sync_data.has_navigation_qualifier());
+ EXPECT_EQ(navigation_entry->GetUniqueID(), sync_data.unique_id());
+ EXPECT_EQ(syncer::TimeToProtoTime(kTimestamp), sync_data.timestamp());
+}
+
+} // namespace
« no previous file with comments | « chrome/browser/sessions/session_types_test_helper.cc ('k') | chrome/browser/sessions/tab_restore_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698