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

Side by Side Diff: content/renderer/render_view_browsertest.cc

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Rebase. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <stddef.h> 5 #include <stddef.h>
6 #include <stdint.h> 6 #include <stdint.h>
7 #include <tuple> 7 #include <tuple>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 return result; 198 return result;
199 } 199 }
200 200
201 // Returns CommonNavigationParams for a normal navigation to a data: url, with 201 // Returns CommonNavigationParams for a normal navigation to a data: url, with
202 // navigation_start set to Now() plus the given offset. 202 // navigation_start set to Now() plus the given offset.
203 CommonNavigationParams MakeCommonNavigationParams( 203 CommonNavigationParams MakeCommonNavigationParams(
204 TimeDelta navigation_start_offset) { 204 TimeDelta navigation_start_offset) {
205 CommonNavigationParams params; 205 CommonNavigationParams params;
206 params.url = GURL("data:text/html,<div>Page</div>"); 206 params.url = GURL("data:text/html,<div>Page</div>");
207 params.navigation_start = base::TimeTicks::Now() + navigation_start_offset; 207 params.navigation_start = base::TimeTicks::Now() + navigation_start_offset;
208 params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 208 params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
209 params.transition = ui::PAGE_TRANSITION_TYPED; 209 params.transition = ui::PAGE_TRANSITION_TYPED;
210 return params; 210 return params;
211 } 211 }
212 212
213 } // namespace 213 } // namespace
214 214
215 class RenderViewImplTest : public RenderViewTest { 215 class RenderViewImplTest : public RenderViewTest {
216 public: 216 public:
217 RenderViewImplTest() { 217 RenderViewImplTest() {
218 // Attach a pseudo keyboard device to this object. 218 // Attach a pseudo keyboard device to this object.
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
595 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( 595 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching(
596 FrameHostMsg_UpdateState::ID)); 596 FrameHostMsg_UpdateState::ID));
597 } 597 }
598 598
599 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { 599 TEST_F(RenderViewImplTest, OnNavigationHttpPost) {
600 // An http url will trigger a resource load so cannot be used here. 600 // An http url will trigger a resource load so cannot be used here.
601 CommonNavigationParams common_params; 601 CommonNavigationParams common_params;
602 StartNavigationParams start_params; 602 StartNavigationParams start_params;
603 RequestNavigationParams request_params; 603 RequestNavigationParams request_params;
604 common_params.url = GURL("data:text/html,<div>Page</div>"); 604 common_params.url = GURL("data:text/html,<div>Page</div>");
605 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 605 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
606 common_params.transition = ui::PAGE_TRANSITION_TYPED; 606 common_params.transition = ui::PAGE_TRANSITION_TYPED;
607 common_params.method = "POST"; 607 common_params.method = "POST";
608 608
609 // Set up post data. 609 // Set up post data.
610 const char raw_data[] = "post \0\ndata"; 610 const char raw_data[] = "post \0\ndata";
611 const size_t length = arraysize(raw_data); 611 const size_t length = arraysize(raw_data);
612 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl); 612 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl);
613 post_data->AppendBytes(raw_data, length); 613 post_data->AppendBytes(raw_data, length);
614 common_params.post_data = post_data; 614 common_params.post_data = post_data;
615 615
(...skipping 20 matching lines...) Expand all
636 EXPECT_TRUE(successful); 636 EXPECT_TRUE(successful);
637 EXPECT_EQ(blink::WebHTTPBody::Element::TypeData, element.type); 637 EXPECT_EQ(blink::WebHTTPBody::Element::TypeData, element.type);
638 EXPECT_EQ(length, element.data.size()); 638 EXPECT_EQ(length, element.data.size());
639 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length)); 639 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length));
640 } 640 }
641 641
642 #if defined(OS_ANDROID) 642 #if defined(OS_ANDROID)
643 TEST_F(RenderViewImplTest, OnNavigationLoadDataWithBaseURL) { 643 TEST_F(RenderViewImplTest, OnNavigationLoadDataWithBaseURL) {
644 CommonNavigationParams common_params; 644 CommonNavigationParams common_params;
645 common_params.url = GURL("data:text/html,"); 645 common_params.url = GURL("data:text/html,");
646 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 646 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
647 common_params.transition = ui::PAGE_TRANSITION_TYPED; 647 common_params.transition = ui::PAGE_TRANSITION_TYPED;
648 common_params.base_url_for_data_url = GURL("about:blank"); 648 common_params.base_url_for_data_url = GURL("about:blank");
649 common_params.history_url_for_data_url = GURL("about:blank"); 649 common_params.history_url_for_data_url = GURL("about:blank");
650 RequestNavigationParams request_params; 650 RequestNavigationParams request_params;
651 request_params.data_url_as_string = 651 request_params.data_url_as_string =
652 "data:text/html,<html><head><title>Data page</title></head></html>"; 652 "data:text/html,<html><head><title>Data page</title></head></html>";
653 653
654 frame()->Navigate(common_params, StartNavigationParams(), 654 frame()->Navigate(common_params, StartNavigationParams(),
655 request_params); 655 request_params);
656 const IPC::Message* frame_title_msg = nullptr; 656 const IPC::Message* frame_title_msg = nullptr;
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
963 FrameHostMsg_UpdateState::ID); 963 FrameHostMsg_UpdateState::ID);
964 ASSERT_TRUE(msg_C); 964 ASSERT_TRUE(msg_C);
965 FrameHostMsg_UpdateState::Read(msg_C, &param); 965 FrameHostMsg_UpdateState::Read(msg_C, &param);
966 PageState state_C = std::get<0>(param); 966 PageState state_C = std::get<0>(param);
967 EXPECT_NE(state_B, state_C); 967 EXPECT_NE(state_B, state_C);
968 render_thread_->sink().ClearMessages(); 968 render_thread_->sink().ClearMessages();
969 969
970 // Go back to C and commit, preparing for our real test. 970 // Go back to C and commit, preparing for our real test.
971 CommonNavigationParams common_params_C; 971 CommonNavigationParams common_params_C;
972 RequestNavigationParams request_params_C; 972 RequestNavigationParams request_params_C;
973 common_params_C.navigation_type = FrameMsg_Navigate_Type::NORMAL; 973 common_params_C.navigation_type =
974 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
974 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 975 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
975 request_params_C.current_history_list_length = 4; 976 request_params_C.current_history_list_length = 4;
976 request_params_C.current_history_list_offset = 3; 977 request_params_C.current_history_list_offset = 3;
977 request_params_C.pending_history_list_offset = 2; 978 request_params_C.pending_history_list_offset = 2;
978 request_params_C.nav_entry_id = 3; 979 request_params_C.nav_entry_id = 3;
979 request_params_C.page_state = state_C; 980 request_params_C.page_state = state_C;
980 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C); 981 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C);
981 ProcessPendingMessages(); 982 ProcessPendingMessages();
982 render_thread_->sink().ClearMessages(); 983 render_thread_->sink().ClearMessages();
983 984
984 // Go back twice quickly, such that page B does not have a chance to commit. 985 // Go back twice quickly, such that page B does not have a chance to commit.
985 // This leads to two changes to the back/forward list but only one change to 986 // This leads to two changes to the back/forward list but only one change to
986 // the RenderView's page ID. 987 // the RenderView's page ID.
987 988
988 // Back to page B without committing. 989 // Back to page B without committing.
989 CommonNavigationParams common_params_B; 990 CommonNavigationParams common_params_B;
990 RequestNavigationParams request_params_B; 991 RequestNavigationParams request_params_B;
991 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; 992 common_params_B.navigation_type =
993 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
992 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 994 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
993 request_params_B.current_history_list_length = 4; 995 request_params_B.current_history_list_length = 4;
994 request_params_B.current_history_list_offset = 2; 996 request_params_B.current_history_list_offset = 2;
995 request_params_B.pending_history_list_offset = 1; 997 request_params_B.pending_history_list_offset = 1;
996 request_params_B.nav_entry_id = 2; 998 request_params_B.nav_entry_id = 2;
997 request_params_B.page_state = state_B; 999 request_params_B.page_state = state_B;
998 frame()->Navigate(common_params_B, StartNavigationParams(), request_params_B); 1000 frame()->Navigate(common_params_B, StartNavigationParams(), request_params_B);
999 1001
1000 // Back to page A and commit. 1002 // Back to page A and commit.
1001 CommonNavigationParams common_params; 1003 CommonNavigationParams common_params;
1002 RequestNavigationParams request_params; 1004 RequestNavigationParams request_params;
1003 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1005 common_params.navigation_type =
1006 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
1004 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 1007 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
1005 request_params.current_history_list_length = 4; 1008 request_params.current_history_list_length = 4;
1006 request_params.current_history_list_offset = 2; 1009 request_params.current_history_list_offset = 2;
1007 request_params.pending_history_list_offset = 0; 1010 request_params.pending_history_list_offset = 0;
1008 request_params.nav_entry_id = 1; 1011 request_params.nav_entry_id = 1;
1009 request_params.page_state = state_A; 1012 request_params.page_state = state_A;
1010 frame()->Navigate(common_params, StartNavigationParams(), request_params); 1013 frame()->Navigate(common_params, StartNavigationParams(), request_params);
1011 ProcessPendingMessages(); 1014 ProcessPendingMessages();
1012 1015
1013 // Now ensure that the UpdateState message we receive is consistent 1016 // Now ensure that the UpdateState message we receive is consistent
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
1336 GetMainFrame()->enableViewSourceMode(true); 1339 GetMainFrame()->enableViewSourceMode(true);
1337 WebURLError error; 1340 WebURLError error;
1338 error.domain = WebString::fromUTF8(net::kErrorDomain); 1341 error.domain = WebString::fromUTF8(net::kErrorDomain);
1339 error.reason = net::ERR_FILE_NOT_FOUND; 1342 error.reason = net::ERR_FILE_NOT_FOUND;
1340 error.unreachableURL = GURL("http://foo"); 1343 error.unreachableURL = GURL("http://foo");
1341 WebLocalFrame* web_frame = GetMainFrame(); 1344 WebLocalFrame* web_frame = GetMainFrame();
1342 1345
1343 // Start a load that will reach provisional state synchronously, 1346 // Start a load that will reach provisional state synchronously,
1344 // but won't complete synchronously. 1347 // but won't complete synchronously.
1345 CommonNavigationParams common_params; 1348 CommonNavigationParams common_params;
1346 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1349 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1347 common_params.url = GURL("data:text/html,test data"); 1350 common_params.url = GURL("data:text/html,test data");
1348 frame()->Navigate(common_params, StartNavigationParams(), 1351 frame()->Navigate(common_params, StartNavigationParams(),
1349 RequestNavigationParams()); 1352 RequestNavigationParams());
1350 1353
1351 // An error occurred. 1354 // An error occurred.
1352 view()->GetMainRenderFrame()->didFailProvisionalLoad( 1355 view()->GetMainRenderFrame()->didFailProvisionalLoad(
1353 web_frame, error, blink::WebStandardCommit); 1356 web_frame, error, blink::WebStandardCommit);
1354 // Frame should exit view-source mode. 1357 // Frame should exit view-source mode.
1355 EXPECT_FALSE(web_frame->isViewSourceModeEnabled()); 1358 EXPECT_FALSE(web_frame->isViewSourceModeEnabled());
1356 } 1359 }
1357 1360
1358 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) { 1361 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) {
1359 GetMainFrame()->enableViewSourceMode(true); 1362 GetMainFrame()->enableViewSourceMode(true);
1360 WebURLError error; 1363 WebURLError error;
1361 error.domain = WebString::fromUTF8(net::kErrorDomain); 1364 error.domain = WebString::fromUTF8(net::kErrorDomain);
1362 error.reason = net::ERR_ABORTED; 1365 error.reason = net::ERR_ABORTED;
1363 error.unreachableURL = GURL("http://foo"); 1366 error.unreachableURL = GURL("http://foo");
1364 WebLocalFrame* web_frame = GetMainFrame(); 1367 WebLocalFrame* web_frame = GetMainFrame();
1365 1368
1366 // Start a load that will reach provisional state synchronously, 1369 // Start a load that will reach provisional state synchronously,
1367 // but won't complete synchronously. 1370 // but won't complete synchronously.
1368 CommonNavigationParams common_params; 1371 CommonNavigationParams common_params;
1369 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1372 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1370 common_params.url = GURL("data:text/html,test data"); 1373 common_params.url = GURL("data:text/html,test data");
1371 frame()->Navigate(common_params, StartNavigationParams(), 1374 frame()->Navigate(common_params, StartNavigationParams(),
1372 RequestNavigationParams()); 1375 RequestNavigationParams());
1373 1376
1374 // A cancellation occurred. 1377 // A cancellation occurred.
1375 view()->GetMainRenderFrame()->didFailProvisionalLoad( 1378 view()->GetMainRenderFrame()->didFailProvisionalLoad(
1376 web_frame, error, blink::WebStandardCommit); 1379 web_frame, error, blink::WebStandardCommit);
1377 // Frame should stay in view-source mode. 1380 // Frame should stay in view-source mode.
1378 EXPECT_TRUE(web_frame->isViewSourceModeEnabled()); 1381 EXPECT_TRUE(web_frame->isViewSourceModeEnabled());
1379 } 1382 }
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1671 1674
1672 // Test that the navigating specific frames works correctly. 1675 // Test that the navigating specific frames works correctly.
1673 TEST_F(RenderViewImplTest, NavigateSubframe) { 1676 TEST_F(RenderViewImplTest, NavigateSubframe) {
1674 // Load page A. 1677 // Load page A.
1675 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>"); 1678 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>");
1676 1679
1677 // Navigate the frame only. 1680 // Navigate the frame only.
1678 CommonNavigationParams common_params; 1681 CommonNavigationParams common_params;
1679 RequestNavigationParams request_params; 1682 RequestNavigationParams request_params;
1680 common_params.url = GURL("data:text/html,world"); 1683 common_params.url = GURL("data:text/html,world");
1681 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1684 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1682 common_params.transition = ui::PAGE_TRANSITION_TYPED; 1685 common_params.transition = ui::PAGE_TRANSITION_TYPED;
1683 common_params.navigation_start = base::TimeTicks::FromInternalValue(1); 1686 common_params.navigation_start = base::TimeTicks::FromInternalValue(1);
1684 request_params.current_history_list_length = 1; 1687 request_params.current_history_list_length = 1;
1685 request_params.current_history_list_offset = 0; 1688 request_params.current_history_list_offset = 0;
1686 request_params.pending_history_list_offset = 1; 1689 request_params.pending_history_list_offset = 1;
1687 1690
1688 TestRenderFrame* subframe = 1691 TestRenderFrame* subframe =
1689 static_cast<TestRenderFrame*>(RenderFrameImpl::FromWebFrame( 1692 static_cast<TestRenderFrame*>(RenderFrameImpl::FromWebFrame(
1690 view()->webview()->findFrameByName("frame"))); 1693 view()->webview()->findFrameByName("frame")));
1691 subframe->Navigate(common_params, StartNavigationParams(), request_params); 1694 subframe->Navigate(common_params, StartNavigationParams(), request_params);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1783 TEST_F(RendererErrorPageTest, MAYBE_Suppresses) { 1786 TEST_F(RendererErrorPageTest, MAYBE_Suppresses) {
1784 WebURLError error; 1787 WebURLError error;
1785 error.domain = WebString::fromUTF8(net::kErrorDomain); 1788 error.domain = WebString::fromUTF8(net::kErrorDomain);
1786 error.reason = net::ERR_FILE_NOT_FOUND; 1789 error.reason = net::ERR_FILE_NOT_FOUND;
1787 error.unreachableURL = GURL("http://example.com/suppress"); 1790 error.unreachableURL = GURL("http://example.com/suppress");
1788 WebLocalFrame* web_frame = GetMainFrame(); 1791 WebLocalFrame* web_frame = GetMainFrame();
1789 1792
1790 // Start a load that will reach provisional state synchronously, 1793 // Start a load that will reach provisional state synchronously,
1791 // but won't complete synchronously. 1794 // but won't complete synchronously.
1792 CommonNavigationParams common_params; 1795 CommonNavigationParams common_params;
1793 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1796 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1794 common_params.url = GURL("data:text/html,test data"); 1797 common_params.url = GURL("data:text/html,test data");
1795 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1798 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1796 main_frame->Navigate(common_params, StartNavigationParams(), 1799 main_frame->Navigate(common_params, StartNavigationParams(),
1797 RequestNavigationParams()); 1800 RequestNavigationParams());
1798 1801
1799 // An error occurred. 1802 // An error occurred.
1800 main_frame->didFailProvisionalLoad(web_frame, error, 1803 main_frame->didFailProvisionalLoad(web_frame, error,
1801 blink::WebStandardCommit); 1804 blink::WebStandardCommit);
1802 const int kMaxOutputCharacters = 22; 1805 const int kMaxOutputCharacters = 22;
1803 EXPECT_EQ("", WebFrameContentDumper::dumpWebViewAsText(view()->GetWebView(), 1806 EXPECT_EQ("", WebFrameContentDumper::dumpWebViewAsText(view()->GetWebView(),
(...skipping 11 matching lines...) Expand all
1815 TEST_F(RendererErrorPageTest, MAYBE_DoesNotSuppress) { 1818 TEST_F(RendererErrorPageTest, MAYBE_DoesNotSuppress) {
1816 WebURLError error; 1819 WebURLError error;
1817 error.domain = WebString::fromUTF8(net::kErrorDomain); 1820 error.domain = WebString::fromUTF8(net::kErrorDomain);
1818 error.reason = net::ERR_FILE_NOT_FOUND; 1821 error.reason = net::ERR_FILE_NOT_FOUND;
1819 error.unreachableURL = GURL("http://example.com/dont-suppress"); 1822 error.unreachableURL = GURL("http://example.com/dont-suppress");
1820 WebLocalFrame* web_frame = GetMainFrame(); 1823 WebLocalFrame* web_frame = GetMainFrame();
1821 1824
1822 // Start a load that will reach provisional state synchronously, 1825 // Start a load that will reach provisional state synchronously,
1823 // but won't complete synchronously. 1826 // but won't complete synchronously.
1824 CommonNavigationParams common_params; 1827 CommonNavigationParams common_params;
1825 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1828 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1826 common_params.url = GURL("data:text/html,test data"); 1829 common_params.url = GURL("data:text/html,test data");
1827 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1830 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1828 main_frame->Navigate(common_params, StartNavigationParams(), 1831 main_frame->Navigate(common_params, StartNavigationParams(),
1829 RequestNavigationParams()); 1832 RequestNavigationParams());
1830 1833
1831 // An error occurred. 1834 // An error occurred.
1832 main_frame->didFailProvisionalLoad(web_frame, error, 1835 main_frame->didFailProvisionalLoad(web_frame, error,
1833 blink::WebStandardCommit); 1836 blink::WebStandardCommit);
1834 1837
1835 // The error page itself is loaded asynchronously. 1838 // The error page itself is loaded asynchronously.
(...skipping 13 matching lines...) Expand all
1849 #define MAYBE_HttpStatusCodeErrorWithEmptyBody HttpStatusCodeErrorWithEmptyBody 1852 #define MAYBE_HttpStatusCodeErrorWithEmptyBody HttpStatusCodeErrorWithEmptyBody
1850 #endif 1853 #endif
1851 TEST_F(RendererErrorPageTest, MAYBE_HttpStatusCodeErrorWithEmptyBody) { 1854 TEST_F(RendererErrorPageTest, MAYBE_HttpStatusCodeErrorWithEmptyBody) {
1852 blink::WebURLResponse response; 1855 blink::WebURLResponse response;
1853 response.setHTTPStatusCode(503); 1856 response.setHTTPStatusCode(503);
1854 WebLocalFrame* web_frame = GetMainFrame(); 1857 WebLocalFrame* web_frame = GetMainFrame();
1855 1858
1856 // Start a load that will reach provisional state synchronously, 1859 // Start a load that will reach provisional state synchronously,
1857 // but won't complete synchronously. 1860 // but won't complete synchronously.
1858 CommonNavigationParams common_params; 1861 CommonNavigationParams common_params;
1859 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1862 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1860 common_params.url = GURL("data:text/html,test data"); 1863 common_params.url = GURL("data:text/html,test data");
1861 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1864 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1862 main_frame->Navigate(common_params, StartNavigationParams(), 1865 main_frame->Navigate(common_params, StartNavigationParams(),
1863 RequestNavigationParams()); 1866 RequestNavigationParams());
1864 1867
1865 // Emulate a 4xx/5xx main resource response with an empty body. 1868 // Emulate a 4xx/5xx main resource response with an empty body.
1866 main_frame->didReceiveResponse(response); 1869 main_frame->didReceiveResponse(response);
1867 main_frame->didFinishDocumentLoad(web_frame); 1870 main_frame->didFinishDocumentLoad(web_frame);
1868 main_frame->runScriptsAtDocumentReady(web_frame, true); 1871 main_frame->runScriptsAtDocumentReady(web_frame, true);
1869 1872
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
2098 LoadHTML("<div id=pagename>Page C</div>"); 2101 LoadHTML("<div id=pagename>Page C</div>");
2099 PageState forward_state = GetCurrentPageState(); 2102 PageState forward_state = GetCurrentPageState();
2100 ProcessPendingMessages(); 2103 ProcessPendingMessages();
2101 render_thread_->sink().ClearMessages(); 2104 render_thread_->sink().ClearMessages();
2102 2105
2103 // Go back. 2106 // Go back.
2104 CommonNavigationParams common_params_back; 2107 CommonNavigationParams common_params_back;
2105 common_params_back.url = 2108 common_params_back.url =
2106 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>"); 2109 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>");
2107 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2110 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2111 common_params_back.navigation_type =
2112 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2108 GoToOffsetWithParams(-1, back_state, common_params_back, 2113 GoToOffsetWithParams(-1, back_state, common_params_back,
2109 StartNavigationParams(), RequestNavigationParams()); 2114 StartNavigationParams(), RequestNavigationParams());
2110 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params = 2115 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
2111 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>(); 2116 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2112 if (!IsBrowserSideNavigationEnabled()) { 2117 if (!IsBrowserSideNavigationEnabled()) {
2113 // The browser navigation_start should not be used because beforeunload was 2118 // The browser navigation_start should not be used because beforeunload was
2114 // fired during GoToOffsetWithParams. 2119 // fired during GoToOffsetWithParams.
2115 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params), 2120 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
2116 common_params_back.navigation_start); 2121 common_params_back.navigation_start);
2117 } else { 2122 } else {
2118 // PlzNavigate: the browser navigation_start is always used. 2123 // PlzNavigate: the browser navigation_start is always used.
2119 EXPECT_EQ(common_params_back.navigation_start, 2124 EXPECT_EQ(common_params_back.navigation_start,
2120 std::get<1>(host_nav_params)); 2125 std::get<1>(host_nav_params));
2121 } 2126 }
2122 render_thread_->sink().ClearMessages(); 2127 render_thread_->sink().ClearMessages();
2123 2128
2124 // Go forward. 2129 // Go forward.
2125 CommonNavigationParams common_params_forward; 2130 CommonNavigationParams common_params_forward;
2126 common_params_forward.url = 2131 common_params_forward.url =
2127 GURL("data:text/html;charset=utf-8,<div id=pagename>Page C</div>"); 2132 GURL("data:text/html;charset=utf-8,<div id=pagename>Page C</div>");
2128 common_params_forward.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2133 common_params_forward.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2134 common_params_forward.navigation_type =
2135 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2129 GoToOffsetWithParams(1, forward_state, common_params_forward, 2136 GoToOffsetWithParams(1, forward_state, common_params_forward,
2130 StartNavigationParams(), RequestNavigationParams()); 2137 StartNavigationParams(), RequestNavigationParams());
2131 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params2 = 2138 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params2 =
2132 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>(); 2139 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2133 if (!IsBrowserSideNavigationEnabled()) { 2140 if (!IsBrowserSideNavigationEnabled()) {
2134 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params2), 2141 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params2),
2135 common_params_forward.navigation_start); 2142 common_params_forward.navigation_start);
2136 } else { 2143 } else {
2137 EXPECT_EQ(common_params_forward.navigation_start, 2144 EXPECT_EQ(common_params_forward.navigation_start,
2138 std::get<1>(host_nav_params2)); 2145 std::get<1>(host_nav_params2));
2139 } 2146 }
2140 } 2147 }
2141 2148
2142 TEST_F(RenderViewImplTest, NavigationStartForCrossProcessHistoryNavigation) { 2149 TEST_F(RenderViewImplTest, NavigationStartForCrossProcessHistoryNavigation) {
2143 auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1)); 2150 auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1));
2144 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2151 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2152 common_params.navigation_type =
2153 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2145 2154
2146 RequestNavigationParams request_params; 2155 RequestNavigationParams request_params;
2147 request_params.page_state = 2156 request_params.page_state =
2148 PageState::CreateForTesting(common_params.url, false, nullptr, nullptr); 2157 PageState::CreateForTesting(common_params.url, false, nullptr, nullptr);
2149 request_params.nav_entry_id = 42; 2158 request_params.nav_entry_id = 42;
2150 request_params.pending_history_list_offset = 1; 2159 request_params.pending_history_list_offset = 1;
2151 request_params.current_history_list_offset = 0; 2160 request_params.current_history_list_offset = 0;
2152 request_params.current_history_list_length = 1; 2161 request_params.current_history_list_length = 1;
2153 frame()->Navigate(common_params, StartNavigationParams(), request_params); 2162 frame()->Navigate(common_params, StartNavigationParams(), request_params);
2154 2163
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
2557 ExpectPauseAndResume(3); 2566 ExpectPauseAndResume(3);
2558 blink::WebScriptSource source2( 2567 blink::WebScriptSource source2(
2559 WebString::fromUTF8("function func2() { func1(); }; func2();")); 2568 WebString::fromUTF8("function func2() { func1(); }; func2();"));
2560 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1); 2569 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1);
2561 2570
2562 EXPECT_FALSE(IsPaused()); 2571 EXPECT_FALSE(IsPaused());
2563 Detach(); 2572 Detach();
2564 } 2573 }
2565 2574
2566 } // namespace content 2575 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698