[JSC] Weak should only accept cell pointees.
[WebKit-https.git] / Source / WebCore / bindings / js / JSTextTrackCueCustom.cpp
index 5dd9dca..d5c17dc 100644 (file)
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
  *
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 #if ENABLE(VIDEO_TRACK)
 
 #include "JSTextTrackCue.h"
-#include "JSTextTrackCustom.h"
+
+#include "JSDataCue.h"
+#include "JSTrackCustom.h"
+#include "JSVTTCue.h"
+#include "TextTrack.h"
 
 using namespace JSC;
 
 namespace WebCore {
 
-bool JSTextTrackCueOwner::isReachableFromOpaqueRoots(JSC::Handle<JSC::Unknown> handle, void*, SlotVisitor& visitor)
+bool JSTextTrackCueOwner::isReachableFromOpaqueRoots(JSC::JSCell& cell, void*, SlotVisitor& visitor)
 {
-    JSTextTrackCue* jsTextTrackCue = jsCast<JSTextTrackCue*>(handle.get().asCell());
-    TextTrackCue* textTrackCue = static_cast<TextTrackCue*>(jsTextTrackCue->impl());
+    auto& jsTextTrackCue = jsCast<JSTextTrackCue&>(cell);
+    TextTrackCue& textTrackCue = jsTextTrackCue.impl();
 
     // If the cue is firing event listeners, its wrapper is reachable because
     // the wrapper is responsible for marking those event listeners.
-    if (textTrackCue->isFiringEventListeners())
+    if (textTrackCue.isFiringEventListeners())
         return true;
 
     // If the cue has no event listeners and has no custom properties, it is not reachable.
-    if (!textTrackCue->hasEventListeners() && !jsTextTrackCue->hasCustomProperties())
+    if (!textTrackCue.hasEventListeners() && !jsTextTrackCue.hasCustomProperties())
         return false;
 
     // If the cue is not associated with a track, it is not reachable.
-    if (!textTrackCue->track())
+    if (!textTrackCue.track())
         return false;
 
-    return visitor.containsOpaqueRoot(root(textTrackCue->track()));
+    return visitor.containsOpaqueRoot(root(textTrackCue.track()));
+}
+
+JSValue toJS(ExecState*, JSDOMGlobalObject* globalObject, TextTrackCue* cue)
+{
+    if (!cue)
+        return jsNull();
+
+    JSObject* wrapper = getCachedWrapper(globalObject->world(), cue);
+
+    if (wrapper)
+        return wrapper;
+
+    // This switch will make more sense once we support DataCue
+    switch (cue->cueType()) {
+    case TextTrackCue::Data:
+        return CREATE_DOM_WRAPPER(globalObject, DataCue, cue);
+    case TextTrackCue::WebVTT:
+    case TextTrackCue::Generic:
+        return CREATE_DOM_WRAPPER(globalObject, VTTCue, cue);
+    default:
+        ASSERT_NOT_REACHED();
+        return jsNull();
+    }
 }
 
-void JSTextTrackCue::visitChildren(JSCell* cell, SlotVisitor& visitor)
+void JSTextTrackCue::visitAdditionalChildren(SlotVisitor& visitor)
 {
-    JSTextTrackCue* jsTextTrackCue = jsCast<JSTextTrackCue*>(cell);
-    ASSERT_GC_OBJECT_INHERITS(jsTextTrackCue, &s_info);
-    COMPILE_ASSERT(StructureFlags & OverridesVisitChildren, OverridesVisitChildrenWithoutSettingFlag);
-    ASSERT(jsTextTrackCue->structure()->typeInfo().overridesVisitChildren());
-    Base::visitChildren(jsTextTrackCue, visitor);
-    
-    // Mark the cue's track root if it has one.
-    TextTrackCue* textTrackCue = static_cast<TextTrackCue*>(jsTextTrackCue->impl());
-    if (TextTrack* textTrack = textTrackCue->track())
+    if (TextTrack* textTrack = impl().track())
         visitor.addOpaqueRoot(root(textTrack));
-    
-    textTrackCue->visitJSEventListeners(visitor);
 }
 
 } // namespace WebCore