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

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

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Allow renderer-initiated reloads. Created 3 years, 11 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 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 return result; 199 return result;
200 } 200 }
201 201
202 // Returns CommonNavigationParams for a normal navigation to a data: url, with 202 // Returns CommonNavigationParams for a normal navigation to a data: url, with
203 // navigation_start set to Now() plus the given offset. 203 // navigation_start set to Now() plus the given offset.
204 CommonNavigationParams MakeCommonNavigationParams( 204 CommonNavigationParams MakeCommonNavigationParams(
205 TimeDelta navigation_start_offset) { 205 TimeDelta navigation_start_offset) {
206 CommonNavigationParams params; 206 CommonNavigationParams params;
207 params.url = GURL("data:text/html,<div>Page</div>"); 207 params.url = GURL("data:text/html,<div>Page</div>");
208 params.navigation_start = base::TimeTicks::Now() + navigation_start_offset; 208 params.navigation_start = base::TimeTicks::Now() + navigation_start_offset;
209 params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 209 params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
210 params.transition = ui::PAGE_TRANSITION_TYPED; 210 params.transition = ui::PAGE_TRANSITION_TYPED;
211 return params; 211 return params;
212 } 212 }
213 213
214 } // namespace 214 } // namespace
215 215
216 class RenderViewImplTest : public RenderViewTest { 216 class RenderViewImplTest : public RenderViewTest {
217 public: 217 public:
218 RenderViewImplTest() { 218 RenderViewImplTest() {
219 // Attach a pseudo keyboard device to this object. 219 // Attach a pseudo keyboard device to this object.
(...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after
598 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( 598 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching(
599 FrameHostMsg_UpdateState::ID)); 599 FrameHostMsg_UpdateState::ID));
600 } 600 }
601 601
602 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { 602 TEST_F(RenderViewImplTest, OnNavigationHttpPost) {
603 // An http url will trigger a resource load so cannot be used here. 603 // An http url will trigger a resource load so cannot be used here.
604 CommonNavigationParams common_params; 604 CommonNavigationParams common_params;
605 StartNavigationParams start_params; 605 StartNavigationParams start_params;
606 RequestNavigationParams request_params; 606 RequestNavigationParams request_params;
607 common_params.url = GURL("data:text/html,<div>Page</div>"); 607 common_params.url = GURL("data:text/html,<div>Page</div>");
608 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 608 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
609 common_params.transition = ui::PAGE_TRANSITION_TYPED; 609 common_params.transition = ui::PAGE_TRANSITION_TYPED;
610 common_params.method = "POST"; 610 common_params.method = "POST";
611 611
612 // Set up post data. 612 // Set up post data.
613 const char raw_data[] = "post \0\ndata"; 613 const char raw_data[] = "post \0\ndata";
614 const size_t length = arraysize(raw_data); 614 const size_t length = arraysize(raw_data);
615 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl); 615 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl);
616 post_data->AppendBytes(raw_data, length); 616 post_data->AppendBytes(raw_data, length);
617 common_params.post_data = post_data; 617 common_params.post_data = post_data;
618 618
(...skipping 20 matching lines...) Expand all
639 EXPECT_TRUE(successful); 639 EXPECT_TRUE(successful);
640 EXPECT_EQ(blink::WebHTTPBody::Element::TypeData, element.type); 640 EXPECT_EQ(blink::WebHTTPBody::Element::TypeData, element.type);
641 EXPECT_EQ(length, element.data.size()); 641 EXPECT_EQ(length, element.data.size());
642 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length)); 642 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length));
643 } 643 }
644 644
645 #if defined(OS_ANDROID) 645 #if defined(OS_ANDROID)
646 TEST_F(RenderViewImplTest, OnNavigationLoadDataWithBaseURL) { 646 TEST_F(RenderViewImplTest, OnNavigationLoadDataWithBaseURL) {
647 CommonNavigationParams common_params; 647 CommonNavigationParams common_params;
648 common_params.url = GURL("data:text/html,"); 648 common_params.url = GURL("data:text/html,");
649 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 649 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
650 common_params.transition = ui::PAGE_TRANSITION_TYPED; 650 common_params.transition = ui::PAGE_TRANSITION_TYPED;
651 common_params.base_url_for_data_url = GURL("about:blank"); 651 common_params.base_url_for_data_url = GURL("about:blank");
652 common_params.history_url_for_data_url = GURL("about:blank"); 652 common_params.history_url_for_data_url = GURL("about:blank");
653 RequestNavigationParams request_params; 653 RequestNavigationParams request_params;
654 request_params.data_url_as_string = 654 request_params.data_url_as_string =
655 "data:text/html,<html><head><title>Data page</title></head></html>"; 655 "data:text/html,<html><head><title>Data page</title></head></html>";
656 656
657 frame()->Navigate(common_params, StartNavigationParams(), 657 frame()->Navigate(common_params, StartNavigationParams(),
658 request_params); 658 request_params);
659 const IPC::Message* frame_title_msg = nullptr; 659 const IPC::Message* frame_title_msg = nullptr;
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 ExecuteJavaScriptForTests( 885 ExecuteJavaScriptForTests(
886 "document.body.removeChild(document.querySelector('iframe'));"); 886 "document.body.removeChild(document.querySelector('iframe'));");
887 RenderFrameProxy* child_proxy = 887 RenderFrameProxy* child_proxy =
888 RenderFrameProxy::FromRoutingID(kProxyRoutingId); 888 RenderFrameProxy::FromRoutingID(kProxyRoutingId);
889 EXPECT_FALSE(child_proxy); 889 EXPECT_FALSE(child_proxy);
890 890
891 // Attempt to start a navigation on the RenderFrame that was created to 891 // Attempt to start a navigation on the RenderFrame that was created to
892 // replace the now-detached RenderFrameProxy. This shouldn't crash and 892 // replace the now-detached RenderFrameProxy. This shouldn't crash and
893 // should abort the navigation, since the frame no longer exists. 893 // should abort the navigation, since the frame no longer exists.
894 CommonNavigationParams common_params; 894 CommonNavigationParams common_params;
895 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 895 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
896 common_params.url = GURL(url::kAboutBlankURL); 896 common_params.url = GURL(url::kAboutBlankURL);
897 provisional_frame->Navigate(common_params, StartNavigationParams(), 897 provisional_frame->Navigate(common_params, StartNavigationParams(),
898 RequestNavigationParams()); 898 RequestNavigationParams());
899 ProcessPendingMessages(); 899 ProcessPendingMessages();
900 900
901 // Check that there was no DidCommitProvisionalLoad. 901 // Check that there was no DidCommitProvisionalLoad.
902 const IPC::Message* frame_navigate_msg = 902 const IPC::Message* frame_navigate_msg =
903 render_thread_->sink().GetUniqueMessageMatching( 903 render_thread_->sink().GetUniqueMessageMatching(
904 FrameHostMsg_DidCommitProvisionalLoad::ID); 904 FrameHostMsg_DidCommitProvisionalLoad::ID);
905 EXPECT_FALSE(frame_navigate_msg); 905 EXPECT_FALSE(frame_navigate_msg);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
976 ViewHostMsg_UpdateState::ID); 976 ViewHostMsg_UpdateState::ID);
977 ASSERT_TRUE(msg_C); 977 ASSERT_TRUE(msg_C);
978 ViewHostMsg_UpdateState::Read(msg_C, &param); 978 ViewHostMsg_UpdateState::Read(msg_C, &param);
979 PageState state_C = std::get<0>(param); 979 PageState state_C = std::get<0>(param);
980 EXPECT_NE(state_B, state_C); 980 EXPECT_NE(state_B, state_C);
981 render_thread_->sink().ClearMessages(); 981 render_thread_->sink().ClearMessages();
982 982
983 // Go back to C and commit, preparing for our real test. 983 // Go back to C and commit, preparing for our real test.
984 CommonNavigationParams common_params_C; 984 CommonNavigationParams common_params_C;
985 RequestNavigationParams request_params_C; 985 RequestNavigationParams request_params_C;
986 common_params_C.navigation_type = FrameMsg_Navigate_Type::NORMAL; 986 common_params_C.navigation_type =
987 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
987 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 988 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
988 request_params_C.current_history_list_length = 4; 989 request_params_C.current_history_list_length = 4;
989 request_params_C.current_history_list_offset = 3; 990 request_params_C.current_history_list_offset = 3;
990 request_params_C.pending_history_list_offset = 2; 991 request_params_C.pending_history_list_offset = 2;
991 request_params_C.page_state = state_C; 992 request_params_C.page_state = state_C;
992 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C); 993 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C);
993 ProcessPendingMessages(); 994 ProcessPendingMessages();
994 render_thread_->sink().ClearMessages(); 995 render_thread_->sink().ClearMessages();
995 996
996 // Go back twice quickly, such that page B does not have a chance to commit. 997 // Go back twice quickly, such that page B does not have a chance to commit.
997 // This leads to two changes to the back/forward list but only one change to 998 // This leads to two changes to the back/forward list but only one change to
998 // the RenderView's page ID. 999 // the RenderView's page ID.
999 1000
1000 // Back to page B without committing. 1001 // Back to page B without committing.
1001 CommonNavigationParams common_params_B; 1002 CommonNavigationParams common_params_B;
1002 RequestNavigationParams request_params_B; 1003 RequestNavigationParams request_params_B;
1003 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1004 common_params_B.navigation_type =
1005 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
1004 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 1006 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
1005 request_params_B.current_history_list_length = 4; 1007 request_params_B.current_history_list_length = 4;
1006 request_params_B.current_history_list_offset = 2; 1008 request_params_B.current_history_list_offset = 2;
1007 request_params_B.pending_history_list_offset = 1; 1009 request_params_B.pending_history_list_offset = 1;
1008 request_params_B.page_state = state_B; 1010 request_params_B.page_state = state_B;
1009 frame()->Navigate(common_params_B, StartNavigationParams(), request_params_B); 1011 frame()->Navigate(common_params_B, StartNavigationParams(), request_params_B);
1010 1012
1011 // Back to page A and commit. 1013 // Back to page A and commit.
1012 CommonNavigationParams common_params; 1014 CommonNavigationParams common_params;
1013 RequestNavigationParams request_params; 1015 RequestNavigationParams request_params;
1014 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1016 common_params.navigation_type =
1017 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
1015 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 1018 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
1016 request_params.current_history_list_length = 4; 1019 request_params.current_history_list_length = 4;
1017 request_params.current_history_list_offset = 2; 1020 request_params.current_history_list_offset = 2;
1018 request_params.pending_history_list_offset = 0; 1021 request_params.pending_history_list_offset = 0;
1019 request_params.page_state = state_A; 1022 request_params.page_state = state_A;
1020 frame()->Navigate(common_params, StartNavigationParams(), request_params); 1023 frame()->Navigate(common_params, StartNavigationParams(), request_params);
1021 ProcessPendingMessages(); 1024 ProcessPendingMessages();
1022 1025
1023 // Now ensure that the UpdateState message we receive is consistent 1026 // Now ensure that the UpdateState message we receive is consistent
1024 // and represents page C in state. 1027 // and represents page C in state.
(...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
1344 GetMainFrame()->enableViewSourceMode(true); 1347 GetMainFrame()->enableViewSourceMode(true);
1345 WebURLError error; 1348 WebURLError error;
1346 error.domain = WebString::fromUTF8(net::kErrorDomain); 1349 error.domain = WebString::fromUTF8(net::kErrorDomain);
1347 error.reason = net::ERR_FILE_NOT_FOUND; 1350 error.reason = net::ERR_FILE_NOT_FOUND;
1348 error.unreachableURL = GURL("http://foo"); 1351 error.unreachableURL = GURL("http://foo");
1349 WebLocalFrame* web_frame = GetMainFrame(); 1352 WebLocalFrame* web_frame = GetMainFrame();
1350 1353
1351 // Start a load that will reach provisional state synchronously, 1354 // Start a load that will reach provisional state synchronously,
1352 // but won't complete synchronously. 1355 // but won't complete synchronously.
1353 CommonNavigationParams common_params; 1356 CommonNavigationParams common_params;
1354 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1357 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1355 common_params.url = GURL("data:text/html,test data"); 1358 common_params.url = GURL("data:text/html,test data");
1356 frame()->Navigate(common_params, StartNavigationParams(), 1359 frame()->Navigate(common_params, StartNavigationParams(),
1357 RequestNavigationParams()); 1360 RequestNavigationParams());
1358 1361
1359 // An error occurred. 1362 // An error occurred.
1360 view()->GetMainRenderFrame()->didFailProvisionalLoad( 1363 view()->GetMainRenderFrame()->didFailProvisionalLoad(
1361 web_frame, error, blink::WebStandardCommit); 1364 web_frame, error, blink::WebStandardCommit);
1362 // Frame should exit view-source mode. 1365 // Frame should exit view-source mode.
1363 EXPECT_FALSE(web_frame->isViewSourceModeEnabled()); 1366 EXPECT_FALSE(web_frame->isViewSourceModeEnabled());
1364 } 1367 }
1365 1368
1366 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) { 1369 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) {
1367 GetMainFrame()->enableViewSourceMode(true); 1370 GetMainFrame()->enableViewSourceMode(true);
1368 WebURLError error; 1371 WebURLError error;
1369 error.domain = WebString::fromUTF8(net::kErrorDomain); 1372 error.domain = WebString::fromUTF8(net::kErrorDomain);
1370 error.reason = net::ERR_ABORTED; 1373 error.reason = net::ERR_ABORTED;
1371 error.unreachableURL = GURL("http://foo"); 1374 error.unreachableURL = GURL("http://foo");
1372 WebLocalFrame* web_frame = GetMainFrame(); 1375 WebLocalFrame* web_frame = GetMainFrame();
1373 1376
1374 // Start a load that will reach provisional state synchronously, 1377 // Start a load that will reach provisional state synchronously,
1375 // but won't complete synchronously. 1378 // but won't complete synchronously.
1376 CommonNavigationParams common_params; 1379 CommonNavigationParams common_params;
1377 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1380 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1378 common_params.url = GURL("data:text/html,test data"); 1381 common_params.url = GURL("data:text/html,test data");
1379 frame()->Navigate(common_params, StartNavigationParams(), 1382 frame()->Navigate(common_params, StartNavigationParams(),
1380 RequestNavigationParams()); 1383 RequestNavigationParams());
1381 1384
1382 // A cancellation occurred. 1385 // A cancellation occurred.
1383 view()->GetMainRenderFrame()->didFailProvisionalLoad( 1386 view()->GetMainRenderFrame()->didFailProvisionalLoad(
1384 web_frame, error, blink::WebStandardCommit); 1387 web_frame, error, blink::WebStandardCommit);
1385 // Frame should stay in view-source mode. 1388 // Frame should stay in view-source mode.
1386 EXPECT_TRUE(web_frame->isViewSourceModeEnabled()); 1389 EXPECT_TRUE(web_frame->isViewSourceModeEnabled());
1387 } 1390 }
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
1679 1682
1680 // Test that the navigating specific frames works correctly. 1683 // Test that the navigating specific frames works correctly.
1681 TEST_F(RenderViewImplTest, NavigateSubframe) { 1684 TEST_F(RenderViewImplTest, NavigateSubframe) {
1682 // Load page A. 1685 // Load page A.
1683 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>"); 1686 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>");
1684 1687
1685 // Navigate the frame only. 1688 // Navigate the frame only.
1686 CommonNavigationParams common_params; 1689 CommonNavigationParams common_params;
1687 RequestNavigationParams request_params; 1690 RequestNavigationParams request_params;
1688 common_params.url = GURL("data:text/html,world"); 1691 common_params.url = GURL("data:text/html,world");
1689 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1692 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1690 common_params.transition = ui::PAGE_TRANSITION_TYPED; 1693 common_params.transition = ui::PAGE_TRANSITION_TYPED;
1691 common_params.navigation_start = base::TimeTicks::FromInternalValue(1); 1694 common_params.navigation_start = base::TimeTicks::FromInternalValue(1);
1692 request_params.current_history_list_length = 1; 1695 request_params.current_history_list_length = 1;
1693 request_params.current_history_list_offset = 0; 1696 request_params.current_history_list_offset = 0;
1694 request_params.pending_history_list_offset = 1; 1697 request_params.pending_history_list_offset = 1;
1695 1698
1696 TestRenderFrame* subframe = 1699 TestRenderFrame* subframe =
1697 static_cast<TestRenderFrame*>(RenderFrameImpl::FromWebFrame( 1700 static_cast<TestRenderFrame*>(RenderFrameImpl::FromWebFrame(
1698 view()->webview()->findFrameByName("frame"))); 1701 view()->webview()->findFrameByName("frame")));
1699 subframe->Navigate(common_params, StartNavigationParams(), request_params); 1702 subframe->Navigate(common_params, StartNavigationParams(), request_params);
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
1791 TEST_F(RendererErrorPageTest, MAYBE_Suppresses) { 1794 TEST_F(RendererErrorPageTest, MAYBE_Suppresses) {
1792 WebURLError error; 1795 WebURLError error;
1793 error.domain = WebString::fromUTF8(net::kErrorDomain); 1796 error.domain = WebString::fromUTF8(net::kErrorDomain);
1794 error.reason = net::ERR_FILE_NOT_FOUND; 1797 error.reason = net::ERR_FILE_NOT_FOUND;
1795 error.unreachableURL = GURL("http://example.com/suppress"); 1798 error.unreachableURL = GURL("http://example.com/suppress");
1796 WebLocalFrame* web_frame = GetMainFrame(); 1799 WebLocalFrame* web_frame = GetMainFrame();
1797 1800
1798 // Start a load that will reach provisional state synchronously, 1801 // Start a load that will reach provisional state synchronously,
1799 // but won't complete synchronously. 1802 // but won't complete synchronously.
1800 CommonNavigationParams common_params; 1803 CommonNavigationParams common_params;
1801 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1804 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1802 common_params.url = GURL("data:text/html,test data"); 1805 common_params.url = GURL("data:text/html,test data");
1803 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1806 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1804 main_frame->Navigate(common_params, StartNavigationParams(), 1807 main_frame->Navigate(common_params, StartNavigationParams(),
1805 RequestNavigationParams()); 1808 RequestNavigationParams());
1806 1809
1807 // An error occurred. 1810 // An error occurred.
1808 main_frame->didFailProvisionalLoad(web_frame, error, 1811 main_frame->didFailProvisionalLoad(web_frame, error,
1809 blink::WebStandardCommit); 1812 blink::WebStandardCommit);
1810 const int kMaxOutputCharacters = 22; 1813 const int kMaxOutputCharacters = 22;
1811 EXPECT_EQ("", WebFrameContentDumper::dumpWebViewAsText(view()->GetWebView(), 1814 EXPECT_EQ("", WebFrameContentDumper::dumpWebViewAsText(view()->GetWebView(),
(...skipping 11 matching lines...) Expand all
1823 TEST_F(RendererErrorPageTest, MAYBE_DoesNotSuppress) { 1826 TEST_F(RendererErrorPageTest, MAYBE_DoesNotSuppress) {
1824 WebURLError error; 1827 WebURLError error;
1825 error.domain = WebString::fromUTF8(net::kErrorDomain); 1828 error.domain = WebString::fromUTF8(net::kErrorDomain);
1826 error.reason = net::ERR_FILE_NOT_FOUND; 1829 error.reason = net::ERR_FILE_NOT_FOUND;
1827 error.unreachableURL = GURL("http://example.com/dont-suppress"); 1830 error.unreachableURL = GURL("http://example.com/dont-suppress");
1828 WebLocalFrame* web_frame = GetMainFrame(); 1831 WebLocalFrame* web_frame = GetMainFrame();
1829 1832
1830 // Start a load that will reach provisional state synchronously, 1833 // Start a load that will reach provisional state synchronously,
1831 // but won't complete synchronously. 1834 // but won't complete synchronously.
1832 CommonNavigationParams common_params; 1835 CommonNavigationParams common_params;
1833 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1836 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1834 common_params.url = GURL("data:text/html,test data"); 1837 common_params.url = GURL("data:text/html,test data");
1835 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1838 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1836 main_frame->Navigate(common_params, StartNavigationParams(), 1839 main_frame->Navigate(common_params, StartNavigationParams(),
1837 RequestNavigationParams()); 1840 RequestNavigationParams());
1838 1841
1839 // An error occurred. 1842 // An error occurred.
1840 main_frame->didFailProvisionalLoad(web_frame, error, 1843 main_frame->didFailProvisionalLoad(web_frame, error,
1841 blink::WebStandardCommit); 1844 blink::WebStandardCommit);
1842 1845
1843 // The error page itself is loaded asynchronously. 1846 // The error page itself is loaded asynchronously.
(...skipping 13 matching lines...) Expand all
1857 #define MAYBE_HttpStatusCodeErrorWithEmptyBody HttpStatusCodeErrorWithEmptyBody 1860 #define MAYBE_HttpStatusCodeErrorWithEmptyBody HttpStatusCodeErrorWithEmptyBody
1858 #endif 1861 #endif
1859 TEST_F(RendererErrorPageTest, MAYBE_HttpStatusCodeErrorWithEmptyBody) { 1862 TEST_F(RendererErrorPageTest, MAYBE_HttpStatusCodeErrorWithEmptyBody) {
1860 blink::WebURLResponse response; 1863 blink::WebURLResponse response;
1861 response.setHTTPStatusCode(503); 1864 response.setHTTPStatusCode(503);
1862 WebLocalFrame* web_frame = GetMainFrame(); 1865 WebLocalFrame* web_frame = GetMainFrame();
1863 1866
1864 // Start a load that will reach provisional state synchronously, 1867 // Start a load that will reach provisional state synchronously,
1865 // but won't complete synchronously. 1868 // but won't complete synchronously.
1866 CommonNavigationParams common_params; 1869 CommonNavigationParams common_params;
1867 common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1870 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT;
1868 common_params.url = GURL("data:text/html,test data"); 1871 common_params.url = GURL("data:text/html,test data");
1869 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame()); 1872 TestRenderFrame* main_frame = static_cast<TestRenderFrame*>(frame());
1870 main_frame->Navigate(common_params, StartNavigationParams(), 1873 main_frame->Navigate(common_params, StartNavigationParams(),
1871 RequestNavigationParams()); 1874 RequestNavigationParams());
1872 1875
1873 // Emulate a 4xx/5xx main resource response with an empty body. 1876 // Emulate a 4xx/5xx main resource response with an empty body.
1874 main_frame->didReceiveResponse(response); 1877 main_frame->didReceiveResponse(response);
1875 main_frame->didFinishDocumentLoad(web_frame); 1878 main_frame->didFinishDocumentLoad(web_frame);
1876 main_frame->runScriptsAtDocumentReady(web_frame, true); 1879 main_frame->runScriptsAtDocumentReady(web_frame, true);
1877 1880
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after
2106 LoadHTML("<div id=pagename>Page C</div>"); 2109 LoadHTML("<div id=pagename>Page C</div>");
2107 PageState forward_state = GetCurrentPageState(); 2110 PageState forward_state = GetCurrentPageState();
2108 ProcessPendingMessages(); 2111 ProcessPendingMessages();
2109 render_thread_->sink().ClearMessages(); 2112 render_thread_->sink().ClearMessages();
2110 2113
2111 // Go back. 2114 // Go back.
2112 CommonNavigationParams common_params_back; 2115 CommonNavigationParams common_params_back;
2113 common_params_back.url = 2116 common_params_back.url =
2114 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>"); 2117 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>");
2115 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2118 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2119 common_params_back.navigation_type =
2120 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2116 GoToOffsetWithParams(-1, back_state, common_params_back, 2121 GoToOffsetWithParams(-1, back_state, common_params_back,
2117 StartNavigationParams(), RequestNavigationParams()); 2122 StartNavigationParams(), RequestNavigationParams());
2118 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params = 2123 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params =
2119 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>(); 2124 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2120 if (!IsBrowserSideNavigationEnabled()) { 2125 if (!IsBrowserSideNavigationEnabled()) {
2121 // The browser navigation_start should not be used because beforeunload was 2126 // The browser navigation_start should not be used because beforeunload was
2122 // fired during GoToOffsetWithParams. 2127 // fired during GoToOffsetWithParams.
2123 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params), 2128 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params),
2124 common_params_back.navigation_start); 2129 common_params_back.navigation_start);
2125 } else { 2130 } else {
2126 // PlzNavigate: the browser navigation_start is always used. 2131 // PlzNavigate: the browser navigation_start is always used.
2127 EXPECT_EQ(common_params_back.navigation_start, 2132 EXPECT_EQ(common_params_back.navigation_start,
2128 std::get<1>(host_nav_params)); 2133 std::get<1>(host_nav_params));
2129 } 2134 }
2130 render_thread_->sink().ClearMessages(); 2135 render_thread_->sink().ClearMessages();
2131 2136
2132 // Go forward. 2137 // Go forward.
2133 CommonNavigationParams common_params_forward; 2138 CommonNavigationParams common_params_forward;
2134 common_params_forward.url = 2139 common_params_forward.url =
2135 GURL("data:text/html;charset=utf-8,<div id=pagename>Page C</div>"); 2140 GURL("data:text/html;charset=utf-8,<div id=pagename>Page C</div>");
2136 common_params_forward.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2141 common_params_forward.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2142 common_params_forward.navigation_type =
2143 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2137 GoToOffsetWithParams(1, forward_state, common_params_forward, 2144 GoToOffsetWithParams(1, forward_state, common_params_forward,
2138 StartNavigationParams(), RequestNavigationParams()); 2145 StartNavigationParams(), RequestNavigationParams());
2139 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params2 = 2146 FrameHostMsg_DidStartProvisionalLoad::Param host_nav_params2 =
2140 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>(); 2147 ProcessAndReadIPC<FrameHostMsg_DidStartProvisionalLoad>();
2141 if (!IsBrowserSideNavigationEnabled()) { 2148 if (!IsBrowserSideNavigationEnabled()) {
2142 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params2), 2149 EXPECT_PRED2(TimeTicksGT, std::get<1>(host_nav_params2),
2143 common_params_forward.navigation_start); 2150 common_params_forward.navigation_start);
2144 } else { 2151 } else {
2145 EXPECT_EQ(common_params_forward.navigation_start, 2152 EXPECT_EQ(common_params_forward.navigation_start,
2146 std::get<1>(host_nav_params2)); 2153 std::get<1>(host_nav_params2));
2147 } 2154 }
2148 } 2155 }
2149 2156
2150 TEST_F(RenderViewImplTest, NavigationStartForCrossProcessHistoryNavigation) { 2157 TEST_F(RenderViewImplTest, NavigationStartForCrossProcessHistoryNavigation) {
2151 auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1)); 2158 auto common_params = MakeCommonNavigationParams(-TimeDelta::FromSeconds(1));
2152 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 2159 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
2160 common_params.navigation_type =
2161 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT;
2153 2162
2154 RequestNavigationParams request_params; 2163 RequestNavigationParams request_params;
2155 request_params.page_state = 2164 request_params.page_state =
2156 PageState::CreateForTesting(common_params.url, false, nullptr, nullptr); 2165 PageState::CreateForTesting(common_params.url, false, nullptr, nullptr);
2157 request_params.nav_entry_id = 42; 2166 request_params.nav_entry_id = 42;
2158 request_params.pending_history_list_offset = 1; 2167 request_params.pending_history_list_offset = 1;
2159 request_params.current_history_list_offset = 0; 2168 request_params.current_history_list_offset = 0;
2160 request_params.current_history_list_length = 1; 2169 request_params.current_history_list_length = 1;
2161 frame()->Navigate(common_params, StartNavigationParams(), request_params); 2170 frame()->Navigate(common_params, StartNavigationParams(), request_params);
2162 2171
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
2565 ExpectPauseAndResume(3); 2574 ExpectPauseAndResume(3);
2566 blink::WebScriptSource source2( 2575 blink::WebScriptSource source2(
2567 WebString::fromUTF8("function func2() { func1(); }; func2();")); 2576 WebString::fromUTF8("function func2() { func1(); }; func2();"));
2568 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1); 2577 frame()->GetWebFrame()->executeScriptInIsolatedWorld(17, &source2, 1);
2569 2578
2570 EXPECT_FALSE(IsPaused()); 2579 EXPECT_FALSE(IsPaused());
2571 Detach(); 2580 Detach();
2572 } 2581 }
2573 2582
2574 } // namespace content 2583 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698