Title: [167962] trunk/Source/WebCore
Revision
167962
Author
bfulg...@apple.com
Date
2014-04-29 15:19:16 -0700 (Tue, 29 Apr 2014)

Log Message

[Mac, iOS] Support caption activation via JS webkitHasClosedCaptions method
https://bugs.webkit.org/show_bug.cgi?id=132320

Reviewed by Eric Carlson.

* Modules/mediacontrols/mediaControlsApple.css:
(video::-webkit-media-text-track-container .hidden): Added.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::configureTextTrackGroup): Added call to
new 'updateCaptionsContainer'.
(WebCore::HTMLMediaElement::updateCaptionContainer): Added.
* html/HTMLMediaElement.h:
* html/shadow/MediaControlElements.cpp:
(WebCore::MediaControlTextTrackContainerElement::hide): Use CSS class .hidden instead of
hard-coded "display:none".
(WebCore::MediaControlTextTrackContainerElement::show): Ditto.
* html/shadow/MediaControlElements.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (167961 => 167962)


--- trunk/Source/WebCore/ChangeLog	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/ChangeLog	2014-04-29 22:19:16 UTC (rev 167962)
@@ -1,3 +1,23 @@
+2014-04-29  Brent Fulgham  <bfulg...@apple.com>
+
+        [Mac, iOS] Support caption activation via JS webkitHasClosedCaptions method
+        https://bugs.webkit.org/show_bug.cgi?id=132320
+
+        Reviewed by Eric Carlson.
+
+        * Modules/mediacontrols/mediaControlsApple.css:
+        (video::-webkit-media-text-track-container .hidden): Added.
+        * html/HTMLMediaElement.cpp:
+        (WebCore::HTMLMediaElement::configureTextTrackGroup): Added call to
+        new 'updateCaptionsContainer'.
+        (WebCore::HTMLMediaElement::updateCaptionContainer): Added.
+        * html/HTMLMediaElement.h:
+        * html/shadow/MediaControlElements.cpp:
+        (WebCore::MediaControlTextTrackContainerElement::hide): Use CSS class .hidden instead of
+        hard-coded "display:none".
+        (WebCore::MediaControlTextTrackContainerElement::show): Ditto.
+        * html/shadow/MediaControlElements.h:
+
 2014-04-28  Roger Fong  <roger_f...@apple.com>
 
         Plugins hidden by images should autoplay.

Modified: trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css (167961 => 167962)


--- trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/Modules/mediacontrols/mediaControlsApple.css	2014-04-29 22:19:16 UTC (rev 167962)
@@ -709,6 +709,10 @@
     -webkit-line-box-contain: block inline-box replaced;
 }
 
+video::-webkit-media-text-track-container .hidden {
+    display: none;
+}
+
 video::cue {
     background-color: rgba(0, 0, 0, 0.8);
 }

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (167961 => 167962)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2014-04-29 22:19:16 UTC (rev 167962)
@@ -3695,9 +3695,64 @@
             m_webkitLegacyClosedCaptionOverride = true;
     }
 
+    updateCaptionContainer();
+
     m_processingPreferenceChange = false;
 }
 
+void HTMLMediaElement::updateCaptionContainer()
+{
+    LOG(Media, "HTMLMediaElement::updateCaptionContainer");
+#if ENABLE(MEDIA_CONTROLS_SCRIPT)
+    Page* page = document().page();
+    if (!page)
+        return;
+
+    DOMWrapperWorld& world = ensureIsolatedWorld();
+
+    if (!ensureMediaControlsInjectedScript())
+        return;
+
+    ensureUserAgentShadowRoot();
+
+    ASSERT(m_mediaControlsHost);
+
+    ScriptController& scriptController = page->mainFrame().script();
+    JSDOMGlobalObject* globalObject = JSC::jsCast<JSDOMGlobalObject*>(scriptController.globalObject(world));
+    JSC::ExecState* exec = globalObject->globalExec();
+    JSC::JSLockHolder lock(exec);
+
+    JSC::JSValue controllerValue = m_mediaControlsHost->controllerJSValue();
+    if (controllerValue.isUndefinedOrNull() || !controllerValue.isObject())
+        return;
+
+    JSC::JSObject* controllerObject = controllerValue.toObject(exec);
+
+    // The media controls script must provide a method on the Controller object with the following details.
+    // Name: updateCaptionContainer
+    // Parameters:
+    //     None
+    // Return value:
+    //     None
+    JSC::JSValue methodValue = controllerObject->get(exec, JSC::Identifier(exec, "updateCaptionContainer"));
+    if (methodValue.isUndefinedOrNull() || !methodValue.isObject())
+        return;
+
+    JSC::JSObject* methodObject = methodValue.toObject(exec);
+
+    JSC::CallData callData;
+    JSC::CallType callType = methodObject->methodTable()->getCallData(methodObject, callData);
+    if (callType == JSC::CallTypeNone)
+        return;
+
+    JSC::MarkedArgumentBuffer noArguments;
+    JSC::call(exec, methodObject, callType, callData, controllerObject, noArguments);
+
+    if (exec->hadException())
+        exec->clearException();
+#endif
+}
+    
 void HTMLMediaElement::setSelectedTextTrack(TextTrack* trackToSelect)
 {
     TextTrackList* trackList = textTracks();

Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (167961 => 167962)


--- trunk/Source/WebCore/html/HTMLMediaElement.h	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h	2014-04-29 22:19:16 UTC (rev 167962)
@@ -721,6 +721,8 @@
     void registerWithDocument(Document&);
     void unregisterWithDocument(Document&);
 
+    void updateCaptionContainer();
+
     Timer<HTMLMediaElement> m_loadTimer;
     Timer<HTMLMediaElement> m_progressEventTimer;
     Timer<HTMLMediaElement> m_playbackProgressTimer;

Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.cpp (167961 => 167962)


--- trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.cpp	2014-04-29 22:19:16 UTC (rev 167962)
@@ -1500,6 +1500,17 @@
     updateSizes();
 }
 
+void MediaControlTextTrackContainerElement::hide()
+{
+    classList()->add("hidden", IGNORE_EXCEPTION);
+}
+
+void MediaControlTextTrackContainerElement::show()
+{
+    classList()->remove("hidden", IGNORE_EXCEPTION);
+}
+    
+
 #endif // ENABLE(VIDEO_TRACK)
 
 // ----------------------------

Modified: trunk/Source/WebCore/html/shadow/MediaControlElements.h (167961 => 167962)


--- trunk/Source/WebCore/html/shadow/MediaControlElements.h	2014-04-29 22:14:37 UTC (rev 167961)
+++ trunk/Source/WebCore/html/shadow/MediaControlElements.h	2014-04-29 22:19:16 UTC (rev 167962)
@@ -476,6 +476,9 @@
     void exitedFullscreen();
     static const AtomicString& textTrackContainerElementShadowPseudoId();
 
+    virtual void show() override;
+    virtual void hide() override;
+
 private:
     void updateTimerFired(Timer<MediaControlTextTrackContainerElement>&);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to