summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/tests/WebViewTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/chromium/tests/WebViewTest.cpp')
-rw-r--r--Source/WebKit/chromium/tests/WebViewTest.cpp654
1 files changed, 0 insertions, 654 deletions
diff --git a/Source/WebKit/chromium/tests/WebViewTest.cpp b/Source/WebKit/chromium/tests/WebViewTest.cpp
deleted file mode 100644
index 1929c1ba6..000000000
--- a/Source/WebKit/chromium/tests/WebViewTest.cpp
+++ /dev/null
@@ -1,654 +0,0 @@
-/*
- * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "WebView.h"
-
-#include "Document.h"
-#include "Element.h"
-#include "FrameTestHelpers.h"
-#include "FrameView.h"
-#include "HTMLDocument.h"
-#include "URLTestHelpers.h"
-#include "WebContentDetectionResult.h"
-#include "WebDocument.h"
-#include "WebElement.h"
-#include "WebFrame.h"
-#include "WebFrameClient.h"
-#include "WebFrameImpl.h"
-#include "WebInputEvent.h"
-#include "platform/WebSize.h"
-#include "WebViewClient.h"
-#include "WebViewImpl.h"
-#include <gtest/gtest.h>
-#include <webkit/support/webkit_support.h>
-
-using namespace WebKit;
-using WebKit::URLTestHelpers::toKURL;
-
-namespace {
-
-enum HorizontalScrollbarState {
- NoHorizontalScrollbar,
- VisibleHorizontalScrollbar,
-};
-
-enum VerticalScrollbarState {
- NoVerticalScrollbar,
- VisibleVerticalScrollbar,
-};
-
-class TestData {
-public:
- void setWebView(WebView* webView) { m_webView = static_cast<WebViewImpl*>(webView); }
- void setSize(const WebSize& newSize) { m_size = newSize; }
- HorizontalScrollbarState horizontalScrollbarState() const
- {
- return m_webView->hasHorizontalScrollbar() ? VisibleHorizontalScrollbar: NoHorizontalScrollbar;
- }
- VerticalScrollbarState verticalScrollbarState() const
- {
- return m_webView->hasVerticalScrollbar() ? VisibleVerticalScrollbar : NoVerticalScrollbar;
- }
- int width() const { return m_size.width; }
- int height() const { return m_size.height; }
-
-private:
- WebSize m_size;
- WebViewImpl* m_webView;
-};
-
-class AutoResizeWebViewClient : public WebViewClient {
-public:
- // WebViewClient methods
- virtual void didAutoResize(const WebSize& newSize) { m_testData.setSize(newSize); }
-
- // Local methods
- TestData& testData() { return m_testData; }
-
-private:
- TestData m_testData;
-};
-
-class FormChangeWebViewClient : public WebViewClient {
-public:
- // WebViewClient methods
- virtual void didChangeFormState(const WebNode& node)
- {
- m_focused = node.focused();
- m_called = true;
- }
-
- // Local methods
- void reset()
- {
- m_called = false;
- m_focused = false;
- }
- bool called() { return m_called; }
- bool focused() { return m_focused; }
-
-private:
- bool m_called;
- bool m_focused;
-};
-
-class TapHandlingWebViewClient : public WebViewClient {
-public:
- // WebViewClient methods
- virtual void didHandleGestureEvent(const WebGestureEvent& event, bool handled)
- {
- if (event.type == WebInputEvent::GestureTap) {
- m_tapX = event.x;
- m_tapY = event.y;
- } else if (event.type == WebInputEvent::GestureLongPress) {
- m_longpressX = event.x;
- m_longpressY = event.y;
- }
- }
-
- // Local methods
- void reset()
- {
- m_tapX = -1;
- m_tapY = -1;
- m_longpressX = -1;
- m_longpressY = -1;
- }
- int tapX() { return m_tapX; }
- int tapY() { return m_tapY; }
- int longpressX() { return m_longpressX; }
- int longpressY() { return m_longpressY; }
-
-private:
- int m_tapX;
- int m_tapY;
- int m_longpressX;
- int m_longpressY;
-};
-
-class WebViewTest : public testing::Test {
-public:
- WebViewTest()
- : m_baseURL("http://www.test.com/")
- {
- }
-
- virtual void TearDown()
- {
- webkit_support::UnregisterAllMockedURLs();
- }
-
-protected:
- void testAutoResize(const WebSize& minAutoResize, const WebSize& maxAutoResize,
- const std::string& pageWidth, const std::string& pageHeight,
- int expectedWidth, int expectedHeight,
- HorizontalScrollbarState expectedHorizontalState, VerticalScrollbarState expectedVerticalState);
-
- void testTextInputType(WebTextInputType expectedType, const std::string& htmlFile);
-
- std::string m_baseURL;
-};
-
-TEST_F(WebViewTest, FocusIsInactive)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), "visible_iframe.html");
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "visible_iframe.html");
-
- webView->setFocus(true);
- webView->setIsActive(true);
- WebFrameImpl* frame = static_cast<WebFrameImpl*>(webView->mainFrame());
- EXPECT_TRUE(frame->frame()->document()->isHTMLDocument());
-
- WebCore::HTMLDocument* document = static_cast<WebCore::HTMLDocument*>(frame->frame()->document());
- EXPECT_TRUE(document->hasFocus());
- webView->setFocus(false);
- webView->setIsActive(false);
- EXPECT_FALSE(document->hasFocus());
- webView->setFocus(true);
- webView->setIsActive(true);
- EXPECT_TRUE(document->hasFocus());
- webView->setFocus(true);
- webView->setIsActive(false);
- EXPECT_FALSE(document->hasFocus());
- webView->setFocus(false);
- webView->setIsActive(true);
- EXPECT_TRUE(document->hasFocus());
-
- webView->close();
-}
-
-TEST_F(WebViewTest, ActiveState)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), "visible_iframe.html");
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "visible_iframe.html");
-
- ASSERT_TRUE(webView);
-
- webView->setIsActive(true);
- EXPECT_TRUE(webView->isActive());
-
- webView->setIsActive(false);
- EXPECT_FALSE(webView->isActive());
-
- webView->setIsActive(true);
- EXPECT_TRUE(webView->isActive());
-
- webView->close();
-}
-
-void WebViewTest::testAutoResize(const WebSize& minAutoResize, const WebSize& maxAutoResize,
- const std::string& pageWidth, const std::string& pageHeight,
- int expectedWidth, int expectedHeight,
- HorizontalScrollbarState expectedHorizontalState, VerticalScrollbarState expectedVerticalState)
-{
- AutoResizeWebViewClient client;
- std::string url = m_baseURL + "specify_size.html?" + pageWidth + ":" + pageHeight;
- URLTestHelpers::registerMockedURLLoad(toKURL(url), "specify_size.html");
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(url, true, 0, &client);
- client.testData().setWebView(webView);
-
- WebFrameImpl* frame = static_cast<WebFrameImpl*>(webView->mainFrame());
- WebCore::FrameView* frameView = frame->frame()->view();
- frameView->layout();
- EXPECT_FALSE(frameView->layoutPending());
- EXPECT_FALSE(frameView->needsLayout());
-
- webView->enableAutoResizeMode(minAutoResize, maxAutoResize);
- EXPECT_TRUE(frameView->layoutPending());
- EXPECT_TRUE(frameView->needsLayout());
- frameView->layout();
-
- EXPECT_TRUE(frame->frame()->document()->isHTMLDocument());
-
- EXPECT_EQ(expectedWidth, client.testData().width());
- EXPECT_EQ(expectedHeight, client.testData().height());
- EXPECT_EQ(expectedHorizontalState, client.testData().horizontalScrollbarState());
- EXPECT_EQ(expectedVerticalState, client.testData().verticalScrollbarState());
-
- webView->close();
-}
-
-TEST_F(WebViewTest, DISABLED_AutoResizeMinimumSize)
-{
- WebSize minAutoResize(91, 56);
- WebSize maxAutoResize(403, 302);
- std::string pageWidth = "91px";
- std::string pageHeight = "56px";
- int expectedWidth = 91;
- int expectedHeight = 56;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, NoHorizontalScrollbar, NoVerticalScrollbar);
-}
-
-TEST_F(WebViewTest, AutoResizeHeightOverflowAndFixedWidth)
-{
- WebSize minAutoResize(90, 95);
- WebSize maxAutoResize(90, 100);
- std::string pageWidth = "60px";
- std::string pageHeight = "200px";
- int expectedWidth = 90;
- int expectedHeight = 100;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, NoHorizontalScrollbar, VisibleVerticalScrollbar);
-}
-
-TEST_F(WebViewTest, AutoResizeFixedHeightAndWidthOverflow)
-{
- WebSize minAutoResize(90, 100);
- WebSize maxAutoResize(200, 100);
- std::string pageWidth = "300px";
- std::string pageHeight = "80px";
- int expectedWidth = 200;
- int expectedHeight = 100;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, VisibleHorizontalScrollbar, NoVerticalScrollbar);
-}
-
-// Next three tests disabled for https://bugs.webkit.org/show_bug.cgi?id=92318 .
-// It seems we can run three AutoResize tests, then the next one breaks.
-TEST_F(WebViewTest, DISABLED_AutoResizeInBetweenSizes)
-{
- WebSize minAutoResize(90, 95);
- WebSize maxAutoResize(200, 300);
- std::string pageWidth = "100px";
- std::string pageHeight = "200px";
- int expectedWidth = 100;
- int expectedHeight = 200;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, NoHorizontalScrollbar, NoVerticalScrollbar);
-}
-
-TEST_F(WebViewTest, DISABLED_AutoResizeOverflowSizes)
-{
- WebSize minAutoResize(90, 95);
- WebSize maxAutoResize(200, 300);
- std::string pageWidth = "300px";
- std::string pageHeight = "400px";
- int expectedWidth = 200;
- int expectedHeight = 300;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, VisibleHorizontalScrollbar, VisibleVerticalScrollbar);
-}
-
-TEST_F(WebViewTest, DISABLED_AutoResizeMaxSize)
-{
- WebSize minAutoResize(90, 95);
- WebSize maxAutoResize(200, 300);
- std::string pageWidth = "200px";
- std::string pageHeight = "300px";
- int expectedWidth = 200;
- int expectedHeight = 300;
- testAutoResize(minAutoResize, maxAutoResize, pageWidth, pageHeight,
- expectedWidth, expectedHeight, NoHorizontalScrollbar, NoVerticalScrollbar);
-}
-
-void WebViewTest::testTextInputType(WebTextInputType expectedType, const std::string& htmlFile)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8(htmlFile.c_str()));
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + htmlFile);
- webView->setInitialFocus(false);
- EXPECT_EQ(expectedType, webView->textInputType());
- webView->close();
-}
-
-// Disabled for https://bugs.webkit.org/show_bug.cgi?id=78746#c29
-TEST_F(WebViewTest, DISABLED_TextInputType)
-{
- testTextInputType(WebTextInputTypeText, "input_field_default.html");
- testTextInputType(WebTextInputTypePassword, "input_field_password.html");
- testTextInputType(WebTextInputTypeEmail, "input_field_email.html");
- testTextInputType(WebTextInputTypeSearch, "input_field_search.html");
- testTextInputType(WebTextInputTypeNumber, "input_field_number.html");
- testTextInputType(WebTextInputTypeTelephone, "input_field_tel.html");
- testTextInputType(WebTextInputTypeURL, "input_field_url.html");
-#if ENABLE(INPUT_TYPE_DATE)
- testTextInputType(WebTextInputTypeDate, "input_field_date.html");
-#endif
-#if ENABLE(INPUT_TYPE_DATETIME)
- testTextInputType(WebTextInputTypeDateTime, "input_field_datetime.html");
-#endif
-#if ENABLE(INPUT_TYPE_DATETIMELOCAL)
- testTextInputType(WebTextInputTypeDateTimeLocal, "input_field_datetimelocal.html");
-#endif
-#if ENABLE(INPUT_TYPE_MONTH)
- testTextInputType(WebTextInputTypeMonth, "input_field_month.html");
-#endif
-#if ENABLE(INPUT_TYPE_TIME)
- testTextInputType(WebTextInputTypeTime, "input_field_time.html");
-#endif
-#if ENABLE(INPUT_TYPE_WEEK)
- testTextInputType(WebTextInputTypeWeek, "input_field_week.html");
-#endif
-
-}
-
-TEST_F(WebViewTest, SetEditableSelectionOffsetsAndTextInputInfo)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "input_field_populated.html");
- webView->setInitialFocus(false);
- webView->setEditableSelectionOffsets(5, 13);
- WebFrameImpl* frame = static_cast<WebFrameImpl*>(webView->mainFrame());
- EXPECT_EQ("56789abc", frame->selectionAsText());
- WebTextInputInfo info = webView->textInputInfo();
- EXPECT_EQ("0123456789abcdefghijklmnopqrstuvwxyz", info.value);
- EXPECT_EQ(5, info.selectionStart);
- EXPECT_EQ(13, info.selectionEnd);
- EXPECT_EQ(-1, info.compositionStart);
- EXPECT_EQ(-1, info.compositionEnd);
- webView->close();
-
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("content_editable_populated.html"));
- webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "content_editable_populated.html");
- webView->setInitialFocus(false);
- webView->setEditableSelectionOffsets(8, 19);
- frame = static_cast<WebFrameImpl*>(webView->mainFrame());
- EXPECT_EQ("89abcdefghi", frame->selectionAsText());
- info = webView->textInputInfo();
- EXPECT_EQ("0123456789abcdefghijklmnopqrstuvwxyz", info.value);
- EXPECT_EQ(8, info.selectionStart);
- EXPECT_EQ(19, info.selectionEnd);
- EXPECT_EQ(-1, info.compositionStart);
- EXPECT_EQ(-1, info.compositionEnd);
- webView->close();
-}
-
-TEST_F(WebViewTest, FormChange)
-{
- FormChangeWebViewClient client;
- client.reset();
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_set_value_while_focused.html"));
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "input_field_set_value_while_focused.html", true, 0, &client);
- EXPECT_TRUE(client.called());
- EXPECT_TRUE(client.focused());
- client.reset();
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_set_value_while_not_focused.html"));
- webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "input_field_set_value_while_not_focused.html", true, 0, &client);
- EXPECT_TRUE(client.called());
- EXPECT_FALSE(client.focused());
- webView->close();
-}
-
-TEST_F(WebViewTest, ExtendSelectionAndDelete)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "input_field_populated.html");
- webView->setInitialFocus(false);
- webView->setEditableSelectionOffsets(10, 10);
- webView->extendSelectionAndDelete(5, 8);
- WebTextInputInfo info = webView->textInputInfo();
- EXPECT_EQ("01234ijklmnopqrstuvwxyz", std::string(info.value.utf8().data()));
- EXPECT_EQ(5, info.selectionStart);
- EXPECT_EQ(5, info.selectionEnd);
- webView->extendSelectionAndDelete(10, 0);
- info = webView->textInputInfo();
- EXPECT_EQ("ijklmnopqrstuvwxyz", std::string(info.value.utf8().data()));
- webView->close();
-}
-
-TEST_F(WebViewTest, SetCompositionFromExistingText)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("input_field_populated.html"));
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "input_field_populated.html");
- webView->setInitialFocus(false);
- WebVector<WebCompositionUnderline> emptyUnderlines;
- webView->setEditableSelectionOffsets(4, 10);
- webView->setCompositionFromExistingText(8, 12, emptyUnderlines);
- WebTextInputInfo info = webView->textInputInfo();
- EXPECT_EQ(4, info.selectionStart);
- EXPECT_EQ(10, info.selectionEnd);
- EXPECT_EQ(8, info.compositionStart);
- EXPECT_EQ(12, info.compositionEnd);
- webView->setCompositionFromExistingText(0, 0, emptyUnderlines);
- info = webView->textInputInfo();
- EXPECT_EQ(4, info.selectionStart);
- EXPECT_EQ(10, info.selectionEnd);
- EXPECT_EQ(-1, info.compositionStart);
- EXPECT_EQ(-1, info.compositionEnd);
- webView->close();
-}
-
-TEST_F(WebViewTest, ResetScrollAndScaleState)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("hello_world.html"));
- WebViewImpl* webViewImpl = static_cast<WebViewImpl*>(FrameTestHelpers::createWebViewAndLoad(m_baseURL + "hello_world.html"));
- webViewImpl->resize(WebSize(640, 480));
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().height);
-
- // Make the page scale and scroll with the given paremeters.
- webViewImpl->setPageScaleFactor(2.0f, WebPoint(116, 84));
- EXPECT_EQ(2.0f, webViewImpl->pageScaleFactor());
- EXPECT_EQ(116, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(84, webViewImpl->mainFrame()->scrollOffset().height);
- webViewImpl->page()->mainFrame()->loader()->history()->saveDocumentAndScrollState();
-
- // Confirm that restoring the page state restores the parameters.
- webViewImpl->setPageScaleFactor(1.5f, WebPoint(16, 24));
- EXPECT_EQ(1.5f, webViewImpl->pageScaleFactor());
- EXPECT_EQ(16, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(24, webViewImpl->mainFrame()->scrollOffset().height);
- webViewImpl->page()->mainFrame()->loader()->history()->restoreScrollPositionAndViewState();
- EXPECT_EQ(2.0f, webViewImpl->pageScaleFactor());
- EXPECT_EQ(116, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(84, webViewImpl->mainFrame()->scrollOffset().height);
- webViewImpl->page()->mainFrame()->loader()->history()->saveDocumentAndScrollState();
-
- // Confirm that resetting the page state resets both the scale and scroll position, as well
- // as overwrites the original parameters that were saved to the HistoryController.
- webViewImpl->resetScrollAndScaleState();
- EXPECT_EQ(0.0f, webViewImpl->pageScaleFactor());
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().height);
- webViewImpl->page()->mainFrame()->loader()->history()->restoreScrollPositionAndViewState();
- EXPECT_EQ(0.0f, webViewImpl->pageScaleFactor());
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().width);
- EXPECT_EQ(0, webViewImpl->mainFrame()->scrollOffset().height);
- webViewImpl->close();
-}
-
-class ContentDetectorClient : public WebViewClient {
-public:
- ContentDetectorClient() { reset(); }
-
- virtual WebContentDetectionResult detectContentAround(const WebHitTestResult& hitTest) OVERRIDE
- {
- m_contentDetectionRequested = true;
- return m_contentDetectionResult;
- }
-
- virtual void scheduleContentIntent(const WebURL& url) OVERRIDE
- {
- m_scheduledIntentURL = url;
- }
-
- virtual void cancelScheduledContentIntents() OVERRIDE
- {
- m_pendingIntentsCancelled = true;
- }
-
- void reset()
- {
- m_contentDetectionRequested = false;
- m_pendingIntentsCancelled = false;
- m_scheduledIntentURL = WebURL();
- m_contentDetectionResult = WebContentDetectionResult();
- }
-
- bool contentDetectionRequested() const { return m_contentDetectionRequested; }
- bool pendingIntentsCancelled() const { return m_pendingIntentsCancelled; }
- const WebURL& scheduledIntentURL() const { return m_scheduledIntentURL; }
- void setContentDetectionResult(const WebContentDetectionResult& result) { m_contentDetectionResult = result; }
-
-private:
- bool m_contentDetectionRequested;
- bool m_pendingIntentsCancelled;
- WebURL m_scheduledIntentURL;
- WebContentDetectionResult m_contentDetectionResult;
-};
-
-static bool tapElementById(WebView* webView, WebInputEvent::Type type, const WebString& id)
-{
- ASSERT(webView);
- RefPtr<WebCore::Element> element = static_cast<PassRefPtr<WebCore::Element> >(webView->mainFrame()->document().getElementById(id));
- if (!element)
- return false;
-
- element->scrollIntoViewIfNeeded();
- WebCore::IntPoint center = element->screenRect().center();
-
- WebGestureEvent event;
- event.type = type;
- event.x = center.x();
- event.y = center.y();
-
- webView->handleInputEvent(event);
- webkit_support::RunAllPendingMessages();
- return true;
-}
-
-TEST_F(WebViewTest, DetectContentAroundPosition)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("content_listeners.html"));
-
- ContentDetectorClient client;
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "content_listeners.html", true, 0, &client);
- webView->resize(WebSize(500, 300));
- webView->layout();
- webkit_support::RunAllPendingMessages();
-
- WebString clickListener = WebString::fromUTF8("clickListener");
- WebString touchstartListener = WebString::fromUTF8("touchstartListener");
- WebString mousedownListener = WebString::fromUTF8("mousedownListener");
- WebString noListener = WebString::fromUTF8("noListener");
- WebString link = WebString::fromUTF8("link");
-
- // Ensure content detection is not requested for nodes listening to click,
- // mouse or touch events when we do simple taps.
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, clickListener));
- EXPECT_FALSE(client.contentDetectionRequested());
- client.reset();
-
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, touchstartListener));
- EXPECT_FALSE(client.contentDetectionRequested());
- client.reset();
-
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, mousedownListener));
- EXPECT_FALSE(client.contentDetectionRequested());
- client.reset();
-
- // Content detection should work normally without these event listeners.
- // The click listener in the body should be ignored as a special case.
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, noListener));
- EXPECT_TRUE(client.contentDetectionRequested());
- EXPECT_FALSE(client.scheduledIntentURL().isValid());
-
- WebURL intentURL = toKURL(m_baseURL);
- client.setContentDetectionResult(WebContentDetectionResult(WebRange(), WebString(), intentURL));
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, noListener));
- EXPECT_TRUE(client.scheduledIntentURL() == intentURL);
-
- // Tapping elsewhere should cancel the scheduled intent.
- WebGestureEvent event;
- event.type = WebInputEvent::GestureTap;
- webView->handleInputEvent(event);
- webkit_support::RunAllPendingMessages();
- EXPECT_TRUE(client.pendingIntentsCancelled());
- webView->close();
-}
-
-TEST_F(WebViewTest, ClientTapHandling)
-{
- TapHandlingWebViewClient client;
- client.reset();
- WebView* webView = FrameTestHelpers::createWebViewAndLoad("about:blank", true, 0, &client);
- WebGestureEvent event;
- event.type = WebInputEvent::GestureTap;
- event.x = 3;
- event.y = 8;
- webView->handleInputEvent(event);
- webkit_support::RunAllPendingMessages();
- EXPECT_EQ(3, client.tapX());
- EXPECT_EQ(8, client.tapY());
- client.reset();
- event.type = WebInputEvent::GestureLongPress;
- event.x = 25;
- event.y = 7;
- webView->handleInputEvent(event);
- webkit_support::RunAllPendingMessages();
- EXPECT_EQ(25, client.longpressX());
- EXPECT_EQ(7, client.longpressY());
- webView->close();
-}
-
-#if OS(ANDROID)
-TEST_F(WebViewTest, LongPressSelection)
-{
- URLTestHelpers::registerMockedURLFromBaseURL(WebString::fromUTF8(m_baseURL.c_str()), WebString::fromUTF8("longpress_selection.html"));
-
- WebView* webView = FrameTestHelpers::createWebViewAndLoad(m_baseURL + "longpress_selection.html", true);
- webView->resize(WebSize(500, 300));
- webView->layout();
- webkit_support::RunAllPendingMessages();
-
- WebString target = WebString::fromUTF8("target");
- WebString onselectstartfalse = WebString::fromUTF8("onselectstartfalse");
- WebFrameImpl* frame = static_cast<WebFrameImpl*>(webView->mainFrame());
-
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureLongPress, onselectstartfalse));
- EXPECT_EQ("", std::string(frame->selectionAsText().utf8().data()));
- EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureLongPress, target));
- EXPECT_EQ("testword", std::string(frame->selectionAsText().utf8().data()));
- webView->close();
-}
-#endif
-
-}