| 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/location.h" | 8 #include "base/location.h" |
| 9 #include "base/memory/shared_memory.h" | 9 #include "base/memory/shared_memory.h" |
| 10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
| (...skipping 951 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 962 const int kRepeatCount = 10; | 962 const int kRepeatCount = 10; |
| 963 for (int i = 0; i < kRepeatCount; i++) { | 963 for (int i = 0; i < kRepeatCount; i++) { |
| 964 // Move the input focus to the first <input> element, where we should | 964 // Move the input focus to the first <input> element, where we should |
| 965 // activate IMEs. | 965 // activate IMEs. |
| 966 ExecuteJavaScript("document.getElementById('test1').focus();"); | 966 ExecuteJavaScript("document.getElementById('test1').focus();"); |
| 967 ProcessPendingMessages(); | 967 ProcessPendingMessages(); |
| 968 render_thread_->sink().ClearMessages(); | 968 render_thread_->sink().ClearMessages(); |
| 969 | 969 |
| 970 // Update the IME status and verify if our IME backend sends an IPC message | 970 // Update the IME status and verify if our IME backend sends an IPC message |
| 971 // to activate IMEs. | 971 // to activate IMEs. |
| 972 view()->UpdateTextInputType(); | 972 view()->UpdateTextInputState( |
| 973 RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); |
| 973 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); | 974 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); |
| 974 EXPECT_TRUE(msg != NULL); | 975 EXPECT_TRUE(msg != NULL); |
| 975 EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); | 976 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 976 ViewHostMsg_TextInputTypeChanged::Param params; | 977 ViewHostMsg_TextInputStateChanged::Param params; |
| 977 ViewHostMsg_TextInputTypeChanged::Read(msg, ¶ms); | 978 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 978 ui::TextInputType type = base::get<0>(params); | 979 ViewHostMsg_TextInputState_Params p = base::get<0>(params); |
| 979 ui::TextInputMode input_mode = base::get<1>(params); | 980 ui::TextInputType type = p.type; |
| 980 bool can_compose_inline = base::get<2>(params); | 981 ui::TextInputMode input_mode = p.mode; |
| 982 bool can_compose_inline = p.can_compose_inline; |
| 981 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type); | 983 EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, type); |
| 982 EXPECT_EQ(true, can_compose_inline); | 984 EXPECT_EQ(true, can_compose_inline); |
| 983 | 985 |
| 984 // Move the input focus to the second <input> element, where we should | 986 // Move the input focus to the second <input> element, where we should |
| 985 // de-activate IMEs. | 987 // de-activate IMEs. |
| 986 ExecuteJavaScript("document.getElementById('test2').focus();"); | 988 ExecuteJavaScript("document.getElementById('test2').focus();"); |
| 987 ProcessPendingMessages(); | 989 ProcessPendingMessages(); |
| 988 render_thread_->sink().ClearMessages(); | 990 render_thread_->sink().ClearMessages(); |
| 989 | 991 |
| 990 // Update the IME status and verify if our IME backend sends an IPC message | 992 // Update the IME status and verify if our IME backend sends an IPC message |
| 991 // to de-activate IMEs. | 993 // to de-activate IMEs. |
| 992 view()->UpdateTextInputType(); | 994 view()->UpdateTextInputState( |
| 995 RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); |
| 993 msg = render_thread_->sink().GetMessageAt(0); | 996 msg = render_thread_->sink().GetMessageAt(0); |
| 994 EXPECT_TRUE(msg != NULL); | 997 EXPECT_TRUE(msg != NULL); |
| 995 EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); | 998 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 996 ViewHostMsg_TextInputTypeChanged::Read(msg, & params); | 999 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 997 type = base::get<0>(params); | 1000 p = base::get<0>(params); |
| 998 input_mode = base::get<1>(params); | 1001 type = p.type; |
| 1002 input_mode = p.mode; |
| 999 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type); | 1003 EXPECT_EQ(ui::TEXT_INPUT_TYPE_PASSWORD, type); |
| 1000 | 1004 |
| 1001 for (size_t i = 0; i < arraysize(kInputModeTestCases); i++) { | 1005 for (size_t i = 0; i < arraysize(kInputModeTestCases); i++) { |
| 1002 const InputModeTestCase* test_case = &kInputModeTestCases[i]; | 1006 const InputModeTestCase* test_case = &kInputModeTestCases[i]; |
| 1003 std::string javascript = | 1007 std::string javascript = |
| 1004 base::StringPrintf("document.getElementById('%s').focus();", | 1008 base::StringPrintf("document.getElementById('%s').focus();", |
| 1005 test_case->input_id); | 1009 test_case->input_id); |
| 1006 // Move the input focus to the target <input> element, where we should | 1010 // Move the input focus to the target <input> element, where we should |
| 1007 // activate IMEs. | 1011 // activate IMEs. |
| 1008 ExecuteJavaScriptAndReturnIntValue(base::ASCIIToUTF16(javascript), NULL); | 1012 ExecuteJavaScriptAndReturnIntValue(base::ASCIIToUTF16(javascript), NULL); |
| 1009 ProcessPendingMessages(); | 1013 ProcessPendingMessages(); |
| 1010 render_thread_->sink().ClearMessages(); | 1014 render_thread_->sink().ClearMessages(); |
| 1011 | 1015 |
| 1012 // Update the IME status and verify if our IME backend sends an IPC | 1016 // Update the IME status and verify if our IME backend sends an IPC |
| 1013 // message to activate IMEs. | 1017 // message to activate IMEs. |
| 1014 view()->UpdateTextInputType(); | 1018 view()->UpdateTextInputState( |
| 1019 RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); |
| 1015 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); | 1020 const IPC::Message* msg = render_thread_->sink().GetMessageAt(0); |
| 1016 EXPECT_TRUE(msg != NULL); | 1021 EXPECT_TRUE(msg != NULL); |
| 1017 EXPECT_EQ(ViewHostMsg_TextInputTypeChanged::ID, msg->type()); | 1022 EXPECT_EQ(ViewHostMsg_TextInputStateChanged::ID, msg->type()); |
| 1018 ViewHostMsg_TextInputTypeChanged::Read(msg, & params); | 1023 ViewHostMsg_TextInputStateChanged::Read(msg, ¶ms); |
| 1019 type = base::get<0>(params); | 1024 p = base::get<0>(params); |
| 1020 input_mode = base::get<1>(params); | 1025 type = p.type; |
| 1026 input_mode = p.mode; |
| 1021 EXPECT_EQ(test_case->expected_mode, input_mode); | 1027 EXPECT_EQ(test_case->expected_mode, input_mode); |
| 1022 } | 1028 } |
| 1023 } | 1029 } |
| 1024 } | 1030 } |
| 1025 | 1031 |
| 1026 // Test that our IME backend can compose CJK words. | 1032 // Test that our IME backend can compose CJK words. |
| 1027 // Our IME front-end sends many platform-independent messages to the IME backend | 1033 // Our IME front-end sends many platform-independent messages to the IME backend |
| 1028 // while it composes CJK words. This test sends the minimal messages captured | 1034 // while it composes CJK words. This test sends the minimal messages captured |
| 1029 // on my local environment directly to the IME backend to verify if the backend | 1035 // on my local environment directly to the IME backend to verify if the backend |
| 1030 // can compose CJK words without any problems. | 1036 // can compose CJK words without any problems. |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1137 case IME_CANCELCOMPOSITION: | 1143 case IME_CANCELCOMPOSITION: |
| 1138 view()->OnImeSetComposition( | 1144 view()->OnImeSetComposition( |
| 1139 base::string16(), | 1145 base::string16(), |
| 1140 std::vector<blink::WebCompositionUnderline>(), | 1146 std::vector<blink::WebCompositionUnderline>(), |
| 1141 0, 0); | 1147 0, 0); |
| 1142 break; | 1148 break; |
| 1143 } | 1149 } |
| 1144 | 1150 |
| 1145 // Update the status of our IME back-end. | 1151 // Update the status of our IME back-end. |
| 1146 // TODO(hbono): we should verify messages to be sent from the back-end. | 1152 // TODO(hbono): we should verify messages to be sent from the back-end. |
| 1147 view()->UpdateTextInputType(); | 1153 view()->UpdateTextInputState( |
| 1154 RenderWidget::NO_SHOW_IME, RenderWidget::FROM_NON_IME); |
| 1148 ProcessPendingMessages(); | 1155 ProcessPendingMessages(); |
| 1149 render_thread_->sink().ClearMessages(); | 1156 render_thread_->sink().ClearMessages(); |
| 1150 | 1157 |
| 1151 if (ime_message->result) { | 1158 if (ime_message->result) { |
| 1152 // Retrieve the content of this page and compare it with the expected | 1159 // Retrieve the content of this page and compare it with the expected |
| 1153 // result. | 1160 // result. |
| 1154 const int kMaxOutputCharacters = 128; | 1161 const int kMaxOutputCharacters = 128; |
| 1155 base::string16 output = | 1162 base::string16 output = |
| 1156 GetMainFrame()->contentAsText(kMaxOutputCharacters); | 1163 GetMainFrame()->contentAsText(kMaxOutputCharacters); |
| 1157 EXPECT_EQ(base::WideToUTF16(ime_message->result), output); | 1164 EXPECT_EQ(base::WideToUTF16(ime_message->result), output); |
| (...skipping 782 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1940 view()->handling_input_event_ = true; | 1947 view()->handling_input_event_ = true; |
| 1941 ExecuteJavaScript("document.getElementById('test').focus();"); | 1948 ExecuteJavaScript("document.getElementById('test').focus();"); |
| 1942 | 1949 |
| 1943 bool is_input_type_called = false; | 1950 bool is_input_type_called = false; |
| 1944 bool is_selection_called = false; | 1951 bool is_selection_called = false; |
| 1945 size_t last_input_type = 0; | 1952 size_t last_input_type = 0; |
| 1946 size_t last_selection = 0; | 1953 size_t last_selection = 0; |
| 1947 | 1954 |
| 1948 for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { | 1955 for (size_t i = 0; i < render_thread_->sink().message_count(); ++i) { |
| 1949 const uint32 type = render_thread_->sink().GetMessageAt(i)->type(); | 1956 const uint32 type = render_thread_->sink().GetMessageAt(i)->type(); |
| 1950 if (type == ViewHostMsg_TextInputTypeChanged::ID) { | 1957 if (type == ViewHostMsg_TextInputStateChanged::ID) { |
| 1951 is_input_type_called = true; | 1958 is_input_type_called = true; |
| 1952 last_input_type = i; | 1959 last_input_type = i; |
| 1953 } else if (type == ViewHostMsg_SelectionChanged::ID) { | 1960 } else if (type == ViewHostMsg_SelectionChanged::ID) { |
| 1954 is_selection_called = true; | 1961 is_selection_called = true; |
| 1955 last_selection = i; | 1962 last_selection = i; |
| 1956 } | 1963 } |
| 1957 } | 1964 } |
| 1958 | 1965 |
| 1959 EXPECT_TRUE(is_input_type_called); | 1966 EXPECT_TRUE(is_input_type_called); |
| 1960 EXPECT_TRUE(is_selection_called); | 1967 EXPECT_TRUE(is_selection_called); |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2352 FROM_HERE, | 2359 FROM_HERE, |
| 2353 base::Bind(&DevToolsAgentTest::CloseWhilePaused, base::Unretained(this))); | 2360 base::Bind(&DevToolsAgentTest::CloseWhilePaused, base::Unretained(this))); |
| 2354 ExecuteJavaScript("debugger;"); | 2361 ExecuteJavaScript("debugger;"); |
| 2355 | 2362 |
| 2356 // CloseWhilePaused should resume execution and continue here. | 2363 // CloseWhilePaused should resume execution and continue here. |
| 2357 EXPECT_FALSE(IsPaused()); | 2364 EXPECT_FALSE(IsPaused()); |
| 2358 Detach(); | 2365 Detach(); |
| 2359 } | 2366 } |
| 2360 | 2367 |
| 2361 } // namespace content | 2368 } // namespace content |
| OLD | NEW |