Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Side by Side Diff: chrome/renderer/autofill/page_click_tracker_browsertest.cc

Issue 715733002: [Android] Show autofill popup after animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/test/base/chrome_render_view_test.h" 6 #include "chrome/test/base/chrome_render_view_test.h"
7 #include "components/autofill/content/renderer/page_click_listener.h" 7 #include "components/autofill/content/renderer/page_click_listener.h"
8 #include "components/autofill/content/renderer/page_click_tracker.h" 8 #include "components/autofill/content/renderer/page_click_tracker.h"
9 #include "content/public/renderer/render_view.h" 9 #include "content/public/renderer/render_view.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
11 #include "third_party/WebKit/public/platform/WebFloatPoint.h"
12 #include "third_party/WebKit/public/platform/WebSize.h"
11 #include "third_party/WebKit/public/web/WebDocument.h" 13 #include "third_party/WebKit/public/web/WebDocument.h"
12 #include "third_party/WebKit/public/web/WebInputElement.h" 14 #include "third_party/WebKit/public/web/WebInputElement.h"
15 #include "third_party/WebKit/public/web/WebSettings.h"
13 #include "third_party/WebKit/public/web/WebTextAreaElement.h" 16 #include "third_party/WebKit/public/web/WebTextAreaElement.h"
14 #include "third_party/WebKit/public/web/WebView.h" 17 #include "third_party/WebKit/public/web/WebView.h"
15 #include "third_party/WebKit/public/platform/WebSize.h"
16 #include "ui/events/keycodes/keyboard_codes.h" 18 #include "ui/events/keycodes/keyboard_codes.h"
17 19
18 namespace autofill { 20 namespace autofill {
19 21
20 class TestPageClickListener : public PageClickListener { 22 class TestPageClickListener : public PageClickListener {
21 public: 23 public:
22 TestPageClickListener() 24 TestPageClickListener()
23 : form_control_element_clicked_called_(false), 25 : form_control_element_clicked_called_(false),
24 was_focused_(false) {} 26 was_focused_(false) {}
25 27
(...skipping 17 matching lines...) Expand all
43 45
44 class PageClickTrackerTest : public ChromeRenderViewTest { 46 class PageClickTrackerTest : public ChromeRenderViewTest {
45 protected: 47 protected:
46 void SetUp() override { 48 void SetUp() override {
47 ChromeRenderViewTest::SetUp(); 49 ChromeRenderViewTest::SetUp();
48 50
49 // RenderView creates PageClickTracker but it doesn't keep it around. 51 // RenderView creates PageClickTracker but it doesn't keep it around.
50 // Rather than make it do so for the test, we create a new object. 52 // Rather than make it do so for the test, we create a new object.
51 page_click_tracker_.reset(new PageClickTracker(view_, &test_listener_)); 53 page_click_tracker_.reset(new PageClickTracker(view_, &test_listener_));
52 54
55 // Must be set before loading HTML.
56 view_->GetWebView()->setDefaultPageScaleLimits(1, 4);
57 view_->GetWebView()->settings()->setPinchVirtualViewportEnabled(true);
58
53 LoadHTML("<form>" 59 LoadHTML("<form>"
54 " <input type='text' id='text_1'></input><br>" 60 " <input type='text' id='text_1'></input><br>"
55 " <input type='text' id='text_2'></input><br>" 61 " <input type='text' id='text_2'></input><br>"
56 " <textarea id='textarea_1'></textarea><br>" 62 " <textarea id='textarea_1'></textarea><br>"
57 " <textarea id='textarea_2'></textarea><br>" 63 " <textarea id='textarea_2'></textarea><br>"
58 " <input type='button' id='button'></input><br>" 64 " <input type='button' id='button'></input><br>"
65 " <input type='button' id='button_2' disabled></input><br>"
59 "</form>"); 66 "</form>");
60 GetWebWidget()->resize(blink::WebSize(500, 500)); 67 GetWebWidget()->resize(blink::WebSize(500, 500));
61 GetWebWidget()->setFocus(true); 68 GetWebWidget()->setFocus(true);
62 blink::WebDocument document = view_->GetWebView()->mainFrame()->document(); 69 blink::WebDocument document = view_->GetWebView()->mainFrame()->document();
63 text_ = document.getElementById("text_1"); 70 text_ = document.getElementById("text_1");
64 textarea_ = document.getElementById("textarea_1"); 71 textarea_ = document.getElementById("textarea_1");
65 ASSERT_FALSE(text_.isNull()); 72 ASSERT_FALSE(text_.isNull());
66 ASSERT_FALSE(textarea_.isNull()); 73 ASSERT_FALSE(textarea_.isNull());
74
75 // Enable show-ime event when element is focused by indicating that a user
76 // gesture has been processed since load.
77 EXPECT_TRUE(SimulateElementClick("button"));
67 } 78 }
68 79
69 void TearDown() override { 80 void TearDown() override {
70 text_.reset(); 81 text_.reset();
71 textarea_.reset(); 82 textarea_.reset();
72 test_listener_.ClearResults(); 83 test_listener_.ClearResults();
73 page_click_tracker_.reset(); 84 page_click_tracker_.reset();
74 ChromeRenderViewTest::TearDown(); 85 ChromeRenderViewTest::TearDown();
75 } 86 }
76 87
77 // Simulates a click on the given element and then waits for the stack
78 // to unwind.
79 void SendElementClick(const std::string& element_id) {
80 EXPECT_TRUE(SimulateElementClick(element_id));
81 ProcessPendingMessages();
82 }
83
84 // Send all the messages required for a complete key press.
85 void SendKeyPress(int key_code) {
86 blink::WebKeyboardEvent keyboard_event;
87 keyboard_event.windowsKeyCode = key_code;
88 keyboard_event.setKeyIdentifierFromWindowsKeyCode();
89
90 keyboard_event.type = blink::WebInputEvent::RawKeyDown;
91 SendWebKeyboardEvent(keyboard_event);
92
93 keyboard_event.type = blink::WebInputEvent::Char;
94 SendWebKeyboardEvent(keyboard_event);
95
96 keyboard_event.type = blink::WebInputEvent::KeyUp;
97 SendWebKeyboardEvent(keyboard_event);
98 }
99
100 scoped_ptr<PageClickTracker> page_click_tracker_; 88 scoped_ptr<PageClickTracker> page_click_tracker_;
101 TestPageClickListener test_listener_; 89 TestPageClickListener test_listener_;
102 blink::WebElement text_; 90 blink::WebElement text_;
103 blink::WebElement textarea_; 91 blink::WebElement textarea_;
104 }; 92 };
105 93
106 // Tests that PageClickTracker does notify correctly when an input 94 // Tests that PageClickTracker does notify correctly when an input
107 // node is clicked. 95 // node is clicked.
108 TEST_F(PageClickTrackerTest, PageClickTrackerInputClicked) { 96 TEST_F(PageClickTrackerTest, PageClickTrackerInputClicked) {
109 EXPECT_NE(text_, text_.document().focusedElement()); 97 EXPECT_NE(text_, text_.document().focusedElement());
110 // Click the text field once. 98 // Click the text field once.
111 SendElementClick("text_1"); 99 EXPECT_TRUE(SimulateElementClick("text_1"));
112 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); 100 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
113 EXPECT_FALSE(test_listener_.was_focused_); 101 EXPECT_FALSE(test_listener_.was_focused_);
114 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); 102 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_);
115 test_listener_.ClearResults(); 103 test_listener_.ClearResults();
116 104
117 // Click the text field again to test that was_focused_ is set correctly. 105 // Click the text field again to test that was_focused_ is set correctly.
118 SendElementClick("text_1"); 106 EXPECT_TRUE(SimulateElementClick("text_1"));
119 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); 107 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
120 EXPECT_TRUE(test_listener_.was_focused_); 108 EXPECT_TRUE(test_listener_.was_focused_);
121 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); 109 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_);
122 test_listener_.ClearResults(); 110 test_listener_.ClearResults();
123 111
124 // Click the button, no notification should happen (this is not a text-input). 112 // Click the button, no notification should happen (this is not a text-input).
125 SendElementClick("button"); 113 EXPECT_TRUE(SimulateElementClick("button"));
126 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); 114 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_);
127 } 115 }
128 116
117 TEST_F(PageClickTrackerTest, PageClickTrackerInputFocusedAndClicked) {
118 // Focus the text field without a click.
119 ExecuteJavaScript("document.getElementById('text_1').focus();");
120 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_);
121 test_listener_.ClearResults();
122
123 // Click the focused text field to test that was_focused_ is set correctly.
124 EXPECT_TRUE(SimulateElementClick("text_1"));
125 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
126 EXPECT_TRUE(test_listener_.was_focused_);
127 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_);
128 }
129
129 // Tests that PageClickTracker does notify correctly when a textarea 130 // Tests that PageClickTracker does notify correctly when a textarea
130 // node is clicked. 131 // node is clicked.
131 TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaClicked) { 132 TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaClicked) {
132 // Click the textarea field once. 133 // Click the textarea field once.
133 SendElementClick("textarea_1"); 134 EXPECT_TRUE(SimulateElementClick("textarea_1"));
134 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); 135 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
135 EXPECT_FALSE(test_listener_.was_focused_); 136 EXPECT_FALSE(test_listener_.was_focused_);
136 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); 137 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_);
137 test_listener_.ClearResults(); 138 test_listener_.ClearResults();
138 139
139 // Click the textarea field again to test that was_focused_ is set correctly. 140 // Click the textarea field again to test that was_focused_ is set correctly.
140 SendElementClick("textarea_1"); 141 EXPECT_TRUE(SimulateElementClick("textarea_1"));
141 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); 142 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
142 EXPECT_TRUE(test_listener_.was_focused_); 143 EXPECT_TRUE(test_listener_.was_focused_);
143 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); 144 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_);
144 test_listener_.ClearResults(); 145 test_listener_.ClearResults();
145 146
146 // Click the button, no notification should happen (this is not a text-input). 147 // Click the button, no notification should happen (this is not a text-input).
147 SendElementClick("button"); 148 EXPECT_TRUE(SimulateElementClick("button"));
148 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); 149 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_);
149 } 150 }
150 151
152 TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaFocusedAndClicked) {
153 // Focus the textarea without a click.
154 ExecuteJavaScript("document.getElementById('textarea_1').focus();");
155 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_);
156 test_listener_.ClearResults();
157
158 // Click the focused text field to test that was_focused_ is set correctly.
159 EXPECT_TRUE(SimulateElementClick("textarea_1"));
160 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
161 EXPECT_TRUE(test_listener_.was_focused_);
162 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_);
163 test_listener_.ClearResults();
164 }
165
166 TEST_F(PageClickTrackerTest, PageClickTrackerScaledTextareaClicked) {
167 EXPECT_NE(text_, text_.document().focusedElement());
168 view_->GetWebView()->setPageScaleFactor(3);
169 view_->GetWebView()->setPinchViewportOffset(blink::WebFloatPoint(50, 50));
170
171 // Click textarea_1.
172 SimulatePointClick(gfx::Point(30, 30));
173 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
174 EXPECT_FALSE(test_listener_.was_focused_);
175 EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_);
176 }
177
178 TEST_F(PageClickTrackerTest, PageClickTrackerDisabledInputClickedNoEvent) {
179 EXPECT_NE(text_, text_.document().focusedElement());
180 // Click the text field once.
181 EXPECT_TRUE(SimulateElementClick("text_1"));
182 EXPECT_TRUE(test_listener_.form_control_element_clicked_called_);
183 EXPECT_FALSE(test_listener_.was_focused_);
184 EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_);
185 test_listener_.ClearResults();
186
187 // Click the disabled element.
188 EXPECT_TRUE(SimulateElementClick("button_2"));
189 EXPECT_FALSE(test_listener_.form_control_element_clicked_called_);
190 }
191
151 } // namespace autofill 192 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698