Index: Source/web/tests/WebViewTest.cpp |
diff --git a/Source/web/tests/WebViewTest.cpp b/Source/web/tests/WebViewTest.cpp |
index 5819e60bb94178009a99062ed75be376ff8b67b6..273ab35a58bf3481ae6dd04c0a648378d0e03dde 100644 |
--- a/Source/web/tests/WebViewTest.cpp |
+++ b/Source/web/tests/WebViewTest.cpp |
@@ -1432,6 +1432,55 @@ TEST_F(WebViewTest, LosingFocusDoesNotTriggerAutofillTextChange) |
frame->setAutofillClient(0); |
} |
+static void verifySelectionAndComposition(WebView* webView, int selectionStart, int selectionEnd, int compositionStart, int compositionEnd, const char* failMessage) |
+{ |
+ WebTextInputInfo info = webView->textInputInfo(); |
+ EXPECT_EQ(selectionStart, info.selectionStart) << failMessage; |
+ EXPECT_EQ(selectionEnd, info.selectionEnd) << failMessage; |
+ EXPECT_EQ(compositionStart, info.compositionStart) << failMessage; |
+ EXPECT_EQ(compositionEnd, info.compositionEnd) << failMessage; |
+} |
+ |
+TEST_F(WebViewTest, CompositionNotCancelledByBackspace) |
+{ |
+ URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("composition_not_cancelled_by_backspace.html")); |
+ MockAutofillClient client; |
+ WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "composition_not_cancelled_by_backspace.html"); |
+ WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); |
+ frame->setAutofillClient(&client); |
+ webView->setInitialFocus(false); |
+ |
+ // Test both input elements. |
+ for (int i = 0; i < 2; ++i) { |
+ // Select composition and do sanity check. |
+ WebVector<WebCompositionUnderline> emptyUnderlines; |
+ frame->setEditableSelectionOffsets(6, 6); |
+ EXPECT_TRUE(webView->setComposition("fghij", emptyUnderlines, 0, 5)); |
+ frame->setEditableSelectionOffsets(11, 11); |
+ verifySelectionAndComposition(webView, 11, 11, 6, 11, "initial case"); |
+ |
+ // Press Backspace and verify composition didn't get cancelled. This is to verify the fix |
+ // for crbug.com/429916. |
+ WebKeyboardEvent keyEvent; |
+ keyEvent.windowsKeyCode = VKEY_BACK; |
+ keyEvent.setKeyIdentifierFromWindowsKeyCode(); |
+ keyEvent.type = WebInputEvent::RawKeyDown; |
+ webView->handleInputEvent(keyEvent); |
+ |
+ frame->setEditableSelectionOffsets(6, 6); |
+ EXPECT_TRUE(webView->setComposition("fghi", emptyUnderlines, 0, 4)); |
+ frame->setEditableSelectionOffsets(10, 10); |
+ verifySelectionAndComposition(webView, 10, 10, 6, 10, "after pressing Backspace"); |
+ |
+ keyEvent.type = WebInputEvent::KeyUp; |
+ webView->handleInputEvent(keyEvent); |
+ |
+ webView->advanceFocus(false); |
+ } |
+ |
+ frame->setAutofillClient(0); |
+} |
+ |
TEST_F(WebViewTest, ConfirmCompositionTriggersAutofillTextChange) |
{ |
URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html")); |