Changeset 78077 in webkit


Ignore:
Timestamp:
Feb 9, 2011 10:03:38 AM (13 years ago)
Author:
Dimitri Glazkov
Message:

2011-02-08 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Darin Adler.

REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
https://bugs.webkit.org/show_bug.cgi?id=52065

  • fast/events/shadow-boundary-crossing.html: Added relatedTarget retargeting test.

2011-02-08 Dimitri Glazkov <Dimitri Glazkov>

Reviewed by Darin Adler.

REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
https://bugs.webkit.org/show_bug.cgi?id=52065

  • dom/Node.cpp: (WebCore::pullOutOfShadow): Added a helper to move a node to the outermost

boundary of shadow DOM.

(WebCore::Node::dispatchMouseEvent): Changed to use pullOutOfShadow.

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r78076 r78077  
     12011-02-08  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
     6        https://bugs.webkit.org/show_bug.cgi?id=52065
     7
     8        * fast/events/shadow-boundary-crossing.html: Added relatedTarget retargeting test.
     9
    1102011-02-09  Martin Robinson  <mrobinson@igalia.com>
    211
  • trunk/LayoutTests/fast/events/shadow-boundary-crossing-expected.txt

    r75536 r78077  
    77Label should look beyond shadow boundary to detect if it encloses its associated element: PASS
    88Events for default event handler should not be retargeted: PASS
     9Event's relatedTarget should be retargeted: PASS
    910Other events should be retargeted: PASS
    1011After event dispatch, the event object should not reveal shadow DOM: PASS
  • trunk/LayoutTests/fast/events/shadow-boundary-crossing.html

    r75536 r78077  
    1010}
    1111
    12 function clickOn(element)
     12function moveOver(element)
    1313{
    1414    if (!window.eventSender)
     
    1818    var y = element.offsetTop + element.offsetHeight / 2;
    1919    eventSender.mouseMoveTo(x, y);
     20}
     21
     22function clickOn(element)
     23{
     24    moveOver(element);
    2025    eventSender.mouseDown();
    2126    eventSender.mouseUp();
     
    101106        fileInput.parentNode.removeChild(fileInput);
    102107    },
     108    relatedTargetRetargeting: function()
     109    {
     110        var count = 0;
     111        var textInput = document.body.appendChild(document.createElement('input'));
     112        var counter = function(evt)
     113        {
     114            if (evt.relatedTarget && !evt.relatedTarget.parentNode)
     115                count++;
     116        }
     117        moveOver(textInput);
     118        document.body.addEventListener("mouseover", counter, false);
     119        moveOver(document.body);
     120        document.body.removeEventListener("mouseover", counter, false);
     121        log("Event's relatedTarget should be retargeted", count == 0);
     122        textInput.parentNode.removeChild(textInput);
     123    },
    103124    eventInProgress: function()
    104125    {
  • trunk/Source/WebCore/ChangeLog

    r78073 r78077  
     12011-02-08  Dimitri Glazkov  <dglazkov@chromium.org>
     2
     3        Reviewed by Darin Adler.
     4
     5        REGRESSION(r71934): Shadow DOM nodes leak via relatedTarget
     6        https://bugs.webkit.org/show_bug.cgi?id=52065
     7
     8        * dom/Node.cpp:
     9        (WebCore::pullOutOfShadow): Added a helper to move a node to the outermost
     10            boundary of shadow DOM.
     11        (WebCore::Node::dispatchMouseEvent): Changed to use pullOutOfShadow.
     12
    1132011-02-09  Yael Aharon  <yael.aharon@nokia.com>
    214
  • trunk/Source/WebCore/dom/Node.cpp

    r76648 r78077  
    28402840}
    28412841
     2842// FIXME: Once https://bugs.webkit.org/show_bug.cgi?id=52963 lands, this should
     2843// be greatly improved. See https://bugs.webkit.org/show_bug.cgi?id=54025.
     2844static Node* pullOutOfShadow(Node* node)
     2845{
     2846    Node* outermostShadowBoundary = node;
     2847    for (Node* n = node; n; n = n->parentOrHostNode()) {
     2848        if (n->isShadowRoot())
     2849            outermostShadowBoundary = n->parentOrHostNode();
     2850    }
     2851    return outermostShadowBoundary;
     2852}
     2853
    28422854bool Node::dispatchMouseEvent(const AtomicString& eventType, int button, int detail,
    28432855    int pageX, int pageY, int screenX, int screenY,
     
    28622874   
    28632875    // Attempting to dispatch with a non-EventTarget relatedTarget causes the relatedTarget to be silently ignored.
    2864     RefPtr<Node> relatedTarget = relatedTargetArg;
     2876    RefPtr<Node> relatedTarget = pullOutOfShadow(relatedTargetArg);
    28652877
    28662878    int adjustedPageX = pageX;
Note: See TracChangeset for help on using the changeset viewer.