MessageEvent.ports should return the same object
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2018 01:59:04 +0000 (01:59 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 3 Oct 2018 01:59:04 +0000 (01:59 +0000)
https://bugs.webkit.org/show_bug.cgi?id=190151

Reviewed by Darin Adler.

LayoutTests/imported/w3c:

Rebaseline WPT test now that it is passing.

* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:

Source/WebCore:

MessageEvent.ports should return the same object it was initialized to instead of
constructing a new JSValue every time.

No new tests, rebaselined existing test.

* bindings/js/JSMessageEventCustom.cpp:
(WebCore::JSMessageEvent::ports const):
(WebCore::JSMessageEvent::visitAdditionalChildren):
* dom/MessageEvent.cpp:
(WebCore::MessageEvent::initMessageEvent):
* dom/MessageEvent.h:
* dom/MessageEvent.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236784 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt
LayoutTests/platform/mac-wk1/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSMessageEventCustom.cpp
Source/WebCore/dom/MessageEvent.cpp
Source/WebCore/dom/MessageEvent.h
Source/WebCore/dom/MessageEvent.idl

index b990e87..69c6334 100644 (file)
@@ -1,5 +1,16 @@
 2018-10-02  Chris Dumez  <cdumez@apple.com>
 
+        MessageEvent.ports should return the same object
+        https://bugs.webkit.org/show_bug.cgi?id=190151
+
+        Reviewed by Darin Adler.
+
+        Rebaseline WPT test now that it is passing.
+
+        * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:
+
+2018-10-02  Chris Dumez  <cdumez@apple.com>
+
         radio / checkbox inputs should fire "click, input, change" events in order when clicked
         https://bugs.webkit.org/show_bug.cgi?id=190223
 
index b9416f2..d993ae7 100644 (file)
@@ -2,7 +2,7 @@
 PASS Default event values 
 PASS MessageEventInit dictionary 
 PASS Passing null for ports member 
-FAIL ports attribute should be a FrozenArray assert_true: ev.ports should return the same object expected true got false
+PASS ports attribute should be a FrozenArray 
 PASS initMessageEvent operation 
 PASS Passing null for ports parameter to initMessageEvent 
 PASS initMessageEvent operation default parameter values 
index f3b8f82..3202942 100644 (file)
@@ -2,7 +2,7 @@
 PASS Default event values 
 PASS MessageEventInit dictionary 
 PASS Passing null for ports member 
-FAIL ports attribute should be a FrozenArray assert_true: ev.ports should return the same object expected true got false
+PASS ports attribute should be a FrozenArray 
 PASS initMessageEvent operation 
 PASS Passing null for ports parameter to initMessageEvent 
 PASS initMessageEvent operation default parameter values 
index 0be710e..c9d30a4 100644 (file)
@@ -1,3 +1,23 @@
+2018-10-02  Chris Dumez  <cdumez@apple.com>
+
+        MessageEvent.ports should return the same object
+        https://bugs.webkit.org/show_bug.cgi?id=190151
+
+        Reviewed by Darin Adler.
+
+        MessageEvent.ports should return the same object it was initialized to instead of
+        constructing a new JSValue every time.
+
+        No new tests, rebaselined existing test.
+
+        * bindings/js/JSMessageEventCustom.cpp:
+        (WebCore::JSMessageEvent::ports const):
+        (WebCore::JSMessageEvent::visitAdditionalChildren):
+        * dom/MessageEvent.cpp:
+        (WebCore::MessageEvent::initMessageEvent):
+        * dom/MessageEvent.h:
+        * dom/MessageEvent.idl:
+
 2018-10-01  Ryosuke Niwa  <rniwa@webkit.org>
 
         GC can collect JS wrappers of nodes in the mutation records waiting to be delivered
index bacc12b..baa8fd7 100644 (file)
 
 namespace WebCore {
 
+JSC::JSValue JSMessageEvent::ports(JSC::ExecState& state) const
+{
+    auto throwScope = DECLARE_THROW_SCOPE(state.vm());
+    return cachedPropertyValue(state, *this, wrapped().cachedPorts(), [&] {
+        JSC::JSValue ports = toJS<IDLFrozenArray<IDLInterface<MessagePort>>>(state, *globalObject(), throwScope, wrapped().ports());
+        return ports;
+    });
+}
+
 JSC::JSValue JSMessageEvent::data(JSC::ExecState& state) const
 {
     return cachedPropertyValue(state, *this, wrapped().cachedData(), [this, &state] {
@@ -74,6 +83,7 @@ void JSMessageEvent::visitAdditionalChildren(JSC::SlotVisitor& visitor)
     });
 
     wrapped().cachedData().visit(visitor);
+    wrapped().cachedPorts().visit(visitor);
 }
 
 } // namespace WebCore
index d1f7b04..a9ae6e9 100644 (file)
@@ -116,6 +116,7 @@ void MessageEvent::initMessageEvent(const AtomicString& type, bool canBubble, bo
     m_lastEventId = lastEventId;
     m_source = WTFMove(source);
     m_ports = WTFMove(ports);
+    m_cachedPorts = { };
 }
 
 EventInterface MessageEvent::eventInterface() const
index 3309278..e15dcc2 100644 (file)
@@ -76,6 +76,7 @@ public:
     const DataType& data() const { return m_data; }
 
     JSValueInWrappedObject& cachedData() { return m_cachedData; }
+    JSValueInWrappedObject& cachedPorts() { return m_cachedPorts; }
 
 private:
     MessageEvent();
@@ -92,6 +93,7 @@ private:
     Vector<RefPtr<MessagePort>> m_ports;
 
     JSValueInWrappedObject m_cachedData;
+    JSValueInWrappedObject m_cachedPorts;
 };
 
 } // namespace WebCore
index fa48c8f..b82aea7 100644 (file)
@@ -41,7 +41,7 @@ typedef (WindowProxy or MessagePort) MessageEventSource;
     readonly attribute DOMString lastEventId;
     readonly attribute MessageEventSource? source;
     [CustomGetter] readonly attribute any data;
-    readonly attribute FrozenArray<MessagePort> ports;
+    [CustomGetter] readonly attribute FrozenArray<MessagePort> ports;
 
     void initMessageEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false,
         optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional MessageEventSource? source = null,