Title: [141383] trunk
- Revision
- 141383
- Author
- [email protected]
- Date
- 2013-01-31 00:12:20 -0800 (Thu, 31 Jan 2013)
Log Message
[V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
https://bugs.webkit.org/show_bug.cgi?id=108432
Reviewed by Adam Barth.
In V8 'new MouseEvent("click", {relatedTarget: window}).window'
returns null. JSC returns window, which is a correct behavior.
V8 should also return window.
Source/WebCore:
The point is that we need to handle a DOMWindow wrapper specially
before converting it to an EventTarget object. A wrapper returned by
Dictionary::get("relatedTarget") is not an expected DOMWindow wrapper.
To get the expected DOMWindow wrapper, we need to look up a prototype
chain of the DOMWindow wrapper.
In JSC, this special handling is done by JSEventTargetCustom::toEventTarget().
Test: fast/events/constructors/mouse-event-constructor.html
* bindings/v8/Dictionary.cpp:
(WebCore::Dictionary::get):
LayoutTests:
* fast/events/constructors/mouse-event-constructor-expected.txt:
* fast/events/constructors/mouse-event-constructor.html:
Modified Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (141382 => 141383)
--- trunk/LayoutTests/ChangeLog 2013-01-31 08:05:11 UTC (rev 141382)
+++ trunk/LayoutTests/ChangeLog 2013-01-31 08:12:20 UTC (rev 141383)
@@ -1,3 +1,17 @@
+2013-01-31 Kentaro Hara <[email protected]>
+
+ [V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
+ https://bugs.webkit.org/show_bug.cgi?id=108432
+
+ Reviewed by Adam Barth.
+
+ In V8 'new MouseEvent("click", {relatedTarget: window}).window'
+ returns null. JSC returns window, which is a correct behavior.
+ V8 should also return window.
+
+ * fast/events/constructors/mouse-event-constructor-expected.txt:
+ * fast/events/constructors/mouse-event-constructor.html:
+
2013-01-30 Hajime Morrita <[email protected]>
[Chromium] Unreviewed, rebaselining expectations.
Modified: trunk/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt (141382 => 141383)
--- trunk/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt 2013-01-31 08:05:11 UTC (rev 141382)
+++ trunk/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt 2013-01-31 08:12:20 UTC (rev 141383)
@@ -165,6 +165,7 @@
PASS new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget is testDiv
PASS new MouseEvent('eventType', { relatedTarget: document }).relatedTarget is document
PASS new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget is xhr
+PASS new MouseEvent('eventType', { relatedTarget: window }).relatedTarget is window
PASS new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget is null
PASS new MouseEvent('eventType', { relatedTarget: undefined }).relatedTarget is null
PASS new MouseEvent('eventType', { relatedTarget: null }).relatedTarget is null
Modified: trunk/LayoutTests/fast/events/constructors/mouse-event-constructor.html (141382 => 141383)
--- trunk/LayoutTests/fast/events/constructors/mouse-event-constructor.html 2013-01-31 08:05:11 UTC (rev 141382)
+++ trunk/LayoutTests/fast/events/constructors/mouse-event-constructor.html 2013-01-31 08:12:20 UTC (rev 141383)
@@ -123,6 +123,7 @@
shouldBe("new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget", "testDiv");
shouldBe("new MouseEvent('eventType', { relatedTarget: document }).relatedTarget", "document");
shouldBe("new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget", "xhr");
+shouldBe("new MouseEvent('eventType', { relatedTarget: window }).relatedTarget", "window");
// Invalid objects.
shouldBe("new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget", "null");
Modified: trunk/Source/WebCore/ChangeLog (141382 => 141383)
--- trunk/Source/WebCore/ChangeLog 2013-01-31 08:05:11 UTC (rev 141382)
+++ trunk/Source/WebCore/ChangeLog 2013-01-31 08:12:20 UTC (rev 141383)
@@ -1,3 +1,27 @@
+2013-01-31 Kentaro Hara <[email protected]>
+
+ [V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
+ https://bugs.webkit.org/show_bug.cgi?id=108432
+
+ Reviewed by Adam Barth.
+
+ In V8 'new MouseEvent("click", {relatedTarget: window}).window'
+ returns null. JSC returns window, which is a correct behavior.
+ V8 should also return window.
+
+ The point is that we need to handle a DOMWindow wrapper specially
+ before converting it to an EventTarget object. A wrapper returned by
+ Dictionary::get("relatedTarget") is not an expected DOMWindow wrapper.
+ To get the expected DOMWindow wrapper, we need to look up a prototype
+ chain of the DOMWindow wrapper.
+
+ In JSC, this special handling is done by JSEventTargetCustom::toEventTarget().
+
+ Test: fast/events/constructors/mouse-event-constructor.html
+
+ * bindings/v8/Dictionary.cpp:
+ (WebCore::Dictionary::get):
+
2013-01-31 Mark Pilgrim <[email protected]>
[Chromium] Move MediaPlayerPrivateChromium to WebCore
Modified: trunk/Source/WebCore/bindings/v8/Dictionary.cpp (141382 => 141383)
--- trunk/Source/WebCore/bindings/v8/Dictionary.cpp 2013-01-31 08:05:11 UTC (rev 141382)
+++ trunk/Source/WebCore/bindings/v8/Dictionary.cpp 2013-01-31 08:12:20 UTC (rev 141383)
@@ -466,6 +466,17 @@
return false;
EventTarget* target = 0;
+ // We need to handle a DOMWindow specially, because a wrapper object of a DOMWindow
+ // exists on a prototype chain of v8Value.
+ if (v8Value->IsObject()) {
+ v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(v8Value);
+ v8::Handle<v8::Object> window = wrapper->FindInstanceInPrototypeChain(V8DOMWindow::GetTemplate(m_isolate));
+ if (!window.IsEmpty()) {
+ value = toWrapperTypeInfo(window)->toEventTarget(window);
+ return true;
+ }
+ }
+
if (V8DOMWrapper::isDOMWrapper(v8Value)) {
v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(v8Value);
target = toWrapperTypeInfo(wrapper)->toEventTarget(wrapper);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes