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

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

Powered by Google App Engine
This is Rietveld 408576698