Index: chrome/renderer/autofill/page_click_tracker_browsertest.cc |
diff --git a/chrome/renderer/autofill/page_click_tracker_browsertest.cc b/chrome/renderer/autofill/page_click_tracker_browsertest.cc |
index 6495254487a2e267dd8c4f51051748eb44aba594..84231f682f5c6c2da8d012cd6d1711f032f64dcc 100644 |
--- a/chrome/renderer/autofill/page_click_tracker_browsertest.cc |
+++ b/chrome/renderer/autofill/page_click_tracker_browsertest.cc |
@@ -8,11 +8,13 @@ |
#include "components/autofill/content/renderer/page_click_tracker.h" |
#include "content/public/renderer/render_view.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/WebKit/public/platform/WebFloatPoint.h" |
+#include "third_party/WebKit/public/platform/WebSize.h" |
#include "third_party/WebKit/public/web/WebDocument.h" |
#include "third_party/WebKit/public/web/WebInputElement.h" |
+#include "third_party/WebKit/public/web/WebSettings.h" |
#include "third_party/WebKit/public/web/WebTextAreaElement.h" |
#include "third_party/WebKit/public/web/WebView.h" |
-#include "third_party/WebKit/public/platform/WebSize.h" |
#include "ui/events/keycodes/keyboard_codes.h" |
namespace autofill { |
@@ -50,12 +52,17 @@ class PageClickTrackerTest : public ChromeRenderViewTest { |
// Rather than make it do so for the test, we create a new object. |
page_click_tracker_.reset(new PageClickTracker(view_, &test_listener_)); |
+ // Must be set before loading HTML. |
+ view_->GetWebView()->setDefaultPageScaleLimits(1, 4); |
+ view_->GetWebView()->settings()->setPinchVirtualViewportEnabled(true); |
+ |
LoadHTML("<form>" |
" <input type='text' id='text_1'></input><br>" |
" <input type='text' id='text_2'></input><br>" |
" <textarea id='textarea_1'></textarea><br>" |
" <textarea id='textarea_2'></textarea><br>" |
" <input type='button' id='button'></input><br>" |
+ " <input type='button' id='button_2' disabled></input><br>" |
"</form>"); |
GetWebWidget()->resize(blink::WebSize(500, 500)); |
GetWebWidget()->setFocus(true); |
@@ -64,6 +71,10 @@ class PageClickTrackerTest : public ChromeRenderViewTest { |
textarea_ = document.getElementById("textarea_1"); |
ASSERT_FALSE(text_.isNull()); |
ASSERT_FALSE(textarea_.isNull()); |
+ |
+ // Enable show-ime event when element is focused by indicating that a user |
+ // gesture has been processed since load. |
+ EXPECT_TRUE(SimulateElementClick("button")); |
} |
void TearDown() override { |
@@ -74,29 +85,6 @@ class PageClickTrackerTest : public ChromeRenderViewTest { |
ChromeRenderViewTest::TearDown(); |
} |
- // Simulates a click on the given element and then waits for the stack |
- // to unwind. |
- void SendElementClick(const std::string& element_id) { |
- EXPECT_TRUE(SimulateElementClick(element_id)); |
- ProcessPendingMessages(); |
- } |
- |
- // Send all the messages required for a complete key press. |
- void SendKeyPress(int key_code) { |
- blink::WebKeyboardEvent keyboard_event; |
- keyboard_event.windowsKeyCode = key_code; |
- keyboard_event.setKeyIdentifierFromWindowsKeyCode(); |
- |
- keyboard_event.type = blink::WebInputEvent::RawKeyDown; |
- SendWebKeyboardEvent(keyboard_event); |
- |
- keyboard_event.type = blink::WebInputEvent::Char; |
- SendWebKeyboardEvent(keyboard_event); |
- |
- keyboard_event.type = blink::WebInputEvent::KeyUp; |
- SendWebKeyboardEvent(keyboard_event); |
- } |
- |
scoped_ptr<PageClickTracker> page_click_tracker_; |
TestPageClickListener test_listener_; |
blink::WebElement text_; |
@@ -108,43 +96,96 @@ class PageClickTrackerTest : public ChromeRenderViewTest { |
TEST_F(PageClickTrackerTest, PageClickTrackerInputClicked) { |
EXPECT_NE(text_, text_.document().focusedElement()); |
// Click the text field once. |
- SendElementClick("text_1"); |
+ EXPECT_TRUE(SimulateElementClick("text_1")); |
EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_FALSE(test_listener_.was_focused_); |
EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); |
test_listener_.ClearResults(); |
// Click the text field again to test that was_focused_ is set correctly. |
- SendElementClick("text_1"); |
+ EXPECT_TRUE(SimulateElementClick("text_1")); |
EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_TRUE(test_listener_.was_focused_); |
EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); |
test_listener_.ClearResults(); |
// Click the button, no notification should happen (this is not a text-input). |
- SendElementClick("button"); |
+ EXPECT_TRUE(SimulateElementClick("button")); |
EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
} |
+TEST_F(PageClickTrackerTest, PageClickTrackerInputFocusedAndClicked) { |
+ // Focus the text field without a click. |
+ ExecuteJavaScript("document.getElementById('text_1').focus();"); |
+ EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click the focused text field to test that was_focused_ is set correctly. |
+ EXPECT_TRUE(SimulateElementClick("text_1")); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
+ EXPECT_TRUE(test_listener_.was_focused_); |
+ EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); |
+} |
+ |
// Tests that PageClickTracker does notify correctly when a textarea |
// node is clicked. |
TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaClicked) { |
// Click the textarea field once. |
- SendElementClick("textarea_1"); |
+ EXPECT_TRUE(SimulateElementClick("textarea_1")); |
EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_FALSE(test_listener_.was_focused_); |
EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); |
test_listener_.ClearResults(); |
// Click the textarea field again to test that was_focused_ is set correctly. |
- SendElementClick("textarea_1"); |
+ EXPECT_TRUE(SimulateElementClick("textarea_1")); |
EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_TRUE(test_listener_.was_focused_); |
EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); |
test_listener_.ClearResults(); |
// Click the button, no notification should happen (this is not a text-input). |
- SendElementClick("button"); |
+ EXPECT_TRUE(SimulateElementClick("button")); |
+ EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
+} |
+ |
+TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaFocusedAndClicked) { |
+ // Focus the textarea without a click. |
+ ExecuteJavaScript("document.getElementById('textarea_1').focus();"); |
+ EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click the focused text field to test that was_focused_ is set correctly. |
+ EXPECT_TRUE(SimulateElementClick("textarea_1")); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
+ EXPECT_TRUE(test_listener_.was_focused_); |
+ EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); |
+ test_listener_.ClearResults(); |
+} |
+ |
+TEST_F(PageClickTrackerTest, PageClickTrackerScaledTextareaClicked) { |
+ EXPECT_NE(text_, text_.document().focusedElement()); |
+ view_->GetWebView()->setPageScaleFactor(3); |
+ view_->GetWebView()->setPinchViewportOffset(blink::WebFloatPoint(50, 50)); |
+ |
+ // Click textarea_1. |
+ SimulatePointClick(gfx::Point(30, 30)); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
+ EXPECT_FALSE(test_listener_.was_focused_); |
+ EXPECT_TRUE(textarea_ == test_listener_.form_control_element_clicked_); |
+} |
+ |
+TEST_F(PageClickTrackerTest, PageClickTrackerDisabledInputClickedNoEvent) { |
+ EXPECT_NE(text_, text_.document().focusedElement()); |
+ // Click the text field once. |
+ EXPECT_TRUE(SimulateElementClick("text_1")); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
+ EXPECT_FALSE(test_listener_.was_focused_); |
+ EXPECT_TRUE(text_ == test_listener_.form_control_element_clicked_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click the disabled element. |
+ EXPECT_TRUE(SimulateElementClick("button_2")); |
EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
} |