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 596 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 | 607 |
608 // Back to page A (page_id 1) and commit. | 608 // Back to page A (page_id 1) and commit. |
609 CommonNavigationParams common_params_A; | 609 CommonNavigationParams common_params_A; |
610 HistoryNavigationParams history_params_A; | 610 HistoryNavigationParams history_params_A; |
611 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 611 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
612 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 612 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
613 history_params_A.current_history_list_length = 2; | 613 history_params_A.current_history_list_length = 2; |
614 history_params_A.current_history_list_offset = 1; | 614 history_params_A.current_history_list_offset = 1; |
615 history_params_A.pending_history_list_offset = 0; | 615 history_params_A.pending_history_list_offset = 0; |
616 history_params_A.page_id = 1; | 616 history_params_A.page_id = 1; |
| 617 history_params_A.nav_entry_id = 1; |
617 history_params_A.page_state = state_A; | 618 history_params_A.page_state = state_A; |
618 frame()->OnNavigate(common_params_A, StartNavigationParams(), | 619 frame()->OnNavigate(common_params_A, StartNavigationParams(), |
619 CommitNavigationParams(), history_params_A); | 620 CommitNavigationParams(), history_params_A); |
620 EXPECT_EQ(1, view()->historyBackListCount()); | 621 EXPECT_EQ(1, view()->historyBackListCount()); |
621 EXPECT_EQ(2, view()->historyBackListCount() + | 622 EXPECT_EQ(2, view()->historyBackListCount() + |
622 view()->historyForwardListCount() + 1); | 623 view()->historyForwardListCount() + 1); |
623 ProcessPendingMessages(); | 624 ProcessPendingMessages(); |
624 | 625 |
625 // Respond to a swap out request. | 626 // Respond to a swap out request. |
626 view()->GetMainRenderFrame()->OnSwapOut(kProxyRoutingId, true, | 627 view()->GetMainRenderFrame()->OnSwapOut(kProxyRoutingId, true, |
(...skipping 11 matching lines...) Expand all Loading... |
638 // Ensure the old page gets reloaded, not swappedout://. | 639 // Ensure the old page gets reloaded, not swappedout://. |
639 CommonNavigationParams common_params; | 640 CommonNavigationParams common_params; |
640 HistoryNavigationParams history_params; | 641 HistoryNavigationParams history_params; |
641 common_params.url = GURL("data:text/html,<div>Page A</div>"); | 642 common_params.url = GURL("data:text/html,<div>Page A</div>"); |
642 common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD; | 643 common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD; |
643 common_params.transition = ui::PAGE_TRANSITION_RELOAD; | 644 common_params.transition = ui::PAGE_TRANSITION_RELOAD; |
644 history_params.current_history_list_length = 2; | 645 history_params.current_history_list_length = 2; |
645 history_params.current_history_list_offset = 0; | 646 history_params.current_history_list_offset = 0; |
646 history_params.pending_history_list_offset = 0; | 647 history_params.pending_history_list_offset = 0; |
647 history_params.page_id = 1; | 648 history_params.page_id = 1; |
| 649 history_params.nav_entry_id = 1; |
648 history_params.page_state = state_A; | 650 history_params.page_state = state_A; |
649 frame()->OnNavigate(common_params, StartNavigationParams(), | 651 frame()->OnNavigate(common_params, StartNavigationParams(), |
650 CommitNavigationParams(), history_params); | 652 CommitNavigationParams(), history_params); |
651 ProcessPendingMessages(); | 653 ProcessPendingMessages(); |
652 | 654 |
653 // Verify page A committed, not swappedout://. | 655 // Verify page A committed, not swappedout://. |
654 const IPC::Message* frame_navigate_msg = | 656 const IPC::Message* frame_navigate_msg = |
655 render_thread_->sink().GetUniqueMessageMatching( | 657 render_thread_->sink().GetUniqueMessageMatching( |
656 FrameHostMsg_DidCommitProvisionalLoad::ID); | 658 FrameHostMsg_DidCommitProvisionalLoad::ID); |
657 EXPECT_TRUE(frame_navigate_msg); | 659 EXPECT_TRUE(frame_navigate_msg); |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 EXPECT_EQ(page_id_C, page_id); | 814 EXPECT_EQ(page_id_C, page_id); |
813 EXPECT_NE(state_A, state); | 815 EXPECT_NE(state_A, state); |
814 EXPECT_NE(state_B, state); | 816 EXPECT_NE(state_B, state); |
815 EXPECT_EQ(state_C, state); | 817 EXPECT_EQ(state_C, state); |
816 } | 818 } |
817 | 819 |
818 // Test that stale back/forward navigations arriving from the browser are | 820 // Test that stale back/forward navigations arriving from the browser are |
819 // ignored. See http://crbug.com/86758. | 821 // ignored. See http://crbug.com/86758. |
820 TEST_F(RenderViewImplTest, StaleNavigationsIgnored) { | 822 TEST_F(RenderViewImplTest, StaleNavigationsIgnored) { |
821 // Load page A. | 823 // Load page A. |
822 LoadHTML("<div>Page A</div>"); | 824 LoadHTML("<div id=pagename>Page A</div>"); |
823 EXPECT_EQ(1, view()->history_list_length_); | 825 EXPECT_EQ(1, view()->history_list_length_); |
824 EXPECT_EQ(0, view()->history_list_offset_); | 826 EXPECT_EQ(0, view()->history_list_offset_); |
825 | 827 |
826 // Load page B, which will trigger an UpdateState message for page A. | 828 // Load page B, which will trigger an UpdateState message for page A. |
827 LoadHTML("<div>Page B</div>"); | 829 LoadHTML("<div id=pagename>Page B</div>"); |
828 EXPECT_EQ(2, view()->history_list_length_); | 830 EXPECT_EQ(2, view()->history_list_length_); |
829 EXPECT_EQ(1, view()->history_list_offset_); | 831 EXPECT_EQ(1, view()->history_list_offset_); |
830 | 832 |
831 // Check for a valid UpdateState message for page A. | 833 // Check for a valid UpdateState message for page A. |
832 ProcessPendingMessages(); | 834 ProcessPendingMessages(); |
833 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( | 835 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( |
834 ViewHostMsg_UpdateState::ID); | 836 ViewHostMsg_UpdateState::ID); |
835 ASSERT_TRUE(msg_A); | 837 ASSERT_TRUE(msg_A); |
836 ViewHostMsg_UpdateState::Param param; | 838 ViewHostMsg_UpdateState::Param param; |
837 ViewHostMsg_UpdateState::Read(msg_A, ¶m); | 839 ViewHostMsg_UpdateState::Read(msg_A, ¶m); |
838 int page_id_A = get<0>(param); | 840 int page_id_A = get<0>(param); |
839 PageState state_A = get<1>(param); | 841 PageState state_A = get<1>(param); |
840 EXPECT_EQ(1, page_id_A); | 842 EXPECT_EQ(1, page_id_A); |
841 render_thread_->sink().ClearMessages(); | 843 render_thread_->sink().ClearMessages(); |
842 | 844 |
843 // Back to page A (page_id 1) and commit. | 845 // Back to page A (nav_entry_id 1) and commit. |
844 CommonNavigationParams common_params_A; | 846 CommonNavigationParams common_params_A; |
845 HistoryNavigationParams history_params_A; | 847 HistoryNavigationParams history_params_A; |
846 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 848 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
847 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 849 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
848 history_params_A.current_history_list_length = 2; | 850 history_params_A.current_history_list_length = 2; |
849 history_params_A.current_history_list_offset = 1; | 851 history_params_A.current_history_list_offset = 1; |
850 history_params_A.pending_history_list_offset = 0; | 852 history_params_A.pending_history_list_offset = 0; |
851 history_params_A.page_id = 1; | 853 history_params_A.page_id = 1; |
| 854 history_params_A.nav_entry_id = 1; |
852 history_params_A.page_state = state_A; | 855 history_params_A.page_state = state_A; |
853 frame()->OnNavigate(common_params_A, StartNavigationParams(), | 856 frame()->OnNavigate(common_params_A, StartNavigationParams(), |
854 CommitNavigationParams(), history_params_A); | 857 CommitNavigationParams(), history_params_A); |
855 ProcessPendingMessages(); | 858 ProcessPendingMessages(); |
856 | 859 |
857 // A new navigation commits, clearing the forward history. | 860 // A new navigation commits, clearing the forward history. |
858 LoadHTML("<div>Page C</div>"); | 861 LoadHTML("<div id=pagename>Page C</div>"); |
859 EXPECT_EQ(2, view()->history_list_length_); | 862 EXPECT_EQ(2, view()->history_list_length_); |
860 EXPECT_EQ(1, view()->history_list_offset_); | 863 EXPECT_EQ(1, view()->history_list_offset_); |
861 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3 | 864 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3 |
| 865 int was_page_c = -1; |
| 866 base::string16 check_page_c = |
| 867 base::ASCIIToUTF16( |
| 868 "Number(document.getElementById('pagename').innerHTML == 'Page C')"); |
| 869 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_c, &was_page_c)); |
| 870 EXPECT_EQ(1, was_page_c); |
862 | 871 |
863 // The browser then sends a stale navigation to B, which should be ignored. | 872 // The browser then sends a stale navigation to B, which should be ignored. |
864 CommonNavigationParams common_params_B; | 873 CommonNavigationParams common_params_B; |
865 HistoryNavigationParams history_params_B; | 874 HistoryNavigationParams history_params_B; |
866 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 875 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
867 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 876 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
868 history_params_B.current_history_list_length = 2; | 877 history_params_B.current_history_list_length = 2; |
869 history_params_B.current_history_list_offset = 0; | 878 history_params_B.current_history_list_offset = 0; |
870 history_params_B.pending_history_list_offset = 1; | 879 history_params_B.pending_history_list_offset = 1; |
871 history_params_B.page_id = 2; | 880 history_params_B.page_id = 2; |
| 881 history_params_B.nav_entry_id = 2; |
872 history_params_B.page_state = | 882 history_params_B.page_state = |
873 state_A; // Doesn't matter, just has to be present. | 883 state_A; // Doesn't matter, just has to be present. |
874 frame()->OnNavigate(common_params_B, StartNavigationParams(), | 884 frame()->OnNavigate(common_params_B, StartNavigationParams(), |
875 CommitNavigationParams(), history_params_B); | 885 CommitNavigationParams(), history_params_B); |
876 | 886 |
877 // State should be unchanged. | 887 // State should be unchanged. |
878 EXPECT_EQ(2, view()->history_list_length_); | 888 EXPECT_EQ(2, view()->history_list_length_); |
879 EXPECT_EQ(1, view()->history_list_offset_); | 889 EXPECT_EQ(1, view()->history_list_offset_); |
880 EXPECT_EQ(3, view()->page_id_); // page C, not page B | 890 EXPECT_EQ(3, view()->page_id_); // page C, not page B |
| 891 was_page_c = -1; |
| 892 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_c, &was_page_c)); |
| 893 EXPECT_EQ(1, was_page_c); |
881 | 894 |
882 // Check for a valid DidDropNavigation message. | 895 // Check for a valid DidDropNavigation message. |
883 ProcessPendingMessages(); | 896 ProcessPendingMessages(); |
884 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( | 897 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( |
885 FrameHostMsg_DidDropNavigation::ID); | 898 FrameHostMsg_DidDropNavigation::ID); |
886 ASSERT_TRUE(msg); | 899 ASSERT_TRUE(msg); |
887 render_thread_->sink().ClearMessages(); | 900 render_thread_->sink().ClearMessages(); |
888 } | 901 } |
889 | 902 |
890 // Test that our IME backend sends a notification message when the input focus | 903 // Test that our IME backend sends a notification message when the input focus |
(...skipping 1418 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2309 frame()->OnNavigate(CommonNavigationParams(), StartNavigationParams(), | 2322 frame()->OnNavigate(CommonNavigationParams(), StartNavigationParams(), |
2310 CommitNavigationParams(), history_params); | 2323 CommitNavigationParams(), history_params); |
2311 | 2324 |
2312 // The history list in RenderView should have been updated. | 2325 // The history list in RenderView should have been updated. |
2313 EXPECT_EQ(1, view()->historyBackListCount()); | 2326 EXPECT_EQ(1, view()->historyBackListCount()); |
2314 EXPECT_EQ(2, view()->historyBackListCount() + | 2327 EXPECT_EQ(2, view()->historyBackListCount() + |
2315 view()->historyForwardListCount() + 1); | 2328 view()->historyForwardListCount() + 1); |
2316 } | 2329 } |
2317 | 2330 |
2318 } // namespace content | 2331 } // namespace content |
OLD | NEW |