[Webkit-unassigned] [Bug 102788] New: [Shadow DOM]: 'Click' event stops on shadow boundary

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Nov 20 03:08:39 PST 2012


https://bugs.webkit.org/show_bug.cgi?id=102788

           Summary: [Shadow DOM]: 'Click' event stops on shadow boundary
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: Unspecified
        OS/Version: Unspecified
            Status: UNCONFIRMED
          Severity: Normal
          Priority: P2
         Component: HTML DOM
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: sgrekhov at unipro.ru


Found in Chrome 23.0.1271.64 m

Run the example of event retargeting taken from https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#event-retargeting-example. The code is the following:

<html>
<head>
<script type="text/javascript">

//Example taken from http://www.w3.org/TR/shadow-dom/#event-retargeting-example
function createTestMediaPlayer(d) {
    var SR = window.ShadowRoot || window.WebKitShadowRoot;

    d.body.innerHTML = '' +
    '<div id="player">' +
        '<input type="checkbox" id="outside-control">' +
        '<div id="player-shadow-root">' +
        '</div>' +
    '</div>';

    var playerShadowRoot = new SR(d.querySelector('#player-shadow-root'));
    playerShadowRoot.innerHTML = '' + 
        '<div id="controls">' +
            '<button class="play-button">PLAY</button>' +
            '<input type="range" id="timeline">' +
                '<div id="timeline-shadow-root">' +
                '</div>' +
            '</input>' +
            '<div class="volume-slider-container" id="volume-slider-container">' +
                '<input type="range" class="volume-slider" id="volume-slider">' +
                    '<div id="volume-shadow-root">' +                       
                    '</div>' +
                '</input>' +
            '</div>' +
        '</div>';

    var timeLineShadowRoot = new SR(playerShadowRoot.querySelector('#timeline-shadow-root'));
    timeLineShadowRoot.innerHTML =  '<div class="slider-thumb" id="timeline-slider-thumb"></div>';

    var volumeShadowRoot = new SR(playerShadowRoot.querySelector('#volume-shadow-root'));
    volumeShadowRoot.innerHTML = '<div class="slider-thumb" id="volume-slider-thumb"></div>';

    return {
        'playerShadowRoot': playerShadowRoot,
        'timeLineShadowRoot': timeLineShadowRoot,
        'volumeShadowRoot': volumeShadowRoot
        };
}

function test() {
    var d = document;

    roots = createTestMediaPlayer(d);

    //For #volume-slider-thumb relative target is #volume-slider-thumb
    roots.volumeShadowRoot.querySelector('#volume-slider-thumb').addEventListener('click',          
        function (event) {
            alert('Point 1: relative target is ' + event.target.getAttribute('id'));
    }, false);    

    //For #volume-slider-thumb relative target is #volume-slider-thumb
    roots.volumeShadowRoot.addEventListener('click', 
        function (event) {
            alert('Point 2: relative target is ' + event.target.getAttribute('id')); 
    }, false);    

    //For #volume-slider-thumb relative target is #volume-slider-thumb
    roots.playerShadowRoot.querySelector('#volume-slider').addEventListener('click',            
         function (event) {
              alert('Point 3: relative target is ' + event.target.getAttribute('id'));
    }, false);

    var event = d.createEvent('HTMLEvents');
    event.initEvent ("click", true, false);
    roots.volumeShadowRoot.querySelector('#volume-slider-thumb').dispatchEvent(event);
}
</script>
</head>
<body onload="test()">

</body>
</html>


At the points 1 and 2 this example shows correct related target. On point 3 event listener is not invoked that means that event was stopped on the shadow boundary but should not.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list