| 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 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 | 709 |
| 710 // Back to page A (page_id 1) and commit. | 710 // Back to page A (page_id 1) and commit. |
| 711 CommonNavigationParams common_params_A; | 711 CommonNavigationParams common_params_A; |
| 712 RequestNavigationParams request_params_A; | 712 RequestNavigationParams request_params_A; |
| 713 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 713 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
| 714 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 714 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 715 request_params_A.current_history_list_length = 2; | 715 request_params_A.current_history_list_length = 2; |
| 716 request_params_A.current_history_list_offset = 1; | 716 request_params_A.current_history_list_offset = 1; |
| 717 request_params_A.pending_history_list_offset = 0; | 717 request_params_A.pending_history_list_offset = 0; |
| 718 request_params_A.page_id = 1; | 718 request_params_A.page_id = 1; |
| 719 request_params_A.nav_entry_id = 1; | |
| 720 request_params_A.page_state = state_A; | 719 request_params_A.page_state = state_A; |
| 721 NavigateMainFrame(common_params_A, StartNavigationParams(), request_params_A); | 720 NavigateMainFrame(common_params_A, StartNavigationParams(), request_params_A); |
| 722 EXPECT_EQ(1, view()->historyBackListCount()); | 721 EXPECT_EQ(1, view()->historyBackListCount()); |
| 723 EXPECT_EQ(2, view()->historyBackListCount() + | 722 EXPECT_EQ(2, view()->historyBackListCount() + |
| 724 view()->historyForwardListCount() + 1); | 723 view()->historyForwardListCount() + 1); |
| 725 ProcessPendingMessages(); | 724 ProcessPendingMessages(); |
| 726 | 725 |
| 727 // Respond to a swap out request. | 726 // Respond to a swap out request. |
| 728 SwapOut(frame(), kProxyRoutingId, true, content::FrameReplicationState()); | 727 SwapOut(frame(), kProxyRoutingId, true, content::FrameReplicationState()); |
| 729 | 728 |
| 730 // Check for a OnSwapOutACK. | 729 // Check for a OnSwapOutACK. |
| 731 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( | 730 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( |
| 732 FrameHostMsg_SwapOut_ACK::ID); | 731 FrameHostMsg_SwapOut_ACK::ID); |
| 733 ASSERT_TRUE(msg); | 732 ASSERT_TRUE(msg); |
| 734 render_thread_->sink().ClearMessages(); | 733 render_thread_->sink().ClearMessages(); |
| 735 | 734 |
| 736 // It is possible to get a reload request at this point, containing the | 735 // It is possible to get a reload request at this point, containing the |
| 737 // params.page_state of the initial page (e.g., if the new page fails the | 736 // params.page_state of the initial page (e.g., if the new page fails the |
| 738 // provisional load in the renderer process, after we unload the old page). | 737 // provisional load in the renderer process, after we unload the old page). |
| 739 // Ensure the old page gets reloaded, not swappedout://. | 738 // Ensure the old page gets reloaded, not swappedout://. |
| 740 CommonNavigationParams common_params; | 739 CommonNavigationParams common_params; |
| 741 RequestNavigationParams request_params; | 740 RequestNavigationParams request_params; |
| 742 common_params.url = GURL("data:text/html,<div>Page A</div>"); | 741 common_params.url = GURL("data:text/html,<div>Page A</div>"); |
| 743 common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD; | 742 common_params.navigation_type = FrameMsg_Navigate_Type::RELOAD; |
| 744 common_params.transition = ui::PAGE_TRANSITION_RELOAD; | 743 common_params.transition = ui::PAGE_TRANSITION_RELOAD; |
| 745 request_params.current_history_list_length = 2; | 744 request_params.current_history_list_length = 2; |
| 746 request_params.current_history_list_offset = 0; | 745 request_params.current_history_list_offset = 0; |
| 747 request_params.pending_history_list_offset = 0; | 746 request_params.pending_history_list_offset = 0; |
| 748 request_params.page_id = 1; | 747 request_params.page_id = 1; |
| 749 request_params.nav_entry_id = 1; | |
| 750 request_params.page_state = state_A; | 748 request_params.page_state = state_A; |
| 751 NavigateMainFrame(common_params, StartNavigationParams(), request_params); | 749 NavigateMainFrame(common_params, StartNavigationParams(), request_params); |
| 752 ProcessPendingMessages(); | 750 ProcessPendingMessages(); |
| 753 | 751 |
| 754 // Verify page A committed, not swappedout://. | 752 // Verify page A committed, not swappedout://. |
| 755 const IPC::Message* frame_navigate_msg = | 753 const IPC::Message* frame_navigate_msg = |
| 756 render_thread_->sink().GetUniqueMessageMatching( | 754 render_thread_->sink().GetUniqueMessageMatching( |
| 757 FrameHostMsg_DidCommitProvisionalLoad::ID); | 755 FrameHostMsg_DidCommitProvisionalLoad::ID); |
| 758 EXPECT_TRUE(frame_navigate_msg); | 756 EXPECT_TRUE(frame_navigate_msg); |
| 759 | 757 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 910 EXPECT_EQ(page_id_C, page_id); | 908 EXPECT_EQ(page_id_C, page_id); |
| 911 EXPECT_NE(state_A, state); | 909 EXPECT_NE(state_A, state); |
| 912 EXPECT_NE(state_B, state); | 910 EXPECT_NE(state_B, state); |
| 913 EXPECT_EQ(state_C, state); | 911 EXPECT_EQ(state_C, state); |
| 914 } | 912 } |
| 915 | 913 |
| 916 // Test that stale back/forward navigations arriving from the browser are | 914 // Test that stale back/forward navigations arriving from the browser are |
| 917 // ignored. See http://crbug.com/86758. | 915 // ignored. See http://crbug.com/86758. |
| 918 TEST_F(RenderViewImplTest, StaleNavigationsIgnored) { | 916 TEST_F(RenderViewImplTest, StaleNavigationsIgnored) { |
| 919 // Load page A. | 917 // Load page A. |
| 920 LoadHTML("<div id=pagename>Page A</div>"); | 918 LoadHTML("<div>Page A</div>"); |
| 921 EXPECT_EQ(1, view()->history_list_length_); | 919 EXPECT_EQ(1, view()->history_list_length_); |
| 922 EXPECT_EQ(0, view()->history_list_offset_); | 920 EXPECT_EQ(0, view()->history_list_offset_); |
| 923 | 921 |
| 924 // Load page B, which will trigger an UpdateState message for page A. | 922 // Load page B, which will trigger an UpdateState message for page A. |
| 925 LoadHTML("<div id=pagename>Page B</div>"); | 923 LoadHTML("<div>Page B</div>"); |
| 926 EXPECT_EQ(2, view()->history_list_length_); | 924 EXPECT_EQ(2, view()->history_list_length_); |
| 927 EXPECT_EQ(1, view()->history_list_offset_); | 925 EXPECT_EQ(1, view()->history_list_offset_); |
| 928 | 926 |
| 929 // Check for a valid UpdateState message for page A. | 927 // Check for a valid UpdateState message for page A. |
| 930 ProcessPendingMessages(); | 928 ProcessPendingMessages(); |
| 931 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( | 929 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( |
| 932 ViewHostMsg_UpdateState::ID); | 930 ViewHostMsg_UpdateState::ID); |
| 933 ASSERT_TRUE(msg_A); | 931 ASSERT_TRUE(msg_A); |
| 934 ViewHostMsg_UpdateState::Param param; | 932 ViewHostMsg_UpdateState::Param param; |
| 935 ViewHostMsg_UpdateState::Read(msg_A, ¶m); | 933 ViewHostMsg_UpdateState::Read(msg_A, ¶m); |
| 936 int page_id_A = get<0>(param); | 934 int page_id_A = get<0>(param); |
| 937 PageState state_A = get<1>(param); | 935 PageState state_A = get<1>(param); |
| 938 EXPECT_EQ(1, page_id_A); | 936 EXPECT_EQ(1, page_id_A); |
| 939 render_thread_->sink().ClearMessages(); | 937 render_thread_->sink().ClearMessages(); |
| 940 | 938 |
| 941 // Back to page A (nav_entry_id 1) and commit. | 939 // Back to page A (page_id 1) and commit. |
| 942 CommonNavigationParams common_params_A; | 940 CommonNavigationParams common_params_A; |
| 943 RequestNavigationParams request_params_A; | 941 RequestNavigationParams request_params_A; |
| 944 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 942 common_params_A.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
| 945 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 943 common_params_A.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 946 request_params_A.current_history_list_length = 2; | 944 request_params_A.current_history_list_length = 2; |
| 947 request_params_A.current_history_list_offset = 1; | 945 request_params_A.current_history_list_offset = 1; |
| 948 request_params_A.pending_history_list_offset = 0; | 946 request_params_A.pending_history_list_offset = 0; |
| 949 request_params_A.page_id = 1; | 947 request_params_A.page_id = 1; |
| 950 request_params_A.nav_entry_id = 1; | |
| 951 request_params_A.page_state = state_A; | 948 request_params_A.page_state = state_A; |
| 952 NavigateMainFrame(common_params_A, StartNavigationParams(), request_params_A); | 949 NavigateMainFrame(common_params_A, StartNavigationParams(), request_params_A); |
| 953 ProcessPendingMessages(); | 950 ProcessPendingMessages(); |
| 954 | 951 |
| 955 // A new navigation commits, clearing the forward history. | 952 // A new navigation commits, clearing the forward history. |
| 956 LoadHTML("<div id=pagename>Page C</div>"); | 953 LoadHTML("<div>Page C</div>"); |
| 957 EXPECT_EQ(2, view()->history_list_length_); | 954 EXPECT_EQ(2, view()->history_list_length_); |
| 958 EXPECT_EQ(1, view()->history_list_offset_); | 955 EXPECT_EQ(1, view()->history_list_offset_); |
| 959 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3 | 956 EXPECT_EQ(3, view()->page_id_); // page C is now page id 3 |
| 960 int was_page_c = -1; | |
| 961 base::string16 check_page_c = base::ASCIIToUTF16( | |
| 962 "Number(document.getElementById('pagename').innerHTML == 'Page C')"); | |
| 963 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_c, &was_page_c)); | |
| 964 EXPECT_EQ(1, was_page_c); | |
| 965 | 957 |
| 966 // The browser then sends a stale navigation to B, which should be ignored. | 958 // The browser then sends a stale navigation to B, which should be ignored. |
| 967 CommonNavigationParams common_params_B; | 959 CommonNavigationParams common_params_B; |
| 968 RequestNavigationParams request_params_B; | 960 RequestNavigationParams request_params_B; |
| 969 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; | 961 common_params_B.navigation_type = FrameMsg_Navigate_Type::NORMAL; |
| 970 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 962 common_params_B.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 971 request_params_B.current_history_list_length = 2; | 963 request_params_B.current_history_list_length = 2; |
| 972 request_params_B.current_history_list_offset = 0; | 964 request_params_B.current_history_list_offset = 0; |
| 973 request_params_B.pending_history_list_offset = 1; | 965 request_params_B.pending_history_list_offset = 1; |
| 974 request_params_B.page_id = 2; | 966 request_params_B.page_id = 2; |
| 975 request_params_B.nav_entry_id = 2; | |
| 976 request_params_B.page_state = | 967 request_params_B.page_state = |
| 977 state_A; // Doesn't matter, just has to be present. | 968 state_A; // Doesn't matter, just has to be present. |
| 978 NavigateMainFrame(common_params_B, StartNavigationParams(), request_params_B); | 969 NavigateMainFrame(common_params_B, StartNavigationParams(), request_params_B); |
| 979 | 970 |
| 980 // State should be unchanged. | 971 // State should be unchanged. |
| 981 EXPECT_EQ(2, view()->history_list_length_); | 972 EXPECT_EQ(2, view()->history_list_length_); |
| 982 EXPECT_EQ(1, view()->history_list_offset_); | 973 EXPECT_EQ(1, view()->history_list_offset_); |
| 983 EXPECT_EQ(3, view()->page_id_); // page C, not page B | 974 EXPECT_EQ(3, view()->page_id_); // page C, not page B |
| 984 was_page_c = -1; | |
| 985 EXPECT_TRUE(ExecuteJavaScriptAndReturnIntValue(check_page_c, &was_page_c)); | |
| 986 EXPECT_EQ(1, was_page_c); | |
| 987 | 975 |
| 988 // Check for a valid DidDropNavigation message. | 976 // Check for a valid DidDropNavigation message. |
| 989 ProcessPendingMessages(); | 977 ProcessPendingMessages(); |
| 990 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( | 978 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( |
| 991 FrameHostMsg_DidDropNavigation::ID); | 979 FrameHostMsg_DidDropNavigation::ID); |
| 992 ASSERT_TRUE(msg); | 980 ASSERT_TRUE(msg); |
| 993 render_thread_->sink().ClearMessages(); | 981 render_thread_->sink().ClearMessages(); |
| 994 } | 982 } |
| 995 | 983 |
| 996 // Test that our IME backend sends a notification message when the input focus | 984 // Test that our IME backend sends a notification message when the input focus |
| (...skipping 1437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2434 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( | 2422 base::MessageLoop::current()->PostTask(FROM_HERE, base::Bind( |
| 2435 &DevToolsAgentTest::CloseWhilePaused, base::Unretained(this))); | 2423 &DevToolsAgentTest::CloseWhilePaused, base::Unretained(this))); |
| 2436 ExecuteJavaScript("debugger;"); | 2424 ExecuteJavaScript("debugger;"); |
| 2437 | 2425 |
| 2438 // CloseWhilePaused should resume execution and continue here. | 2426 // CloseWhilePaused should resume execution and continue here. |
| 2439 EXPECT_FALSE(IsPaused()); | 2427 EXPECT_FALSE(IsPaused()); |
| 2440 Detach(); | 2428 Detach(); |
| 2441 } | 2429 } |
| 2442 | 2430 |
| 2443 } // namespace content | 2431 } // namespace content |
| OLD | NEW |