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 b549615ff963efc00a9a2a595f6546fbe8a2d9fb..4c5c818808d97c8079c704f01ff14897d7032451 100644 |
--- a/chrome/renderer/autofill/page_click_tracker_browsertest.cc |
+++ b/chrome/renderer/autofill/page_click_tracker_browsertest.cc |
@@ -10,6 +10,7 @@ |
#include "testing/gtest/include/gtest/gtest.h" |
#include "third_party/WebKit/public/web/WebDocument.h" |
#include "third_party/WebKit/public/web/WebInputElement.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" |
@@ -19,38 +20,34 @@ namespace autofill { |
class TestPageClickListener : public PageClickListener { |
public: |
TestPageClickListener() |
- : input_element_clicked_called_(false), |
- input_element_lost_focus_called_(false), |
- was_focused_(false), |
- is_focused_(false) { |
+ : form_control_element_clicked_called_(false), |
+ form_control_element_lost_focus_called_(false), |
+ was_focused_(false) { |
} |
- virtual void InputElementClicked(const blink::WebInputElement& element, |
- bool was_focused, |
- bool is_focused) OVERRIDE { |
- input_element_clicked_called_ = true; |
- element_clicked_ = element; |
+ virtual void FormControlElementClicked( |
+ const blink::WebFormControlElement& element, |
+ bool was_focused) OVERRIDE { |
+ form_control_element_clicked_called_ = true; |
+ form_control_element_clicked_ = element; |
was_focused_ = was_focused; |
- is_focused_ = is_focused; |
} |
- virtual void InputElementLostFocus() OVERRIDE { |
- input_element_lost_focus_called_ = true; |
+ virtual void FormControlElementLostFocus() OVERRIDE { |
+ form_control_element_lost_focus_called_ = true; |
} |
void ClearResults() { |
- input_element_clicked_called_ = false; |
- input_element_lost_focus_called_ = false; |
- element_clicked_.reset(); |
+ form_control_element_clicked_called_ = false; |
+ form_control_element_lost_focus_called_ = false; |
+ form_control_element_clicked_.reset(); |
was_focused_ = false; |
- is_focused_ = false; |
} |
- bool input_element_clicked_called_; |
- bool input_element_lost_focus_called_; |
- blink::WebInputElement element_clicked_; |
+ bool form_control_element_clicked_called_; |
+ bool form_control_element_lost_focus_called_; |
+ blink::WebFormControlElement form_control_element_clicked_; |
bool was_focused_; |
- bool is_focused_; |
}; |
class PageClickTrackerTest : public content::RenderViewTest { |
@@ -65,17 +62,22 @@ class PageClickTrackerTest : public content::RenderViewTest { |
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>" |
"</form>"); |
GetWebWidget()->resize(blink::WebSize(500, 500)); |
GetWebWidget()->setFocus(true); |
blink::WebDocument document = view_->GetWebView()->mainFrame()->document(); |
text_ = document.getElementById("text_1"); |
+ textarea_ = document.getElementById("textarea_1"); |
ASSERT_FALSE(text_.isNull()); |
+ ASSERT_FALSE(textarea_.isNull()); |
} |
virtual void TearDown() OVERRIDE { |
text_.reset(); |
+ textarea_.reset(); |
test_listener_.ClearResults(); |
page_click_tracker_.reset(); |
content::RenderViewTest::TearDown(); |
@@ -100,29 +102,51 @@ class PageClickTrackerTest : public content::RenderViewTest { |
scoped_ptr<PageClickTracker> page_click_tracker_; |
TestPageClickListener test_listener_; |
blink::WebElement text_; |
+ blink::WebElement textarea_; |
}; |
-// Tests that PageClickTracker does notify correctly when a node is clicked. |
+// Tests that PageClickTracker does notify correctly when an input |
+// node is clicked. |
TEST_F(PageClickTrackerTest, PageClickTrackerInputClicked) { |
// Click the text field once. |
EXPECT_TRUE(SimulateElementClick("text_1")); |
- EXPECT_TRUE(test_listener_.input_element_clicked_called_); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_FALSE(test_listener_.was_focused_); |
- EXPECT_TRUE(test_listener_.is_focused_); |
- EXPECT_TRUE(text_ == test_listener_.element_clicked_); |
+ 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. |
EXPECT_TRUE(SimulateElementClick("text_1")); |
- EXPECT_TRUE(test_listener_.input_element_clicked_called_); |
+ EXPECT_TRUE(test_listener_.form_control_element_clicked_called_); |
EXPECT_TRUE(test_listener_.was_focused_); |
- EXPECT_TRUE(test_listener_.is_focused_); |
- EXPECT_TRUE(text_ == test_listener_.element_clicked_); |
+ 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). |
EXPECT_TRUE(SimulateElementClick("button")); |
- EXPECT_FALSE(test_listener_.input_element_clicked_called_); |
+ EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
+} |
+ |
+// Tests that PageClickTracker does notify correctly when a textarea |
+// node is clicked. |
+TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaClicked) { |
+ // Click the textarea field once. |
+ 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. |
+ 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). |
+ EXPECT_TRUE(SimulateElementClick("button")); |
+ EXPECT_FALSE(test_listener_.form_control_element_clicked_called_); |
} |
TEST_F(PageClickTrackerTest, PageClickTrackerInputFocusLost) { |
@@ -130,35 +154,73 @@ TEST_F(PageClickTrackerTest, PageClickTrackerInputFocusLost) { |
EXPECT_NE(text_, text_.document().focusedElement()); |
SendKeyPress(ui::VKEY_TAB); |
EXPECT_EQ(text_, text_.document().focusedElement()); |
- EXPECT_FALSE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
// Click a button and ensure that the lost focus notification was sent, |
// even though focus was gained without the mouse. |
EXPECT_TRUE(SimulateElementClick("button")); |
- EXPECT_TRUE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
test_listener_.ClearResults(); |
// Click a text field and test that no lost focus notifications are sent. |
EXPECT_TRUE(SimulateElementClick("text_1")); |
- EXPECT_FALSE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
test_listener_.ClearResults(); |
// Select another text field to test that the notifcation for the |
// first text field losing focus is sent. |
EXPECT_TRUE(SimulateElementClick("text_2")); |
- EXPECT_TRUE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
test_listener_.ClearResults(); |
// Click the button, a notification should happen since a text field has |
// lost focus. |
EXPECT_TRUE(SimulateElementClick("button")); |
- EXPECT_TRUE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
test_listener_.ClearResults(); |
// Click on a text field while the button has focus and ensure no lost focus |
// notification is sent. |
EXPECT_TRUE(SimulateElementClick("text_1")); |
- EXPECT_FALSE(test_listener_.input_element_lost_focus_called_); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
+} |
+ |
+TEST_F(PageClickTrackerTest, PageClickTrackerTextAreaFocusLost) { |
+ // Gain focus on the textare field by using tab. |
+ EXPECT_NE(textarea_, textarea_.document().focusedElement()); |
+ SendKeyPress(ui::VKEY_TAB); |
+ SendKeyPress(ui::VKEY_TAB); |
+ SendKeyPress(ui::VKEY_TAB); |
+ EXPECT_EQ(textarea_, textarea_.document().focusedElement()); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
+ |
+ // Click a button and ensure that the lost focus notification was sent, |
+ // even though focus was gained without the mouse. |
+ EXPECT_TRUE(SimulateElementClick("button")); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click a textarea field and test that no lost focus notifications are sent. |
+ EXPECT_TRUE(SimulateElementClick("textarea_1")); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Select another textarea field to test that the notifcation for the |
+ // first textarea field losing focus is sent. |
+ EXPECT_TRUE(SimulateElementClick("textarea_2")); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click the button, a notification should happen since a textarea field has |
+ // lost focus. |
+ EXPECT_TRUE(SimulateElementClick("button")); |
+ EXPECT_TRUE(test_listener_.form_control_element_lost_focus_called_); |
+ test_listener_.ClearResults(); |
+ |
+ // Click on a textarea field while the button has focus and ensure no lost |
+ // focus notification is sent. |
+ EXPECT_TRUE(SimulateElementClick("textarea_1")); |
+ EXPECT_FALSE(test_listener_.form_control_element_lost_focus_called_); |
} |
} // namespace autofill |