Title: [113329] trunk
Revision
113329
Author
toniki...@webkit.org
Date
2012-04-05 09:46:22 -0700 (Thu, 05 Apr 2012)

Log Message

Extend HitTestResult to support not "discarding" shadow content in favor of its DOM ancestor
https://bugs.webkit.org/show_bug.cgi?id=80847

Reviewed by David Hyatt.
Patch by Antonio Gomes <ago...@rim.com>

.:

Exporting Internals::nodesFromRect symbols for the Gtk build.

* Source/autotools/symbols.filter:

Source/WebCore:

In order to improve touch precision on shadow tree content, patch
extends the rect-hittest'ing system to allow shadow content
to be stored as the rect-hittest result node list.

Primary use cases are for this extension is making it easier to
improve the clickability of default controls of <video> and <audio>
elements.

For the callee site, the use is simple: if shadow content in the rect-hittest
result is desired, just add an extra 'AllowShadowContent' parameter at the creation
of the HitTestResult object.

Test: fast/dom/nodesFromRect-shadowContent.html

* dom/Document.cpp:
(WebCore::Document::nodesFromRect):
* dom/Document.h:
(Document):
* page/EventHandler.cpp:
(WebCore::EventHandler::hitTestResultAtPoint):
* rendering/HitTestResult.cpp:
(WebCore::HitTestResult::HitTestResult):
(WebCore::HitTestResult::addNodeToRectBasedTestResult):
* rendering/HitTestResult.h:
(HitTestResult):
(WebCore::HitTestResult::shadowContentFilterPolicy):
* rendering/RenderImage.cpp:
(WebCore::RenderImage::nodeAtPoint):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::hitTestLayer):
(WebCore::RenderLayer::hitTestList):
* testing/Internals.cpp:
(WebCore::Internals::nodesFromRect):
* testing/Internals.h:
(Internals):
* testing/Internals.idl:

LayoutTests:

Adds a test that rect-hittest's a element known to have a shadow
tree (<video> with built-in controls), and check if its return type
contains its clickable shadow nodes.

* fast/dom/nodesFromRect-shadowContent-expected.txt: Added.
* fast/dom/nodesFromRect-shadowContent.html: Added.
* fast/dom/resources/nodesFromRect.js:
(check):
(checkShadowContent):

Conflicts:

	Source/WebCore/page/FrameView.cpp

Modified Paths

Added Paths

Diff

Modified: trunk/ChangeLog (113328 => 113329)


--- trunk/ChangeLog	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/ChangeLog	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1,3 +1,14 @@
+2012-03-14  Antonio Gomes  <ago...@rim.com>
+
+        Extend HitTestResult to support not "discarding" shadow content in favor of its DOM ancestor
+        https://bugs.webkit.org/show_bug.cgi?id=80847
+
+        Reviewed by David Hyatt.
+
+        Exporting Internals::nodesFromRect symbols for the Gtk build.
+
+        * Source/autotools/symbols.filter:
+
 2012-04-05  Jonathan Dong  <jonathan.d...@torchmobile.com.cn>
 
         [BlackBerry] Clear local storage won't take effect until browser exit and relaunch

Modified: trunk/LayoutTests/ChangeLog (113328 => 113329)


--- trunk/LayoutTests/ChangeLog	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/LayoutTests/ChangeLog	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1,3 +1,20 @@
+2012-03-14  Antonio Gomes  <ago...@rim.com>
+
+        Extend HitTestResult to support not "discarding" shadow content in favor of its DOM ancestor
+        https://bugs.webkit.org/show_bug.cgi?id=80847
+
+        Reviewed by David Hyatt.
+
+        Adds a test that rect-hittest's a element known to have a shadow
+        tree (<video> with built-in controls), and check if its return type
+        contains its clickable shadow nodes.
+
+        * fast/dom/nodesFromRect-shadowContent-expected.txt: Added.
+        * fast/dom/nodesFromRect-shadowContent.html: Added.
+        * fast/dom/resources/nodesFromRect.js:
+        (check):
+        (checkShadowContent):
+
 2012-04-05  Hans Muller  <hmul...@adobe.com>
 
         Rename CSS Exclusions "rect" value to "rectangle"

Added: trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent-expected.txt (0 => 113329)


--- trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent-expected.txt	2012-04-05 16:46:22 UTC (rev 113329)
@@ -0,0 +1,6 @@
+PASS All correct nodes found for rect
+PASS All correct nodes found for rect
+This test only runs in DRT!
+
+EXPECTED (video.controls != 'null') OK
+

Added: trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent.html (0 => 113329)


--- trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent.html	                        (rev 0)
+++ trunk/LayoutTests/fast/dom/nodesFromRect-shadowContent.html	2012-04-05 16:46:22 UTC (rev 113329)
@@ -0,0 +1,62 @@
+<html>
+<head>
+  <title>Document::nodesFromRect shadow content access - bug 80847 </title>
+  <style type="text/css" media="screen">
+    video {
+      margin: 50px;
+    }
+  </style>
+  <script src=""
+  <script src=""
+  <script src=""
+  <script src=""
+  <script type="text/_javascript_" charset="utf-8">
+    function runTest()
+    {
+      if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+        layoutTestController.waitUntilDone();
+      }
+
+      var e = {};
+
+      // Set up shortcut access to elements
+      e['html'] = document.getElementsByTagName("html")[0];
+      ['v1', 'body'].forEach(function(a) {
+        e[a] = document.getElementById(a);
+      });
+
+      window.scrollTo(0, 0);
+
+      var playCoords;
+      try {
+          playCoords = mediaControlsButtonCoordinates(video, "play-button");
+      } catch (exception) {
+          failTest(exception.description);
+          return;
+      }
+      var clickX = playCoords[0];
+      var clickY = playCoords[1];
+
+      check(clickX, clickY, 10, 10, 20, 20, [e.v1, e.body]);
+
+      var shadow =['-webkit-media-controls-timeline-container', '-webkit-media-controls-play-button', '-webkit-media-controls-panel', '-webkit-media-controls'];
+      checkShadowContent(clickX, clickY, 10, 10, 20, 20, shadow);
+
+      if (window.layoutTestController)
+        layoutTestController.notifyDone();
+    }
+
+    window._onload_ = runTest;
+  </script>
+</head>
+<body id="body">
+    <video id="v1" controls></video>
+    <p>This test only runs in DRT!</p>
+    <script src=""
+    <script>
+        testExpected("video.controls", null, '!=');
+        video.src = "" "content/test");
+    </script>
+</body>
+</html>

Modified: trunk/LayoutTests/fast/dom/resources/nodesFromRect.js (113328 => 113329)


--- trunk/LayoutTests/fast/dom/resources/nodesFromRect.js	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/LayoutTests/fast/dom/resources/nodesFromRect.js	2012-04-05 16:46:22 UTC (rev 113329)
@@ -11,7 +11,7 @@
   if (!doc)
     doc = document;
 
-  var nodes = internals.nodesFromRect(doc, x, y, topPadding, rightPadding, bottomPadding, leftPadding, true /* ignoreClipping */);
+  var nodes = internals.nodesFromRect(doc, x, y, topPadding, rightPadding, bottomPadding, leftPadding, true /* ignoreClipping */, false /* allow shadow content */);
   if (!nodes)
     return;
 
@@ -37,6 +37,36 @@
   testPassed("All correct nodes found for rect");
 }
 
+function checkShadowContent(x, y, topPadding, rightPadding, bottomPadding, leftPadding, shadowContent, doc)
+{
+  if (!window.internals)
+    return;
+
+  if (!doc)
+    doc = document;
+
+  var nodes = internals.nodesFromRect(doc, x, y, topPadding, rightPadding, bottomPadding, leftPadding, true /* ignoreClipping */, true /* allowShadowContent */);
+  if (!nodes)
+    return;
+
+  for (var j = 0; j < shadowContent.length; j++) {
+    var found = false;
+    for (var i = 0; i < nodes.length; i++) {
+      if (internals.shadowPseudoId(nodes[i]) == shadowContent[j]) {
+          found = true;
+          break;
+      }
+    }
+
+    if (!found) {
+      testFailed("Pseudo Id not found: " + shadowContent[j]);
+      return;
+    }
+  }
+
+  testPassed("All correct nodes found for rect");
+}
+
 function getCenterFor(element)
 {
   var rect = element.getBoundingClientRect();

Modified: trunk/LayoutTests/platform/chromium/test_expectations.txt (113328 => 113329)


--- trunk/LayoutTests/platform/chromium/test_expectations.txt	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/LayoutTests/platform/chromium/test_expectations.txt	2012-04-05 16:46:22 UTC (rev 113329)
@@ -2298,6 +2298,10 @@
 BUGWK46600 SKIP : fast/dom/nodesFromRect-links-and-text.html = TEXT
 BUGWK46600 SKIP : fast/dom/nodesFromRect-inner-documents.html = TEXT
 
+// For some reason it seems to not properly rect hit-tests elements in shadow
+// content of <video> elements.
+BUGWK46600 SKIP : fast/dom/nodesFromRect-shadowContent.html = TEXT
+
 BUGCR59671 LINUX : svg/custom/convolution-crash.svg = PASS TEXT
 
 BUGJAMESR LINUX WIN : fast/text/international/vertical-text-glyph-test.html = IMAGE+TEXT
@@ -3972,4 +3976,4 @@
 BUGWK83183 MAC : svg/as-image/animated-svg-as-image-no-fixed-intrinsic-size.html = PASS IMAGE
 BUGWK83185 MAC DEBUG : fast/writing-mode/relative-positioning-percentages.html = CRASH
 BUGWK83219 LION : fonts/cursive.html = PASS IMAGE
-BUGWK83286 : fast/filesystem/file-writer-abort-continue.html = CRASH PASS
\ No newline at end of file
+BUGWK83286 : fast/filesystem/file-writer-abort-continue.html = CRASH PASS

Modified: trunk/Source/WebCore/ChangeLog (113328 => 113329)


--- trunk/Source/WebCore/ChangeLog	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/ChangeLog	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1,3 +1,47 @@
+2012-03-14  Antonio Gomes  <ago...@rim.com>
+
+        Extend HitTestResult to support not "discarding" shadow content in favor of its DOM ancestor
+        https://bugs.webkit.org/show_bug.cgi?id=80847
+
+        Reviewed by David Hyatt.
+
+        In order to improve touch precision on shadow tree content, patch
+        extends the rect-hittest'ing system to allow shadow content
+        to be stored as the rect-hittest result node list.
+
+        Primary use cases are for this extension is making it easier to
+        improve the clickability of default controls of <video> and <audio>
+        elements.
+
+        For the callee site, the use is simple: if shadow content in the rect-hittest
+        result is desired, just add an extra 'AllowShadowContent' parameter at the creation
+        of the HitTestResult object.
+
+        Test: fast/dom/nodesFromRect-shadowContent.html
+
+        * dom/Document.cpp:
+        (WebCore::Document::nodesFromRect):
+        * dom/Document.h:
+        (Document):
+        * page/EventHandler.cpp:
+        (WebCore::EventHandler::hitTestResultAtPoint):
+        * rendering/HitTestResult.cpp:
+        (WebCore::HitTestResult::HitTestResult):
+        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
+        * rendering/HitTestResult.h:
+        (HitTestResult):
+        (WebCore::HitTestResult::shadowContentFilterPolicy):
+        * rendering/RenderImage.cpp:
+        (WebCore::RenderImage::nodeAtPoint):
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::hitTestLayer):
+        (WebCore::RenderLayer::hitTestList):
+        * testing/Internals.cpp:
+        (WebCore::Internals::nodesFromRect):
+        * testing/Internals.h:
+        (Internals):
+        * testing/Internals.idl:
+
 2012-04-05  Hans Muller  <hmul...@adobe.com>
 
         Rename CSS Exclusions "rect" value to "rectangle"

Modified: trunk/Source/WebCore/WebCore.exp.in (113328 => 113329)


--- trunk/Source/WebCore/WebCore.exp.in	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1475,7 +1475,7 @@
 __ZNK7WebCore8Document10renderViewEv
 __ZNK7WebCore8Document11completeURLERKN3WTF6StringE
 __ZNK7WebCore8Document13axObjectCacheEv
-__ZNK7WebCore8Document13nodesFromRectEiijjjjb
+__ZNK7WebCore8Document13nodesFromRectEiijjjjbb
 __ZNK7WebCore8Document14getElementByIdERKN3WTF12AtomicStringE
 __ZNK7WebCore8Document16dashboardRegionsEv
 __ZNK7WebCore8Document31displayStringModifiedByEncodingERKN3WTF6StringE

Modified: trunk/Source/WebCore/dom/Document.cpp (113328 => 113329)


--- trunk/Source/WebCore/dom/Document.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/dom/Document.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1240,7 +1240,7 @@
 // * making it receive a rect as parameter, i.e. nodesFromRect(x, y, w, h);
 // * making it receive the expading size of each direction separately,
 //   i.e. nodesFromRect(x, y, topSize, rightSize, bottomSize, leftSize);
-PassRefPtr<NodeList> Document::nodesFromRect(int centerX, int centerY, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping) const
+PassRefPtr<NodeList> Document::nodesFromRect(int centerX, int centerY, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent) const
 {
     // FIXME: Share code between this, elementFromPoint and caretRangeFromPoint.
     if (!renderer())
@@ -1272,7 +1272,8 @@
         return handleZeroPadding(request, result);
     }
 
-    HitTestResult result(point, topPadding, rightPadding, bottomPadding, leftPadding);
+    enum ShadowContentFilterPolicy shadowContentFilterPolicy = allowShadowContent ? AllowShadowContent : DoNotAllowShadowContent;
+    HitTestResult result(point, topPadding, rightPadding, bottomPadding, leftPadding, shadowContentFilterPolicy);
     renderView()->layer()->hitTest(request, result);
 
     return StaticHashSetNodeList::adopt(result.rectBasedTestResult());

Modified: trunk/Source/WebCore/dom/Document.h (113328 => 113329)


--- trunk/Source/WebCore/dom/Document.h	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/dom/Document.h	2012-04-05 16:46:22 UTC (rev 113329)
@@ -370,7 +370,7 @@
      *        If false, this method returns null for coordinates outside of the viewport.
      */
     PassRefPtr<NodeList> nodesFromRect(int centerX, int centerY, unsigned topPadding, unsigned rightPadding,
-                                       unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping) const;
+                                       unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent) const;
     Element* elementFromPoint(int x, int y) const;
     PassRefPtr<Range> caretRangeFromPoint(int x, int y);
 

Modified: trunk/Source/WebCore/page/EventHandler.cpp (113328 => 113329)


--- trunk/Source/WebCore/page/EventHandler.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/page/EventHandler.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1040,7 +1040,9 @@
     
 HitTestResult EventHandler::hitTestResultAtPoint(const LayoutPoint& point, bool allowShadowContent, bool ignoreClipping, HitTestScrollbars testScrollbars, HitTestRequest::HitTestRequestType hitType, const LayoutSize& padding)
 {
-    HitTestResult result(point, padding.height(), padding.width(), padding.height(), padding.width());
+    enum ShadowContentFilterPolicy shadowContentFilterPolicy = allowShadowContent ? AllowShadowContent : DoNotAllowShadowContent;
+    HitTestResult result(point, padding.height(), padding.width(), padding.height(), padding.width(), shadowContentFilterPolicy);
+
     if (!m_frame->contentRenderer())
         return result;
     if (ignoreClipping)
@@ -1061,7 +1063,7 @@
         FrameView* view = static_cast<FrameView*>(widget);
         LayoutPoint widgetPoint(result.localPoint().x() + view->scrollX() - renderWidget->borderLeft() - renderWidget->paddingLeft(), 
             result.localPoint().y() + view->scrollY() - renderWidget->borderTop() - renderWidget->paddingTop());
-        HitTestResult widgetHitTestResult(widgetPoint, padding.height(), padding.width(), padding.height(), padding.width());
+        HitTestResult widgetHitTestResult(widgetPoint, padding.height(), padding.width(), padding.height(), padding.width(), shadowContentFilterPolicy);
         frame->contentRenderer()->layer()->hitTest(HitTestRequest(hitType), widgetHitTestResult);
         result = widgetHitTestResult;
 

Modified: trunk/Source/WebCore/rendering/HitTestResult.cpp (113328 => 113329)


--- trunk/Source/WebCore/rendering/HitTestResult.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/rendering/HitTestResult.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -54,6 +54,7 @@
     , m_rightPadding(0)
     , m_bottomPadding(0)
     , m_leftPadding(0)
+    , m_shadowContentFilterPolicy(DoNotAllowShadowContent)
     , m_region(0)
 {
 }
@@ -66,17 +67,19 @@
     , m_rightPadding(0)
     , m_bottomPadding(0)
     , m_leftPadding(0)
+    , m_shadowContentFilterPolicy(DoNotAllowShadowContent)
     , m_region(0)
 {
 }
 
-HitTestResult::HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding)
+HitTestResult::HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding, ShadowContentFilterPolicy allowShadowContent)
     : m_point(centerPoint)
     , m_isOverWidget(false)
     , m_topPadding(topPadding)
     , m_rightPadding(rightPadding)
     , m_bottomPadding(bottomPadding)
     , m_leftPadding(leftPadding)
+    , m_shadowContentFilterPolicy(allowShadowContent)
     , m_region(0)
 {
     // If all padding values passed in are zero then it is not a rect based hit test.
@@ -95,6 +98,7 @@
     , m_innerURLElement(other.URLElement())
     , m_scrollbar(other.scrollbar())
     , m_isOverWidget(other.isOverWidget())
+    , m_shadowContentFilterPolicy(other.shadowContentFilterPolicy())
     , m_region(other.region())
 {
     // Only copy the padding and NodeSet in case of rect hit test.
@@ -572,7 +576,9 @@
     if (!node)
         return true;
 
-    node = node->shadowAncestorNode();
+    if (m_shadowContentFilterPolicy == DoNotAllowShadowContent)
+        node = node->shadowAncestorNode();
+
     mutableRectBasedTestResult().add(node);
 
     if (node->renderer()->isInline()) {
@@ -603,7 +609,9 @@
     if (!node)
         return true;
 
-    node = node->shadowAncestorNode();
+    if (m_shadowContentFilterPolicy == DoNotAllowShadowContent)
+        node = node->shadowAncestorNode();
+
     mutableRectBasedTestResult().add(node);
 
     if (node->renderer()->isInline()) {

Modified: trunk/Source/WebCore/rendering/HitTestResult.h (113328 => 113329)


--- trunk/Source/WebCore/rendering/HitTestResult.h	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/rendering/HitTestResult.h	2012-04-05 16:46:22 UTC (rev 113329)
@@ -42,6 +42,8 @@
 class RenderRegion;
 class Scrollbar;
 
+enum ShadowContentFilterPolicy { DoNotAllowShadowContent, AllowShadowContent };
+
 class HitTestResult {
 public:
     typedef ListHashSet<RefPtr<Node> > NodeSet;
@@ -49,7 +51,7 @@
     HitTestResult();
     HitTestResult(const LayoutPoint&);
     // Pass non-negative padding values to perform a rect-based hit test.
-    HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding);
+    HitTestResult(const LayoutPoint& centerPoint, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding, unsigned leftPadding, ShadowContentFilterPolicy);
     HitTestResult(const HitTestResult&);
     ~HitTestResult();
     HitTestResult& operator=(const HitTestResult&);
@@ -68,6 +70,8 @@
 
     void setToNonShadowAncestor();
 
+    ShadowContentFilterPolicy shadowContentFilterPolicy() const { return m_shadowContentFilterPolicy; }
+
     void setInnerNode(Node*);
     void setInnerNonSharedNode(Node*);
     void setPoint(const LayoutPoint& p) { m_point = p; }
@@ -146,6 +150,7 @@
     int m_rightPadding;
     int m_bottomPadding;
     int m_leftPadding;
+    ShadowContentFilterPolicy m_shadowContentFilterPolicy;
     
     RenderRegion* m_region; // The region we're inside.
 

Modified: trunk/Source/WebCore/rendering/RenderImage.cpp (113328 => 113329)


--- trunk/Source/WebCore/rendering/RenderImage.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/rendering/RenderImage.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -471,7 +471,7 @@
 
 bool RenderImage::nodeAtPoint(const HitTestRequest& request, HitTestResult& result, const LayoutPoint& pointInContainer, const LayoutPoint& accumulatedOffset, HitTestAction hitTestAction)
 {
-    HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding());
+    HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding(), result.shadowContentFilterPolicy());
     bool inside = RenderReplaced::nodeAtPoint(request, tempResult, pointInContainer, accumulatedOffset, hitTestAction);
 
     if (tempResult.innerNode() && node()) {

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (113328 => 113329)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -3517,7 +3517,7 @@
     // Next we want to see if the mouse pos is inside the child RenderObjects of the layer.
     if (fgRect.intersects(hitTestArea) && isSelfPaintingLayer()) {
         // Hit test with a temporary HitTestResult, because we only want to commit to 'result' if we know we're frontmost.
-        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding());
+        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding(), result.shadowContentFilterPolicy());
         if (hitTestContents(request, tempResult, layerBounds, hitTestPoint, HitTestDescendants) &&
             isHitCandidate(this, false, zOffsetForContentsPtr, unflattenedTransformState.get())) {
             if (result.isRectBasedTest())
@@ -3546,7 +3546,7 @@
         return candidateLayer;
 
     if (bgRect.intersects(hitTestArea) && isSelfPaintingLayer()) {
-        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding());
+        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding(), result.shadowContentFilterPolicy());
         if (hitTestContents(request, tempResult, layerBounds, hitTestPoint, HitTestSelf) &&
             isHitCandidate(this, false, zOffsetForContentsPtr, unflattenedTransformState.get())) {
             if (result.isRectBasedTest())
@@ -3602,7 +3602,7 @@
     for (int i = list->size() - 1; i >= 0; --i) {
         RenderLayer* childLayer = list->at(i);
         RenderLayer* hitLayer = 0;
-        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding());
+        HitTestResult tempResult(result.point(), result.topPadding(), result.rightPadding(), result.bottomPadding(), result.leftPadding(), result.shadowContentFilterPolicy());
         if (childLayer->isPaginated())
             hitLayer = hitTestPaginatedChildLayer(childLayer, rootLayer, request, tempResult, hitTestRect, hitTestPoint, transformState, zOffsetForDescendants);
         else

Modified: trunk/Source/WebCore/testing/Internals.cpp (113328 => 113329)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -814,14 +814,14 @@
 }
 
 PassRefPtr<NodeList> Internals::nodesFromRect(Document* document, int x, int y, unsigned topPadding, unsigned rightPadding,
-    unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, ExceptionCode& ec) const
+    unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, ExceptionCode& ec) const
 {
     if (!document || !document->frame() || !document->frame()->view()) {
         ec = INVALID_ACCESS_ERR;
         return 0;
     }
 
-    return document->nodesFromRect(x, y, topPadding, rightPadding, bottomPadding, leftPadding, ignoreClipping);
+    return document->nodesFromRect(x, y, topPadding, rightPadding, bottomPadding, leftPadding, ignoreClipping, allowShadowContent);
 }
 
 void Internals::emitInspectorDidBeginFrame()

Modified: trunk/Source/WebCore/testing/Internals.h (113328 => 113329)


--- trunk/Source/WebCore/testing/Internals.h	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/testing/Internals.h	2012-04-05 16:46:22 UTC (rev 113329)
@@ -141,7 +141,7 @@
     unsigned touchEventHandlerCount(Document*, ExceptionCode&);
 
     PassRefPtr<NodeList> nodesFromRect(Document*, int x, int y, unsigned topPadding, unsigned rightPadding,
-        unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, ExceptionCode&) const;
+        unsigned bottomPadding, unsigned leftPadding, bool ignoreClipping, bool allowShadowContent, ExceptionCode&) const;
 
     void emitInspectorDidBeginFrame();
     void emitInspectorDidCancelFrame();

Modified: trunk/Source/WebCore/testing/Internals.idl (113328 => 113329)


--- trunk/Source/WebCore/testing/Internals.idl	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-04-05 16:46:22 UTC (rev 113329)
@@ -116,7 +116,7 @@
 
         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,
-            in boolean ignoreClipping) raises (DOMException);
+            in boolean ignoreClipping, in boolean allowShadowContent) raises (DOMException);
 
         void emitInspectorDidBeginFrame();
         void emitInspectorDidCancelFrame();

Modified: trunk/Source/WebKit/qt/Api/qwebpage.cpp (113328 => 113329)


--- trunk/Source/WebKit/qt/Api/qwebpage.cpp	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebKit/qt/Api/qwebpage.cpp	2012-04-05 16:46:22 UTC (rev 113329)
@@ -1567,7 +1567,7 @@
     int x = touchPoint.x();
     int y = touchPoint.y();
 
-    RefPtr<NodeList> intersectedNodes = document->nodesFromRect(x, y, m_topPadding, m_rightPadding, m_bottomPadding, m_leftPadding, false);
+    RefPtr<NodeList> intersectedNodes = document->nodesFromRect(x, y, m_topPadding, m_rightPadding, m_bottomPadding, m_leftPadding, false /*ignoreClipping*/, false /*allowShadowContent*/);
     if (!intersectedNodes)
         return IntPoint();
 

Modified: trunk/Source/WebKit2/win/WebKit2.def (113328 => 113329)


--- trunk/Source/WebKit2/win/WebKit2.def	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/WebKit2/win/WebKit2.def	2012-04-05 16:46:22 UTC (rev 113329)
@@ -239,5 +239,5 @@
         ?utf8@String@WTF@@QBE?AVCString@2@_N@Z
         ?view@Document@WebCore@@QBEPAVFrameView@2@XZ
         ?willDetachPage@FrameDestructionObserver@WebCore@@UAEXXZ
-        ?nodesFromRect@Document@WebCore@@QBE?AV?$PassRefPtr@VNodeList@WebCore@@@WTF@@HHIIII_N@Z
+        ?nodesFromRect@Document@WebCore@@QBE?AV?$PassRefPtr@VNodeList@WebCore@@@WTF@@HHIIII_N0@Z
         ?selectionStartHasMarkerFor@Editor@WebCore@@QBE_NW4MarkerType@DocumentMarker@2@HH@Z

Modified: trunk/Source/autotools/symbols.filter (113328 => 113329)


--- trunk/Source/autotools/symbols.filter	2012-04-05 16:41:51 UTC (rev 113328)
+++ trunk/Source/autotools/symbols.filter	2012-04-05 16:46:22 UTC (rev 113329)
@@ -128,7 +128,7 @@
 _ZN7WebCore22RuntimeEnabledFeatures31isMultipleShadowSubtreesEnabledE;
 _ZN7WebCore22RuntimeEnabledFeatures32setMultipleShadowSubtreesEnabledEb;
 _ZN7WebCore22RuntimeEnabledFeatures18isShadowDOMEnabledE;
-_ZNK7WebCore8Document13nodesFromRectEiijjjjb;
+_ZNK7WebCore8Document13nodesFromRectEiijjjjbb;
 _ZN7WebCore4toJSEPN3JSC9ExecStateEPNS_17JSDOMGlobalObjectEPNS_8NodeListE;
 _ZNK7WebCore6Editor26selectionStartHasMarkerForENS_14DocumentMarker10MarkerTypeEii;
 local:
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to