OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
602 ViewHostMsg_UpdateState::Read(msg_A, ¶ms); | 602 ViewHostMsg_UpdateState::Read(msg_A, ¶ms); |
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 Loading... |
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 Loading... |
834 ViewHostMsg_UpdateState::Read(msg_A, ¶m); | 837 ViewHostMsg_UpdateState::Read(msg_A, ¶m); |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |