OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/bind.h" | 6 #include "base/bind.h" |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
(...skipping 17 matching lines...) Expand all Loading... | |
28 #include "content/public/browser/render_view_host.h" | 28 #include "content/public/browser/render_view_host.h" |
29 #include "content/public/browser/web_contents_delegate.h" | 29 #include "content/public/browser/web_contents_delegate.h" |
30 #include "content/public/browser/web_contents_observer.h" | 30 #include "content/public/browser/web_contents_observer.h" |
31 #include "content/public/common/content_switches.h" | 31 #include "content/public/common/content_switches.h" |
32 #include "content/public/common/page_state.h" | 32 #include "content/public/common/page_state.h" |
33 #include "content/public/common/page_type.h" | 33 #include "content/public/common/page_type.h" |
34 #include "content/public/common/url_constants.h" | 34 #include "content/public/common/url_constants.h" |
35 #include "content/public/test/mock_render_process_host.h" | 35 #include "content/public/test/mock_render_process_host.h" |
36 #include "content/public/test/test_notification_tracker.h" | 36 #include "content/public/test/test_notification_tracker.h" |
37 #include "content/public/test/test_utils.h" | 37 #include "content/public/test/test_utils.h" |
38 #include "content/test/test_navigation_url_loader.h" | |
38 #include "content/test/test_render_frame_host.h" | 39 #include "content/test/test_render_frame_host.h" |
39 #include "content/test/test_render_view_host.h" | 40 #include "content/test/test_render_view_host.h" |
40 #include "content/test/test_web_contents.h" | 41 #include "content/test/test_web_contents.h" |
41 #include "net/base/net_util.h" | 42 #include "net/base/net_util.h" |
42 #include "skia/ext/platform_canvas.h" | 43 #include "skia/ext/platform_canvas.h" |
43 #include "testing/gtest/include/gtest/gtest.h" | 44 #include "testing/gtest/include/gtest/gtest.h" |
44 | 45 |
45 using base::Time; | 46 using base::Time; |
46 | 47 |
47 namespace { | 48 namespace { |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
238 return navigation_request->common_params().url; | 239 return navigation_request->common_params().url; |
239 } | 240 } |
240 const IPC::Message* message = | 241 const IPC::Message* message = |
241 process()->sink().GetFirstMessageMatching(FrameMsg_Navigate::ID); | 242 process()->sink().GetFirstMessageMatching(FrameMsg_Navigate::ID); |
242 CHECK(message); | 243 CHECK(message); |
243 Tuple<FrameMsg_Navigate_Params> nav_params; | 244 Tuple<FrameMsg_Navigate_Params> nav_params; |
244 FrameMsg_Navigate::Read(message, &nav_params); | 245 FrameMsg_Navigate::Read(message, &nav_params); |
245 return get<0>(nav_params).common_params.url; | 246 return get<0>(nav_params).common_params.url; |
246 } | 247 } |
247 | 248 |
249 void SimulateServerRedirectIfPlzNavigate(TestRenderFrameHost* test_rfh, | |
clamy
2015/02/23 10:52:34
Please rename that method SimulateServerRedirect a
carlosk
2015/03/04 19:42:40
Change was moved to another CL.
| |
250 const GURL& redirect_url) { | |
251 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( | |
252 switches::kEnableBrowserSideNavigation)) { | |
253 return; | |
254 } | |
255 | |
256 NavigatorImpl* navigator_impl = | |
257 static_cast<NavigatorImpl*>(test_rfh->frame_tree_node()->navigator()); | |
258 NavigationRequest* request = | |
259 navigator_impl->GetNavigationRequestForNodeForTesting( | |
260 test_rfh->frame_tree_node()); | |
261 CHECK(request); | |
262 | |
263 if (request->state() == NavigationRequest::WAITING_FOR_RENDERER_RESPONSE) | |
264 test_rfh->SendBeforeUnloadACK(true); | |
265 | |
clamy
2015/02/23 10:52:34
CHECK that the request status is STARTED here (the
carlosk
2015/03/04 19:42:40
Change was moved to another CL.
| |
266 TestNavigationURLLoader* loader = | |
267 static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); | |
268 CHECK(loader); | |
269 loader->SimulateServerRedirect(redirect_url); | |
270 } | |
271 | |
248 protected: | 272 protected: |
249 GURL navigated_url_; | 273 GURL navigated_url_; |
250 size_t navigation_entry_committed_counter_; | 274 size_t navigation_entry_committed_counter_; |
251 }; | 275 }; |
252 | 276 |
253 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, | 277 void RegisterForAllNavNotifications(TestNotificationTracker* tracker, |
254 NavigationController* controller) { | 278 NavigationController* controller) { |
255 tracker->ListenFor(NOTIFICATION_NAV_LIST_PRUNED, | 279 tracker->ListenFor(NOTIFICATION_NAV_LIST_PRUNED, |
256 Source<NavigationController>(controller)); | 280 Source<NavigationController>(controller)); |
257 tracker->ListenFor(NOTIFICATION_NAV_ENTRY_CHANGED, | 281 tracker->ListenFor(NOTIFICATION_NAV_ENTRY_CHANGED, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
313 NavigationControllerImpl& controller = controller_impl(); | 337 NavigationControllerImpl& controller = controller_impl(); |
314 TestNotificationTracker notifications; | 338 TestNotificationTracker notifications; |
315 RegisterForAllNavNotifications(¬ifications, &controller); | 339 RegisterForAllNavNotifications(¬ifications, &controller); |
316 | 340 |
317 const int kNumUrls = 5; | 341 const int kNumUrls = 5; |
318 std::vector<GURL> urls(kNumUrls); | 342 std::vector<GURL> urls(kNumUrls); |
319 for (int i = 0; i < kNumUrls; ++i) { | 343 for (int i = 0; i < kNumUrls; ++i) { |
320 urls[i] = GURL(base::StringPrintf("http://www.a.com/%d", i)); | 344 urls[i] = GURL(base::StringPrintf("http://www.a.com/%d", i)); |
321 } | 345 } |
322 | 346 |
347 main_test_rfh()->RendererRequestIfPlzNavigate(urls[0], true); | |
carlosk
2015/02/20 19:16:51
For each SendNavigate call the intent might be dif
| |
323 main_test_rfh()->PrepareForCommit(urls[0]); | 348 main_test_rfh()->PrepareForCommit(urls[0]); |
324 main_test_rfh()->SendNavigate(0, urls[0]); | 349 main_test_rfh()->SendNavigate(0, urls[0]); |
325 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 350 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
326 navigation_entry_committed_counter_ = 0; | 351 navigation_entry_committed_counter_ = 0; |
327 EXPECT_EQ(urls[0], controller.GetVisibleEntry()->GetVirtualURL()); | 352 EXPECT_EQ(urls[0], controller.GetVisibleEntry()->GetVirtualURL()); |
328 EXPECT_FALSE(controller.CanGoBack()); | 353 EXPECT_FALSE(controller.CanGoBack()); |
329 EXPECT_FALSE(controller.CanGoForward()); | 354 EXPECT_FALSE(controller.CanGoForward()); |
330 EXPECT_FALSE(controller.CanGoToOffset(1)); | 355 EXPECT_FALSE(controller.CanGoToOffset(1)); |
331 | 356 |
332 for (int i = 1; i <= 4; ++i) { | 357 for (int i = 1; i <= 4; ++i) { |
358 main_test_rfh()->RendererRequestIfPlzNavigate(urls[i], true); | |
333 main_test_rfh()->PrepareForCommit(urls[i]); | 359 main_test_rfh()->PrepareForCommit(urls[i]); |
334 main_test_rfh()->SendNavigate(i, urls[i]); | 360 main_test_rfh()->SendNavigate(i, urls[i]); |
335 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 361 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
336 navigation_entry_committed_counter_ = 0; | 362 navigation_entry_committed_counter_ = 0; |
337 EXPECT_EQ(urls[i], controller.GetVisibleEntry()->GetVirtualURL()); | 363 EXPECT_EQ(urls[i], controller.GetVisibleEntry()->GetVirtualURL()); |
338 EXPECT_TRUE(controller.CanGoToOffset(-i)); | 364 EXPECT_TRUE(controller.CanGoToOffset(-i)); |
339 EXPECT_FALSE(controller.CanGoToOffset(-(i + 1))); | 365 EXPECT_FALSE(controller.CanGoToOffset(-(i + 1))); |
340 EXPECT_FALSE(controller.CanGoToOffset(1)); | 366 EXPECT_FALSE(controller.CanGoToOffset(1)); |
341 } | 367 } |
342 | 368 |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
837 | 863 |
838 // Now make a pending back/forward navigation. The zeroth entry should be | 864 // Now make a pending back/forward navigation. The zeroth entry should be |
839 // pending. | 865 // pending. |
840 controller.GoBack(); | 866 controller.GoBack(); |
841 EXPECT_EQ(0U, notifications.size()); | 867 EXPECT_EQ(0U, notifications.size()); |
842 EXPECT_EQ(0, controller.GetPendingEntryIndex()); | 868 EXPECT_EQ(0, controller.GetPendingEntryIndex()); |
843 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 869 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
844 | 870 |
845 // Before that commits, do a new navigation. | 871 // Before that commits, do a new navigation. |
846 const GURL kNewURL("http://foo/see"); | 872 const GURL kNewURL("http://foo/see"); |
873 main_test_rfh()->RendererRequestIfPlzNavigate(kNewURL, true); | |
847 main_test_rfh()->PrepareForCommit(kNewURL); | 874 main_test_rfh()->PrepareForCommit(kNewURL); |
848 main_test_rfh()->SendNavigate(3, kNewURL); | 875 main_test_rfh()->SendNavigate(3, kNewURL); |
849 | 876 |
850 // There should no longer be any pending entry, and the third navigation we | 877 // There should no longer be any pending entry, and the third navigation we |
851 // just made should be committed. | 878 // just made should be committed. |
852 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 879 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
853 navigation_entry_committed_counter_ = 0; | 880 navigation_entry_committed_counter_ = 0; |
854 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 881 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
855 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 882 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
856 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); | 883 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
890 controller.GoBack(); | 917 controller.GoBack(); |
891 foo_rfh->SendBeforeUnloadACK(true); | 918 foo_rfh->SendBeforeUnloadACK(true); |
892 EXPECT_EQ(0U, notifications.size()); | 919 EXPECT_EQ(0U, notifications.size()); |
893 EXPECT_EQ(0, controller.GetPendingEntryIndex()); | 920 EXPECT_EQ(0, controller.GetPendingEntryIndex()); |
894 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 921 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
895 EXPECT_EQ(2, NavigationEntryImpl::FromNavigationEntry( | 922 EXPECT_EQ(2, NavigationEntryImpl::FromNavigationEntry( |
896 controller.GetPendingEntry())->bindings()); | 923 controller.GetPendingEntry())->bindings()); |
897 | 924 |
898 // Before that commits, do a new navigation. | 925 // Before that commits, do a new navigation. |
899 const GURL kNewURL("http://foo/bee"); | 926 const GURL kNewURL("http://foo/bee"); |
927 foo_rfh->RendererRequestIfPlzNavigate(kNewURL, true); | |
900 foo_rfh->PrepareForCommit(kNewURL); | 928 foo_rfh->PrepareForCommit(kNewURL); |
901 foo_rfh->SendNavigate(3, kNewURL); | 929 foo_rfh->SendNavigate(3, kNewURL); |
902 | 930 |
903 // There should no longer be any pending entry, and the third navigation we | 931 // There should no longer be any pending entry, and the third navigation we |
904 // just made should be committed. | 932 // just made should be committed. |
905 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 933 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
906 navigation_entry_committed_counter_ = 0; | 934 navigation_entry_committed_counter_ = 0; |
907 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 935 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
908 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 936 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
909 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); | 937 EXPECT_EQ(kNewURL, controller.GetVisibleEntry()->GetURL()); |
(...skipping 28 matching lines...) Expand all Loading... | |
938 | 966 |
939 // Now make a pending new navigation. | 967 // Now make a pending new navigation. |
940 const GURL kNewURL("http://foo/see"); | 968 const GURL kNewURL("http://foo/see"); |
941 controller.LoadURL( | 969 controller.LoadURL( |
942 kNewURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 970 kNewURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
943 EXPECT_EQ(0U, notifications.size()); | 971 EXPECT_EQ(0U, notifications.size()); |
944 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 972 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
945 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 973 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
946 | 974 |
947 // Before that commits, a back navigation from the renderer commits. | 975 // Before that commits, a back navigation from the renderer commits. |
976 main_test_rfh()->RendererRequestIfPlzNavigate(kExistingURL1, true); | |
948 main_test_rfh()->PrepareForCommit(kExistingURL1); | 977 main_test_rfh()->PrepareForCommit(kExistingURL1); |
949 main_test_rfh()->SendNavigate(0, kExistingURL1); | 978 main_test_rfh()->SendNavigate(0, kExistingURL1); |
950 | 979 |
951 // There should no longer be any pending entry, and the back navigation we | 980 // There should no longer be any pending entry, and the back navigation we |
952 // just made should be committed. | 981 // just made should be committed. |
953 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 982 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
954 navigation_entry_committed_counter_ = 0; | 983 navigation_entry_committed_counter_ = 0; |
955 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 984 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
956 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); | 985 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
957 EXPECT_EQ(kExistingURL1, controller.GetVisibleEntry()->GetURL()); | 986 EXPECT_EQ(kExistingURL1, controller.GetVisibleEntry()->GetURL()); |
(...skipping 20 matching lines...) Expand all Loading... | |
978 controller.LoadURL( | 1007 controller.LoadURL( |
979 kNewURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 1008 kNewURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
980 EXPECT_EQ(0U, notifications.size()); | 1009 EXPECT_EQ(0U, notifications.size()); |
981 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 1010 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
982 EXPECT_TRUE(controller.GetPendingEntry()); | 1011 EXPECT_TRUE(controller.GetPendingEntry()); |
983 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); | 1012 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
984 EXPECT_EQ(1, delegate->navigation_state_change_count()); | 1013 EXPECT_EQ(1, delegate->navigation_state_change_count()); |
985 | 1014 |
986 // Before that commits, a document.write and location.reload can cause the | 1015 // Before that commits, a document.write and location.reload can cause the |
987 // renderer to send a FrameNavigate with page_id -1. | 1016 // renderer to send a FrameNavigate with page_id -1. |
1017 main_test_rfh()->RendererRequestIfPlzNavigate(kExistingURL, true); | |
carlosk
2015/02/20 19:16:51
This one I am really unsure about. From test comme
clamy
2015/02/23 10:52:34
The way blink determines if a request has a user g
carlosk
2015/03/04 19:42:40
Ack. Also with the current cancellation policy a n
| |
988 main_test_rfh()->PrepareForCommit(kExistingURL); | 1018 main_test_rfh()->PrepareForCommit(kExistingURL); |
989 main_test_rfh()->SendNavigate(-1, kExistingURL); | 1019 main_test_rfh()->SendNavigate(-1, kExistingURL); |
990 | 1020 |
991 // This should clear the pending entry and notify of a navigation state | 1021 // This should clear the pending entry and notify of a navigation state |
992 // change, so that we do not keep displaying kNewURL. | 1022 // change, so that we do not keep displaying kNewURL. |
993 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 1023 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
994 EXPECT_FALSE(controller.GetPendingEntry()); | 1024 EXPECT_FALSE(controller.GetPendingEntry()); |
995 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); | 1025 EXPECT_EQ(-1, controller.GetLastCommittedEntryIndex()); |
996 EXPECT_EQ(2, delegate->navigation_state_change_count()); | 1026 EXPECT_EQ(2, delegate->navigation_state_change_count()); |
997 | 1027 |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1242 controller.LoadURL( | 1272 controller.LoadURL( |
1243 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 1273 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
1244 main_test_rfh()->PrepareForCommit(url1); | 1274 main_test_rfh()->PrepareForCommit(url1); |
1245 main_test_rfh()->SendNavigate(0, url1); | 1275 main_test_rfh()->SendNavigate(0, url1); |
1246 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1276 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
1247 navigation_entry_committed_counter_ = 0; | 1277 navigation_entry_committed_counter_ = 0; |
1248 | 1278 |
1249 controller.Reload(true); | 1279 controller.Reload(true); |
1250 EXPECT_EQ(0U, notifications.size()); | 1280 EXPECT_EQ(0U, notifications.size()); |
1251 | 1281 |
1282 SimulateServerRedirectIfPlzNavigate(main_test_rfh(), url2); | |
carlosk
2015/02/20 19:16:51
I guess that "a reload navigation produces a new p
clamy
2015/02/23 10:52:34
Acknowledged.
| |
1252 main_test_rfh()->PrepareForCommit(url2); | 1283 main_test_rfh()->PrepareForCommit(url2); |
1253 main_test_rfh()->SendNavigate(1, url2); | 1284 main_test_rfh()->SendNavigate(1, url2); |
1254 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1285 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
1255 navigation_entry_committed_counter_ = 0; | 1286 navigation_entry_committed_counter_ = 0; |
1256 | 1287 |
1257 // Now the reload is committed. | 1288 // Now the reload is committed. |
1258 EXPECT_EQ(controller.GetEntryCount(), 2); | 1289 EXPECT_EQ(controller.GetEntryCount(), 2); |
1259 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); | 1290 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); |
1260 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | 1291 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
1261 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1292 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1302 TestNotificationTracker notifications; | 1333 TestNotificationTracker notifications; |
1303 RegisterForAllNavNotifications(¬ifications, &controller); | 1334 RegisterForAllNavNotifications(¬ifications, &controller); |
1304 | 1335 |
1305 const GURL original_url("http://foo1"); | 1336 const GURL original_url("http://foo1"); |
1306 const GURL final_url("http://foo2"); | 1337 const GURL final_url("http://foo2"); |
1307 | 1338 |
1308 // Load up the original URL, but get redirected. | 1339 // Load up the original URL, but get redirected. |
1309 controller.LoadURL( | 1340 controller.LoadURL( |
1310 original_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 1341 original_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
1311 EXPECT_EQ(0U, notifications.size()); | 1342 EXPECT_EQ(0U, notifications.size()); |
1343 SimulateServerRedirectIfPlzNavigate(main_test_rfh(), final_url); | |
1312 main_test_rfh()->PrepareForCommit(final_url); | 1344 main_test_rfh()->PrepareForCommit(final_url); |
1313 main_test_rfh()->SendNavigateWithOriginalRequestURL( | 1345 main_test_rfh()->SendNavigateWithOriginalRequestURL( |
1314 0, final_url, original_url); | 1346 0, final_url, original_url); |
1315 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1347 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
1316 navigation_entry_committed_counter_ = 0; | 1348 navigation_entry_committed_counter_ = 0; |
1317 | 1349 |
1318 // The NavigationEntry should save both the original URL and the final | 1350 // The NavigationEntry should save both the original URL and the final |
1319 // redirected URL. | 1351 // redirected URL. |
1320 EXPECT_EQ( | 1352 EXPECT_EQ( |
1321 original_url, controller.GetVisibleEntry()->GetOriginalRequestURL()); | 1353 original_url, controller.GetVisibleEntry()->GetOriginalRequestURL()); |
(...skipping 13 matching lines...) Expand all Loading... | |
1335 EXPECT_TRUE(controller.GetPendingEntry()); | 1367 EXPECT_TRUE(controller.GetPendingEntry()); |
1336 EXPECT_FALSE(controller.CanGoBack()); | 1368 EXPECT_FALSE(controller.CanGoBack()); |
1337 EXPECT_FALSE(controller.CanGoForward()); | 1369 EXPECT_FALSE(controller.CanGoForward()); |
1338 | 1370 |
1339 // Make sure the title has been cleared (will be redrawn just after reload). | 1371 // Make sure the title has been cleared (will be redrawn just after reload). |
1340 // Avoids a stale cached title when the new page being reloaded has no title. | 1372 // Avoids a stale cached title when the new page being reloaded has no title. |
1341 // See http://crbug.com/96041. | 1373 // See http://crbug.com/96041. |
1342 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty()); | 1374 EXPECT_TRUE(controller.GetVisibleEntry()->GetTitle().empty()); |
1343 | 1375 |
1344 // Send that the navigation has proceeded; say it got redirected again. | 1376 // Send that the navigation has proceeded; say it got redirected again. |
1377 SimulateServerRedirectIfPlzNavigate(main_test_rfh(), final_url); | |
1345 main_test_rfh()->PrepareForCommit(final_url); | 1378 main_test_rfh()->PrepareForCommit(final_url); |
1346 main_test_rfh()->SendNavigate(0, final_url); | 1379 main_test_rfh()->SendNavigate(0, final_url); |
1347 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1380 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
1348 navigation_entry_committed_counter_ = 0; | 1381 navigation_entry_committed_counter_ = 0; |
1349 | 1382 |
1350 // Now the reload is committed. | 1383 // Now the reload is committed. |
1351 EXPECT_EQ(controller.GetEntryCount(), 1); | 1384 EXPECT_EQ(controller.GetEntryCount(), 1); |
1352 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); | 1385 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 0); |
1353 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | 1386 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
1354 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1387 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1529 | 1562 |
1530 // We should now have a pending navigation to go back. | 1563 // We should now have a pending navigation to go back. |
1531 EXPECT_EQ(controller.GetEntryCount(), 2); | 1564 EXPECT_EQ(controller.GetEntryCount(), 2); |
1532 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); | 1565 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 1); |
1533 EXPECT_EQ(controller.GetPendingEntryIndex(), 0); | 1566 EXPECT_EQ(controller.GetPendingEntryIndex(), 0); |
1534 EXPECT_TRUE(controller.GetLastCommittedEntry()); | 1567 EXPECT_TRUE(controller.GetLastCommittedEntry()); |
1535 EXPECT_TRUE(controller.GetPendingEntry()); | 1568 EXPECT_TRUE(controller.GetPendingEntry()); |
1536 EXPECT_FALSE(controller.CanGoBack()); | 1569 EXPECT_FALSE(controller.CanGoBack()); |
1537 EXPECT_TRUE(controller.CanGoForward()); | 1570 EXPECT_TRUE(controller.CanGoForward()); |
1538 | 1571 |
1572 SimulateServerRedirectIfPlzNavigate(main_test_rfh(), url3); | |
carlosk
2015/02/20 19:16:51
Same as previous comment for "a reload navigation
clamy
2015/02/23 10:52:34
Acknowledged.
| |
1539 main_test_rfh()->PrepareForCommit(url3); | 1573 main_test_rfh()->PrepareForCommit(url3); |
1540 main_test_rfh()->SendNavigate(2, url3); | 1574 main_test_rfh()->SendNavigate(2, url3); |
1541 EXPECT_EQ(1U, navigation_entry_committed_counter_); | 1575 EXPECT_EQ(1U, navigation_entry_committed_counter_); |
1542 navigation_entry_committed_counter_ = 0; | 1576 navigation_entry_committed_counter_ = 0; |
1543 | 1577 |
1544 // The back navigation resulted in a completely new navigation. | 1578 // The back navigation resulted in a completely new navigation. |
1545 // TODO(darin): perhaps this behavior will be confusing to users? | 1579 // TODO(darin): perhaps this behavior will be confusing to users? |
1546 EXPECT_EQ(controller.GetEntryCount(), 3); | 1580 EXPECT_EQ(controller.GetEntryCount(), 3); |
1547 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2); | 1581 EXPECT_EQ(controller.GetLastCommittedEntryIndex(), 2); |
1548 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); | 1582 EXPECT_EQ(controller.GetPendingEntryIndex(), -1); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1587 | 1621 |
1588 // Receives a back message when there is a different renavigation already | 1622 // Receives a back message when there is a different renavigation already |
1589 // pending. | 1623 // pending. |
1590 TEST_F(NavigationControllerTest, Back_OtherBackPending) { | 1624 TEST_F(NavigationControllerTest, Back_OtherBackPending) { |
1591 NavigationControllerImpl& controller = controller_impl(); | 1625 NavigationControllerImpl& controller = controller_impl(); |
1592 const GURL kUrl1("http://foo/1"); | 1626 const GURL kUrl1("http://foo/1"); |
1593 const GURL kUrl2("http://foo/2"); | 1627 const GURL kUrl2("http://foo/2"); |
1594 const GURL kUrl3("http://foo/3"); | 1628 const GURL kUrl3("http://foo/3"); |
1595 | 1629 |
1596 // First navigate three places so we have some back history. | 1630 // First navigate three places so we have some back history. |
1631 main_test_rfh()->RendererRequestIfPlzNavigate(kUrl1, true); | |
1597 main_test_rfh()->PrepareForCommit(kUrl1); | 1632 main_test_rfh()->PrepareForCommit(kUrl1); |
1598 main_test_rfh()->SendNavigate(0, kUrl1); | 1633 main_test_rfh()->SendNavigate(0, kUrl1); |
1634 main_test_rfh()->RendererRequestIfPlzNavigate(kUrl2, true); | |
1599 main_test_rfh()->PrepareForCommit(kUrl2); | 1635 main_test_rfh()->PrepareForCommit(kUrl2); |
1600 main_test_rfh()->SendNavigate(1, kUrl2); | 1636 main_test_rfh()->SendNavigate(1, kUrl2); |
1637 main_test_rfh()->RendererRequestIfPlzNavigate(kUrl3, true); | |
1601 main_test_rfh()->PrepareForCommit(kUrl3); | 1638 main_test_rfh()->PrepareForCommit(kUrl3); |
1602 main_test_rfh()->SendNavigate(2, kUrl3); | 1639 main_test_rfh()->SendNavigate(2, kUrl3); |
1603 | 1640 |
1604 // With nothing pending, say we get a navigation to the second entry. | 1641 // With nothing pending, say we get a navigation to the second entry. |
1642 main_test_rfh()->RendererRequestIfPlzNavigate(kUrl2, true); | |
1605 main_test_rfh()->PrepareForCommit(kUrl2); | 1643 main_test_rfh()->PrepareForCommit(kUrl2); |
1606 main_test_rfh()->SendNavigate(1, kUrl2); | 1644 main_test_rfh()->SendNavigate(1, kUrl2); |
1607 | 1645 |
1608 // We know all the entries have the same site instance, so we can just grab | 1646 // We know all the entries have the same site instance, so we can just grab |
1609 // a random one for looking up other entries. | 1647 // a random one for looking up other entries. |
1610 SiteInstance* site_instance = | 1648 SiteInstance* site_instance = |
1611 NavigationEntryImpl::FromNavigationEntry( | 1649 NavigationEntryImpl::FromNavigationEntry( |
1612 controller.GetLastCommittedEntry())->site_instance(); | 1650 controller.GetLastCommittedEntry())->site_instance(); |
1613 | 1651 |
1614 // That second URL should be the last committed and it should have gotten the | 1652 // That second URL should be the last committed and it should have gotten the |
1615 // new title. | 1653 // new title. |
1616 EXPECT_EQ(kUrl2, controller.GetEntryWithPageID(site_instance, 1)->GetURL()); | 1654 EXPECT_EQ(kUrl2, controller.GetEntryWithPageID(site_instance, 1)->GetURL()); |
1617 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); | 1655 EXPECT_EQ(1, controller.GetLastCommittedEntryIndex()); |
1618 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 1656 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
1619 | 1657 |
1620 // Now go forward to the last item again and say it was committed. | 1658 // Now go forward to the last item again and say it was committed. |
1621 controller.GoForward(); | 1659 controller.GoForward(); |
1622 main_test_rfh()->PrepareForCommit(kUrl3); | 1660 main_test_rfh()->PrepareForCommit(kUrl3); |
1623 main_test_rfh()->SendNavigate(2, kUrl3); | 1661 main_test_rfh()->SendNavigate(2, kUrl3); |
1624 | 1662 |
1625 // Now start going back one to the second page. It will be pending. | 1663 // Now start going back one to the second page. It will be pending. |
1626 controller.GoBack(); | 1664 controller.GoBack(); |
1627 EXPECT_EQ(1, controller.GetPendingEntryIndex()); | 1665 EXPECT_EQ(1, controller.GetPendingEntryIndex()); |
1628 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); | 1666 EXPECT_EQ(2, controller.GetLastCommittedEntryIndex()); |
1629 | 1667 |
1630 // Not synthesize a totally new back event to the first page. This will not | 1668 // Now synthesize a totally new back event to the first page. This will not |
1631 // match the pending one. | 1669 // match the pending one. |
1670 main_test_rfh()->RendererRequestIfPlzNavigate(kUrl1, true); | |
1632 main_test_rfh()->PrepareForCommit(kUrl1); | 1671 main_test_rfh()->PrepareForCommit(kUrl1); |
1633 main_test_rfh()->SendNavigate(0, kUrl1); | 1672 main_test_rfh()->SendNavigate(0, kUrl1); |
1634 | 1673 |
1635 // The committed navigation should clear the pending entry. | 1674 // The committed navigation should clear the pending entry. |
1636 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); | 1675 EXPECT_EQ(-1, controller.GetPendingEntryIndex()); |
1637 | 1676 |
1638 // But the navigated entry should be the last committed. | 1677 // But the navigated entry should be the last committed. |
1639 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); | 1678 EXPECT_EQ(0, controller.GetLastCommittedEntryIndex()); |
1640 EXPECT_EQ(kUrl1, controller.GetLastCommittedEntry()->GetURL()); | 1679 EXPECT_EQ(kUrl1, controller.GetLastCommittedEntry()->GetURL()); |
1641 } | 1680 } |
(...skipping 975 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2617 NavigationControllerImpl& controller = controller_impl(); | 2656 NavigationControllerImpl& controller = controller_impl(); |
2618 // First navigate somewhere normal. | 2657 // First navigate somewhere normal. |
2619 const GURL url1("http://foo"); | 2658 const GURL url1("http://foo"); |
2620 controller.LoadURL( | 2659 controller.LoadURL( |
2621 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 2660 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
2622 main_test_rfh()->PrepareForCommit(url1); | 2661 main_test_rfh()->PrepareForCommit(url1); |
2623 main_test_rfh()->SendNavigate(0, url1); | 2662 main_test_rfh()->SendNavigate(0, url1); |
2624 | 2663 |
2625 // Now navigate somewhere with an interstitial. | 2664 // Now navigate somewhere with an interstitial. |
2626 const GURL url2("http://bar"); | 2665 const GURL url2("http://bar"); |
2627 controller.LoadURL( | 2666 controller.LoadURL(url2, Referrer(), ui::PAGE_TRANSITION_TYPED, |
2628 url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 2667 std::string()); |
carlosk
2015/02/20 19:16:51
The previous URL value here seemed to not be what
clamy
2015/02/23 10:52:34
Acknowledged.
| |
2629 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> | 2668 NavigationEntryImpl::FromNavigationEntry(controller.GetPendingEntry())-> |
2630 set_page_type(PAGE_TYPE_INTERSTITIAL); | 2669 set_page_type(PAGE_TYPE_INTERSTITIAL); |
2631 | 2670 |
2632 // At this point the interstitial will be displayed and the load will still | 2671 // At this point the interstitial will be displayed and the load will still |
2633 // be pending. If the user continues, the load will commit. | 2672 // be pending. If the user continues, the load will commit. |
2634 main_test_rfh()->PrepareForCommit(url2); | 2673 main_test_rfh()->PrepareForCommit(url2); |
2635 main_test_rfh()->SendNavigate(1, url2); | 2674 main_test_rfh()->SendNavigate(1, url2); |
2636 | 2675 |
2637 // The page should be a normal page again. | 2676 // The page should be a normal page again. |
2638 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); | 2677 EXPECT_EQ(url2, controller.GetLastCommittedEntry()->GetURL()); |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2800 | 2839 |
2801 // We should have navigated, transient entry should be gone. | 2840 // We should have navigated, transient entry should be gone. |
2802 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); | 2841 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); |
2803 EXPECT_EQ(controller.GetEntryCount(), 3); | 2842 EXPECT_EQ(controller.GetEntryCount(), 3); |
2804 | 2843 |
2805 // Add a transient again, then navigate with no pending entry this time. | 2844 // Add a transient again, then navigate with no pending entry this time. |
2806 transient_entry = new NavigationEntryImpl; | 2845 transient_entry = new NavigationEntryImpl; |
2807 transient_entry->SetURL(transient_url); | 2846 transient_entry->SetURL(transient_url); |
2808 controller.SetTransientEntry(transient_entry); | 2847 controller.SetTransientEntry(transient_entry); |
2809 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); | 2848 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); |
2849 main_test_rfh()->RendererRequestIfPlzNavigate(url3, true); | |
carlosk
2015/02/20 19:16:51
Again not really sure about these ones in this tes
clamy
2015/02/23 10:52:34
Acknowledged.
| |
2810 main_test_rfh()->PrepareForCommit(url3); | 2850 main_test_rfh()->PrepareForCommit(url3); |
2811 main_test_rfh()->SendNavigate(3, url3); | 2851 main_test_rfh()->SendNavigate(3, url3); |
2812 // Transient entry should be gone. | 2852 // Transient entry should be gone. |
2813 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); | 2853 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); |
2814 EXPECT_EQ(controller.GetEntryCount(), 4); | 2854 EXPECT_EQ(controller.GetEntryCount(), 4); |
2815 | 2855 |
2816 // Initiate a navigation, add a transient then commit navigation. | 2856 // Initiate a navigation, add a transient then commit navigation. |
2817 controller.LoadURL( | 2857 controller.LoadURL( |
2818 url4, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); | 2858 url4, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
2819 transient_entry = new NavigationEntryImpl; | 2859 transient_entry = new NavigationEntryImpl; |
2820 transient_entry->SetURL(transient_url); | 2860 transient_entry->SetURL(transient_url); |
2821 controller.SetTransientEntry(transient_entry); | 2861 controller.SetTransientEntry(transient_entry); |
2822 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); | 2862 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); |
2823 main_test_rfh()->PrepareForCommit(url4); | 2863 main_test_rfh()->PrepareForCommit(url4); |
2824 main_test_rfh()->SendNavigate(4, url4); | 2864 main_test_rfh()->SendNavigate(4, url4); |
2825 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); | 2865 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); |
2826 EXPECT_EQ(controller.GetEntryCount(), 5); | 2866 EXPECT_EQ(controller.GetEntryCount(), 5); |
2827 | 2867 |
2828 // Add a transient and go back. This should simply remove the transient. | 2868 // Add a transient and go back. This should simply remove the transient. |
2829 transient_entry = new NavigationEntryImpl; | 2869 transient_entry = new NavigationEntryImpl; |
2830 transient_entry->SetURL(transient_url); | 2870 transient_entry->SetURL(transient_url); |
2831 controller.SetTransientEntry(transient_entry); | 2871 controller.SetTransientEntry(transient_entry); |
2832 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); | 2872 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); |
2833 EXPECT_TRUE(controller.CanGoBack()); | 2873 EXPECT_TRUE(controller.CanGoBack()); |
2834 EXPECT_FALSE(controller.CanGoForward()); | 2874 EXPECT_FALSE(controller.CanGoForward()); |
2835 controller.GoBack(); | 2875 controller.GoBack(); |
2836 // Transient entry should be gone. | 2876 // Transient entry should be gone. |
2837 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); | 2877 EXPECT_EQ(url4, controller.GetVisibleEntry()->GetURL()); |
2838 EXPECT_EQ(controller.GetEntryCount(), 5); | 2878 EXPECT_EQ(controller.GetEntryCount(), 5); |
2879 | |
2880 main_test_rfh()->RendererRequestIfPlzNavigate(url3, false); | |
2839 main_test_rfh()->PrepareForCommit(url3); | 2881 main_test_rfh()->PrepareForCommit(url3); |
2840 main_test_rfh()->SendNavigate(3, url3); | 2882 main_test_rfh()->SendNavigate(3, url3); |
2841 | 2883 |
2842 // Add a transient and go to an entry before the current one. | 2884 // Add a transient and go to an entry before the current one. |
2843 transient_entry = new NavigationEntryImpl; | 2885 transient_entry = new NavigationEntryImpl; |
2844 transient_entry->SetURL(transient_url); | 2886 transient_entry->SetURL(transient_url); |
2845 controller.SetTransientEntry(transient_entry); | 2887 controller.SetTransientEntry(transient_entry); |
2846 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); | 2888 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); |
2847 controller.GoToIndex(1); | 2889 controller.GoToIndex(1); |
2848 // The navigation should have been initiated, transient entry should be gone. | 2890 // The navigation should have been initiated, transient entry should be gone. |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2882 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); | 2924 EXPECT_EQ(url2, controller.GetVisibleEntry()->GetURL()); |
2883 main_test_rfh()->PrepareForCommit(url3); | 2925 main_test_rfh()->PrepareForCommit(url3); |
2884 main_test_rfh()->SendNavigate(3, url3); | 2926 main_test_rfh()->SendNavigate(3, url3); |
2885 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); | 2927 EXPECT_EQ(url3, controller.GetVisibleEntry()->GetURL()); |
2886 | 2928 |
2887 // Add a transient and do an in-page navigation, replacing the current entry. | 2929 // Add a transient and do an in-page navigation, replacing the current entry. |
2888 transient_entry = new NavigationEntryImpl; | 2930 transient_entry = new NavigationEntryImpl; |
2889 transient_entry->SetURL(transient_url); | 2931 transient_entry->SetURL(transient_url); |
2890 controller.SetTransientEntry(transient_entry); | 2932 controller.SetTransientEntry(transient_entry); |
2891 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); | 2933 EXPECT_EQ(transient_url, controller.GetVisibleEntry()->GetURL()); |
2934 | |
2935 main_test_rfh()->RendererRequestIfPlzNavigate(url3_ref, false); | |
2892 main_test_rfh()->PrepareForCommit(url3_ref); | 2936 main_test_rfh()->PrepareForCommit(url3_ref); |
2893 main_test_rfh()->SendNavigate(3, url3_ref); | 2937 main_test_rfh()->SendNavigate(3, url3_ref); |
2894 // Transient entry should be gone. | 2938 // Transient entry should be gone. |
2895 EXPECT_FALSE(controller.GetTransientEntry()); | 2939 EXPECT_FALSE(controller.GetTransientEntry()); |
2896 EXPECT_EQ(url3_ref, controller.GetVisibleEntry()->GetURL()); | 2940 EXPECT_EQ(url3_ref, controller.GetVisibleEntry()->GetURL()); |
2897 | 2941 |
2898 // Ensure the URLs are correct. | 2942 // Ensure the URLs are correct. |
2899 EXPECT_EQ(controller.GetEntryCount(), 5); | 2943 EXPECT_EQ(controller.GetEntryCount(), 5); |
2900 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0); | 2944 EXPECT_EQ(controller.GetEntryAtIndex(0)->GetURL(), url0); |
2901 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), url1); | 2945 EXPECT_EQ(controller.GetEntryAtIndex(1)->GetURL(), url1); |
(...skipping 1687 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4589 { | 4633 { |
4590 LoadCommittedDetails details; | 4634 LoadCommittedDetails details; |
4591 controller_impl().RendererDidNavigate(main_test_rfh(), params, &details); | 4635 controller_impl().RendererDidNavigate(main_test_rfh(), params, &details); |
4592 EXPECT_EQ(PAGE_TYPE_ERROR, | 4636 EXPECT_EQ(PAGE_TYPE_ERROR, |
4593 controller_impl().GetLastCommittedEntry()->GetPageType()); | 4637 controller_impl().GetLastCommittedEntry()->GetPageType()); |
4594 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, details.type); | 4638 EXPECT_EQ(NAVIGATION_TYPE_IN_PAGE, details.type); |
4595 } | 4639 } |
4596 } | 4640 } |
4597 | 4641 |
4598 } // namespace content | 4642 } // namespace content |
OLD | NEW |