- a/Source/WebCore/ChangeLog +24 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2013-01-30  Kentaro Hara  <haraken@chromium.org>
2
3
        [V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
4
        https://bugs.webkit.org/show_bug.cgi?id=108432
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        In V8 'new MouseEvent("click", {relatedTarget: window}).window'
9
        returns null. JSC returns window, which is a correct behavior.
10
        V8 should also return window.
11
12
        The point is that we need to handle a DOMWindow wrapper specially
13
        before converting it to an EventTarget object. A wrapper returned by
14
        Dictionary::get("relatedTarget") is not an expected DOMWindow wrapper.
15
        To get the expected DOMWindow wrapper, we need to look up a prototype
16
        chain of the DOMWindow wrapper.
17
18
        In JSC, this special handling is done by JSEventTargetCustom::toEventTarget().
19
20
        Test: fast/events/constructors/mouse-event-constructor.html
21
22
        * bindings/v8/Dictionary.cpp:
23
        (WebCore::Dictionary::get):
24
1
2013-01-30  Joe Mason  <jmason@rim.com>
25
2013-01-30  Joe Mason  <jmason@rim.com>
2
26
3
        [BlackBerry] Never store empty credentials in NetworkJob::storeCredentials
27
        [BlackBerry] Never store empty credentials in NetworkJob::storeCredentials
- a/Source/WebCore/bindings/v8/Dictionary.cpp +11 lines
Lines 466-471 bool Dictionary::get(const String& key, RefPtr<EventTarget>& value) const a/Source/WebCore/bindings/v8/Dictionary.cpp_sec1
466
        return false;
466
        return false;
467
467
468
    EventTarget* target = 0;
468
    EventTarget* target = 0;
469
    // We need to handle a DOMWindow specially, because a wrapper object of a DOMWindow
470
    // exists on a prototype chain of v8Value.
471
    if (v8Value->IsObject()) {
472
        v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(v8Value);
473
        v8::Handle<v8::Object> window = wrapper->FindInstanceInPrototypeChain(V8DOMWindow::GetTemplate(m_isolate));
474
        if (!window.IsEmpty()) {
475
            value = toWrapperTypeInfo(window)->toEventTarget(window);
476
            return true;
477
        }
478
    }
479
469
    if (V8DOMWrapper::isDOMWrapper(v8Value)) {
480
    if (V8DOMWrapper::isDOMWrapper(v8Value)) {
470
        v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(v8Value);
481
        v8::Handle<v8::Object> wrapper = v8::Handle<v8::Object>::Cast(v8Value);
471
        target = toWrapperTypeInfo(wrapper)->toEventTarget(wrapper);
482
        target = toWrapperTypeInfo(wrapper)->toEventTarget(wrapper);
- a/LayoutTests/ChangeLog +14 lines
Lines 1-3 a/LayoutTests/ChangeLog_sec1
1
2013-01-30  Kentaro Hara  <haraken@chromium.org>
2
3
        [V8] 'new MouseEvent("click", {relatedTarget: window}).window' should return window
4
        https://bugs.webkit.org/show_bug.cgi?id=108432
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        In V8 'new MouseEvent("click", {relatedTarget: window}).window'
9
        returns null. JSC returns window, which is a correct behavior.
10
        V8 should also return window.
11
12
        * fast/events/constructors/mouse-event-constructor-expected.txt:
13
        * fast/events/constructors/mouse-event-constructor.html:
14
1
2013-01-30  Tony Chang  <tony@chromium.org>
15
2013-01-30  Tony Chang  <tony@chromium.org>
2
16
3
        [Chromium] Enable textarea resize corner for tests
17
        [Chromium] Enable textarea resize corner for tests
- a/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt +1 lines
Lines 165-170 PASS new MouseEvent('eventType', { button: {valueOf: function () { return 12345; a/LayoutTests/fast/events/constructors/mouse-event-constructor-expected.txt_sec1
165
PASS new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget is testDiv
165
PASS new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget is testDiv
166
PASS new MouseEvent('eventType', { relatedTarget: document }).relatedTarget is document
166
PASS new MouseEvent('eventType', { relatedTarget: document }).relatedTarget is document
167
PASS new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget is xhr
167
PASS new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget is xhr
168
PASS new MouseEvent('eventType', { relatedTarget: window }).relatedTarget is window
168
PASS new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget is null
169
PASS new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget is null
169
PASS new MouseEvent('eventType', { relatedTarget: undefined }).relatedTarget is null
170
PASS new MouseEvent('eventType', { relatedTarget: undefined }).relatedTarget is null
170
PASS new MouseEvent('eventType', { relatedTarget: null }).relatedTarget is null
171
PASS new MouseEvent('eventType', { relatedTarget: null }).relatedTarget is null
- a/LayoutTests/fast/events/constructors/mouse-event-constructor.html +1 lines
Lines 123-128 shouldBe("new MouseEvent('eventType', { button: {valueOf: function () { return 1 a/LayoutTests/fast/events/constructors/mouse-event-constructor.html_sec1
123
shouldBe("new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget", "testDiv");
123
shouldBe("new MouseEvent('eventType', { relatedTarget: testDiv }).relatedTarget", "testDiv");
124
shouldBe("new MouseEvent('eventType', { relatedTarget: document }).relatedTarget", "document");
124
shouldBe("new MouseEvent('eventType', { relatedTarget: document }).relatedTarget", "document");
125
shouldBe("new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget", "xhr");
125
shouldBe("new MouseEvent('eventType', { relatedTarget: xhr }).relatedTarget", "xhr");
126
shouldBe("new MouseEvent('eventType', { relatedTarget: window }).relatedTarget", "window");
126
127
127
// Invalid objects.
128
// Invalid objects.
128
shouldBe("new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget", "null");
129
shouldBe("new MouseEvent('eventType', { relatedTarget: testObject }).relatedTarget", "null");

Return to Bug 108432