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

Side by Side Diff: Source/web/tests/WebViewTest.cpp

Issue 225903009: Migrate touch events to EventHandlerRegistry (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix indendation problems (added by meld?) Created 6 years, 4 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/web/WebPluginContainerImpl.cpp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1686 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 { 1697 {
1698 int value = m_hasTouchEventHandlerCount[state]; 1698 int value = m_hasTouchEventHandlerCount[state];
1699 m_hasTouchEventHandlerCount[state] = 0; 1699 m_hasTouchEventHandlerCount[state] = 0;
1700 return value; 1700 return value;
1701 } 1701 }
1702 1702
1703 private: 1703 private:
1704 int m_hasTouchEventHandlerCount[2]; 1704 int m_hasTouchEventHandlerCount[2];
1705 }; 1705 };
1706 1706
1707 // This test verifies that WebWidgetClient::hasTouchEventHandlers is called acco rdingly for various 1707 // This test verifies that WebWidgetClient::hasTouchEventHandlers is called
1708 // calls to Document::did{Add|Remove|Clear}TouchEventHandler. Verifying that tho se calls are made 1708 // accordingly for various calls to EventHandlerRegistry::did{Add|Remove|
1709 // correctly is the job of LayoutTests/fast/events/touch/touch-handler-count.htm l. 1709 // RemoveAll}EventHandler(..., TouchEvent). Verifying that those calls are made
1710 // correctly is the job of LayoutTests/fast/events/event-handler-count.html.
1710 TEST_F(WebViewTest, HasTouchEventHandlers) 1711 TEST_F(WebViewTest, HasTouchEventHandlers)
1711 { 1712 {
1712 TouchEventHandlerWebViewClient client; 1713 TouchEventHandlerWebViewClient client;
1713 std::string url = m_baseURL + "has_touch_event_handlers.html"; 1714 std::string url = m_baseURL + "has_touch_event_handlers.html";
1714 URLTestHelpers::registerMockedURLLoad(toKURL(url), "has_touch_event_handlers .html"); 1715 URLTestHelpers::registerMockedURLLoad(toKURL(url), "has_touch_event_handlers .html");
1715 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(url, true, 0, & client); 1716 WebViewImpl* webViewImpl = m_webViewHelper.initializeAndLoad(url, true, 0, & client);
1717 const blink::EventHandlerRegistry::EventHandlerClass touchEvent = blink::Eve ntHandlerRegistry::TouchEvent;
1716 1718
1717 // The page is initialized with at least one no-handlers call. 1719 // The page is initialized with at least one no-handlers call.
1718 // In practice we get two such calls because WebViewHelper::initializeAndLoa d first 1720 // In practice we get two such calls because WebViewHelper::initializeAndLoa d first
1719 // initializes and empty frame, and then loads a document into it, so there are two 1721 // initializes and empty frame, and then loads a document into it, so there are two
1720 // FrameLoader::commitProvisionalLoad calls. 1722 // FrameLoader::commitProvisionalLoad calls.
1721 EXPECT_GE(client.getAndResetHasTouchEventHandlerCallCount(false), 1); 1723 EXPECT_GE(client.getAndResetHasTouchEventHandlerCallCount(false), 1);
1722 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1724 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1723 1725
1724 // Adding the first document handler results in a has-handlers call. 1726 // Adding the first document handler results in a has-handlers call.
1725 blink::Document* document = webViewImpl->mainFrameImpl()->frame()->document( ); 1727 blink::Document* document = webViewImpl->mainFrameImpl()->frame()->document( );
1726 document->didAddTouchEventHandler(document); 1728 blink::EventHandlerRegistry* registry = &document->frameHost()->eventHandler Registry();
1729 registry->didAddEventHandler(*document, touchEvent);
1727 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1730 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1728 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true)); 1731 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true));
1729 1732
1730 // Adding another handler has no effect. 1733 // Adding another handler has no effect.
1731 document->didAddTouchEventHandler(document); 1734 registry->didAddEventHandler(*document, touchEvent);
1732 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1735 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1733 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1736 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1734 1737
1735 // Removing the duplicate handler has no effect. 1738 // Removing the duplicate handler has no effect.
1736 document->didRemoveTouchEventHandler(document); 1739 registry->didRemoveEventHandler(*document, touchEvent);
1737 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1740 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1738 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1741 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1739 1742
1740 // Removing the final handler results in a no-handlers call. 1743 // Removing the final handler results in a no-handlers call.
1741 document->didRemoveTouchEventHandler(document); 1744 registry->didRemoveEventHandler(*document, touchEvent);
1742 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false)); 1745 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false));
1743 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1746 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1744 1747
1745 // Adding a handler on a div results in a has-handlers call. 1748 // Adding a handler on a div results in a has-handlers call.
1746 blink::Element* parentDiv = document->getElementById("parentdiv"); 1749 blink::Element* parentDiv = document->getElementById("parentdiv");
1747 ASSERT(parentDiv); 1750 ASSERT(parentDiv);
1748 document->didAddTouchEventHandler(parentDiv); 1751 registry->didAddEventHandler(*parentDiv, touchEvent);
1749 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1752 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1750 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true)); 1753 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true));
1751 1754
1752 // Adding a duplicate handler on the div, clearing all document handlers 1755 // Adding a duplicate handler on the div, clearing all document handlers
1753 // (of which there are none) and removing the extra handler on the div 1756 // (of which there are none) and removing the extra handler on the div
1754 // all have no effect. 1757 // all have no effect.
1755 document->didAddTouchEventHandler(parentDiv); 1758 registry->didAddEventHandler(*parentDiv, touchEvent);
1756 document->didClearTouchEventHandlers(document); 1759 registry->didRemoveAllEventHandlers(*document);
1757 document->didRemoveTouchEventHandler(parentDiv); 1760 registry->didRemoveEventHandler(*parentDiv, touchEvent);
1758 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1761 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1759 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1762 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1760 1763
1761 // Removing the final handler on the div results in a no-handlers call. 1764 // Removing the final handler on the div results in a no-handlers call.
1762 document->didRemoveTouchEventHandler(parentDiv); 1765 registry->didRemoveEventHandler(*parentDiv, touchEvent);
1763 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false)); 1766 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false));
1764 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1767 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1765 1768
1766 // Adding two handlers then clearing them in a single call results in a 1769 // Adding two handlers then clearing them in a single call results in a
1767 // has-handlers then no-handlers call. 1770 // has-handlers then no-handlers call.
1768 document->didAddTouchEventHandler(parentDiv); 1771 registry->didAddEventHandler(*parentDiv, touchEvent);
1769 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1772 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1770 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true)); 1773 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true));
1771 document->didAddTouchEventHandler(parentDiv); 1774 registry->didAddEventHandler(*parentDiv, touchEvent);
1772 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1775 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1773 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1776 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1774 document->didClearTouchEventHandlers(parentDiv); 1777 registry->didRemoveAllEventHandlers(*parentDiv);
1775 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false)); 1778 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false));
1776 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1779 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1777 1780
1778 // Adding a handler inside of a child iframe results in a has-handlers call. 1781 // Adding a handler inside of a child iframe results in a has-handlers call.
1779 blink::Element* childFrame = document->getElementById("childframe"); 1782 blink::Element* childFrame = document->getElementById("childframe");
1780 ASSERT(childFrame); 1783 ASSERT(childFrame);
1781 blink::Document* childDocument = toHTMLIFrameElement(childFrame)->contentDoc ument(); 1784 blink::Document* childDocument = toHTMLIFrameElement(childFrame)->contentDoc ument();
1782 blink::Element* childDiv = childDocument->getElementById("childdiv"); 1785 blink::Element* childDiv = childDocument->getElementById("childdiv");
1783 ASSERT(childDiv); 1786 ASSERT(childDiv);
1784 childDocument->didAddTouchEventHandler(childDiv); 1787 registry->didAddEventHandler(*childDiv, touchEvent);
1785 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1788 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1786 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true)); 1789 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true));
1787 1790
1788 // Adding and clearing handlers in the parent doc or elsewhere in the child doc 1791 // Adding and clearing handlers in the parent doc or elsewhere in the child doc
1789 // has no impact. 1792 // has no impact.
1790 document->didAddTouchEventHandler(document); 1793 registry->didAddEventHandler(*document, touchEvent);
1791 document->didAddTouchEventHandler(childFrame); 1794 registry->didAddEventHandler(*childFrame, touchEvent);
1792 childDocument->didAddTouchEventHandler(childDocument); 1795 registry->didAddEventHandler(*childDocument, touchEvent);
1793 document->didClearTouchEventHandlers(document); 1796 registry->didRemoveAllEventHandlers(*document);
1794 document->didClearTouchEventHandlers(childFrame); 1797 registry->didRemoveAllEventHandlers(*childFrame);
1795 childDocument->didClearTouchEventHandlers(childDocument); 1798 registry->didRemoveAllEventHandlers(*childDocument);
1796 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1799 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1797 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1800 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1798 1801
1799 // Removing the final handler inside the child frame results in a no-handler s call. 1802 // Removing the final handler inside the child frame results in a no-handler s call.
1800 childDocument->didRemoveTouchEventHandler(childDiv); 1803 registry->didRemoveAllEventHandlers(*childDiv);
1801 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false)); 1804 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false));
1802 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1805 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1803 1806
1804 // Adding a handler inside the child frame results in a has-handlers call. 1807 // Adding a handler inside the child frame results in a has-handlers call.
1805 childDocument->didAddTouchEventHandler(childDocument); 1808 registry->didAddEventHandler(*childDocument, touchEvent);
1806 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1809 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1807 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true)); 1810 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(true));
1808 1811
1809 // Adding a handler in the parent document and removing the one in the frame 1812 // Adding a handler in the parent document and removing the one in the frame
1810 // has no effect. 1813 // has no effect.
1811 document->didAddTouchEventHandler(childFrame); 1814 registry->didAddEventHandler(*childFrame, touchEvent);
1812 childDocument->didRemoveTouchEventHandler(childDocument); 1815 registry->didRemoveEventHandler(*childDocument, touchEvent);
1813 childDocument->didClearTouchEventHandlers(childDocument); 1816 registry->didRemoveAllEventHandlers(*childDocument);
1814 document->didClearTouchEventHandlers(document); 1817 registry->didRemoveAllEventHandlers(*document);
1815 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false)); 1818 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(false));
1816 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1819 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1817 1820
1818 // Now removing the handler in the parent document results in a no-handlers call. 1821 // Now removing the handler in the parent document results in a no-handlers call.
1819 document->didRemoveTouchEventHandler(childFrame); 1822 registry->didRemoveEventHandler(*childFrame, touchEvent);
1820 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false)); 1823 EXPECT_EQ(1, client.getAndResetHasTouchEventHandlerCallCount(false));
1821 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true)); 1824 EXPECT_EQ(0, client.getAndResetHasTouchEventHandlerCallCount(true));
1822 1825
1823 // Free the webView before the TouchEventHandlerWebViewClient gets freed. 1826 // Free the webView before the TouchEventHandlerWebViewClient gets freed.
1824 m_webViewHelper.reset(); 1827 m_webViewHelper.reset();
1825 } 1828 }
1826 1829
1827 // This test checks that deleting nodes which have only non-JS-registered touch 1830 // This test checks that deleting nodes which have only non-JS-registered touch
1828 // handlers also removes them from the event handler registry. Note that this 1831 // handlers also removes them from the event handler registry. Note that this
1829 // is different from detaching and re-attaching the same node, which is covered 1832 // is different from detaching and re-attaching the same node, which is covered
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
2131 2134
2132 EXPECT_EQ(0, client.getUserGestureNotificationsCount()); 2135 EXPECT_EQ(0, client.getUserGestureNotificationsCount());
2133 2136
2134 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, WebString::fr omUTF8("target"))); 2137 EXPECT_TRUE(tapElementById(webView, WebInputEvent::GestureTap, WebString::fr omUTF8("target")));
2135 2138
2136 EXPECT_EQ(1, client.getUserGestureNotificationsCount()); 2139 EXPECT_EQ(1, client.getUserGestureNotificationsCount());
2137 webView->setAutofillClient(0); 2140 webView->setAutofillClient(0);
2138 } 2141 }
2139 2142
2140 } // namespace 2143 } // namespace
OLDNEW
« no previous file with comments | « Source/web/WebPluginContainerImpl.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698