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