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

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

Issue 979443002: PlzNavigate: send history params at commit time to the renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed review comments Created 5 years, 9 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
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/renderer/render_view_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/shared_memory.h" 8 #include "base/memory/shared_memory.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 ViewHostMsg_UpdateState::ID)); 356 ViewHostMsg_UpdateState::ID));
357 } 357 }
358 358
359 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { 359 TEST_F(RenderViewImplTest, OnNavigationHttpPost) {
360 FrameMsg_Navigate_Params nav_params; 360 FrameMsg_Navigate_Params nav_params;
361 361
362 // An http url will trigger a resource load so cannot be used here. 362 // An http url will trigger a resource load so cannot be used here.
363 nav_params.common_params.url = GURL("data:text/html,<div>Page</div>"); 363 nav_params.common_params.url = GURL("data:text/html,<div>Page</div>");
364 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 364 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
365 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED; 365 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED;
366 nav_params.page_id = -1; 366 nav_params.history_params.page_id = -1;
367 nav_params.is_post = true; 367 nav_params.is_post = true;
368 nav_params.commit_params.browser_navigation_start = 368 nav_params.commit_params.browser_navigation_start =
369 base::TimeTicks::FromInternalValue(1); 369 base::TimeTicks::FromInternalValue(1);
370 370
371 // Set up post data. 371 // Set up post data.
372 const unsigned char* raw_data = reinterpret_cast<const unsigned char*>( 372 const unsigned char* raw_data = reinterpret_cast<const unsigned char*>(
373 "post \0\ndata"); 373 "post \0\ndata");
374 const unsigned int length = 11; 374 const unsigned int length = 11;
375 const std::vector<unsigned char> post_data(raw_data, raw_data + length); 375 const std::vector<unsigned char> post_data(raw_data, raw_data + length);
376 nav_params.browser_initiated_post_data = post_data; 376 nav_params.browser_initiated_post_data = post_data;
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 const IPC::Message* msg2 = render_thread_->sink().GetUniqueMessageMatching( 564 const IPC::Message* msg2 = render_thread_->sink().GetUniqueMessageMatching(
565 FrameHostMsg_SwapOut_ACK::ID); 565 FrameHostMsg_SwapOut_ACK::ID);
566 ASSERT_TRUE(msg2); 566 ASSERT_TRUE(msg2);
567 567
568 // If we navigate back to this RenderView, ensure we don't send a state 568 // If we navigate back to this RenderView, ensure we don't send a state
569 // update for the swapped out URL. (http://crbug.com/72235) 569 // update for the swapped out URL. (http://crbug.com/72235)
570 FrameMsg_Navigate_Params nav_params; 570 FrameMsg_Navigate_Params nav_params;
571 nav_params.common_params.url = GURL("data:text/html,<div>Page B</div>"); 571 nav_params.common_params.url = GURL("data:text/html,<div>Page B</div>");
572 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 572 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
573 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED; 573 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED;
574 nav_params.current_history_list_length = 1; 574 nav_params.history_params.current_history_list_length = 1;
575 nav_params.current_history_list_offset = 0; 575 nav_params.history_params.current_history_list_offset = 0;
576 nav_params.pending_history_list_offset = 1; 576 nav_params.history_params.pending_history_list_offset = 1;
577 nav_params.page_id = -1; 577 nav_params.history_params.page_id = -1;
578 nav_params.commit_params.browser_navigation_start = 578 nav_params.commit_params.browser_navigation_start =
579 base::TimeTicks::FromInternalValue(1); 579 base::TimeTicks::FromInternalValue(1);
580 frame()->OnNavigate(nav_params); 580 frame()->OnNavigate(nav_params);
581 ProcessPendingMessages(); 581 ProcessPendingMessages();
582 const IPC::Message* msg3 = render_thread_->sink().GetUniqueMessageMatching( 582 const IPC::Message* msg3 = render_thread_->sink().GetUniqueMessageMatching(
583 ViewHostMsg_UpdateState::ID); 583 ViewHostMsg_UpdateState::ID);
584 EXPECT_FALSE(msg3); 584 EXPECT_FALSE(msg3);
585 } 585 }
586 586
587 // Ensure the RenderViewImpl reloads the previous page if a reload request 587 // Ensure the RenderViewImpl reloads the previous page if a reload request
(...skipping 14 matching lines...) Expand all
602 ViewHostMsg_UpdateState::Read(msg_A, &params); 602 ViewHostMsg_UpdateState::Read(msg_A, &params);
603 int page_id_A = get<0>(params); 603 int page_id_A = get<0>(params);
604 PageState state_A = get<1>(params); 604 PageState state_A = get<1>(params);
605 EXPECT_EQ(1, page_id_A); 605 EXPECT_EQ(1, page_id_A);
606 render_thread_->sink().ClearMessages(); 606 render_thread_->sink().ClearMessages();
607 607
608 // Back to page A (page_id 1) and commit. 608 // Back to page A (page_id 1) and commit.
609 FrameMsg_Navigate_Params params_A; 609 FrameMsg_Navigate_Params params_A;
610 params_A.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 610 params_A.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
611 params_A.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 611 params_A.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
612 params_A.current_history_list_length = 2; 612 params_A.history_params.current_history_list_length = 2;
613 params_A.current_history_list_offset = 1; 613 params_A.history_params.current_history_list_offset = 1;
614 params_A.pending_history_list_offset = 0; 614 params_A.history_params.pending_history_list_offset = 0;
615 params_A.page_id = 1; 615 params_A.history_params.page_id = 1;
616 params_A.commit_params.page_state = state_A; 616 params_A.history_params.page_state = state_A;
617 params_A.commit_params.browser_navigation_start = 617 params_A.commit_params.browser_navigation_start =
618 base::TimeTicks::FromInternalValue(1); 618 base::TimeTicks::FromInternalValue(1);
619 frame()->OnNavigate(params_A); 619 frame()->OnNavigate(params_A);
620 EXPECT_EQ(1, view()->historyBackListCount());
621 EXPECT_EQ(2, view()->historyBackListCount() +
622 view()->historyForwardListCount() + 1);
620 ProcessPendingMessages(); 623 ProcessPendingMessages();
621 624
622 // Respond to a swap out request. 625 // Respond to a swap out request.
623 view()->GetMainRenderFrame()->OnSwapOut(kProxyRoutingId, true, 626 view()->GetMainRenderFrame()->OnSwapOut(kProxyRoutingId, true,
624 content::FrameReplicationState()); 627 content::FrameReplicationState());
625 628
626 // Check for a OnSwapOutACK. 629 // Check for a OnSwapOutACK.
627 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( 630 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching(
628 FrameHostMsg_SwapOut_ACK::ID); 631 FrameHostMsg_SwapOut_ACK::ID);
629 ASSERT_TRUE(msg); 632 ASSERT_TRUE(msg);
630 render_thread_->sink().ClearMessages(); 633 render_thread_->sink().ClearMessages();
631 634
632 // It is possible to get a reload request at this point, containing the 635 // It is possible to get a reload request at this point, containing the
633 // params.page_state of the initial page (e.g., if the new page fails the 636 // params.page_state of the initial page (e.g., if the new page fails the
634 // provisional load in the renderer process, after we unload the old page). 637 // provisional load in the renderer process, after we unload the old page).
635 // Ensure the old page gets reloaded, not swappedout://. 638 // Ensure the old page gets reloaded, not swappedout://.
636 FrameMsg_Navigate_Params nav_params; 639 FrameMsg_Navigate_Params nav_params;
637 nav_params.common_params.url = GURL("data:text/html,<div>Page A</div>"); 640 nav_params.common_params.url = GURL("data:text/html,<div>Page A</div>");
638 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD; 641 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD;
639 nav_params.common_params.transition = ui::PAGE_TRANSITION_RELOAD; 642 nav_params.common_params.transition = ui::PAGE_TRANSITION_RELOAD;
640 nav_params.current_history_list_length = 2; 643 nav_params.history_params.current_history_list_length = 2;
641 nav_params.current_history_list_offset = 0; 644 nav_params.history_params.current_history_list_offset = 0;
642 nav_params.pending_history_list_offset = 0; 645 nav_params.history_params.pending_history_list_offset = 0;
643 nav_params.page_id = 1; 646 nav_params.history_params.page_id = 1;
644 nav_params.commit_params.page_state = state_A; 647 nav_params.history_params.page_state = state_A;
645 nav_params.commit_params.browser_navigation_start = 648 nav_params.commit_params.browser_navigation_start =
646 base::TimeTicks::FromInternalValue(1); 649 base::TimeTicks::FromInternalValue(1);
647 frame()->OnNavigate(nav_params); 650 frame()->OnNavigate(nav_params);
648 ProcessPendingMessages(); 651 ProcessPendingMessages();
649 652
650 // Verify page A committed, not swappedout://. 653 // Verify page A committed, not swappedout://.
651 const IPC::Message* frame_navigate_msg = 654 const IPC::Message* frame_navigate_msg =
652 render_thread_->sink().GetUniqueMessageMatching( 655 render_thread_->sink().GetUniqueMessageMatching(
653 FrameHostMsg_DidCommitProvisionalLoad::ID); 656 FrameHostMsg_DidCommitProvisionalLoad::ID);
654 EXPECT_TRUE(frame_navigate_msg); 657 EXPECT_TRUE(frame_navigate_msg);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 int page_id_C = get<0>(param); 752 int page_id_C = get<0>(param);
750 PageState state_C = get<1>(param); 753 PageState state_C = get<1>(param);
751 EXPECT_EQ(3, page_id_C); 754 EXPECT_EQ(3, page_id_C);
752 EXPECT_NE(state_B, state_C); 755 EXPECT_NE(state_B, state_C);
753 render_thread_->sink().ClearMessages(); 756 render_thread_->sink().ClearMessages();
754 757
755 // Go back to C and commit, preparing for our real test. 758 // Go back to C and commit, preparing for our real test.
756 FrameMsg_Navigate_Params params_C; 759 FrameMsg_Navigate_Params params_C;
757 params_C.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 760 params_C.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
758 params_C.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 761 params_C.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
759 params_C.current_history_list_length = 4; 762 params_C.history_params.current_history_list_length = 4;
760 params_C.current_history_list_offset = 3; 763 params_C.history_params.current_history_list_offset = 3;
761 params_C.pending_history_list_offset = 2; 764 params_C.history_params.pending_history_list_offset = 2;
762 params_C.page_id = 3; 765 params_C.history_params.page_id = 3;
763 params_C.commit_params.page_state = state_C; 766 params_C.history_params.page_state = state_C;
764 params_C.commit_params.browser_navigation_start = 767 params_C.commit_params.browser_navigation_start =
765 base::TimeTicks::FromInternalValue(1); 768 base::TimeTicks::FromInternalValue(1);
766 frame()->OnNavigate(params_C); 769 frame()->OnNavigate(params_C);
767 ProcessPendingMessages(); 770 ProcessPendingMessages();
768 render_thread_->sink().ClearMessages(); 771 render_thread_->sink().ClearMessages();
769 772
770 // Go back twice quickly, such that page B does not have a chance to commit. 773 // Go back twice quickly, such that page B does not have a chance to commit.
771 // This leads to two changes to the back/forward list but only one change to 774 // This leads to two changes to the back/forward list but only one change to
772 // the RenderView's page ID. 775 // the RenderView's page ID.
773 776
774 // Back to page B (page_id 2), without committing. 777 // Back to page B (page_id 2), without committing.
775 FrameMsg_Navigate_Params params_B; 778 FrameMsg_Navigate_Params params_B;
776 params_B.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 779 params_B.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
777 params_B.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 780 params_B.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
778 params_B.current_history_list_length = 4; 781 params_B.history_params.current_history_list_length = 4;
779 params_B.current_history_list_offset = 2; 782 params_B.history_params.current_history_list_offset = 2;
780 params_B.pending_history_list_offset = 1; 783 params_B.history_params.pending_history_list_offset = 1;
781 params_B.page_id = 2; 784 params_B.history_params.page_id = 2;
782 params_B.commit_params.page_state = state_B; 785 params_B.history_params.page_state = state_B;
783 params_B.commit_params.browser_navigation_start = 786 params_B.commit_params.browser_navigation_start =
784 base::TimeTicks::FromInternalValue(1); 787 base::TimeTicks::FromInternalValue(1);
785 frame()->OnNavigate(params_B); 788 frame()->OnNavigate(params_B);
786 789
787 // Back to page A (page_id 1) and commit. 790 // Back to page A (page_id 1) and commit.
788 FrameMsg_Navigate_Params params; 791 FrameMsg_Navigate_Params params;
789 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 792 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
790 params.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 793 params.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
791 params_B.current_history_list_length = 4; 794 params.history_params.current_history_list_length = 4;
792 params_B.current_history_list_offset = 2; 795 params.history_params.current_history_list_offset = 2;
793 params_B.pending_history_list_offset = 0; 796 params.history_params.pending_history_list_offset = 0;
794 params.page_id = 1; 797 params.history_params.page_id = 1;
795 params.commit_params.page_state = state_A; 798 params.history_params.page_state = state_A;
796 params.commit_params.browser_navigation_start = 799 params.commit_params.browser_navigation_start =
797 base::TimeTicks::FromInternalValue(1); 800 base::TimeTicks::FromInternalValue(1);
798 frame()->OnNavigate(params); 801 frame()->OnNavigate(params);
799 ProcessPendingMessages(); 802 ProcessPendingMessages();
800 803
801 // Now ensure that the UpdateState message we receive is consistent 804 // Now ensure that the UpdateState message we receive is consistent
802 // and represents page C in both page_id and state. 805 // and represents page C in both page_id and state.
803 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( 806 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching(
804 ViewHostMsg_UpdateState::ID); 807 ViewHostMsg_UpdateState::ID);
805 ASSERT_TRUE(msg); 808 ASSERT_TRUE(msg);
(...skipping 28 matching lines...) Expand all
834 ViewHostMsg_UpdateState::Read(msg_A, &param); 837 ViewHostMsg_UpdateState::Read(msg_A, &param);
835 int page_id_A = get<0>(param); 838 int page_id_A = get<0>(param);
836 PageState state_A = get<1>(param); 839 PageState state_A = get<1>(param);
837 EXPECT_EQ(1, page_id_A); 840 EXPECT_EQ(1, page_id_A);
838 render_thread_->sink().ClearMessages(); 841 render_thread_->sink().ClearMessages();
839 842
840 // Back to page A (page_id 1) and commit. 843 // Back to page A (page_id 1) and commit.
841 FrameMsg_Navigate_Params params_A; 844 FrameMsg_Navigate_Params params_A;
842 params_A.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 845 params_A.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
843 params_A.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 846 params_A.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
844 params_A.current_history_list_length = 2; 847 params_A.history_params.current_history_list_length = 2;
845 params_A.current_history_list_offset = 1; 848 params_A.history_params.current_history_list_offset = 1;
846 params_A.pending_history_list_offset = 0; 849 params_A.history_params.pending_history_list_offset = 0;
847 params_A.page_id = 1; 850 params_A.history_params.page_id = 1;
848 params_A.commit_params.page_state = state_A; 851 params_A.history_params.page_state = state_A;
849 params_A.commit_params.browser_navigation_start = 852 params_A.commit_params.browser_navigation_start =
850 base::TimeTicks::FromInternalValue(1); 853 base::TimeTicks::FromInternalValue(1);
851 frame()->OnNavigate(params_A); 854 frame()->OnNavigate(params_A);
852 ProcessPendingMessages(); 855 ProcessPendingMessages();
853 856
854 // A new navigation commits, clearing the forward history. 857 // A new navigation commits, clearing the forward history.
855 LoadHTML("<div>Page C</div>"); 858 LoadHTML("<div>Page C</div>");
856 EXPECT_EQ(2, view()->history_list_length_); 859 EXPECT_EQ(2, view()->history_list_length_);
857 EXPECT_EQ(1, view()->history_list_offset_); 860 EXPECT_EQ(1, view()->history_list_offset_);
858 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3 861 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3
859 862
860 // The browser then sends a stale navigation to B, which should be ignored. 863 // The browser then sends a stale navigation to B, which should be ignored.
861 FrameMsg_Navigate_Params params_B; 864 FrameMsg_Navigate_Params params_B;
862 params_B.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 865 params_B.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
863 params_B.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; 866 params_B.common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK;
864 params_B.current_history_list_length = 2; 867 params_B.history_params.current_history_list_length = 2;
865 params_B.current_history_list_offset = 0; 868 params_B.history_params.current_history_list_offset = 0;
866 params_B.pending_history_list_offset = 1; 869 params_B.history_params.pending_history_list_offset = 1;
867 params_B.page_id = 2; 870 params_B.history_params.page_id = 2;
868 params_B.commit_params.page_state = 871 params_B.history_params.page_state =
869 state_A; // Doesn't matter, just has to be present. 872 state_A; // Doesn't matter, just has to be present.
870 params_B.commit_params.browser_navigation_start = 873 params_B.commit_params.browser_navigation_start =
871 base::TimeTicks::FromInternalValue(1); 874 base::TimeTicks::FromInternalValue(1);
872 frame()->OnNavigate(params_B); 875 frame()->OnNavigate(params_B);
873 876
874 // State should be unchanged. 877 // State should be unchanged.
875 EXPECT_EQ(2, view()->history_list_length_); 878 EXPECT_EQ(2, view()->history_list_length_);
876 EXPECT_EQ(1, view()->history_list_offset_); 879 EXPECT_EQ(1, view()->history_list_offset_);
877 EXPECT_EQ(3, view()->page_id_); // page C, not page B 880 EXPECT_EQ(3, view()->page_id_); // page C, not page B
878 881
(...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after
1575 GetMainFrame()->enableViewSourceMode(true); 1578 GetMainFrame()->enableViewSourceMode(true);
1576 WebURLError error; 1579 WebURLError error;
1577 error.domain = WebString::fromUTF8(net::kErrorDomain); 1580 error.domain = WebString::fromUTF8(net::kErrorDomain);
1578 error.reason = net::ERR_FILE_NOT_FOUND; 1581 error.reason = net::ERR_FILE_NOT_FOUND;
1579 error.unreachableURL = GURL("http://foo"); 1582 error.unreachableURL = GURL("http://foo");
1580 WebLocalFrame* web_frame = GetMainFrame(); 1583 WebLocalFrame* web_frame = GetMainFrame();
1581 1584
1582 // Start a load that will reach provisional state synchronously, 1585 // Start a load that will reach provisional state synchronously,
1583 // but won't complete synchronously. 1586 // but won't complete synchronously.
1584 FrameMsg_Navigate_Params params; 1587 FrameMsg_Navigate_Params params;
1585 params.page_id = -1; 1588 params.history_params.page_id = -1;
1586 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1589 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
1587 params.common_params.url = GURL("data:text/html,test data"); 1590 params.common_params.url = GURL("data:text/html,test data");
1588 params.commit_params.browser_navigation_start = 1591 params.commit_params.browser_navigation_start =
1589 base::TimeTicks::FromInternalValue(1); 1592 base::TimeTicks::FromInternalValue(1);
1590 frame()->OnNavigate(params); 1593 frame()->OnNavigate(params);
1591 1594
1592 // An error occurred. 1595 // An error occurred.
1593 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error); 1596 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error);
1594 // Frame should exit view-source mode. 1597 // Frame should exit view-source mode.
1595 EXPECT_FALSE(web_frame->isViewSourceModeEnabled()); 1598 EXPECT_FALSE(web_frame->isViewSourceModeEnabled());
1596 } 1599 }
1597 1600
1598 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) { 1601 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) {
1599 GetMainFrame()->enableViewSourceMode(true); 1602 GetMainFrame()->enableViewSourceMode(true);
1600 WebURLError error; 1603 WebURLError error;
1601 error.domain = WebString::fromUTF8(net::kErrorDomain); 1604 error.domain = WebString::fromUTF8(net::kErrorDomain);
1602 error.reason = net::ERR_ABORTED; 1605 error.reason = net::ERR_ABORTED;
1603 error.unreachableURL = GURL("http://foo"); 1606 error.unreachableURL = GURL("http://foo");
1604 WebLocalFrame* web_frame = GetMainFrame(); 1607 WebLocalFrame* web_frame = GetMainFrame();
1605 1608
1606 // Start a load that will reach provisional state synchronously, 1609 // Start a load that will reach provisional state synchronously,
1607 // but won't complete synchronously. 1610 // but won't complete synchronously.
1608 FrameMsg_Navigate_Params params; 1611 FrameMsg_Navigate_Params params;
1609 params.page_id = -1; 1612 params.history_params.page_id = -1;
1610 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1613 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
1611 params.common_params.url = GURL("data:text/html,test data"); 1614 params.common_params.url = GURL("data:text/html,test data");
1612 params.commit_params.browser_navigation_start = 1615 params.commit_params.browser_navigation_start =
1613 base::TimeTicks::FromInternalValue(1); 1616 base::TimeTicks::FromInternalValue(1);
1614 frame()->OnNavigate(params); 1617 frame()->OnNavigate(params);
1615 1618
1616 // A cancellation occurred. 1619 // A cancellation occurred.
1617 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error); 1620 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error);
1618 // Frame should stay in view-source mode. 1621 // Frame should stay in view-source mode.
1619 EXPECT_TRUE(web_frame->isViewSourceModeEnabled()); 1622 EXPECT_TRUE(web_frame->isViewSourceModeEnabled());
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1795 view()->OnImeConfirmComposition( 1798 view()->OnImeConfirmComposition(
1796 empty_string, gfx::Range::InvalidRange(), false); 1799 empty_string, gfx::Range::InvalidRange(), false);
1797 } 1800 }
1798 #endif 1801 #endif
1799 1802
1800 TEST_F(RenderViewImplTest, ZoomLimit) { 1803 TEST_F(RenderViewImplTest, ZoomLimit) {
1801 const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor); 1804 const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor);
1802 const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor); 1805 const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor);
1803 1806
1804 FrameMsg_Navigate_Params params; 1807 FrameMsg_Navigate_Params params;
1805 params.page_id = -1; 1808 params.history_params.page_id = -1;
1806 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1809 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
1807 params.commit_params.browser_navigation_start = 1810 params.commit_params.browser_navigation_start =
1808 base::TimeTicks::FromInternalValue(1); 1811 base::TimeTicks::FromInternalValue(1);
1809 1812
1810 // Verifies navigation to a URL with preset zoom level indeed sets the level. 1813 // Verifies navigation to a URL with preset zoom level indeed sets the level.
1811 // Regression test for http://crbug.com/139559, where the level was not 1814 // Regression test for http://crbug.com/139559, where the level was not
1812 // properly set when it is out of the default zoom limits of WebView. 1815 // properly set when it is out of the default zoom limits of WebView.
1813 params.common_params.url = GURL("data:text/html,min_zoomlimit_test"); 1816 params.common_params.url = GURL("data:text/html,min_zoomlimit_test");
1814 view()->OnSetZoomLevelForLoadingURL(params.common_params.url, kMinZoomLevel); 1817 view()->OnSetZoomLevelForLoadingURL(params.common_params.url, kMinZoomLevel);
1815 frame()->OnNavigate(params); 1818 frame()->OnNavigate(params);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
1878 // Test that the navigating specific frames works correctly. 1881 // Test that the navigating specific frames works correctly.
1879 TEST_F(RenderViewImplTest, NavigateFrame) { 1882 TEST_F(RenderViewImplTest, NavigateFrame) {
1880 // Load page A. 1883 // Load page A.
1881 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>"); 1884 LoadHTML("hello <iframe srcdoc='fail' name='frame'></iframe>");
1882 1885
1883 // Navigate the frame only. 1886 // Navigate the frame only.
1884 FrameMsg_Navigate_Params nav_params; 1887 FrameMsg_Navigate_Params nav_params;
1885 nav_params.common_params.url = GURL("data:text/html,world"); 1888 nav_params.common_params.url = GURL("data:text/html,world");
1886 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 1889 nav_params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
1887 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED; 1890 nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED;
1888 nav_params.current_history_list_length = 1; 1891 nav_params.history_params.current_history_list_length = 1;
1889 nav_params.current_history_list_offset = 0; 1892 nav_params.history_params.current_history_list_offset = 0;
1890 nav_params.pending_history_list_offset = 1; 1893 nav_params.history_params.pending_history_list_offset = 1;
1891 nav_params.page_id = -1; 1894 nav_params.history_params.page_id = -1;
1892 nav_params.frame_to_navigate = "frame"; 1895 nav_params.frame_to_navigate = "frame";
1893 nav_params.commit_params.browser_navigation_start = 1896 nav_params.commit_params.browser_navigation_start =
1894 base::TimeTicks::FromInternalValue(1); 1897 base::TimeTicks::FromInternalValue(1);
1895 frame()->OnNavigate(nav_params); 1898 frame()->OnNavigate(nav_params);
1896 FrameLoadWaiter( 1899 FrameLoadWaiter(
1897 RenderFrame::FromWebFrame(frame()->GetWebFrame()->firstChild())).Wait(); 1900 RenderFrame::FromWebFrame(frame()->GetWebFrame()->firstChild())).Wait();
1898 1901
1899 // Copy the document content to std::wstring and compare with the 1902 // Copy the document content to std::wstring and compare with the
1900 // expected result. 1903 // expected result.
1901 const int kMaxOutputCharacters = 256; 1904 const int kMaxOutputCharacters = 256;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2000 TEST_F(SuppressErrorPageTest, MAYBE_Suppresses) { 2003 TEST_F(SuppressErrorPageTest, MAYBE_Suppresses) {
2001 WebURLError error; 2004 WebURLError error;
2002 error.domain = WebString::fromUTF8(net::kErrorDomain); 2005 error.domain = WebString::fromUTF8(net::kErrorDomain);
2003 error.reason = net::ERR_FILE_NOT_FOUND; 2006 error.reason = net::ERR_FILE_NOT_FOUND;
2004 error.unreachableURL = GURL("http://example.com/suppress"); 2007 error.unreachableURL = GURL("http://example.com/suppress");
2005 WebLocalFrame* web_frame = GetMainFrame(); 2008 WebLocalFrame* web_frame = GetMainFrame();
2006 2009
2007 // Start a load that will reach provisional state synchronously, 2010 // Start a load that will reach provisional state synchronously,
2008 // but won't complete synchronously. 2011 // but won't complete synchronously.
2009 FrameMsg_Navigate_Params params; 2012 FrameMsg_Navigate_Params params;
2010 params.page_id = -1; 2013 params.history_params.page_id = -1;
2011 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 2014 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2012 params.common_params.url = GURL("data:text/html,test data"); 2015 params.common_params.url = GURL("data:text/html,test data");
2013 params.commit_params.browser_navigation_start = 2016 params.commit_params.browser_navigation_start =
2014 base::TimeTicks::FromInternalValue(1); 2017 base::TimeTicks::FromInternalValue(1);
2015 frame()->OnNavigate(params); 2018 frame()->OnNavigate(params);
2016 2019
2017 // An error occurred. 2020 // An error occurred.
2018 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error); 2021 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error);
2019 const int kMaxOutputCharacters = 22; 2022 const int kMaxOutputCharacters = 22;
2020 EXPECT_EQ("", 2023 EXPECT_EQ("",
(...skipping 10 matching lines...) Expand all
2031 TEST_F(SuppressErrorPageTest, MAYBE_DoesNotSuppress) { 2034 TEST_F(SuppressErrorPageTest, MAYBE_DoesNotSuppress) {
2032 WebURLError error; 2035 WebURLError error;
2033 error.domain = WebString::fromUTF8(net::kErrorDomain); 2036 error.domain = WebString::fromUTF8(net::kErrorDomain);
2034 error.reason = net::ERR_FILE_NOT_FOUND; 2037 error.reason = net::ERR_FILE_NOT_FOUND;
2035 error.unreachableURL = GURL("http://example.com/dont-suppress"); 2038 error.unreachableURL = GURL("http://example.com/dont-suppress");
2036 WebLocalFrame* web_frame = GetMainFrame(); 2039 WebLocalFrame* web_frame = GetMainFrame();
2037 2040
2038 // Start a load that will reach provisional state synchronously, 2041 // Start a load that will reach provisional state synchronously,
2039 // but won't complete synchronously. 2042 // but won't complete synchronously.
2040 FrameMsg_Navigate_Params params; 2043 FrameMsg_Navigate_Params params;
2041 params.page_id = -1; 2044 params.history_params.page_id = -1;
2042 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 2045 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2043 params.common_params.url = GURL("data:text/html,test data"); 2046 params.common_params.url = GURL("data:text/html,test data");
2044 params.commit_params.browser_navigation_start = 2047 params.commit_params.browser_navigation_start =
2045 base::TimeTicks::FromInternalValue(1); 2048 base::TimeTicks::FromInternalValue(1);
2046 frame()->OnNavigate(params); 2049 frame()->OnNavigate(params);
2047 2050
2048 // An error occurred. 2051 // An error occurred.
2049 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error); 2052 view()->GetMainRenderFrame()->didFailProvisionalLoad(web_frame, error);
2050 // The error page itself is loaded asynchronously. 2053 // The error page itself is loaded asynchronously.
2051 FrameLoadWaiter(frame()).Wait(); 2054 FrameLoadWaiter(frame()).Wait();
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
2240 TEST_F(RenderViewImplTest, NavigationStartOverride) { 2243 TEST_F(RenderViewImplTest, NavigationStartOverride) {
2241 // Verify that a navigation that claims to have started at the earliest 2244 // Verify that a navigation that claims to have started at the earliest
2242 // possible TimeTicks is indeed reported as one that started before 2245 // possible TimeTicks is indeed reported as one that started before
2243 // OnNavigate() is called. 2246 // OnNavigate() is called.
2244 base::Time before_navigation = base::Time::Now(); 2247 base::Time before_navigation = base::Time::Now();
2245 FrameMsg_Navigate_Params early_nav_params; 2248 FrameMsg_Navigate_Params early_nav_params;
2246 early_nav_params.common_params.url = GURL("data:text/html,<div>Page</div>"); 2249 early_nav_params.common_params.url = GURL("data:text/html,<div>Page</div>");
2247 early_nav_params.common_params.navigation_type = 2250 early_nav_params.common_params.navigation_type =
2248 FrameMsg_Navigate_Type::NORMAL; 2251 FrameMsg_Navigate_Type::NORMAL;
2249 early_nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED; 2252 early_nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED;
2250 early_nav_params.page_id = -1; 2253 early_nav_params.history_params.page_id = -1;
2251 early_nav_params.is_post = true; 2254 early_nav_params.is_post = true;
2252 early_nav_params.commit_params.browser_navigation_start = 2255 early_nav_params.commit_params.browser_navigation_start =
2253 base::TimeTicks::FromInternalValue(1); 2256 base::TimeTicks::FromInternalValue(1);
2254 2257
2255 frame()->OnNavigate(early_nav_params); 2258 frame()->OnNavigate(early_nav_params);
2256 ProcessPendingMessages(); 2259 ProcessPendingMessages();
2257 2260
2258 base::Time early_nav_reported_start = 2261 base::Time early_nav_reported_start =
2259 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart()); 2262 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart());
2260 EXPECT_LT(early_nav_reported_start, before_navigation); 2263 EXPECT_LT(early_nav_reported_start, before_navigation);
2261 2264
2262 // Verify that a navigation that claims to have started in the future - 42 2265 // Verify that a navigation that claims to have started in the future - 42
2263 // days from now is *not* reported as one that starts in the future; as we 2266 // days from now is *not* reported as one that starts in the future; as we
2264 // sanitize the override allowing a maximum of ::Now(). 2267 // sanitize the override allowing a maximum of ::Now().
2265 FrameMsg_Navigate_Params late_nav_params; 2268 FrameMsg_Navigate_Params late_nav_params;
2266 late_nav_params.common_params.url = 2269 late_nav_params.common_params.url =
2267 GURL("data:text/html,<div>Another page</div>"); 2270 GURL("data:text/html,<div>Another page</div>");
2268 late_nav_params.common_params.navigation_type = 2271 late_nav_params.common_params.navigation_type =
2269 FrameMsg_Navigate_Type::NORMAL; 2272 FrameMsg_Navigate_Type::NORMAL;
2270 late_nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED; 2273 late_nav_params.common_params.transition = ui::PAGE_TRANSITION_TYPED;
2271 late_nav_params.page_id = -1; 2274 late_nav_params.history_params.page_id = -1;
2272 late_nav_params.is_post = true; 2275 late_nav_params.is_post = true;
2273 late_nav_params.commit_params.browser_navigation_start = 2276 late_nav_params.commit_params.browser_navigation_start =
2274 base::TimeTicks::Now() + base::TimeDelta::FromDays(42); 2277 base::TimeTicks::Now() + base::TimeDelta::FromDays(42);
2275 2278
2276 frame()->OnNavigate(late_nav_params); 2279 frame()->OnNavigate(late_nav_params);
2277 ProcessPendingMessages(); 2280 ProcessPendingMessages();
2278 base::Time after_navigation = 2281 base::Time after_navigation =
2279 base::Time::Now() + base::TimeDelta::FromDays(1); 2282 base::Time::Now() + base::TimeDelta::FromDays(1);
2280 2283
2281 base::Time late_nav_reported_start = 2284 base::Time late_nav_reported_start =
2282 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart()); 2285 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart());
2283 EXPECT_LE(late_nav_reported_start, after_navigation); 2286 EXPECT_LE(late_nav_reported_start, after_navigation);
2284 } 2287 }
2285 2288
2286 TEST_F(RenderViewImplTest, PreferredSizeZoomed) { 2289 TEST_F(RenderViewImplTest, PreferredSizeZoomed) {
2287 LoadHTML("<body style='margin:0;'><div style='display:inline-block; " 2290 LoadHTML("<body style='margin:0;'><div style='display:inline-block; "
2288 "width:400px; height:400px;'/></body>"); 2291 "width:400px; height:400px;'/></body>");
2289 view()->webview()->mainFrame()->setCanHaveScrollbars(false); 2292 view()->webview()->mainFrame()->setCanHaveScrollbars(false);
2290 EnablePreferredSizeMode(); 2293 EnablePreferredSizeMode();
2291 2294
2292 gfx::Size size = GetPreferredSize(); 2295 gfx::Size size = GetPreferredSize();
2293 EXPECT_EQ(gfx::Size(400, 400), size); 2296 EXPECT_EQ(gfx::Size(400, 400), size);
2294 2297
2295 SetZoomLevel(ZoomFactorToZoomLevel(2.0)); 2298 SetZoomLevel(ZoomFactorToZoomLevel(2.0));
2296 size = GetPreferredSize(); 2299 size = GetPreferredSize();
2297 EXPECT_EQ(gfx::Size(800, 800), size); 2300 EXPECT_EQ(gfx::Size(800, 800), size);
2298 } 2301 }
2299 2302
2303 // Ensure the RenderViewImpl history list is properly updated when starting a
2304 // new browser-initiated navigation.
2305 TEST_F(RenderViewImplTest, HistoryIsProperlyUpdatedOnNavigation) {
2306 EXPECT_EQ(0, view()->historyBackListCount());
2307 EXPECT_EQ(0, view()->historyBackListCount() +
2308 view()->historyForwardListCount() + 1);
2309
2310 // Receive a Navigate message with history parameters.
2311 FrameMsg_Navigate_Params params;
2312 params.common_params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
2313 params.common_params.transition = ui::PAGE_TRANSITION_LINK;
2314 params.history_params.current_history_list_length = 2;
2315 params.history_params.current_history_list_offset = 1;
2316 params.history_params.pending_history_list_offset = 2;
2317 params.history_params.page_id = -1;
2318 params.commit_params.browser_navigation_start =
2319 base::TimeTicks::FromInternalValue(1);
2320 frame()->OnNavigate(params);
2321
2322 // The history list in RenderView should have been updated.
2323 EXPECT_EQ(1, view()->historyBackListCount());
2324 EXPECT_EQ(2, view()->historyBackListCount() +
2325 view()->historyForwardListCount() + 1);
2326 }
2327
2300 } // namespace content 2328 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/renderer/render_view_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698