Diff
Modified: trunk/LayoutTests/ChangeLog (258586 => 258587)
--- trunk/LayoutTests/ChangeLog 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/LayoutTests/ChangeLog 2020-03-17 20:52:00 UTC (rev 258587)
@@ -1,3 +1,14 @@
+2020-03-17 Eric Carlson <[email protected]>
+
+ TextTrackBase should validate language before setting m_validBCP47Language
+ https://bugs.webkit.org/show_bug.cgi?id=209094
+ <rdar://problem/60439603>
+
+ Reviewed by Jer Noble.
+
+ * media/track/track-bcp-language-expected.txt: Added.
+ * media/track/track-bcp-language.html: Added.
+
2020-03-17 Jacob Uphoff <[email protected]>
[ macOS wk2 ] imported/w3c/web-platform-tests/webrtc/RTCRtpReceiver-getSynchronizationSources.https.html is flaky failing
Added: trunk/LayoutTests/media/track/track-bcp-language-expected.txt (0 => 258587)
--- trunk/LayoutTests/media/track/track-bcp-language-expected.txt (rev 0)
+++ trunk/LayoutTests/media/track/track-bcp-language-expected.txt 2020-03-17 20:52:00 UTC (rev 258587)
@@ -0,0 +1,19 @@
+CONSOLE MESSAGE: line 49: The language '-sl' is not a valid BCP 47 language tag.
+CONSOLE MESSAGE: line 24: The language 'zhHant' is not a valid BCP 47 language tag.
+Test that TextTrackBase.validBCP47Language is set and reset correctly.
+
+
+EXPECTED (internals.textTrackBCP47Language(track1.track) == 'zh') OK
+EXPECTED (track1.track.language == 'zh') OK
+EXPECTED (internals.textTrackBCP47Language(track1.track) == 'zh-Hant') OK
+EXPECTED (track1.track.language == 'zh-Hant') OK
+EXPECTED (internals.textTrackBCP47Language(track1.track) == '') OK
+EXPECTED (track1.track.language == 'zhHant') OK
+EXPECTED (internals.textTrackBCP47Language(track1.track) == 'zh-cmn-Hans-CN') OK
+EXPECTED (track1.track.language == 'zh-cmn-Hans-CN') OK
+EXPECTED (internals.textTrackBCP47Language(track2.track) == '') OK
+EXPECTED (track2.track.language == '-sl') OK
+EXPECTED (internals.textTrackBCP47Language(track2.track) == 'sl-rozaj-biske') OK
+EXPECTED (track2.track.language == 'sl-rozaj-biske') OK
+END OF TEST
+
Added: trunk/LayoutTests/media/track/track-bcp-language.html (0 => 258587)
--- trunk/LayoutTests/media/track/track-bcp-language.html (rev 0)
+++ trunk/LayoutTests/media/track/track-bcp-language.html 2020-03-17 20:52:00 UTC (rev 258587)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html>
+
+ <title>BCP Language</title>
+ <script src=""
+ <script src=""
+
+ <script>
+ var test = 0;
+ if (window.testRunner)
+ testRunner.dumpAsText();
+
+ window.addEventListener('load', function() {
+ findMediaElement();
+
+ testExpected("internals.textTrackBCP47Language(track1.track)", "zh");
+ testExpected("track1.track.language", "zh");
+
+ track1.setAttribute("srclang", "zh-Hant");
+ testExpected("internals.textTrackBCP47Language(track1.track)", "zh-Hant");
+ testExpected("track1.track.language", "zh-Hant");
+
+ // Set to invalid code (country code must be <= 3)
+ track1.setAttribute("srclang", "zhHant");
+ testExpected("internals.textTrackBCP47Language(track1.track)", "");
+ testExpected("track1.track.language", "zhHant");
+
+ track1.setAttribute("srclang", "zh-cmn-Hans-CN");
+ testExpected("internals.textTrackBCP47Language(track1.track)", "zh-cmn-Hans-CN");
+ testExpected("track1.track.language", "zh-cmn-Hans-CN");
+
+ // <track> srclang attribute is invalid (invalid first character)
+ testExpected("internals.textTrackBCP47Language(track2.track)", "");
+ testExpected("track2.track.language", "-sl");
+
+ track2.setAttribute("srclang", "sl-rozaj-biske");
+ testExpected("internals.textTrackBCP47Language(track2.track)", "sl-rozaj-biske");
+ testExpected("track2.track.language", "sl-rozaj-biske");
+
+ endTest();
+ });
+
+ </script>
+
+ <body>
+ <p>Test that TextTrackBase.validBCP47Language is set and reset correctly.</p>
+ <video width="500" height="300" controls>
+ <track id="track1" kind="captions" srclang="zh" label="" />
+ <track id="track2" kind="captions" srclang="-sl" />
+ </video>
+ </body>
+</html>
+
Modified: trunk/Source/WebCore/ChangeLog (258586 => 258587)
--- trunk/Source/WebCore/ChangeLog 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/ChangeLog 2020-03-17 20:52:00 UTC (rev 258587)
@@ -1,3 +1,26 @@
+2020-03-17 Eric Carlson <[email protected]>
+
+ TextTrackBase should validate language before setting m_validBCP47Language
+ https://bugs.webkit.org/show_bug.cgi?id=209094
+ <rdar://problem/60439603>
+
+ Reviewed by Jer Noble.
+
+ Test: media/track/track-bcp-language.html
+
+ * html/track/TextTrack.idl:
+ * html/track/TrackBase.cpp:
+ (WebCore::TrackBase::TrackBase): Don't set m_validBCP47Language unless the language is valid.
+ (WebCore::TrackBase::setLanguage): Clear m_validBCP47Language if the language is invalid.
+ Restructure the code to use early returns.
+ (WebCore::TrackBase::validBCP47Language const): Deleted.
+ * html/track/TrackBase.h:
+ (WebCore::TrackBase::validBCP47Language const):
+ * testing/Internals.cpp:
+ (WebCore::Internals::textTrackBCP47Language):
+ * testing/Internals.h:
+ * testing/Internals.idl:
+
2020-03-17 Alex Christensen <[email protected]>
REGRESSION(r254856) Add exception for window.openDatabase to not masquerade as undefined in currently shipping Jesus Calling Devotional app
Modified: trunk/Source/WebCore/html/track/TextTrack.idl (258586 => 258587)
--- trunk/Source/WebCore/html/track/TextTrack.idl 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/html/track/TextTrack.idl 2020-03-17 20:52:00 UTC (rev 258587)
@@ -28,6 +28,7 @@
[
Conditional=VIDEO_TRACK,
+ ExportToWrappedFunction,
GenerateIsReachable=ImplElementRoot,
JSCustomMarkFunction,
SkipVTableValidation,
Modified: trunk/Source/WebCore/html/track/TrackBase.cpp (258586 => 258587)
--- trunk/Source/WebCore/html/track/TrackBase.cpp 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/html/track/TrackBase.cpp 2020-03-17 20:52:00 UTC (rev 258587)
@@ -38,6 +38,8 @@
static int s_uniqueId = 0;
+static bool isValidBCP47LanguageTag(const String&);
+
#if !RELEASE_LOG_DISABLED
static RefPtr<Logger>& nullLogger()
{
@@ -51,9 +53,11 @@
, m_id(id)
, m_label(label)
, m_language(language)
- , m_validBCP47Language(language)
{
ASSERT(type != BaseTrack);
+ if (isValidBCP47LanguageTag(language))
+ m_validBCP47Language = language;
+
m_type = type;
#if !RELEASE_LOG_DISABLED
@@ -129,28 +133,30 @@
void TrackBase::setLanguage(const AtomString& language)
{
- if (!language.isEmpty() && !isValidBCP47LanguageTag(language)) {
- String message;
- if (language.contains((UChar)'\0'))
- message = "The language contains a null character and is not a valid BCP 47 language tag."_s;
- else {
- StringBuilder stringBuilder;
- stringBuilder.appendLiteral("The language '");
- stringBuilder.append(language);
- stringBuilder.appendLiteral("' is not a valid BCP 47 language tag.");
- message = stringBuilder.toString();
- }
- if (auto element = this->element())
- element->document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Warning, message);
- } else
+ m_language = language;
+ if (language.isEmpty() || isValidBCP47LanguageTag(language)) {
m_validBCP47Language = language;
-
- m_language = language;
-}
+ return;
+ }
-AtomString TrackBase::validBCP47Language() const
-{
- return m_validBCP47Language;
+ m_validBCP47Language = emptyAtom();
+
+ auto element = this->element();
+ if (!element)
+ return;
+
+ String message;
+ if (language.contains((UChar)'\0'))
+ message = "The language contains a null character and is not a valid BCP 47 language tag."_s;
+ else {
+ StringBuilder stringBuilder;
+ stringBuilder.appendLiteral("The language '");
+ stringBuilder.append(language);
+ stringBuilder.appendLiteral("' is not a valid BCP 47 language tag.");
+ message = stringBuilder.toString();
+ }
+
+ element->document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Warning, message);
}
#if !RELEASE_LOG_DISABLED
Modified: trunk/Source/WebCore/html/track/TrackBase.h (258586 => 258587)
--- trunk/Source/WebCore/html/track/TrackBase.h 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/html/track/TrackBase.h 2020-03-17 20:52:00 UTC (rev 258587)
@@ -59,7 +59,7 @@
AtomString label() const { return m_label; }
void setLabel(const AtomString& label) { m_label = label; }
- AtomString validBCP47Language() const;
+ AtomString validBCP47Language() const { return m_validBCP47Language; }
AtomString language() const { return m_language; }
virtual void setLanguage(const AtomString&);
Modified: trunk/Source/WebCore/testing/Internals.cpp (258586 => 258587)
--- trunk/Source/WebCore/testing/Internals.cpp 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/testing/Internals.cpp 2020-03-17 20:52:00 UTC (rev 258587)
@@ -237,6 +237,7 @@
#if ENABLE(VIDEO_TRACK)
#include "CaptionUserPreferences.h"
#include "PageGroup.h"
+#include "TextTrack.h"
#include "TextTrackCueGeneric.h"
#endif
@@ -3769,6 +3770,11 @@
return nullptr;
return TextTrackCueGeneric::create(*document, MediaTime::createWithDouble(startTime), MediaTime::createWithDouble(endTime), text);
}
+
+ExceptionOr<String> Internals::textTrackBCP47Language(TextTrack& track)
+{
+ return String { track.validBCP47Language() };
+}
#endif
#if ENABLE(VIDEO)
Modified: trunk/Source/WebCore/testing/Internals.h (258586 => 258587)
--- trunk/Source/WebCore/testing/Internals.h 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/testing/Internals.h 2020-03-17 20:52:00 UTC (rev 258587)
@@ -98,6 +98,7 @@
class SourceBuffer;
class StringCallback;
class StyleSheet;
+class TextTrack;
class TimeRanges;
class TypeConversions;
class UnsuspendableActiveDOMObject;
@@ -594,6 +595,7 @@
ExceptionOr<void> setCaptionDisplayMode(const String&);
#if ENABLE(VIDEO_TRACK)
RefPtr<TextTrackCueGeneric> createGenericCue(double startTime, double endTime, String text);
+ ExceptionOr<String> textTrackBCP47Language(TextTrack&);
#endif
#if ENABLE(VIDEO)
Modified: trunk/Source/WebCore/testing/Internals.idl (258586 => 258587)
--- trunk/Source/WebCore/testing/Internals.idl 2020-03-17 20:47:44 UTC (rev 258586)
+++ trunk/Source/WebCore/testing/Internals.idl 2020-03-17 20:52:00 UTC (rev 258587)
@@ -587,6 +587,7 @@
[Conditional=VIDEO_TRACK, MayThrowException] void setPrimaryAudioTrackLanguageOverride(DOMString language);
[Conditional=VIDEO_TRACK, MayThrowException] void setCaptionDisplayMode(DOMString mode);
[Conditional=VIDEO_TRACK] TextTrackCueGeneric createGenericCue(double startTime, double endTime, DOMString text);
+ [Conditional=VIDEO_TRACK, MayThrowException] DOMString textTrackBCP47Language(TextTrack track);
[Conditional=VIDEO] TimeRanges createTimeRanges(Float32Array startTimes, Float32Array
endTimes);