JSEventListener::m_isolatedWorld should be a Ref
authorbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Apr 2017 23:34:17 +0000 (23:34 +0000)
committerbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Apr 2017 23:34:17 +0000 (23:34 +0000)
https://bugs.webkit.org/show_bug.cgi?id=170910
<rdar://problem/30470332>

Reviewed by Alex Christensen.

Since m_isolatedWorld should never be nullptr, change the implementation of m_isolatedWorld
from a RefPtr to a Ref, and adjust the various call sites to support this change.

This should help us catch any changes that permit the isolatedWorld to be set to nullptr.

No new tests since there should be no change in behavior.

* bindings/js/JSEventListener.cpp:
(WebCore::JSEventListener::JSEventListener):
(WebCore::JSEventListener::initializeJSFunction):
(WebCore::JSEventListener::handleEvent):
* bindings/js/JSEventListener.h:
(WebCore::JSEventListener::cast):
(WebCore::JSEventListener::isolatedWorld):
(WebCore::JSEventListener::jsFunction):

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

Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSEventListener.cpp
Source/WebCore/bindings/js/JSEventListener.h

index f601fb4..2d8e6e2 100644 (file)
@@ -1,5 +1,29 @@
 2017-04-18  Brent Fulgham  <bfulgham@apple.com>
 
+        JSEventListener::m_isolatedWorld should be a Ref
+        https://bugs.webkit.org/show_bug.cgi?id=170910
+        <rdar://problem/30470332>
+
+        Reviewed by Alex Christensen.
+
+        Since m_isolatedWorld should never be nullptr, change the implementation of m_isolatedWorld
+        from a RefPtr to a Ref, and adjust the various call sites to support this change.
+
+        This should help us catch any changes that permit the isolatedWorld to be set to nullptr.
+
+        No new tests since there should be no change in behavior.
+
+        * bindings/js/JSEventListener.cpp:
+        (WebCore::JSEventListener::JSEventListener):
+        (WebCore::JSEventListener::initializeJSFunction):
+        (WebCore::JSEventListener::handleEvent):
+        * bindings/js/JSEventListener.h:
+        (WebCore::JSEventListener::cast):
+        (WebCore::JSEventListener::isolatedWorld):
+        (WebCore::JSEventListener::jsFunction):
+
+2017-04-18  Brent Fulgham  <bfulgham@apple.com>
+
         Correct handling of isolatedWorld in event handling
         https://bugs.webkit.org/show_bug.cgi?id=65589
         <rdar://problem/24097804>
index 68b7f07..2a99a0e 100644 (file)
@@ -47,7 +47,7 @@ JSEventListener::JSEventListener(JSObject* function, JSObject* wrapper, bool isA
     : EventListener(JSEventListenerType)
     , m_wrapper(wrapper)
     , m_isAttribute(isAttribute)
-    , m_isolatedWorld(&isolatedWorld)
+    , m_isolatedWorld(isolatedWorld)
 {
     if (wrapper) {
         JSC::Heap::heap(wrapper)->writeBarrier(wrapper, function);
@@ -101,7 +101,7 @@ void JSEventListener::handleEvent(ScriptExecutionContext* scriptExecutionContext
     if (!jsFunction)
         return;
 
-    JSDOMGlobalObject* globalObject = toJSDOMGlobalObject(scriptExecutionContext, *m_isolatedWorld);
+    JSDOMGlobalObject* globalObject = toJSDOMGlobalObject(scriptExecutionContext, m_isolatedWorld);
     if (!globalObject)
         return;
 
index f1896fb..693853a 100644 (file)
@@ -55,7 +55,7 @@ public:
     {
         return listener->type() == JSEventListenerType
             ? static_cast<const JSEventListener*>(listener)
-            : 0;
+            : nullptr;
     }
 
     virtual ~JSEventListener();
@@ -66,7 +66,7 @@ public:
     bool isAttribute() const { return m_isAttribute; }
 
     JSC::JSObject* jsFunction(ScriptExecutionContext*) const;
-    DOMWrapperWorld& isolatedWorld() const { return *m_isolatedWorld; }
+    DOMWrapperWorld& isolatedWorld() const { return m_isolatedWorld; }
 
     JSC::JSObject* wrapper() const { return m_wrapper.get(); }
     void setWrapper(JSC::VM&, JSC::JSObject* wrapper) const { m_wrapper = JSC::Weak<JSC::JSObject>(wrapper); }
@@ -88,7 +88,7 @@ private:
     mutable JSC::Weak<JSC::JSObject> m_wrapper;
 
     bool m_isAttribute;
-    RefPtr<DOMWrapperWorld> m_isolatedWorld;
+    Ref<DOMWrapperWorld> m_isolatedWorld;
 };
 
 // For "onxxx" attributes that automatically set up JavaScript event listeners.
@@ -129,7 +129,7 @@ inline JSC::JSObject* JSEventListener::jsFunction(ScriptExecutionContext* script
 
     // If m_wrapper is 0, then m_jsFunction is zombied, and should never be accessed.
     if (!m_wrapper)
-        return 0;
+        return nullptr;
 
     // Try to verify that m_jsFunction wasn't recycled. (Not exact, since an
     // event listener can be almost anything, but this makes test-writing easier).