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

Unified Diff: third_party/WebKit/Source/web/tests/WebFrameTest.cpp

Issue 2616623002: Do not send redundant selectionchange-events (decouple focus) (Closed)
Patch Set: Rebase Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/web/tests/WebFrameTest.cpp
diff --git a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
index 81fb1ba4ceef6003b6be9e5f67b6283fc0d15b46..e9ddd44f636e4afa2506e35ae356f157b7af3a97 100644
--- a/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
+++ b/third_party/WebKit/Source/web/tests/WebFrameTest.cpp
@@ -86,6 +86,7 @@
#include "modules/mediastream/MediaStreamRegistry.h"
#include "platform/Cursor.h"
#include "platform/DragImage.h"
+#include "platform/KeyboardCodes.h"
#include "platform/PlatformResourceLoader.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/UserGestureIndicator.h"
@@ -113,6 +114,7 @@
#include "public/platform/WebCachePolicy.h"
#include "public/platform/WebClipboard.h"
#include "public/platform/WebFloatRect.h"
+#include "public/platform/WebKeyboardEvent.h"
#include "public/platform/WebMockClipboard.h"
#include "public/platform/WebSecurityOrigin.h"
#include "public/platform/WebThread.h"
@@ -4367,6 +4369,61 @@ TEST_P(ParameterizedWebFrameTest, ClearFocusedNodeTest) {
EXPECT_EQ(0, web_view_helper.WebView()->FocusedElement());
}
+class ChangedSelectionCounter : public FrameTestHelpers::TestWebFrameClient {
+ public:
+ ChangedSelectionCounter() : call_count_(0) {}
+ void DidChangeSelection(bool isSelectionEmpty) { ++call_count_; }
+ int Count() const { return call_count_; }
+ void Reset() { call_count_ = 0; }
+
+ private:
+ int call_count_;
+};
+
+TEST_P(ParameterizedWebFrameTest, TabKeyCursorMoveTriggersOneSelectionChange) {
+ ChangedSelectionCounter counter;
+ FrameTestHelpers::WebViewHelper web_view_helper;
+ RegisterMockedHttpURLLoad("editable_elements.html");
+ WebViewImpl* web_view = web_view_helper.InitializeAndLoad(
+ base_url_ + "editable_elements.html", true, &counter);
+
+ WebKeyboardEvent tab_down(WebInputEvent::kKeyDown,
+ WebInputEvent::kNoModifiers,
+ WebInputEvent::kTimeStampForTesting);
+ WebKeyboardEvent tab_up(WebInputEvent::kKeyUp, WebInputEvent::kNoModifiers,
+ WebInputEvent::kTimeStampForTesting);
+ tab_down.dom_key = Platform::Current()->DomKeyEnumFromString("\t");
+ tab_up.dom_key = Platform::Current()->DomKeyEnumFromString("\t");
+ tab_down.windows_key_code = VKEY_TAB;
+ tab_up.windows_key_code = VKEY_TAB;
+
+ // Move to the next text-field: 1 cursor change.
+ counter.Reset();
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_down));
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_up));
+ EXPECT_EQ(1, counter.Count());
+
+ // Move to another text-field: 1 cursor change.
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_down));
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_up));
+ EXPECT_EQ(2, counter.Count());
+
+ // Move to a number-field: 1 cursor change.
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_down));
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_up));
+ EXPECT_EQ(3, counter.Count());
+
+ // Move to an editable element: 1 cursor change.
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_down));
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_up));
+ EXPECT_EQ(4, counter.Count());
+
+ // Move to a non-editable element: 0 cursor changes.
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_down));
+ web_view->HandleInputEvent(WebCoalescedInputEvent(tab_up));
+ EXPECT_EQ(4, counter.Count());
+}
+
// Implementation of WebFrameClient that tracks the v8 contexts that are created
// and destroyed for verification.
class ContextLifetimeTestWebFrameClient

Powered by Google App Engine
This is Rietveld 408576698