IndexedDBFactory now ForceCloses databases.
[chromium-blink-merge.git] / content / browser / frame_host / navigation_entry_impl_unittest.cc
blob2c38da1df9e5f9b53d2dc7974e0c5a306d571730
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
3 // found in the LICENSE file.
5 #include "base/strings/string16.h"
6 #include "base/strings/string_util.h"
7 #include "base/strings/utf_string_conversions.h"
8 #include "base/time/time.h"
9 #include "content/browser/frame_host/navigation_entry_impl.h"
10 #include "content/browser/site_instance_impl.h"
11 #include "content/public/common/ssl_status.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 using base::ASCIIToUTF16;
16 namespace content {
18 class NavigationEntryTest : public testing::Test {
19 public:
20 NavigationEntryTest() : instance_(NULL) {
23 virtual void SetUp() {
24 entry1_.reset(new NavigationEntryImpl);
26 #if !defined(OS_IOS)
27 instance_ = static_cast<SiteInstanceImpl*>(SiteInstance::Create(NULL));
28 #endif
29 entry2_.reset(new NavigationEntryImpl(
30 instance_, 3,
31 GURL("test:url"),
32 Referrer(GURL("from"), blink::WebReferrerPolicyDefault),
33 ASCIIToUTF16("title"),
34 PAGE_TRANSITION_TYPED,
35 false));
38 virtual void TearDown() {
41 protected:
42 scoped_ptr<NavigationEntryImpl> entry1_;
43 scoped_ptr<NavigationEntryImpl> entry2_;
44 // SiteInstances are deleted when their NavigationEntries are gone.
45 SiteInstanceImpl* instance_;
48 // Test unique ID accessors
49 TEST_F(NavigationEntryTest, NavigationEntryUniqueIDs) {
50 // Two entries should have different IDs by default
51 EXPECT_NE(entry1_->GetUniqueID(), entry2_->GetUniqueID());
53 // Can set an entry to have the same ID as another
54 entry2_->set_unique_id(entry1_->GetUniqueID());
55 EXPECT_EQ(entry1_->GetUniqueID(), entry2_->GetUniqueID());
58 // Test URL accessors
59 TEST_F(NavigationEntryTest, NavigationEntryURLs) {
60 // Start with no virtual_url (even if a url is set)
61 EXPECT_FALSE(entry1_->has_virtual_url());
62 EXPECT_FALSE(entry2_->has_virtual_url());
64 EXPECT_EQ(GURL(), entry1_->GetURL());
65 EXPECT_EQ(GURL(), entry1_->GetVirtualURL());
66 EXPECT_TRUE(entry1_->GetTitleForDisplay(std::string()).empty());
68 // Setting URL affects virtual_url and GetTitleForDisplay
69 entry1_->SetURL(GURL("http://www.google.com"));
70 EXPECT_EQ(GURL("http://www.google.com"), entry1_->GetURL());
71 EXPECT_EQ(GURL("http://www.google.com"), entry1_->GetVirtualURL());
72 EXPECT_EQ(ASCIIToUTF16("www.google.com"),
73 entry1_->GetTitleForDisplay(std::string()));
75 // file:/// URLs should only show the filename.
76 entry1_->SetURL(GURL("file:///foo/bar baz.txt"));
77 EXPECT_EQ(ASCIIToUTF16("bar baz.txt"),
78 entry1_->GetTitleForDisplay(std::string()));
80 // Title affects GetTitleForDisplay
81 entry1_->SetTitle(ASCIIToUTF16("Google"));
82 EXPECT_EQ(ASCIIToUTF16("Google"), entry1_->GetTitleForDisplay(std::string()));
84 // Setting virtual_url doesn't affect URL
85 entry2_->SetVirtualURL(GURL("display:url"));
86 EXPECT_TRUE(entry2_->has_virtual_url());
87 EXPECT_EQ(GURL("test:url"), entry2_->GetURL());
88 EXPECT_EQ(GURL("display:url"), entry2_->GetVirtualURL());
90 // Having a title set in constructor overrides virtual URL
91 EXPECT_EQ(ASCIIToUTF16("title"), entry2_->GetTitleForDisplay(std::string()));
93 // User typed URL is independent of the others
94 EXPECT_EQ(GURL(), entry1_->GetUserTypedURL());
95 EXPECT_EQ(GURL(), entry2_->GetUserTypedURL());
96 entry2_->set_user_typed_url(GURL("typedurl"));
97 EXPECT_EQ(GURL("typedurl"), entry2_->GetUserTypedURL());
100 // Test Favicon inner class construction.
101 TEST_F(NavigationEntryTest, NavigationEntryFavicons) {
102 EXPECT_EQ(GURL(), entry1_->GetFavicon().url);
103 EXPECT_FALSE(entry1_->GetFavicon().valid);
106 // Test SSLStatus inner class
107 TEST_F(NavigationEntryTest, NavigationEntrySSLStatus) {
108 // Default (unknown)
109 EXPECT_EQ(SECURITY_STYLE_UNKNOWN, entry1_->GetSSL().security_style);
110 EXPECT_EQ(SECURITY_STYLE_UNKNOWN, entry2_->GetSSL().security_style);
111 EXPECT_EQ(0, entry1_->GetSSL().cert_id);
112 EXPECT_EQ(0U, entry1_->GetSSL().cert_status);
113 EXPECT_EQ(-1, entry1_->GetSSL().security_bits);
114 int content_status = entry1_->GetSSL().content_status;
115 EXPECT_FALSE(!!(content_status & SSLStatus::DISPLAYED_INSECURE_CONTENT));
116 EXPECT_FALSE(!!(content_status & SSLStatus::RAN_INSECURE_CONTENT));
119 // Test other basic accessors
120 TEST_F(NavigationEntryTest, NavigationEntryAccessors) {
121 // SiteInstance
122 EXPECT_TRUE(entry1_->site_instance() == NULL);
123 EXPECT_EQ(instance_, entry2_->site_instance());
124 entry1_->set_site_instance(instance_);
125 EXPECT_EQ(instance_, entry1_->site_instance());
127 // Page type
128 EXPECT_EQ(PAGE_TYPE_NORMAL, entry1_->GetPageType());
129 EXPECT_EQ(PAGE_TYPE_NORMAL, entry2_->GetPageType());
130 entry2_->set_page_type(PAGE_TYPE_INTERSTITIAL);
131 EXPECT_EQ(PAGE_TYPE_INTERSTITIAL, entry2_->GetPageType());
133 // Referrer
134 EXPECT_EQ(GURL(), entry1_->GetReferrer().url);
135 EXPECT_EQ(GURL("from"), entry2_->GetReferrer().url);
136 entry2_->SetReferrer(
137 Referrer(GURL("from2"), blink::WebReferrerPolicyDefault));
138 EXPECT_EQ(GURL("from2"), entry2_->GetReferrer().url);
140 // Title
141 EXPECT_EQ(base::string16(), entry1_->GetTitle());
142 EXPECT_EQ(ASCIIToUTF16("title"), entry2_->GetTitle());
143 entry2_->SetTitle(ASCIIToUTF16("title2"));
144 EXPECT_EQ(ASCIIToUTF16("title2"), entry2_->GetTitle());
146 // State
147 EXPECT_FALSE(entry1_->GetPageState().IsValid());
148 EXPECT_FALSE(entry2_->GetPageState().IsValid());
149 entry2_->SetPageState(PageState::CreateFromEncodedData("state"));
150 EXPECT_EQ("state", entry2_->GetPageState().ToEncodedData());
152 // Page ID
153 EXPECT_EQ(-1, entry1_->GetPageID());
154 EXPECT_EQ(3, entry2_->GetPageID());
155 entry2_->SetPageID(2);
156 EXPECT_EQ(2, entry2_->GetPageID());
158 // Transition type
159 EXPECT_EQ(PAGE_TRANSITION_LINK, entry1_->GetTransitionType());
160 EXPECT_EQ(PAGE_TRANSITION_TYPED, entry2_->GetTransitionType());
161 entry2_->SetTransitionType(PAGE_TRANSITION_RELOAD);
162 EXPECT_EQ(PAGE_TRANSITION_RELOAD, entry2_->GetTransitionType());
164 // Is renderer initiated
165 EXPECT_FALSE(entry1_->is_renderer_initiated());
166 EXPECT_FALSE(entry2_->is_renderer_initiated());
167 entry2_->set_is_renderer_initiated(true);
168 EXPECT_TRUE(entry2_->is_renderer_initiated());
170 // Post Data
171 EXPECT_FALSE(entry1_->GetHasPostData());
172 EXPECT_FALSE(entry2_->GetHasPostData());
173 entry2_->SetHasPostData(true);
174 EXPECT_TRUE(entry2_->GetHasPostData());
176 // Restored
177 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE, entry1_->restore_type());
178 EXPECT_EQ(NavigationEntryImpl::RESTORE_NONE, entry2_->restore_type());
179 entry2_->set_restore_type(
180 NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY);
181 EXPECT_EQ(NavigationEntryImpl::RESTORE_LAST_SESSION_EXITED_CLEANLY,
182 entry2_->restore_type());
184 // Original URL
185 EXPECT_EQ(GURL(), entry1_->GetOriginalRequestURL());
186 EXPECT_EQ(GURL(), entry2_->GetOriginalRequestURL());
187 entry2_->SetOriginalRequestURL(GURL("original_url"));
188 EXPECT_EQ(GURL("original_url"), entry2_->GetOriginalRequestURL());
190 // User agent override
191 EXPECT_FALSE(entry1_->GetIsOverridingUserAgent());
192 EXPECT_FALSE(entry2_->GetIsOverridingUserAgent());
193 entry2_->SetIsOverridingUserAgent(true);
194 EXPECT_TRUE(entry2_->GetIsOverridingUserAgent());
196 // Browser initiated post data
197 EXPECT_EQ(NULL, entry1_->GetBrowserInitiatedPostData());
198 EXPECT_EQ(NULL, entry2_->GetBrowserInitiatedPostData());
199 const int length = 11;
200 const unsigned char* raw_data =
201 reinterpret_cast<const unsigned char*>("post\n\n\0data");
202 std::vector<unsigned char> post_data_vector(raw_data, raw_data+length);
203 scoped_refptr<base::RefCountedBytes> post_data =
204 base::RefCountedBytes::TakeVector(&post_data_vector);
205 entry2_->SetBrowserInitiatedPostData(post_data.get());
206 EXPECT_EQ(post_data->front(),
207 entry2_->GetBrowserInitiatedPostData()->front());
209 // Frame to navigate.
210 EXPECT_TRUE(entry1_->GetFrameToNavigate().empty());
211 EXPECT_TRUE(entry2_->GetFrameToNavigate().empty());
214 // Test timestamps.
215 TEST_F(NavigationEntryTest, NavigationEntryTimestamps) {
216 EXPECT_EQ(base::Time(), entry1_->GetTimestamp());
217 const base::Time now = base::Time::Now();
218 entry1_->SetTimestamp(now);
219 EXPECT_EQ(now, entry1_->GetTimestamp());
222 // Test extra data stored in the navigation entry.
223 TEST_F(NavigationEntryTest, NavigationEntryExtraData) {
224 base::string16 test_data = ASCIIToUTF16("my search terms");
225 base::string16 output;
226 entry1_->SetExtraData("search_terms", test_data);
228 EXPECT_FALSE(entry1_->GetExtraData("non_existent_key", &output));
229 EXPECT_EQ(ASCIIToUTF16(""), output);
230 EXPECT_TRUE(entry1_->GetExtraData("search_terms", &output));
231 EXPECT_EQ(test_data, output);
232 // Data is cleared.
233 entry1_->ClearExtraData("search_terms");
234 // Content in |output| is not modified if data is not present at the key.
235 EXPECT_FALSE(entry1_->GetExtraData("search_terms", &output));
236 EXPECT_EQ(test_data, output);
237 // Using an empty string shows that the data is not present in the map.
238 base::string16 output2;
239 EXPECT_FALSE(entry1_->GetExtraData("search_terms", &output2));
240 EXPECT_EQ(ASCIIToUTF16(""), output2);
243 } // namespace content