Title: [122801] trunk
- Revision
- 122801
- Author
- [email protected]
- Date
- 2012-07-16 20:24:33 -0700 (Mon, 16 Jul 2012)
Log Message
Some events should be always stopped at shadow boundary.
https://bugs.webkit.org/show_bug.cgi?id=90436
Reviewed by Ryosuke Niwa.
Source/WebCore:
The spec is here:
https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#events-that-are-always-stopped
Test: fast/dom/shadow/events-stopped-at-shadow-boundary.html
* dom/EventDispatcher.cpp:
(WebCore::EventDispatcher::determineDispatchBehavior):
LayoutTests:
* fast/dom/shadow/events-stopped-at-shadow-boundary-expected.txt: Added.
* fast/dom/shadow/events-stopped-at-shadow-boundary.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (122800 => 122801)
--- trunk/LayoutTests/ChangeLog 2012-07-17 03:20:42 UTC (rev 122800)
+++ trunk/LayoutTests/ChangeLog 2012-07-17 03:24:33 UTC (rev 122801)
@@ -1,3 +1,13 @@
+2012-07-16 Hayato Ito <[email protected]>
+
+ Some events should be always stopped at shadow boundary.
+ https://bugs.webkit.org/show_bug.cgi?id=90436
+
+ Reviewed by Ryosuke Niwa.
+
+ * fast/dom/shadow/events-stopped-at-shadow-boundary-expected.txt: Added.
+ * fast/dom/shadow/events-stopped-at-shadow-boundary.html: Added.
+
2012-07-16 Ryuan Choi <[email protected]>
[EFL][DRT] Implement dumpFrameScrollPosition
Added: trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary-expected.txt (0 => 122801)
--- trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary-expected.txt 2012-07-17 03:24:33 UTC (rev 122801)
@@ -0,0 +1,44 @@
+Tests to ensure that some kinds of events are stopeed at shadow boundary.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Other events than "click" should be stopped at shadow boundary. A "click" is added for the purpose of comparing results.
+
+ abort
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ select
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ change
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ reset
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ resize
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ scroll
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ selectstart
+ @target (target: target)
+ @parent-of-target (target: target)
+
+ click
+ @target (target: target)
+ @parent-of-target (target: target)
+ @host (target: host)
+ @top (target: host)
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html (0 => 122801)
--- trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html (rev 0)
+++ trunk/LayoutTests/fast/dom/shadow/events-stopped-at-shadow-boundary.html 2012-07-17 03:24:33 UTC (rev 122801)
@@ -0,0 +1,92 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script src=""
+</head>
+<body>
+<p id="description"></p>
+<div id="sandbox"></div>
+<pre id="console"></pre>
+<script>
+description("Tests to ensure that some kinds of events are stopeed at shadow boundary.");
+
+var eventRecords = {};
+
+function dispatchedEvent(eventType)
+{
+ var events = eventRecords[eventType];
+ if (!events)
+ return [];
+ return events;
+}
+
+function dumpDispatchedEvent(eventType)
+{
+ debug('\n ' + eventType);
+ var events = dispatchedEvent(eventType);
+ for (var i = 0; i < events.length; ++i)
+ debug(' ' + events[i])
+}
+
+function recordEvent(event)
+{
+ var eventType = event.type
+ if (!eventRecords[eventType]) {
+ eventRecords[eventType] = []
+ }
+ var eventString = '';
+ if (event.currentTarget)
+ eventString += ' @' + event.currentTarget.id;
+ if (event.target)
+ eventString += ' (target: ' + event.target.id + ')';
+ if (event.relatedTarget)
+ eventString += ' (related: ' + event.relatedTarget.id + ')';
+ if (event.eventPhase == 1)
+ eventString += '(capturing phase)';
+ if (event.target && event.currentTarget && event.target.id == event.currentTarget.id)
+ shouldBe("event.eventPhase", "2", true);
+ eventRecords[eventType].push(eventString);
+}
+
+debug('Other events than "click" should be stopped at shadow boundary. A "click" is added for the purpose of comparing results.');
+
+var events = ['abort', 'select', 'change', 'reset', 'resize', 'scroll', 'selectstart', 'click'];
+
+function addEventListeners(nodes)
+{
+ for (var i = 0; i < nodes.length; ++i) {
+ var node = getNodeInShadowTreeStack(nodes[i]);
+ for (var j = 0; j < events.length; ++j)
+ node.addEventListener(events[j], recordEvent, false);
+ }
+}
+
+function test()
+{
+ if (window.testRunner)
+ testRunner.dumpAsText();
+
+ var sandbox = document.getElementById('sandbox');
+ sandbox.appendChild(
+ createDOM('div', {'id': 'top'},
+ createDOM('div', {'id': 'host'},
+ createShadowRoot(
+ createDOM('div', {'id': 'parent-of-target'},
+ createDOM('div', {'id': 'target'}))))));
+
+ addEventListeners(['top', 'host', 'host/parent-of-target', 'host/target']);
+
+ for (var i = 0; i < events.length; ++i) {
+ var event = document.createEvent('UIEvent');
+ event.initEvent(events[i], true, false);
+ getNodeInShadowTreeStack('host/target').dispatchEvent(event);
+ dumpDispatchedEvent(events[i]);
+ }
+}
+
+test();
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (122800 => 122801)
--- trunk/Source/WebCore/ChangeLog 2012-07-17 03:20:42 UTC (rev 122800)
+++ trunk/Source/WebCore/ChangeLog 2012-07-17 03:24:33 UTC (rev 122801)
@@ -1,3 +1,18 @@
+2012-07-16 Hayato Ito <[email protected]>
+
+ Some events should be always stopped at shadow boundary.
+ https://bugs.webkit.org/show_bug.cgi?id=90436
+
+ Reviewed by Ryosuke Niwa.
+
+ The spec is here:
+ https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#events-that-are-always-stopped
+
+ Test: fast/dom/shadow/events-stopped-at-shadow-boundary.html
+
+ * dom/EventDispatcher.cpp:
+ (WebCore::EventDispatcher::determineDispatchBehavior):
+
2012-07-16 Yoshifumi Inoue <[email protected]>
REGRESSION(r119948): [Form] HTMLInputElement.valueAsNumber for input type "month" should return number of month since January 1970
Modified: trunk/Source/WebCore/dom/EventDispatcher.cpp (122800 => 122801)
--- trunk/Source/WebCore/dom/EventDispatcher.cpp 2012-07-17 03:20:42 UTC (rev 122800)
+++ trunk/Source/WebCore/dom/EventDispatcher.cpp 2012-07-17 03:24:33 UTC (rev 122801)
@@ -365,7 +365,14 @@
// WebKit never allowed selectstart event to cross the the shadow DOM boundary.
// Changing this breaks existing sites.
// See https://bugs.webkit.org/show_bug.cgi?id=52195 for details.
- if (event->type() == eventNames().selectstartEvent)
+ const AtomicString eventType = event->type();
+ if (eventType == eventNames().abortEvent
+ || eventType == eventNames().changeEvent
+ || eventType == eventNames().resetEvent
+ || eventType == eventNames().resizeEvent
+ || eventType == eventNames().scrollEvent
+ || eventType == eventNames().selectEvent
+ || eventType == eventNames().selectstartEvent)
return StayInsideShadowDOM;
return RetargetEvent;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes