| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 1264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1275 event.x = 25; | 1275 event.x = 25; |
| 1276 event.y = 7; | 1276 event.y = 7; |
| 1277 webView->handleInputEvent(event); | 1277 webView->handleInputEvent(event); |
| 1278 runPendingTasks(); | 1278 runPendingTasks(); |
| 1279 EXPECT_EQ(25, client.longpressX()); | 1279 EXPECT_EQ(25, client.longpressX()); |
| 1280 EXPECT_EQ(7, client.longpressY()); | 1280 EXPECT_EQ(7, client.longpressY()); |
| 1281 | 1281 |
| 1282 m_webViewHelper.reset(); // Explicitly reset to break dependency on locally
scoped client. | 1282 m_webViewHelper.reset(); // Explicitly reset to break dependency on locally
scoped client. |
| 1283 } | 1283 } |
| 1284 | 1284 |
| 1285 static void simulateKeyPress(WebView* webView, int windowsKeyCode) |
| 1286 { |
| 1287 WebKeyboardEvent keyEvent; |
| 1288 if (windowsKeyCode != VK_UNKNOWN) { |
| 1289 keyEvent.windowsKeyCode = windowsKeyCode; |
| 1290 keyEvent.setKeyIdentifierFromWindowsKeyCode(); |
| 1291 } |
| 1292 keyEvent.type = WebInputEvent::RawKeyDown; |
| 1293 webView->handleInputEvent(keyEvent); |
| 1294 |
| 1295 keyEvent.type = WebInputEvent::KeyUp; |
| 1296 webView->handleInputEvent(keyEvent); |
| 1297 } |
| 1298 |
| 1285 #if OS(ANDROID) | 1299 #if OS(ANDROID) |
| 1286 TEST_F(WebViewTest, LongPressSelection) | 1300 TEST_F(WebViewTest, LongPressSelection) |
| 1287 { | 1301 { |
| 1288 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("longpress_selection.html")); | 1302 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("longpress_selection.html")); |
| 1289 | 1303 |
| 1290 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "longpress_
selection.html", true); | 1304 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "longpress_
selection.html", true); |
| 1291 webView->resize(WebSize(500, 300)); | 1305 webView->resize(WebSize(500, 300)); |
| 1292 webView->layout(); | 1306 webView->layout(); |
| 1293 runPendingTasks(); | 1307 runPendingTasks(); |
| 1294 | 1308 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1310 webView->resize(WebSize(640, 480)); | 1324 webView->resize(WebSize(640, 480)); |
| 1311 webView->layout(); | 1325 webView->layout(); |
| 1312 runPendingTasks(); | 1326 runPendingTasks(); |
| 1313 | 1327 |
| 1314 WebString target = WebString::fromUTF8("target"); | 1328 WebString target = WebString::fromUTF8("target"); |
| 1315 WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webView->mainFrame()); | 1329 WebLocalFrameImpl* mainFrame = toWebLocalFrameImpl(webView->mainFrame()); |
| 1316 | 1330 |
| 1317 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureLongPress, target)
); | 1331 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureLongPress, target)
); |
| 1318 EXPECT_TRUE(mainFrame->frame()->selection().isCaretBlinkingSuspended()); | 1332 EXPECT_TRUE(mainFrame->frame()->selection().isCaretBlinkingSuspended()); |
| 1319 | 1333 |
| 1320 WebKeyboardEvent keyEvent; | 1334 simulateKeyPress(webView, VK_UNKNOWN); |
| 1321 keyEvent.type = WebInputEvent::RawKeyDown; | |
| 1322 webView->handleInputEvent(keyEvent); | |
| 1323 keyEvent.type = WebInputEvent::KeyUp; | |
| 1324 webView->handleInputEvent(keyEvent); | |
| 1325 EXPECT_FALSE(mainFrame->frame()->selection().isCaretBlinkingSuspended()); | 1335 EXPECT_FALSE(mainFrame->frame()->selection().isCaretBlinkingSuspended()); |
| 1326 } | 1336 } |
| 1327 #endif | 1337 #endif |
| 1328 | 1338 |
| 1329 TEST_F(WebViewTest, SelectionOnReadOnlyInput) | 1339 TEST_F(WebViewTest, SelectionOnReadOnlyInput) |
| 1330 { | 1340 { |
| 1331 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("selection_readonly.html")); | 1341 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("selection_readonly.html")); |
| 1332 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "selection_
readonly.html", true); | 1342 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "selection_
readonly.html", true); |
| 1333 webView->resize(WebSize(640, 480)); | 1343 webView->resize(WebSize(640, 480)); |
| 1334 webView->layout(); | 1344 webView->layout(); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1405 int getUserGestureNotificationsCount() { return m_userGestureNotificationsCo
unt; } | 1415 int getUserGestureNotificationsCount() { return m_userGestureNotificationsCo
unt; } |
| 1406 | 1416 |
| 1407 private: | 1417 private: |
| 1408 bool m_ignoreTextChanges; | 1418 bool m_ignoreTextChanges; |
| 1409 int m_textChangesWhileIgnored; | 1419 int m_textChangesWhileIgnored; |
| 1410 int m_textChangesWhileNotIgnored; | 1420 int m_textChangesWhileNotIgnored; |
| 1411 int m_userGestureNotificationsCount; | 1421 int m_userGestureNotificationsCount; |
| 1412 }; | 1422 }; |
| 1413 | 1423 |
| 1414 | 1424 |
| 1425 static void verifySelectionAndComposition(WebView* webView, const char* value, i
nt selectionStart, int selectionEnd, int compositionStart, int compositionEnd, c
onst char* failMessage) |
| 1426 { |
| 1427 WebTextInputInfo info = webView->textInputInfo(); |
| 1428 if (value) { |
| 1429 EXPECT_EQ(std::string(value), std::string(info.value.utf8().data())) <<
failMessage; |
| 1430 } |
| 1431 EXPECT_EQ(selectionStart, info.selectionStart) << failMessage; |
| 1432 EXPECT_EQ(selectionEnd, info.selectionEnd) << failMessage; |
| 1433 EXPECT_EQ(compositionStart, info.compositionStart) << failMessage; |
| 1434 EXPECT_EQ(compositionEnd, info.compositionEnd) << failMessage; |
| 1435 } |
| 1436 |
| 1415 TEST_F(WebViewTest, LosingFocusDoesNotTriggerAutofillTextChange) | 1437 TEST_F(WebViewTest, LosingFocusDoesNotTriggerAutofillTextChange) |
| 1416 { | 1438 { |
| 1417 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("input_field_populated.html")); | 1439 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("input_field_populated.html")); |
| 1418 MockAutofillClient client; | 1440 MockAutofillClient client; |
| 1419 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_fiel
d_populated.html"); | 1441 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_fiel
d_populated.html"); |
| 1420 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); | 1442 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); |
| 1421 frame->setAutofillClient(&client); | 1443 frame->setAutofillClient(&client); |
| 1422 webView->setInitialFocus(false); | 1444 webView->setInitialFocus(false); |
| 1423 | 1445 |
| 1424 // Set up a composition that needs to be committed. | 1446 // Set up a composition that needs to be committed. |
| 1425 WebVector<WebCompositionUnderline> emptyUnderlines; | 1447 WebVector<WebCompositionUnderline> emptyUnderlines; |
| 1426 frame->setEditableSelectionOffsets(4, 10); | 1448 frame->setEditableSelectionOffsets(4, 10); |
| 1427 frame->setCompositionFromExistingText(8, 12, emptyUnderlines); | 1449 frame->setCompositionFromExistingText(8, 12, emptyUnderlines); |
| 1428 WebTextInputInfo info = webView->textInputInfo(); | 1450 verifySelectionAndComposition(webView, nullptr, 4, 10, 8, 12, "base case"); |
| 1429 EXPECT_EQ(4, info.selectionStart); | |
| 1430 EXPECT_EQ(10, info.selectionEnd); | |
| 1431 EXPECT_EQ(8, info.compositionStart); | |
| 1432 EXPECT_EQ(12, info.compositionEnd); | |
| 1433 | 1451 |
| 1434 // Clear the focus and track that the subsequent composition commit does not
trigger a | 1452 // Clear the focus and track that the subsequent composition commit does not
trigger a |
| 1435 // text changed notification for autofill. | 1453 // text changed notification for autofill. |
| 1436 client.clearChangeCounts(); | 1454 client.clearChangeCounts(); |
| 1437 webView->setFocus(false); | 1455 webView->setFocus(false); |
| 1438 EXPECT_EQ(1, client.textChangesWhileIgnored()); | 1456 EXPECT_EQ(1, client.textChangesWhileIgnored()); |
| 1439 EXPECT_EQ(0, client.textChangesWhileNotIgnored()); | 1457 EXPECT_EQ(0, client.textChangesWhileNotIgnored()); |
| 1440 | 1458 |
| 1441 frame->setAutofillClient(0); | 1459 frame->setAutofillClient(0); |
| 1442 } | 1460 } |
| 1443 | 1461 |
| 1462 TEST_F(WebViewTest, CompositionChangeWithKeyEvents) |
| 1463 { |
| 1464 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("composition_with_key_events.html")); |
| 1465 MockAutofillClient client; |
| 1466 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "compositio
n_with_key_events.html"); |
| 1467 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); |
| 1468 frame->setAutofillClient(&client); |
| 1469 webView->setInitialFocus(false); |
| 1470 |
| 1471 // Test both input elements. |
| 1472 for (int i = 0; i < 2; ++i) { |
| 1473 // Select composition and do sanity check. |
| 1474 WebVector<WebCompositionUnderline> emptyUnderlines; |
| 1475 frame->setEditableSelectionOffsets(2, 15); |
| 1476 frame->setCompositionFromExistingText(6, 11, emptyUnderlines); |
| 1477 verifySelectionAndComposition(webView, nullptr, 2, 15, 6, 11, "initial c
ase"); |
| 1478 |
| 1479 // Press 'A' and verify that the composition grew. |
| 1480 simulateKeyPress(webView, VKEY_A); |
| 1481 verifySelectionAndComposition(webView, nullptr, 2, 16, 6, 12, "after pre
ssing 'A'"); |
| 1482 |
| 1483 // Press Backspace and verify that the composition shrunk (and is not ca
ncelled). |
| 1484 simulateKeyPress(webView, VKEY_BACK); |
| 1485 verifySelectionAndComposition(webView, nullptr, 2, 15, 6, 11, "after pre
ssing Backspace"); |
| 1486 |
| 1487 webView->advanceFocus(false); |
| 1488 } |
| 1489 } |
| 1490 |
| 1444 TEST_F(WebViewTest, ConfirmCompositionTriggersAutofillTextChange) | 1491 TEST_F(WebViewTest, ConfirmCompositionTriggersAutofillTextChange) |
| 1445 { | 1492 { |
| 1446 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("input_field_populated.html")); | 1493 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("input_field_populated.html")); |
| 1447 MockAutofillClient client; | 1494 MockAutofillClient client; |
| 1448 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_fiel
d_populated.html"); | 1495 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "input_fiel
d_populated.html"); |
| 1449 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); | 1496 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); |
| 1450 frame->setAutofillClient(&client); | 1497 frame->setAutofillClient(&client); |
| 1451 webView->setInitialFocus(false); | 1498 webView->setInitialFocus(false); |
| 1452 | 1499 |
| 1453 // Set up a composition that needs to be committed. | 1500 // Set up a composition that needs to be committed. |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1595 webView->setFocus(true); | 1642 webView->setFocus(true); |
| 1596 | 1643 |
| 1597 WebElement element = webView->mainFrame()->document().getElementById("messag
e"); | 1644 WebElement element = webView->mainFrame()->document().getElementById("messag
e"); |
| 1598 EXPECT_STREQ("DOMFocusOutDOMFocusIn", element.innerText().utf8().data()); | 1645 EXPECT_STREQ("DOMFocusOutDOMFocusIn", element.innerText().utf8().data()); |
| 1599 } | 1646 } |
| 1600 | 1647 |
| 1601 #if !ENABLE(INPUT_MULTIPLE_FIELDS_UI) | 1648 #if !ENABLE(INPUT_MULTIPLE_FIELDS_UI) |
| 1602 static void openDateTimeChooser(WebView* webView, HTMLInputElement* inputElement
) | 1649 static void openDateTimeChooser(WebView* webView, HTMLInputElement* inputElement
) |
| 1603 { | 1650 { |
| 1604 inputElement->focus(); | 1651 inputElement->focus(); |
| 1605 | 1652 simulateKeyPress(webView, VKEY_SPACE); |
| 1606 WebKeyboardEvent keyEvent; | |
| 1607 keyEvent.windowsKeyCode = VKEY_SPACE; | |
| 1608 keyEvent.type = WebInputEvent::RawKeyDown; | |
| 1609 keyEvent.setKeyIdentifierFromWindowsKeyCode(); | |
| 1610 webView->handleInputEvent(keyEvent); | |
| 1611 | |
| 1612 keyEvent.type = WebInputEvent::KeyUp; | |
| 1613 webView->handleInputEvent(keyEvent); | |
| 1614 } | 1653 } |
| 1615 | 1654 |
| 1616 TEST_F(WebViewTest, ChooseValueFromDateTimeChooser) | 1655 TEST_F(WebViewTest, ChooseValueFromDateTimeChooser) |
| 1617 { | 1656 { |
| 1618 DateTimeChooserWebViewClient client; | 1657 DateTimeChooserWebViewClient client; |
| 1619 std::string url = m_baseURL + "date_time_chooser.html"; | 1658 std::string url = m_baseURL + "date_time_chooser.html"; |
| 1620 URLTestHelpers::registerMockedURLLoad(toKURL(url), "date_time_chooser.html")
; | 1659 URLTestHelpers::registerMockedURLLoad(toKURL(url), "date_time_chooser.html")
; |
| 1621 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(url, true, 0, &
client); | 1660 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(url, true, 0, &
client); |
| 1622 | 1661 |
| 1623 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); | 1662 Document* document = webViewImpl->mainFrameImpl()->frame()->document(); |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2193 { | 2232 { |
| 2194 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("form.html")); | 2233 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("form.html")); |
| 2195 MockAutofillClient client; | 2234 MockAutofillClient client; |
| 2196 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "form.html"
, true); | 2235 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "form.html"
, true); |
| 2197 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); | 2236 WebLocalFrameImpl* frame = toWebLocalFrameImpl(webView->mainFrame()); |
| 2198 frame->setAutofillClient(&client); | 2237 frame->setAutofillClient(&client); |
| 2199 webView->setInitialFocus(false); | 2238 webView->setInitialFocus(false); |
| 2200 | 2239 |
| 2201 EXPECT_EQ(0, client.getUserGestureNotificationsCount()); | 2240 EXPECT_EQ(0, client.getUserGestureNotificationsCount()); |
| 2202 | 2241 |
| 2203 WebKeyboardEvent keyEvent; | 2242 simulateKeyPress(webView, VKEY_SPACE); |
| 2204 keyEvent.windowsKeyCode = VKEY_SPACE; | |
| 2205 keyEvent.type = WebInputEvent::RawKeyDown; | |
| 2206 keyEvent.setKeyIdentifierFromWindowsKeyCode(); | |
| 2207 webView->handleInputEvent(keyEvent); | |
| 2208 keyEvent.type = WebInputEvent::KeyUp; | |
| 2209 webView->handleInputEvent(keyEvent); | |
| 2210 | 2243 |
| 2211 EXPECT_EQ(1, client.getUserGestureNotificationsCount()); | 2244 EXPECT_EQ(1, client.getUserGestureNotificationsCount()); |
| 2212 frame->setAutofillClient(0); | 2245 frame->setAutofillClient(0); |
| 2213 } | 2246 } |
| 2214 | 2247 |
| 2215 TEST_F(WebViewTest, FirstUserGestureObservedMouseEvent) | 2248 TEST_F(WebViewTest, FirstUserGestureObservedMouseEvent) |
| 2216 { | 2249 { |
| 2217 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("form.html")); | 2250 URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c
_str()), WebString::fromUTF8("form.html")); |
| 2218 MockAutofillClient client; | 2251 MockAutofillClient client; |
| 2219 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "form.html"
, true); | 2252 WebView* webView = m_webViewHelper.initializeAndLoad(m_baseURL + "form.html"
, true); |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2438 // Test without any preventDefault. | 2471 // Test without any preventDefault. |
| 2439 client.reset(); | 2472 client.reset(); |
| 2440 frame->executeScript(WebScriptSource("setTest('none');")); | 2473 frame->executeScript(WebScriptSource("setTest('none');")); |
| 2441 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, WebString::fr
omUTF8("target"))); | 2474 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, WebString::fr
omUTF8("target"))); |
| 2442 EXPECT_TRUE(client.getWasCalled()); | 2475 EXPECT_TRUE(client.getWasCalled()); |
| 2443 | 2476 |
| 2444 m_webViewHelper.reset(); // Remove dependency on locally scoped client. | 2477 m_webViewHelper.reset(); // Remove dependency on locally scoped client. |
| 2445 } | 2478 } |
| 2446 | 2479 |
| 2447 } // namespace | 2480 } // namespace |
| OLD | NEW |