Diff
Modified: trunk/LayoutTests/ChangeLog (137760 => 137761)
--- trunk/LayoutTests/ChangeLog 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/LayoutTests/ChangeLog 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1,3 +1,16 @@
+2012-12-14 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r137570.
+ http://trac.webkit.org/changeset/137570
+ https://bugs.webkit.org/show_bug.cgi?id=105048
+
+ Stale nodes in the touchEventTarget HashCountedSet are
+ triggering crashes. Rolling out while I find the root cause.
+ (Requested by leviw on #webkit).
+
+ * platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt: Removed.
+ * platform/chromium/fast/events/touch/compositor-touch-hit-rects.html: Removed.
+
2012-12-14 Zan Dobersek <[email protected]>
Unreviewed GTK gardening.
Deleted: trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt (137760 => 137761)
--- trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects-expected.txt 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1,46 +0,0 @@
-This tests verifies the hit test regions given to the compositor. It can only be run in DumpRenderTree. The outputted rects should cover the hit test regions of all the listed elements.
-
-normalFlow[0]: (8, 72, 784, 10)
-normalFlow[1]: (8, 72, 784, 10)
-normalFlow[2]: (128, 72, 30, 10)
-normalFlow[3]: (8, 72, 784, 10)
-absoluteChildContainer[0]: (8, 162, 784, 10)
-absoluteChildContainer[1]: (8, 162, 784, 10)
-absoluteChildContainer[2]: (8, 162, 784, 10)
-absoluteChildContainer[3]: (118, 300, 140, 10)
-absoluteChildContainer[4]: (118, 300, 140, 10)
-relativeChildContainer[0]: (8, 272, 784, 10)
-relativeChildContainer[1]: (8, 272, 784, 10)
-relativeChildContainer[2]: (8, 272, 784, 10)
-relativeChildContainer[3]: (128, 472, 140, 10)
-overhangingContainer[0]: (8, 362, 784, 10)
-overhangingContainer[1]: (8, 362, 110, 80)
-overhangingContainer[2]: (8, 362, 110, 80)
-transformedChildContainer[0]: (62, 421, 661, 32)
-transformedChildContainer[1]: (62, 421, 661, 32)
-transformedChildContainer[2]: (8, 432, 769, 10)
-continuation[0]: (108, 502, 100, 10)
-
-This tests verifies the hit test regions given to the compositor. It can only be run in DumpRenderTree. The outputted rects should cover the hit test regions of all the listed elements.
-
-normalFlow[0]: (8, 72, 784, 10)
-normalFlow[1]: (8, 72, 784, 10)
-normalFlow[2]: (128, 72, 30, 10)
-normalFlow[3]: (8, 72, 784, 10)
-absoluteChildContainer[0]: (8, 162, 784, 10)
-absoluteChildContainer[1]: (8, 162, 784, 10)
-absoluteChildContainer[2]: (8, 162, 784, 10)
-absoluteChildContainer[3]: (118, 300, 140, 10)
-absoluteChildContainer[4]: (118, 300, 140, 10)
-relativeChildContainer[0]: (8, 272, 784, 10)
-relativeChildContainer[1]: (8, 272, 784, 10)
-relativeChildContainer[2]: (8, 272, 784, 10)
-relativeChildContainer[3]: (128, 472, 140, 10)
-overhangingContainer[0]: (8, 362, 784, 10)
-overhangingContainer[1]: (8, 362, 110, 80)
-overhangingContainer[2]: (8, 362, 110, 80)
-transformedChildContainer[0]: (62, 421, 661, 32)
-transformedChildContainer[1]: (62, 421, 661, 32)
-transformedChildContainer[2]: (8, 432, 769, 10)
-continuation[0]: (108, 502, 100, 10)
-
Deleted: trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects.html (137760 => 137761)
--- trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects.html 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/LayoutTests/platform/chromium/fast/events/touch/compositor-touch-hit-rects.html 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1,200 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-<style>
-#transformedChild {
- -webkit-transform: rotate3d(0.2, 1, 0, 35grad);
-}
-#absoluteChild {
- position: absolute;
- top: 300px;
-}
-#relativeChild {
- position: relative;
- top: 200px;
-}
-#overhangingContainer {
- height: 10px;
-}
-#overhangingFloatingChild {
- width: 100px;
- float: left;
-}
-#tests {
- font: 10px Ahem;
-}
-</style>
-</head>
-<body>
-<p id="description">This tests verifies the hit test regions given to the compositor. It can only be run in DumpRenderTree.
-The outputted rects should cover the hit test regions of all the listed elements.</p>
-<div id="console"></div>
-
-<div id="tests">
- <div id="normalFlow">
- Lorem ipsum
- <span>sum</span>.
- </div>
- <div id="absoluteChildContainer">
- Lorem ipsum
- <span id="absoluteChild">Absolute child</span>
- </div>
- <div id="relativeChildContainer">
- Lorem ipsum
- <span id="relativeChild">Relative child</span>
- </div>
- <div id="overhangingContainer">
- <div id="overhangingFloatingChild">Overhanging float overhanging float overhanging float overhanging float</div>
- </div>
- <div id="transformedChildContainer">
- <div id="transformedChild">Transformed</div>
- </div>
- <div>
- <b id="continuation">This b tag
- <div>causes a</div>
- continuation</b>
- </div>
-</div>
-<script>
-if (!window.testRunner)
- return;
-
-window.testRunner.dumpAsText();
-
-function listener() { }
-
-function log(msg) {
- var span = document.createElement("span");
- document.getElementById("console").appendChild(span);
- span.innerHTML = msg + '<br />';
-}
-
-function sortRects(a, b) {
- return a.top - b.top;
-}
-
-function logRects(id) {
- element = document.getElementById(id);
- element.addEventListener('touchstart', listener, false);
- rects = window.internals.touchEventTargetClientRects(document);
- var sortedRects = new Array();
- for (var i = 0; i < rects.length; ++i)
- sortedRects[i] = rects[i];
- sortedRects.sort(sortRects);
- for (var i = 0; i < rects.length; ++i)
- log(id + "[" + i + "]: (" + sortedRects[i].left + ", " + sortedRects[i].top + ", " + sortedRects[i].width + ", " + sortedRects[i].height + ")");
- element.removeEventListener('touchstart', listener, false);
-}
-
-logRects("normalFlow");
-logRects("absoluteChildContainer");
-logRects("relativeChildContainer");
-logRects("overhangingContainer");
-logRects("transformedChildContainer");
-logRects("continuation");
-
-var testContainer = document.getElementById("tests");
-testContainer.parentNode.removeChild(testContainer);
-
-</script>
-</body>
-<!DOCTYPE html>
-<html>
-<head>
-<style>
-#transformedChild {
- -webkit-transform: rotate3d(0.2, 1, 0, 35grad);
-}
-#absoluteChild {
- position: absolute;
- top: 300px;
-}
-#relativeChild {
- position: relative;
- top: 200px;
-}
-#overhangingContainer {
- height: 10px;
-}
-#overhangingFloatingChild {
- width: 100px;
- float: left;
-}
-#tests {
- font: 10px Ahem;
-}
-</style>
-</head>
-<body>
-<p id="description">This tests verifies the hit test regions given to the compositor. It can only be run in DumpRenderTree.
-The outputted rects should cover the hit test regions of all the listed elements.</p>
-<div id="console"></div>
-
-<div id="tests">
- <div id="normalFlow">
- Lorem ipsum
- <span>sum</span>.
- </div>
- <div id="absoluteChildContainer">
- Lorem ipsum
- <span id="absoluteChild">Absolute child</span>
- </div>
- <div id="relativeChildContainer">
- Lorem ipsum
- <span id="relativeChild">Relative child</span>
- </div>
- <div id="overhangingContainer">
- <div id="overhangingFloatingChild">Overhanging float overhanging float overhanging float overhanging float</div>
- </div>
- <div id="transformedChildContainer">
- <div id="transformedChild">Transformed</div>
- </div>
- <div>
- <b id="continuation">This b tag
- <div>causes a</div>
- continuation</b>
- </div>
-</div>
-<script>
-if (!window.testRunner)
- return;
-
-window.testRunner.dumpAsText();
-
-function listener() { }
-
-function log(msg) {
- var span = document.createElement("span");
- document.getElementById("console").appendChild(span);
- span.innerHTML = msg + '<br />';
-}
-
-function sortRects(a, b) {
- return a.top - b.top;
-}
-
-function logRects(id) {
- element = document.getElementById(id);
- element.addEventListener('touchstart', listener, false);
- rects = window.internals.touchEventTargetClientRects(document);
- var sortedRects = new Array();
- for (var i = 0; i < rects.length; ++i)
- sortedRects[i] = rects[i];
- sortedRects.sort(sortRects);
- for (var i = 0; i < rects.length; ++i)
- log(id + "[" + i + "]: (" + sortedRects[i].left + ", " + sortedRects[i].top + ", " + sortedRects[i].width + ", " + sortedRects[i].height + ")");
- element.removeEventListener('touchstart', listener, false);
-}
-
-logRects("normalFlow");
-logRects("absoluteChildContainer");
-logRects("relativeChildContainer");
-logRects("overhangingContainer");
-logRects("transformedChildContainer");
-logRects("continuation");
-
-var testContainer = document.getElementById("tests");
-testContainer.parentNode.removeChild(testContainer);
-
-</script>
-</body>
Modified: trunk/Source/WebCore/ChangeLog (137760 => 137761)
--- trunk/Source/WebCore/ChangeLog 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/ChangeLog 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1,3 +1,48 @@
+2012-12-14 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r137570.
+ http://trac.webkit.org/changeset/137570
+ https://bugs.webkit.org/show_bug.cgi?id=105048
+
+ Stale nodes in the touchEventTarget HashCountedSet are
+ triggering crashes. Rolling out while I find the root cause.
+ (Requested by leviw on #webkit).
+
+ * dom/Document.cpp:
+ (WebCore::Document::Document):
+ (WebCore::Document::didAddTouchEventHandler):
+ (WebCore::Document::didRemoveTouchEventHandler):
+ * dom/Document.h:
+ (WebCore::Document::touchEventHandlerCount):
+ (Document):
+ * dom/Node.cpp:
+ (WebCore::Node::didMoveToNewDocument):
+ (WebCore::tryAddEventListener):
+ (WebCore::tryRemoveEventListener):
+ * history/CachedFrame.cpp:
+ (WebCore::CachedFrameBase::restore):
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::~HTMLInputElement):
+ (WebCore::HTMLInputElement::updateType):
+ * page/DOMWindow.cpp:
+ (WebCore::DOMWindow::addEventListener):
+ (WebCore::DOMWindow::removeEventListener):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::handleTouchEvent):
+ * page/Frame.cpp:
+ (WebCore::Frame::setDocument):
+ * page/scrolling/ScrollingCoordinator.cpp:
+ * page/scrolling/ScrollingCoordinator.h:
+ * page/scrolling/chromium/ScrollingCoordinatorChromium.cpp:
+ (WebCore::ScrollingCoordinatorChromium::frameViewLayoutUpdated):
+ * page/scrolling/chromium/ScrollingCoordinatorChromium.h:
+ (ScrollingCoordinatorChromium):
+ * testing/Internals.cpp:
+ (WebCore::Internals::touchEventHandlerCount):
+ * testing/Internals.h:
+ (Internals):
+ * testing/Internals.idl:
+
2012-12-14 Michelangelo De Simone <[email protected]>
[CSS Shaders] Remove code for the other mesh box types (border-box | padding-box | content-box)
Modified: trunk/Source/WebCore/dom/Document.cpp (137760 => 137761)
--- trunk/Source/WebCore/dom/Document.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/dom/Document.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -498,6 +498,9 @@
, m_writeRecursionIsTooDeep(false)
, m_writeRecursionDepth(0)
, m_wheelEventHandlerCount(0)
+#if ENABLE(TOUCH_EVENTS)
+ , m_touchEventHandlerCount(0)
+#endif
, m_pendingTasksTimer(this, &Document::pendingTasksTimerFired)
, m_scheduledTasksAreSuspended(false)
, m_visualUpdatesAllowed(true)
@@ -5596,57 +5599,33 @@
wheelEventHandlerCountChanged(this);
}
-void Document::didAddTouchEventHandler(Node* handler)
+void Document::didAddTouchEventHandler()
{
#if ENABLE(TOUCH_EVENTS)
- if (!m_touchEventTargets.get())
- m_touchEventTargets = adoptPtr(new TouchEventTargetSet);
- m_touchEventTargets->add(handler);
- if (Document* parent = parentDocument()) {
- parent->didAddTouchEventHandler(this);
+ ++m_touchEventHandlerCount;
+ if (m_touchEventHandlerCount > 1)
return;
- }
- if (Page* page = this->page()) {
-#if ENABLE(TOUCH_EVENT_TRACKING)
- if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
- scrollingCoordinator->touchEventTargetRectsDidChange(this);
+ if (Page* page = this->page())
+ page->chrome()->client()->needTouchEvents(true);
#endif
- if (m_touchEventTargets->size() == 1)
- page->chrome()->client()->needTouchEvents(true);
- }
-#else
- UNUSED_PARAM(handler);
-#endif
}
-void Document::didRemoveTouchEventHandler(Node* handler)
+void Document::didRemoveTouchEventHandler()
{
#if ENABLE(TOUCH_EVENTS)
- if (!m_touchEventTargets.get())
+ ASSERT(m_touchEventHandlerCount);
+ --m_touchEventHandlerCount;
+ if (m_touchEventHandlerCount)
return;
- ASSERT(m_touchEventTargets->contains(handler));
- m_touchEventTargets->remove(handler);
- if (Document* parent = parentDocument()) {
- parent->didRemoveTouchEventHandler(this);
- return;
- }
Page* page = this->page();
if (!page)
return;
-#if ENABLE(TOUCH_EVENT_TRACKING)
- if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
- scrollingCoordinator->touchEventTargetRectsDidChange(this);
-#endif
- if (m_touchEventTargets->size())
- return;
for (const Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) {
- if (frame->document() && frame->document()->hasTouchEventHandlers())
+ if (frame->document() && frame->document()->touchEventHandlerCount())
return;
}
page->chrome()->client()->needTouchEvents(false);
-#else
- UNUSED_PARAM(handler);
#endif
}
Modified: trunk/Source/WebCore/dom/Document.h (137760 => 137761)
--- trunk/Source/WebCore/dom/Document.h 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/dom/Document.h 2012-12-14 20:16:33 UTC (rev 137761)
@@ -207,8 +207,6 @@
};
const int numNodeListInvalidationTypes = InvalidateOnAnyAttrChange + 1;
-typedef HashCountedSet<Node*> TouchEventTargetSet;
-
class Document : public ContainerNode, public TreeScope, public ScriptExecutionContext {
public:
static PassRefPtr<Document> create(Frame* frame, const KURL& url)
@@ -1120,20 +1118,14 @@
void didRemoveWheelEventHandler();
#if ENABLE(TOUCH_EVENTS)
- bool hasTouchEventHandlers() const { return (m_touchEventTargets.get()) ? m_touchEventTargets->size() : false; }
+ unsigned touchEventHandlerCount() const { return m_touchEventHandlerCount; }
#else
- bool hasTouchEventHandlers() const { return false; }
+ unsigned touchEventHandlerCount() const { return 0; }
#endif
- void didAddTouchEventHandler(Node*);
- void didRemoveTouchEventHandler(Node*);
+ void didAddTouchEventHandler();
+ void didRemoveTouchEventHandler();
-#if ENABLE(TOUCH_EVENTS)
- const TouchEventTargetSet* touchEventTargets() const { return m_touchEventTargets.get(); }
-#else
- const TouchEventTargetSet* touchEventTargets() const { return 0; }
-#endif
-
bool visualUpdatesAllowed() const { return m_visualUpdatesAllowed; }
#if ENABLE(MICRODATA)
@@ -1511,7 +1503,7 @@
unsigned m_wheelEventHandlerCount;
#if ENABLE(TOUCH_EVENTS)
- OwnPtr<TouchEventTargetSet> m_touchEventTargets;
+ unsigned m_touchEventHandlerCount;
#endif
#if ENABLE(REQUEST_ANIMATION_FRAME)
Modified: trunk/Source/WebCore/dom/Node.cpp (137760 => 137761)
--- trunk/Source/WebCore/dom/Node.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/dom/Node.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -2125,8 +2125,8 @@
for (size_t i = 0; i < touchEventNames.size(); ++i) {
const EventListenerVector& listeners = getEventListeners(touchEventNames[i]);
for (size_t j = 0; j < listeners.size(); ++j) {
- oldDocument->didRemoveTouchEventHandler(this);
- document()->didAddTouchEventHandler(this);
+ oldDocument->didRemoveTouchEventHandler();
+ document()->didAddTouchEventHandler();
}
}
@@ -2155,7 +2155,7 @@
if (eventType == eventNames().mousewheelEvent)
document->didAddWheelEventHandler();
else if (eventNames().isTouchEventType(eventType))
- document->didAddTouchEventHandler(targetNode);
+ document->didAddTouchEventHandler();
}
return true;
@@ -2177,7 +2177,7 @@
if (eventType == eventNames().mousewheelEvent)
document->didRemoveWheelEventHandler();
else if (eventNames().isTouchEventType(eventType))
- document->didRemoveTouchEventHandler(targetNode);
+ document->didRemoveTouchEventHandler();
}
return true;
Modified: trunk/Source/WebCore/history/CachedFrame.cpp (137760 => 137761)
--- trunk/Source/WebCore/history/CachedFrame.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/history/CachedFrame.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -134,7 +134,7 @@
m_document->enqueuePopstateEvent(historyItem && historyItem->stateObject() ? historyItem->stateObject() : SerializedScriptValue::nullValue());
#if ENABLE(TOUCH_EVENTS)
- if (m_document->hasTouchEventHandlers())
+ if (m_document->touchEventHandlerCount())
m_document->page()->chrome()->client()->needTouchEvents(true);
#endif
Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (137760 => 137761)
--- trunk/Source/WebCore/html/HTMLInputElement.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -163,7 +163,7 @@
document()->formController()->checkedRadioButtons().removeButton(this);
#if ENABLE(TOUCH_EVENTS)
if (m_hasTouchEventHandler)
- document()->didRemoveTouchEventHandler(this);
+ document()->didRemoveTouchEventHandler();
#endif
}
@@ -489,9 +489,9 @@
bool hasTouchEventHandler = m_inputType->hasTouchEventHandler();
if (hasTouchEventHandler != m_hasTouchEventHandler) {
if (hasTouchEventHandler)
- document()->didAddTouchEventHandler(this);
+ document()->didAddTouchEventHandler();
else
- document()->didRemoveTouchEventHandler(this);
+ document()->didRemoveTouchEventHandler();
m_hasTouchEventHandler = hasTouchEventHandler;
}
#endif
Modified: trunk/Source/WebCore/page/DOMWindow.cpp (137760 => 137761)
--- trunk/Source/WebCore/page/DOMWindow.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/DOMWindow.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1581,7 +1581,7 @@
if (eventType == eventNames().mousewheelEvent)
document->didAddWheelEventHandler();
else if (eventNames().isTouchEventType(eventType))
- document->didAddTouchEventHandler(document);
+ document->didAddTouchEventHandler();
else if (eventType == eventNames().storageEvent)
didAddStorageEventListener(this);
}
@@ -1612,7 +1612,7 @@
if (eventType == eventNames().mousewheelEvent)
document->didRemoveWheelEventHandler();
else if (eventNames().isTouchEventType(eventType))
- document->didRemoveTouchEventHandler(document);
+ document->didRemoveTouchEventHandler();
}
if (eventType == eventNames().unloadEvent)
Modified: trunk/Source/WebCore/page/EventHandler.cpp (137760 => 137761)
--- trunk/Source/WebCore/page/EventHandler.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/EventHandler.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -3769,7 +3769,7 @@
}
if (!doc)
continue;
- if (!doc->hasTouchEventHandlers())
+ if (!doc->touchEventHandlerCount())
continue;
m_originatingTouchPointTargets.set(touchPointTargetKey, node);
touchTarget = node;
@@ -3794,7 +3794,7 @@
Document* doc = touchTarget->toNode()->document();
if (!doc)
continue;
- if (!doc->hasTouchEventHandlers())
+ if (!doc->touchEventHandlerCount())
continue;
Frame* targetFrame = doc->frame();
if (!targetFrame)
Modified: trunk/Source/WebCore/page/Frame.cpp (137760 => 137761)
--- trunk/Source/WebCore/page/Frame.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/Frame.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -309,7 +309,7 @@
if (m_page && m_page->mainFrame() == this) {
notifyChromeClientWheelEventHandlerCountChanged();
#if ENABLE(TOUCH_EVENTS)
- if (m_doc && m_doc->hasTouchEventHandlers())
+ if (m_doc && m_doc->touchEventHandlerCount())
m_page->chrome()->client()->needTouchEvents(true);
#endif
}
Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (137760 => 137761)
--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -27,7 +27,6 @@
#include "ScrollingCoordinator.h"
-#include "Document.h"
#include "Frame.h"
#include "FrameView.h"
#include "IntRect.h"
@@ -177,54 +176,6 @@
return nonFastScrollableRegion;
}
-#if ENABLE(TOUCH_EVENT_TRACKING)
-static void accumulateRendererTouchEventTargetRects(Vector<IntRect>& rects, const RenderObject* renderer)
-{
- // FIXME: This method is O(N^2) as it walks the tree to the root for every renderer. RenderGeometryMap would fix this.
- rects.append(enclosingIntRect(renderer->clippedOverflowRectForRepaint(0)));
- if (renderer->isRenderBlock()) {
- const RenderBlock* block = toRenderBlock(renderer);
- for (RenderObject* child = block->firstChild(); child; child = child->nextSibling())
- accumulateRendererTouchEventTargetRects(rects, child);
- }
-}
-
-static void accumulateDocumentEventTargetRects(Vector<IntRect>& rects, const Document* document)
-{
- ASSERT(document);
- if (!document->touchEventTargets())
- return;
-
- const TouchEventTargetSet* targets = document->touchEventTargets();
- for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter != targets->end(); ++iter) {
- const Node* touchTarget = iter->key;
- if (touchTarget == document) {
- if (RenderView* view = document->renderView())
- rects.append(enclosingIntRect(view->clippedOverflowRectForRepaint(0)));
- return;
- }
-
- if (touchTarget->isDocumentNode() && touchTarget != document) {
- accumulateDocumentEventTargetRects(rects, static_cast<const Document*>(touchTarget));
- continue;
- }
-
- if (RenderObject* renderer = touchTarget->renderer())
- accumulateRendererTouchEventTargetRects(rects, renderer);
- }
-}
-
-void ScrollingCoordinator::computeAbsoluteTouchEventTargetRects(const Document* document, Vector<IntRect>& rects)
-{
- ASSERT(document);
- if (!document->view())
- return;
-
- // FIXME: These rects won't be properly updated if the renderers are in a sub-tree that scrolls.
- accumulateDocumentEventTargetRects(rects, document);
-}
-#endif
-
unsigned ScrollingCoordinator::computeCurrentWheelEventHandlerCount()
{
unsigned wheelEventHandlerCount = 0;
Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (137760 => 137761)
--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h 2012-12-14 20:16:33 UTC (rev 137761)
@@ -29,7 +29,6 @@
#include "IntRect.h"
#include "LayoutRect.h"
#include "PlatformWheelEvent.h"
-#include "RenderObject.h"
#include "ScrollTypes.h"
#include "Timer.h"
#include <wtf/Forward.h>
@@ -51,7 +50,6 @@
enum ScrollingNodeType { ScrollingNode, FixedNode };
-class Document;
class Frame;
class FrameView;
class GraphicsLayer;
@@ -151,12 +149,7 @@
virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*, GraphicsLayer*) { }
virtual void setLayerIsContainerForFixedPositionLayers(GraphicsLayer*, bool) { }
virtual void setLayerIsFixedToContainerLayer(GraphicsLayer*, bool) { }
- virtual void touchEventTargetRectsDidChange(const Document*) { }
-#if ENABLE(TOUCH_EVENT_TRACKING)
- void computeAbsoluteTouchEventTargetRects(const Document*, Vector<IntRect>&);
-#endif
-
static String mainThreadScrollingReasonsAsText(MainThreadScrollingReasons);
String mainThreadScrollingReasonsAsText() const;
Modified: trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp (137760 => 137761)
--- trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -115,32 +115,8 @@
// frame view whose layout was updated is not the main frame.
Region nonFastScrollableRegion = computeNonFastScrollableRegion(m_page->mainFrame(), IntPoint());
setNonFastScrollableRegion(nonFastScrollableRegion);
-#if ENABLE(TOUCH_EVENT_TRACKING)
- Vector<IntRect> touchEventTargetRects;
- computeAbsoluteTouchEventTargetRects(m_page->mainFrame()->document(), touchEventTargetRects);
- setTouchEventTargetRects(touchEventTargetRects);
-#endif
}
-void ScrollingCoordinatorChromium::touchEventTargetRectsDidChange(const Document* document)
-{
-#if ENABLE(TOUCH_EVENT_TRACKING)
- // Wait until after layout to update.
- if (m_page->mainFrame()->view()->needsLayout())
- return;
-
- // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
- setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
- if (m_private->scrollLayer()) {
- Vector<IntRect> touchEventTargetRects;
- computeAbsoluteTouchEventTargetRects(document, touchEventTargetRects);
- setTouchEventTargetRects(touchEventTargetRects);
- }
-#else
- UNUSED_PARAM(document);
-#endif
-}
-
void ScrollingCoordinatorChromium::frameViewRootLayerDidChange(FrameView* frameView)
{
ScrollingCoordinator::frameViewRootLayerDidChange(frameView);
@@ -233,18 +209,6 @@
}
}
-void ScrollingCoordinatorChromium::setTouchEventTargetRects(const Vector<IntRect>& absoluteHitTestRects)
-{
- // We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
- setScrollLayer(scrollLayerForFrameView(m_page->mainFrame()->view()));
- if (m_private->scrollLayer()) {
- WebVector<WebRect> webRects(absoluteHitTestRects.size());
- for (size_t i = 0; i < absoluteHitTestRects.size(); ++i)
- webRects[i] = absoluteHitTestRects[i];
- m_private->scrollLayer()->setTouchEventHandlerRegion(webRects);
- }
-}
-
void ScrollingCoordinatorChromium::setWheelEventHandlerCount(unsigned wheelEventHandlerCount)
{
// We won't necessarily get a setScrollLayer() call before this one, so grab the root ourselves.
Modified: trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.h (137760 => 137761)
--- trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.h 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/page/scrolling/chromium/ScrollingCoordinatorChromium.h 2012-12-14 20:16:33 UTC (rev 137761)
@@ -68,16 +68,12 @@
// Should be called whenever the scrollable layer for the given scroll area changes.
virtual void scrollableAreaScrollLayerDidChange(ScrollableArea*, GraphicsLayer*);
- // Should be called whenever touch handlers are registered, removed, or moved.
- virtual void touchEventTargetRectsDidChange(const Document*) OVERRIDE;
-
private:
virtual void recomputeWheelEventHandlerCountForFrameView(FrameView*);
virtual void setShouldUpdateScrollLayerPositionOnMainThread(MainThreadScrollingReasons);
void setScrollLayer(GraphicsLayer*);
void setNonFastScrollableRegion(const Region&);
- void setTouchEventTargetRects(const Vector<IntRect>&);
void setWheelEventHandlerCount(unsigned);
PassOwnPtr<WebKit::WebScrollbarLayer> createScrollbarLayer(Scrollbar*, WebKit::WebLayer* scrollLayer, GraphicsLayer* scrollbarGraphicsLayer, FrameView*);
Modified: trunk/Source/WebCore/testing/Internals.cpp (137760 => 137761)
--- trunk/Source/WebCore/testing/Internals.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/testing/Internals.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -73,7 +73,6 @@
#include "RenderTreeAsText.h"
#include "RuntimeEnabledFeatures.h"
#include "SchemeRegistry.h"
-#include "ScrollingCoordinator.h"
#include "SelectRuleFeatureSet.h"
#include "SerializedScriptValue.h"
#include "Settings.h"
@@ -1201,39 +1200,9 @@
return 0;
}
- const TouchEventTargetSet* touchHandlers = document->touchEventTargets();
- if (!touchHandlers)
- return 0;
-
- unsigned count = 0;
- for (TouchEventTargetSet::const_iterator iter = touchHandlers->begin(); iter != touchHandlers->end(); ++iter)
- count += iter->value;
- return count;
+ return document->touchEventHandlerCount();
}
-#if ENABLE(TOUCH_EVENT_TRACKING)
-PassRefPtr<ClientRectList> Internals::touchEventTargetClientRects(Document* document, ExceptionCode& ec)
-{
- if (!document || !document->view() || !document->page()) {
- ec = INVALID_ACCESS_ERR;
- return 0;
- }
- if (!document->page()->scrollingCoordinator())
- return ClientRectList::create();
-
- document->updateLayoutIgnorePendingStylesheets();
-
- Vector<IntRect> absoluteRects;
- document->page()->scrollingCoordinator()->computeAbsoluteTouchEventTargetRects(document, absoluteRects);
- Vector<FloatQuad> absoluteQuads(absoluteRects.size());
-
- for (size_t i = 0; i < absoluteRects.size(); ++i)
- absoluteQuads[i] = FloatQuad(absoluteRects[i]);
-
- return ClientRectList::create(absoluteQuads);
-}
-#endif
-
PassRefPtr<NodeList> Internals::nodesFromRect(Document* document, int x, int y, unsigned topPadding, unsigned rightPadding,
unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, ExceptionCode& ec) const
{
Modified: trunk/Source/WebCore/testing/Internals.h (137760 => 137761)
--- trunk/Source/WebCore/testing/Internals.h 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/testing/Internals.h 2012-12-14 20:16:33 UTC (rev 137761)
@@ -171,9 +171,6 @@
unsigned wheelEventHandlerCount(Document*, ExceptionCode&);
unsigned touchEventHandlerCount(Document*, ExceptionCode&);
-#if ENABLE(TOUCH_EVENT_TRACKING)
- PassRefPtr<ClientRectList> touchEventTargetClientRects(Document*, ExceptionCode&);
-#endif
PassRefPtr<NodeList> nodesFromRect(Document*, int x, int y, unsigned topPadding, unsigned rightPadding,
unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, ExceptionCode&) const;
Modified: trunk/Source/WebCore/testing/Internals.idl (137760 => 137761)
--- trunk/Source/WebCore/testing/Internals.idl 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebCore/testing/Internals.idl 2012-12-14 20:16:33 UTC (rev 137761)
@@ -139,9 +139,6 @@
unsigned long wheelEventHandlerCount(in Document document) raises (DOMException);
unsigned long touchEventHandlerCount(in Document document) raises (DOMException);
-#if defined(ENABLE_TOUCH_EVENT_TRACKING) && ENABLE_TOUCH_EVENT_TRACKING
- ClientRectList touchEventTargetClientRects(in Document document) raises (DOMException);
-#endif
NodeList nodesFromRect(in Document document, in long x, in long y,
in unsigned long topPadding, in unsigned long rightPadding, in unsigned long bottomPadding, in unsigned long leftPadding,
Modified: trunk/Source/WebKit/chromium/ChangeLog (137760 => 137761)
--- trunk/Source/WebKit/chromium/ChangeLog 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebKit/chromium/ChangeLog 2012-12-14 20:16:33 UTC (rev 137761)
@@ -1,3 +1,18 @@
+2012-12-14 Sheriff Bot <[email protected]>
+
+ Unreviewed, rolling out r137570.
+ http://trac.webkit.org/changeset/137570
+ https://bugs.webkit.org/show_bug.cgi?id=105048
+
+ Stale nodes in the touchEventTarget HashCountedSet are
+ triggering crashes. Rolling out while I find the root cause.
+ (Requested by leviw on #webkit).
+
+ * features.gypi:
+ * src/WebPluginContainerImpl.cpp:
+ (WebKit::WebPluginContainerImpl::requestTouchEventType):
+ (WebKit::WebPluginContainerImpl::~WebPluginContainerImpl):
+
2012-12-14 Stephen White <[email protected]>
Unreviewed. Rolled DEPS.
Modified: trunk/Source/WebKit/chromium/features.gypi (137760 => 137761)
--- trunk/Source/WebKit/chromium/features.gypi 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebKit/chromium/features.gypi 2012-12-14 20:16:33 UTC (rev 137761)
@@ -116,7 +116,6 @@
'ENABLE_TOUCH_ADJUSTMENT=1',
'ENABLE_TOUCH_EVENTS=<(enable_touch_events)',
'ENABLE_TOUCH_ICON_LOADING=<(enable_touch_icon_loading)',
- 'ENABLE_TOUCH_EVENT_TRACKING=<(enable_touch_events)',
'ENABLE_TOUCH_SLIDER=1',
'ENABLE_USER_TIMING=1',
'ENABLE_V8_SCRIPT_DEBUG_SERVER=1',
Modified: trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp (137760 => 137761)
--- trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp 2012-12-14 19:34:10 UTC (rev 137760)
+++ trunk/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp 2012-12-14 20:16:33 UTC (rev 137761)
@@ -527,9 +527,9 @@
return;
m_touchEventRequestType = requestType;
if (m_touchEventRequestType != TouchEventRequestTypeNone)
- m_element->document()->didAddTouchEventHandler(m_element);
+ m_element->document()->didAddTouchEventHandler();
else
- m_element->document()->didRemoveTouchEventHandler(m_element);
+ m_element->document()->didRemoveTouchEventHandler();
}
void WebPluginContainerImpl::setWantsWheelEvents(bool wantsWheelEvents)
@@ -672,7 +672,7 @@
WebPluginContainerImpl::~WebPluginContainerImpl()
{
if (m_touchEventRequestType != TouchEventRequestTypeNone)
- m_element->document()->didRemoveTouchEventHandler(m_element);
+ m_element->document()->didRemoveTouchEventHandler();
for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i)
m_pluginLoadObservers[i]->clearPluginContainer();