| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <tuple> | 7 #include <tuple> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 12 #include "base/json/json_reader.h" | 12 #include "base/json/json_reader.h" |
| 13 #include "base/json/json_writer.h" | 13 #include "base/json/json_writer.h" |
| 14 #include "base/location.h" | 14 #include "base/location.h" |
| 15 #include "base/macros.h" | 15 #include "base/macros.h" |
| 16 #include "base/run_loop.h" |
| 16 #include "base/single_thread_task_runner.h" | 17 #include "base/single_thread_task_runner.h" |
| 17 #include "base/strings/string_util.h" | 18 #include "base/strings/string_util.h" |
| 18 #include "base/strings/utf_string_conversions.h" | 19 #include "base/strings/utf_string_conversions.h" |
| 19 #include "base/threading/thread_task_runner_handle.h" | 20 #include "base/threading/thread_task_runner_handle.h" |
| 20 #include "base/time/time.h" | 21 #include "base/time/time.h" |
| 21 #include "base/values.h" | 22 #include "base/values.h" |
| 22 #include "build/build_config.h" | 23 #include "build/build_config.h" |
| 23 #include "cc/trees/layer_tree_host.h" | 24 #include "cc/trees/layer_tree_host.h" |
| 24 #include "content/child/request_extra_data.h" | 25 #include "content/child/request_extra_data.h" |
| 25 #include "content/child/service_worker/service_worker_network_provider.h" | 26 #include "content/child/service_worker/service_worker_network_provider.h" |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 request_params.current_history_list_length = view()->history_list_length_; | 256 request_params.current_history_list_length = view()->history_list_length_; |
| 256 frame()->Navigate(common_params, start_params, request_params); | 257 frame()->Navigate(common_params, start_params, request_params); |
| 257 | 258 |
| 258 // The load actually happens asynchronously, so we pump messages to process | 259 // The load actually happens asynchronously, so we pump messages to process |
| 259 // the pending continuation. | 260 // the pending continuation. |
| 260 FrameLoadWaiter(frame()).Wait(); | 261 FrameLoadWaiter(frame()).Wait(); |
| 261 } | 262 } |
| 262 | 263 |
| 263 template<class T> | 264 template<class T> |
| 264 typename T::Param ProcessAndReadIPC() { | 265 typename T::Param ProcessAndReadIPC() { |
| 265 ProcessPendingMessages(); | 266 base::RunLoop().RunUntilIdle(); |
| 266 const IPC::Message* message = | 267 const IPC::Message* message = |
| 267 render_thread_->sink().GetUniqueMessageMatching(T::ID); | 268 render_thread_->sink().GetUniqueMessageMatching(T::ID); |
| 268 typename T::Param param; | 269 typename T::Param param; |
| 269 EXPECT_TRUE(message); | 270 EXPECT_TRUE(message); |
| 270 if (message) | 271 if (message) |
| 271 T::Read(message, ¶m); | 272 T::Read(message, ¶m); |
| 272 return param; | 273 return param; |
| 273 } | 274 } |
| 274 | 275 |
| 275 // Sends IPC messages that emulates a key-press event. | 276 // Sends IPC messages that emulates a key-press event. |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 581 | 582 |
| 582 // We should NOT have gotten a form state change notification yet. | 583 // We should NOT have gotten a form state change notification yet. |
| 583 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( | 584 EXPECT_FALSE(render_thread_->sink().GetFirstMessageMatching( |
| 584 FrameHostMsg_UpdateState::ID)); | 585 FrameHostMsg_UpdateState::ID)); |
| 585 render_thread_->sink().ClearMessages(); | 586 render_thread_->sink().ClearMessages(); |
| 586 | 587 |
| 587 // Change the value of the input. We should have gotten an update state | 588 // Change the value of the input. We should have gotten an update state |
| 588 // notification. We need to spin the message loop to catch this update. | 589 // notification. We need to spin the message loop to catch this update. |
| 589 ExecuteJavaScriptForTests( | 590 ExecuteJavaScriptForTests( |
| 590 "document.getElementById('elt_text').value = 'foo';"); | 591 "document.getElementById('elt_text').value = 'foo';"); |
| 591 ProcessPendingMessages(); | 592 base::RunLoop().RunUntilIdle(); |
| 592 | 593 |
| 593 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( | 594 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( |
| 594 FrameHostMsg_UpdateState::ID)); | 595 FrameHostMsg_UpdateState::ID)); |
| 595 } | 596 } |
| 596 | 597 |
| 597 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { | 598 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { |
| 598 // An http url will trigger a resource load so cannot be used here. | 599 // An http url will trigger a resource load so cannot be used here. |
| 599 CommonNavigationParams common_params; | 600 CommonNavigationParams common_params; |
| 600 StartNavigationParams start_params; | 601 StartNavigationParams start_params; |
| 601 RequestNavigationParams request_params; | 602 RequestNavigationParams request_params; |
| 602 common_params.url = GURL("data:text/html,<div>Page</div>"); | 603 common_params.url = GURL("data:text/html,<div>Page</div>"); |
| 603 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT; | 604 common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT; |
| 604 common_params.transition = ui::PAGE_TRANSITION_TYPED; | 605 common_params.transition = ui::PAGE_TRANSITION_TYPED; |
| 605 common_params.method = "POST"; | 606 common_params.method = "POST"; |
| 606 | 607 |
| 607 // Set up post data. | 608 // Set up post data. |
| 608 const char raw_data[] = "post \0\ndata"; | 609 const char raw_data[] = "post \0\ndata"; |
| 609 const size_t length = arraysize(raw_data); | 610 const size_t length = arraysize(raw_data); |
| 610 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl); | 611 scoped_refptr<ResourceRequestBodyImpl> post_data(new ResourceRequestBodyImpl); |
| 611 post_data->AppendBytes(raw_data, length); | 612 post_data->AppendBytes(raw_data, length); |
| 612 common_params.post_data = post_data; | 613 common_params.post_data = post_data; |
| 613 | 614 |
| 614 frame()->Navigate(common_params, start_params, request_params); | 615 frame()->Navigate(common_params, start_params, request_params); |
| 615 ProcessPendingMessages(); | 616 base::RunLoop().RunUntilIdle(); |
| 616 | 617 |
| 617 const IPC::Message* frame_navigate_msg = | 618 const IPC::Message* frame_navigate_msg = |
| 618 render_thread_->sink().GetUniqueMessageMatching( | 619 render_thread_->sink().GetUniqueMessageMatching( |
| 619 FrameHostMsg_DidCommitProvisionalLoad::ID); | 620 FrameHostMsg_DidCommitProvisionalLoad::ID); |
| 620 EXPECT_TRUE(frame_navigate_msg); | 621 EXPECT_TRUE(frame_navigate_msg); |
| 621 | 622 |
| 622 FrameHostMsg_DidCommitProvisionalLoad::Param host_nav_params; | 623 FrameHostMsg_DidCommitProvisionalLoad::Param host_nav_params; |
| 623 FrameHostMsg_DidCommitProvisionalLoad::Read(frame_navigate_msg, | 624 FrameHostMsg_DidCommitProvisionalLoad::Read(frame_navigate_msg, |
| 624 &host_nav_params); | 625 &host_nav_params); |
| 625 EXPECT_EQ("POST", std::get<0>(host_nav_params).method); | 626 EXPECT_EQ("POST", std::get<0>(host_nav_params).method); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 646 common_params.base_url_for_data_url = GURL("about:blank"); | 647 common_params.base_url_for_data_url = GURL("about:blank"); |
| 647 common_params.history_url_for_data_url = GURL("about:blank"); | 648 common_params.history_url_for_data_url = GURL("about:blank"); |
| 648 RequestNavigationParams request_params; | 649 RequestNavigationParams request_params; |
| 649 request_params.data_url_as_string = | 650 request_params.data_url_as_string = |
| 650 "data:text/html,<html><head><title>Data page</title></head></html>"; | 651 "data:text/html,<html><head><title>Data page</title></head></html>"; |
| 651 | 652 |
| 652 frame()->Navigate(common_params, StartNavigationParams(), | 653 frame()->Navigate(common_params, StartNavigationParams(), |
| 653 request_params); | 654 request_params); |
| 654 const IPC::Message* frame_title_msg = nullptr; | 655 const IPC::Message* frame_title_msg = nullptr; |
| 655 do { | 656 do { |
| 656 ProcessPendingMessages(); | 657 base::RunLoop().RunUntilIdle(); |
| 657 frame_title_msg = render_thread_->sink().GetUniqueMessageMatching( | 658 frame_title_msg = render_thread_->sink().GetUniqueMessageMatching( |
| 658 FrameHostMsg_UpdateTitle::ID); | 659 FrameHostMsg_UpdateTitle::ID); |
| 659 } while (!frame_title_msg); | 660 } while (!frame_title_msg); |
| 660 | 661 |
| 661 // Check post data sent to browser matches. | 662 // Check post data sent to browser matches. |
| 662 FrameHostMsg_UpdateTitle::Param title_params; | 663 FrameHostMsg_UpdateTitle::Param title_params; |
| 663 EXPECT_TRUE(FrameHostMsg_UpdateTitle::Read(frame_title_msg, &title_params)); | 664 EXPECT_TRUE(FrameHostMsg_UpdateTitle::Read(frame_title_msg, &title_params)); |
| 664 EXPECT_EQ(base::ASCIIToUTF16("Data page"), std::get<0>(title_params)); | 665 EXPECT_EQ(base::ASCIIToUTF16("Data page"), std::get<0>(title_params)); |
| 665 } | 666 } |
| 666 #endif | 667 #endif |
| (...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 925 // quickly without committing. Regression test for http://crbug.com/58082. | 926 // quickly without committing. Regression test for http://crbug.com/58082. |
| 926 // Disabled: http://crbug.com/157357 . | 927 // Disabled: http://crbug.com/157357 . |
| 927 TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) { | 928 TEST_F(RenderViewImplTest, DISABLED_LastCommittedUpdateState) { |
| 928 // Load page A. | 929 // Load page A. |
| 929 LoadHTML("<div>Page A</div>"); | 930 LoadHTML("<div>Page A</div>"); |
| 930 | 931 |
| 931 // Load page B, which will trigger an UpdateState message for page A. | 932 // Load page B, which will trigger an UpdateState message for page A. |
| 932 LoadHTML("<div>Page B</div>"); | 933 LoadHTML("<div>Page B</div>"); |
| 933 | 934 |
| 934 // Check for a valid UpdateState message for page A. | 935 // Check for a valid UpdateState message for page A. |
| 935 ProcessPendingMessages(); | 936 base::RunLoop().RunUntilIdle(); |
| 936 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( | 937 const IPC::Message* msg_A = render_thread_->sink().GetUniqueMessageMatching( |
| 937 FrameHostMsg_UpdateState::ID); | 938 FrameHostMsg_UpdateState::ID); |
| 938 ASSERT_TRUE(msg_A); | 939 ASSERT_TRUE(msg_A); |
| 939 FrameHostMsg_UpdateState::Param param; | 940 FrameHostMsg_UpdateState::Param param; |
| 940 FrameHostMsg_UpdateState::Read(msg_A, ¶m); | 941 FrameHostMsg_UpdateState::Read(msg_A, ¶m); |
| 941 PageState state_A = std::get<0>(param); | 942 PageState state_A = std::get<0>(param); |
| 942 render_thread_->sink().ClearMessages(); | 943 render_thread_->sink().ClearMessages(); |
| 943 | 944 |
| 944 // Load page C, which will trigger an UpdateState message for page B. | 945 // Load page C, which will trigger an UpdateState message for page B. |
| 945 LoadHTML("<div>Page C</div>"); | 946 LoadHTML("<div>Page C</div>"); |
| 946 | 947 |
| 947 // Check for a valid UpdateState for page B. | 948 // Check for a valid UpdateState for page B. |
| 948 ProcessPendingMessages(); | 949 base::RunLoop().RunUntilIdle(); |
| 949 const IPC::Message* msg_B = render_thread_->sink().GetUniqueMessageMatching( | 950 const IPC::Message* msg_B = render_thread_->sink().GetUniqueMessageMatching( |
| 950 FrameHostMsg_UpdateState::ID); | 951 FrameHostMsg_UpdateState::ID); |
| 951 ASSERT_TRUE(msg_B); | 952 ASSERT_TRUE(msg_B); |
| 952 FrameHostMsg_UpdateState::Read(msg_B, ¶m); | 953 FrameHostMsg_UpdateState::Read(msg_B, ¶m); |
| 953 PageState state_B = std::get<0>(param); | 954 PageState state_B = std::get<0>(param); |
| 954 EXPECT_NE(state_A, state_B); | 955 EXPECT_NE(state_A, state_B); |
| 955 render_thread_->sink().ClearMessages(); | 956 render_thread_->sink().ClearMessages(); |
| 956 | 957 |
| 957 // Load page D, which will trigger an UpdateState message for page C. | 958 // Load page D, which will trigger an UpdateState message for page C. |
| 958 LoadHTML("<div>Page D</div>"); | 959 LoadHTML("<div>Page D</div>"); |
| 959 | 960 |
| 960 // Check for a valid UpdateState for page C. | 961 // Check for a valid UpdateState for page C. |
| 961 ProcessPendingMessages(); | 962 base::RunLoop().RunUntilIdle(); |
| 962 const IPC::Message* msg_C = render_thread_->sink().GetUniqueMessageMatching( | 963 const IPC::Message* msg_C = render_thread_->sink().GetUniqueMessageMatching( |
| 963 FrameHostMsg_UpdateState::ID); | 964 FrameHostMsg_UpdateState::ID); |
| 964 ASSERT_TRUE(msg_C); | 965 ASSERT_TRUE(msg_C); |
| 965 FrameHostMsg_UpdateState::Read(msg_C, ¶m); | 966 FrameHostMsg_UpdateState::Read(msg_C, ¶m); |
| 966 PageState state_C = std::get<0>(param); | 967 PageState state_C = std::get<0>(param); |
| 967 EXPECT_NE(state_B, state_C); | 968 EXPECT_NE(state_B, state_C); |
| 968 render_thread_->sink().ClearMessages(); | 969 render_thread_->sink().ClearMessages(); |
| 969 | 970 |
| 970 // Go back to C and commit, preparing for our real test. | 971 // Go back to C and commit, preparing for our real test. |
| 971 CommonNavigationParams common_params_C; | 972 CommonNavigationParams common_params_C; |
| 972 RequestNavigationParams request_params_C; | 973 RequestNavigationParams request_params_C; |
| 973 common_params_C.navigation_type = | 974 common_params_C.navigation_type = |
| 974 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; | 975 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; |
| 975 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 976 common_params_C.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 976 request_params_C.current_history_list_length = 4; | 977 request_params_C.current_history_list_length = 4; |
| 977 request_params_C.current_history_list_offset = 3; | 978 request_params_C.current_history_list_offset = 3; |
| 978 request_params_C.pending_history_list_offset = 2; | 979 request_params_C.pending_history_list_offset = 2; |
| 979 request_params_C.nav_entry_id = 3; | 980 request_params_C.nav_entry_id = 3; |
| 980 request_params_C.page_state = state_C; | 981 request_params_C.page_state = state_C; |
| 981 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C); | 982 frame()->Navigate(common_params_C, StartNavigationParams(), request_params_C); |
| 982 ProcessPendingMessages(); | 983 base::RunLoop().RunUntilIdle(); |
| 983 render_thread_->sink().ClearMessages(); | 984 render_thread_->sink().ClearMessages(); |
| 984 | 985 |
| 985 // Go back twice quickly, such that page B does not have a chance to commit. | 986 // Go back twice quickly, such that page B does not have a chance to commit. |
| 986 // This leads to two changes to the back/forward list but only one change to | 987 // This leads to two changes to the back/forward list but only one change to |
| 987 // the RenderView's page ID. | 988 // the RenderView's page ID. |
| 988 | 989 |
| 989 // Back to page B without committing. | 990 // Back to page B without committing. |
| 990 CommonNavigationParams common_params_B; | 991 CommonNavigationParams common_params_B; |
| 991 RequestNavigationParams request_params_B; | 992 RequestNavigationParams request_params_B; |
| 992 common_params_B.navigation_type = | 993 common_params_B.navigation_type = |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1004 RequestNavigationParams request_params; | 1005 RequestNavigationParams request_params; |
| 1005 common_params.navigation_type = | 1006 common_params.navigation_type = |
| 1006 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; | 1007 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; |
| 1007 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 1008 common_params.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 1008 request_params.current_history_list_length = 4; | 1009 request_params.current_history_list_length = 4; |
| 1009 request_params.current_history_list_offset = 2; | 1010 request_params.current_history_list_offset = 2; |
| 1010 request_params.pending_history_list_offset = 0; | 1011 request_params.pending_history_list_offset = 0; |
| 1011 request_params.nav_entry_id = 1; | 1012 request_params.nav_entry_id = 1; |
| 1012 request_params.page_state = state_A; | 1013 request_params.page_state = state_A; |
| 1013 frame()->Navigate(common_params, StartNavigationParams(), request_params); | 1014 frame()->Navigate(common_params, StartNavigationParams(), request_params); |
| 1014 ProcessPendingMessages(); | 1015 base::RunLoop().RunUntilIdle(); |
| 1015 | 1016 |
| 1016 // Now ensure that the UpdateState message we receive is consistent | 1017 // Now ensure that the UpdateState message we receive is consistent |
| 1017 // and represents page C in state. | 1018 // and represents page C in state. |
| 1018 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( | 1019 const IPC::Message* msg = render_thread_->sink().GetUniqueMessageMatching( |
| 1019 FrameHostMsg_UpdateState::ID); | 1020 FrameHostMsg_UpdateState::ID); |
| 1020 ASSERT_TRUE(msg); | 1021 ASSERT_TRUE(msg); |
| 1021 FrameHostMsg_UpdateState::Read(msg, ¶m); | 1022 FrameHostMsg_UpdateState::Read(msg, ¶m); |
| 1022 PageState state = std::get<0>(param); | 1023 PageState state = std::get<0>(param); |
| 1023 EXPECT_NE(state_A, state); | 1024 EXPECT_NE(state_A, state); |
| 1024 EXPECT_NE(state_B, state); | 1025 EXPECT_NE(state_B, state); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1073 {"test13", ui::TEXT_INPUT_MODE_URL}, | 1074 {"test13", ui::TEXT_INPUT_MODE_URL}, |
| 1074 {"test14", ui::TEXT_INPUT_MODE_DEFAULT}, | 1075 {"test14", ui::TEXT_INPUT_MODE_DEFAULT}, |
| 1075 {"test15", ui::TEXT_INPUT_MODE_VERBATIM}, | 1076 {"test15", ui::TEXT_INPUT_MODE_VERBATIM}, |
| 1076 }; | 1077 }; |
| 1077 | 1078 |
| 1078 const int kRepeatCount = 10; | 1079 const int kRepeatCount = 10; |
| 1079 for (int i = 0; i < kRepeatCount; i++) { | 1080 for (int i = 0; i < kRepeatCount; i++) { |
| 1080 // Move the input focus to the first <input> element, where we should | 1081 // Move the input focus to the first <input> element, where we should |
| 1081 // activate IMEs. | 1082 // activate IMEs. |
| 1082 ExecuteJavaScriptForTests("document.getElementById('test1').focus();"); | 1083 ExecuteJavaScriptForTests("document.getElementById('test1').focus();"); |
| 1083 ProcessPendingMessages(); | 1084 base::RunLoop().RunUntilIdle(); |
| 1084 render_thread_->sink().ClearMessages(); | 1085 render_thread_->sink().ClearMessages(); |
| 1085 | 1086 |
| 1086 // Update the IME status and verify if our IME backend sends an IPC message | 1087 // Update the IME status and verify if our IME backend sends an IPC message |
| 1087 // to activate IMEs. | 1088 // to activate IMEs. |
| 1088 view()->UpdateTextInputState(); | 1089 view()->UpdateTextInputState(); |
| 1089 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); | 1090 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); |
| 1090 EXPECT_TRUE(msg != NULL); | 1091 EXPECT_TRUE(msg != NULL); |
| 1091 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); | 1092 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 1092 ViewHostMsg_TextInputStateChanged::Param params; | 1093 ViewHostMsg_TextInputStateChanged::Param params; |
| 1093 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); | 1094 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 1094 TextInputState p = std::get<0>(params); | 1095 TextInputState p = std::get<0>(params); |
| 1095 ui::TextInputType type = p.type; | 1096 ui::TextInputType type = p.type; |
| 1096 ui::TextInputMode input_mode = p.mode; | 1097 ui::TextInputMode input_mode = p.mode; |
| 1097 bool can_compose_inline = p.can_compose_inline; | 1098 bool can_compose_inline = p.can_compose_inline; |
| 1098 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type); | 1099 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type); |
| 1099 EXPECT_EQ(true, can_compose_inline); | 1100 EXPECT_EQ(true, can_compose_inline); |
| 1100 | 1101 |
| 1101 // Move the input focus to the second <input> element, where we should | 1102 // Move the input focus to the second <input> element, where we should |
| 1102 // de-activate IMEs. | 1103 // de-activate IMEs. |
| 1103 ExecuteJavaScriptForTests("document.getElementById('test2').focus();"); | 1104 ExecuteJavaScriptForTests("document.getElementById('test2').focus();"); |
| 1104 ProcessPendingMessages(); | 1105 base::RunLoop().RunUntilIdle(); |
| 1105 render_thread_->sink().ClearMessages(); | 1106 render_thread_->sink().ClearMessages(); |
| 1106 | 1107 |
| 1107 // Update the IME status and verify if our IME backend sends an IPC message | 1108 // Update the IME status and verify if our IME backend sends an IPC message |
| 1108 // to de-activate IMEs. | 1109 // to de-activate IMEs. |
| 1109 view()->UpdateTextInputState(); | 1110 view()->UpdateTextInputState(); |
| 1110 msg = render_thread_->sink().GetMessageAt(0); | 1111 msg = render_thread_->sink().GetMessageAt(0); |
| 1111 EXPECT_TRUE(msg != NULL); | 1112 EXPECT_TRUE(msg != NULL); |
| 1112 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); | 1113 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 1113 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); | 1114 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 1114 p = std::get<0>(params); | 1115 p = std::get<0>(params); |
| 1115 type = p.type; | 1116 type = p.type; |
| 1116 input_mode = p.mode; | 1117 input_mode = p.mode; |
| 1117 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type); | 1118 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type); |
| 1118 | 1119 |
| 1119 for (size_t i = 0; i < arraysize(kInputModeTestCases); i++) { | 1120 for (size_t i = 0; i < arraysize(kInputModeTestCases); i++) { |
| 1120 const InputModeTestCase* test_case = &kInputModeTestCases[i]; | 1121 const InputModeTestCase* test_case = &kInputModeTestCases[i]; |
| 1121 std::string javascript = | 1122 std::string javascript = |
| 1122 base::StringPrintf("document.getElementById('%s').focus();", | 1123 base::StringPrintf("document.getElementById('%s').focus();", |
| 1123 test_case->input_id); | 1124 test_case->input_id); |
| 1124 // Move the input focus to the target <input> element, where we should | 1125 // Move the input focus to the target <input> element, where we should |
| 1125 // activate IMEs. | 1126 // activate IMEs. |
| 1126 ExecuteJavaScriptAndReturnIntValue(base::ASCIIToUTF16(javascript), NULL); | 1127 ExecuteJavaScriptAndReturnIntValue(base::ASCIIToUTF16(javascript), NULL); |
| 1127 ProcessPendingMessages(); | 1128 base::RunLoop().RunUntilIdle(); |
| 1128 render_thread_->sink().ClearMessages(); | 1129 render_thread_->sink().ClearMessages(); |
| 1129 | 1130 |
| 1130 // Update the IME status and verify if our IME backend sends an IPC | 1131 // Update the IME status and verify if our IME backend sends an IPC |
| 1131 // message to activate IMEs. | 1132 // message to activate IMEs. |
| 1132 view()->UpdateTextInputState(); | 1133 view()->UpdateTextInputState(); |
| 1133 ProcessPendingMessages(); | 1134 base::RunLoop().RunUntilIdle(); |
| 1134 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); | 1135 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); |
| 1135 EXPECT_TRUE(msg != NULL); | 1136 EXPECT_TRUE(msg != NULL); |
| 1136 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); | 1137 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 1137 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); | 1138 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 1138 p = std::get<0>(params); | 1139 p = std::get<0>(params); |
| 1139 type = p.type; | 1140 type = p.type; |
| 1140 input_mode = p.mode; | 1141 input_mode = p.mode; |
| 1141 EXPECT_EQ(test_case->expected_mode, input_mode); | 1142 EXPECT_EQ(test_case->expected_mode, input_mode); |
| 1142 } | 1143 } |
| 1143 } | 1144 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1263 base::string16(), | 1264 base::string16(), |
| 1264 std::vector<blink::WebCompositionUnderline>(), | 1265 std::vector<blink::WebCompositionUnderline>(), |
| 1265 gfx::Range::InvalidRange(), | 1266 gfx::Range::InvalidRange(), |
| 1266 0, 0); | 1267 0, 0); |
| 1267 break; | 1268 break; |
| 1268 } | 1269 } |
| 1269 | 1270 |
| 1270 // Update the status of our IME back-end. | 1271 // Update the status of our IME back-end. |
| 1271 // TODO(hbono): we should verify messages to be sent from the back-end. | 1272 // TODO(hbono): we should verify messages to be sent from the back-end. |
| 1272 view()->UpdateTextInputState(); | 1273 view()->UpdateTextInputState(); |
| 1273 ProcessPendingMessages(); | 1274 base::RunLoop().RunUntilIdle(); |
| 1274 render_thread_->sink().ClearMessages(); | 1275 render_thread_->sink().ClearMessages(); |
| 1275 | 1276 |
| 1276 if (ime_message->result) { | 1277 if (ime_message->result) { |
| 1277 // Retrieve the content of this page and compare it with the expected | 1278 // Retrieve the content of this page and compare it with the expected |
| 1278 // result. | 1279 // result. |
| 1279 const int kMaxOutputCharacters = 128; | 1280 const int kMaxOutputCharacters = 128; |
| 1280 base::string16 output = WebFrameContentDumper::DumpWebViewAsText( | 1281 base::string16 output = WebFrameContentDumper::DumpWebViewAsText( |
| 1281 view()->GetWebView(), kMaxOutputCharacters) | 1282 view()->GetWebView(), kMaxOutputCharacters) |
| 1282 .Utf16(); | 1283 .Utf16(); |
| 1283 EXPECT_EQ(base::WideToUTF16(ime_message->result), output); | 1284 EXPECT_EQ(base::WideToUTF16(ime_message->result), output); |
| (...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2049 // override) are not comparable with the wall time (returned by the Blink API). | 2050 // override) are not comparable with the wall time (returned by the Blink API). |
| 2050 TEST_F(RenderViewImplTest, BrowserNavigationStartSanitized) { | 2051 TEST_F(RenderViewImplTest, BrowserNavigationStartSanitized) { |
| 2051 // Verify that a navigation that claims to have started in the future - 42 | 2052 // Verify that a navigation that claims to have started in the future - 42 |
| 2052 // days from now is *not* reported as one that starts in the future; as we | 2053 // days from now is *not* reported as one that starts in the future; as we |
| 2053 // sanitize the override allowing a maximum of ::Now(). | 2054 // sanitize the override allowing a maximum of ::Now(). |
| 2054 auto late_common_params = MakeCommonNavigationParams(TimeDelta::FromDays(42)); | 2055 auto late_common_params = MakeCommonNavigationParams(TimeDelta::FromDays(42)); |
| 2055 late_common_params.method = "POST"; | 2056 late_common_params.method = "POST"; |
| 2056 | 2057 |
| 2057 frame()->Navigate(late_common_params, StartNavigationParams(), | 2058 frame()->Navigate(late_common_params, StartNavigationParams(), |
| 2058 RequestNavigationParams()); | 2059 RequestNavigationParams()); |
| 2059 ProcessPendingMessages(); | 2060 base::RunLoop().RunUntilIdle(); |
| 2060 base::Time after_navigation = | 2061 base::Time after_navigation = |
| 2061 base::Time::Now() + base::TimeDelta::FromDays(1); | 2062 base::Time::Now() + base::TimeDelta::FromDays(1); |
| 2062 | 2063 |
| 2063 base::Time late_nav_reported_start = | 2064 base::Time late_nav_reported_start = |
| 2064 base::Time::FromDoubleT(GetMainFrame()->Performance().NavigationStart()); | 2065 base::Time::FromDoubleT(GetMainFrame()->Performance().NavigationStart()); |
| 2065 EXPECT_LE(late_nav_reported_start, after_navigation); | 2066 EXPECT_LE(late_nav_reported_start, after_navigation); |
| 2066 } | 2067 } |
| 2067 | 2068 |
| 2068 // Checks that a browser-initiated navigation in an initial document that has | 2069 // Checks that a browser-initiated navigation in an initial document that has |
| 2069 // been accessed does not use browser-side timestamp (there may be arbitrary | 2070 // been accessed does not use browser-side timestamp (there may be arbitrary |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2083 if (!IsBrowserSideNavigationEnabled()) | 2084 if (!IsBrowserSideNavigationEnabled()) |
| 2084 EXPECT_GT(std::get<2>(nav_params), common_params.navigation_start); | 2085 EXPECT_GT(std::get<2>(nav_params), common_params.navigation_start); |
| 2085 else | 2086 else |
| 2086 EXPECT_EQ(common_params.navigation_start, std::get<2>(nav_params)); | 2087 EXPECT_EQ(common_params.navigation_start, std::get<2>(nav_params)); |
| 2087 } | 2088 } |
| 2088 | 2089 |
| 2089 TEST_F(RenderViewImplTest, NavigationStartForReload) { | 2090 TEST_F(RenderViewImplTest, NavigationStartForReload) { |
| 2090 const char url_string[] = "data:text/html,<div>Page</div>"; | 2091 const char url_string[] = "data:text/html,<div>Page</div>"; |
| 2091 // Navigate once, then reload. | 2092 // Navigate once, then reload. |
| 2092 LoadHTML(url_string); | 2093 LoadHTML(url_string); |
| 2093 ProcessPendingMessages(); | 2094 base::RunLoop().RunUntilIdle(); |
| 2094 render_thread_->sink().ClearMessages(); | 2095 render_thread_->sink().ClearMessages(); |
| 2095 | 2096 |
| 2096 CommonNavigationParams common_params; | 2097 CommonNavigationParams common_params; |
| 2097 common_params.url = GURL(url_string); | 2098 common_params.url = GURL(url_string); |
| 2098 common_params.navigation_type = | 2099 common_params.navigation_type = |
| 2099 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; | 2100 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL; |
| 2100 common_params.transition = ui::PAGE_TRANSITION_RELOAD; | 2101 common_params.transition = ui::PAGE_TRANSITION_RELOAD; |
| 2101 | 2102 |
| 2102 // The browser navigation_start should not be used because beforeunload will | 2103 // The browser navigation_start should not be used because beforeunload will |
| 2103 // be fired during Navigate. | 2104 // be fired during Navigate. |
| (...skipping 13 matching lines...) Expand all Loading... |
| 2117 EXPECT_EQ(common_params.navigation_start, std::get<2>(host_nav_params)); | 2118 EXPECT_EQ(common_params.navigation_start, std::get<2>(host_nav_params)); |
| 2118 } | 2119 } |
| 2119 } | 2120 } |
| 2120 | 2121 |
| 2121 TEST_F(RenderViewImplTest, NavigationStartForSameProcessHistoryNavigation) { | 2122 TEST_F(RenderViewImplTest, NavigationStartForSameProcessHistoryNavigation) { |
| 2122 LoadHTML("<div id=pagename>Page A</div>"); | 2123 LoadHTML("<div id=pagename>Page A</div>"); |
| 2123 LoadHTML("<div id=pagename>Page B</div>"); | 2124 LoadHTML("<div id=pagename>Page B</div>"); |
| 2124 PageState back_state = GetCurrentPageState(); | 2125 PageState back_state = GetCurrentPageState(); |
| 2125 LoadHTML("<div id=pagename>Page C</div>"); | 2126 LoadHTML("<div id=pagename>Page C</div>"); |
| 2126 PageState forward_state = GetCurrentPageState(); | 2127 PageState forward_state = GetCurrentPageState(); |
| 2127 ProcessPendingMessages(); | 2128 base::RunLoop().RunUntilIdle(); |
| 2128 render_thread_->sink().ClearMessages(); | 2129 render_thread_->sink().ClearMessages(); |
| 2129 | 2130 |
| 2130 // Go back. | 2131 // Go back. |
| 2131 CommonNavigationParams common_params_back; | 2132 CommonNavigationParams common_params_back; |
| 2132 common_params_back.url = | 2133 common_params_back.url = |
| 2133 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>"); | 2134 GURL("data:text/html;charset=utf-8,<div id=pagename>Page B</div>"); |
| 2134 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK; | 2135 common_params_back.transition = ui::PAGE_TRANSITION_FORWARD_BACK; |
| 2135 common_params_back.navigation_type = | 2136 common_params_back.navigation_type = |
| 2136 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; | 2137 FrameMsg_Navigate_Type::HISTORY_DIFFERENT_DOCUMENT; |
| 2137 GoToOffsetWithParams(-1, back_state, common_params_back, | 2138 GoToOffsetWithParams(-1, back_state, common_params_back, |
| (...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2590 ExpectPauseAndResume(3); | 2591 ExpectPauseAndResume(3); |
| 2591 blink::WebScriptSource source2( | 2592 blink::WebScriptSource source2( |
| 2592 WebString::FromUTF8("function func2() { func1(); }; func2();")); | 2593 WebString::FromUTF8("function func2() { func1(); }; func2();")); |
| 2593 frame()->GetWebFrame()->ExecuteScriptInIsolatedWorld(17, &source2, 1); | 2594 frame()->GetWebFrame()->ExecuteScriptInIsolatedWorld(17, &source2, 1); |
| 2594 | 2595 |
| 2595 EXPECT_FALSE(IsPaused()); | 2596 EXPECT_FALSE(IsPaused()); |
| 2596 Detach(); | 2597 Detach(); |
| 2597 } | 2598 } |
| 2598 | 2599 |
| 2599 } // namespace content | 2600 } // namespace content |
| OLD | NEW |