Changeset 258587 in webkit


Ignore:
Timestamp:
Mar 17, 2020, 1:52:00 PM (5 years ago)
Author:
eric.carlson@apple.com
Message:

TextTrackBase should validate language before setting m_validBCP47Language
https://bugs.webkit.org/show_bug.cgi?id=209094
<rdar://problem/60439603>

Reviewed by Jer Noble.
Source/WebCore:

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:

LayoutTests:

  • media/track/track-bcp-language-expected.txt: Added.
  • media/track/track-bcp-language.html: Added.
Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r258585 r258587  
     12020-03-17  Eric Carlson  <eric.carlson@apple.com>
     2
     3        TextTrackBase should validate language before setting m_validBCP47Language
     4        https://bugs.webkit.org/show_bug.cgi?id=209094
     5        <rdar://problem/60439603>
     6
     7        Reviewed by Jer Noble.
     8
     9        * media/track/track-bcp-language-expected.txt: Added.
     10        * media/track/track-bcp-language.html: Added.
     11
    1122020-03-17  Jacob Uphoff  <jacob_uphoff@apple.com>
    213
  • trunk/Source/WebCore/ChangeLog

    r258564 r258587  
     12020-03-17  Eric Carlson  <eric.carlson@apple.com>
     2
     3        TextTrackBase should validate language before setting m_validBCP47Language
     4        https://bugs.webkit.org/show_bug.cgi?id=209094
     5        <rdar://problem/60439603>
     6
     7        Reviewed by Jer Noble.
     8       
     9        Test: media/track/track-bcp-language.html
     10
     11        * html/track/TextTrack.idl:
     12        * html/track/TrackBase.cpp:
     13        (WebCore::TrackBase::TrackBase): Don't set m_validBCP47Language unless the language is valid.
     14        (WebCore::TrackBase::setLanguage): Clear m_validBCP47Language if the language is invalid.
     15        Restructure the code to use early returns.
     16        (WebCore::TrackBase::validBCP47Language const): Deleted.
     17        * html/track/TrackBase.h:
     18        (WebCore::TrackBase::validBCP47Language const):
     19        * testing/Internals.cpp:
     20        (WebCore::Internals::textTrackBCP47Language):
     21        * testing/Internals.h:
     22        * testing/Internals.idl:
     23
    1242020-03-17  Alex Christensen  <achristensen@webkit.org>
    225
  • trunk/Source/WebCore/html/track/TextTrack.idl

    r257997 r258587  
    2929[
    3030    Conditional=VIDEO_TRACK,
     31    ExportToWrappedFunction,
    3132    GenerateIsReachable=ImplElementRoot,
    3233    JSCustomMarkFunction,
  • trunk/Source/WebCore/html/track/TrackBase.cpp

    r256353 r258587  
    3939static int s_uniqueId = 0;
    4040
     41static bool isValidBCP47LanguageTag(const String&);
     42
    4143#if !RELEASE_LOG_DISABLED
    4244static RefPtr<Logger>& nullLogger()
     
    5254    , m_label(label)
    5355    , m_language(language)
    54     , m_validBCP47Language(language)
    5556{
    5657    ASSERT(type != BaseTrack);
     58    if (isValidBCP47LanguageTag(language))
     59        m_validBCP47Language = language;
     60
    5761    m_type = type;
    5862
     
    130134void TrackBase::setLanguage(const AtomString& language)
    131135{
    132     if (!language.isEmpty() && !isValidBCP47LanguageTag(language)) {
    133         String message;
    134         if (language.contains((UChar)'\0'))
    135             message = "The language contains a null character and is not a valid BCP 47 language tag."_s;
    136         else {
    137             StringBuilder stringBuilder;
    138             stringBuilder.appendLiteral("The language '");
    139             stringBuilder.append(language);
    140             stringBuilder.appendLiteral("' is not a valid BCP 47 language tag.");
    141             message = stringBuilder.toString();
    142         }
    143         if (auto element = this->element())
    144             element->document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Warning, message);
    145     } else
     136    m_language = language;
     137    if (language.isEmpty() || isValidBCP47LanguageTag(language)) {
    146138        m_validBCP47Language = language;
    147    
    148     m_language = language;
    149 }
     139        return;
     140    }
    150141
    151 AtomString TrackBase::validBCP47Language() const
    152 {
    153     return m_validBCP47Language;
     142    m_validBCP47Language = emptyAtom();
     143
     144    auto element = this->element();
     145    if (!element)
     146        return;
     147
     148    String message;
     149    if (language.contains((UChar)'\0'))
     150        message = "The language contains a null character and is not a valid BCP 47 language tag."_s;
     151    else {
     152        StringBuilder stringBuilder;
     153        stringBuilder.appendLiteral("The language '");
     154        stringBuilder.append(language);
     155        stringBuilder.appendLiteral("' is not a valid BCP 47 language tag.");
     156        message = stringBuilder.toString();
     157    }
     158
     159    element->document().addConsoleMessage(MessageSource::Rendering, MessageLevel::Warning, message);
    154160}
    155161
  • trunk/Source/WebCore/html/track/TrackBase.h

    r256353 r258587  
    6060    void setLabel(const AtomString& label) { m_label = label; }
    6161
    62     AtomString validBCP47Language() const;
     62    AtomString validBCP47Language() const { return m_validBCP47Language; }
    6363    AtomString language() const { return m_language; }
    6464    virtual void setLanguage(const AtomString&);
  • trunk/Source/WebCore/testing/Internals.cpp

    r258528 r258587  
    238238#include "CaptionUserPreferences.h"
    239239#include "PageGroup.h"
     240#include "TextTrack.h"
    240241#include "TextTrackCueGeneric.h"
    241242#endif
     
    37703771    return TextTrackCueGeneric::create(*document, MediaTime::createWithDouble(startTime), MediaTime::createWithDouble(endTime), text);
    37713772}
     3773
     3774ExceptionOr<String> Internals::textTrackBCP47Language(TextTrack& track)
     3775{
     3776    return String { track.validBCP47Language() };
     3777}
    37723778#endif
    37733779
  • trunk/Source/WebCore/testing/Internals.h

    r258359 r258587  
    9999class StringCallback;
    100100class StyleSheet;
     101class TextTrack;
    101102class TimeRanges;
    102103class TypeConversions;
     
    595596#if ENABLE(VIDEO_TRACK)
    596597    RefPtr<TextTrackCueGeneric> createGenericCue(double startTime, double endTime, String text);
     598    ExceptionOr<String> textTrackBCP47Language(TextTrack&);
    597599#endif
    598600
  • trunk/Source/WebCore/testing/Internals.idl

    r258359 r258587  
    588588    [Conditional=VIDEO_TRACK, MayThrowException] void setCaptionDisplayMode(DOMString mode);
    589589    [Conditional=VIDEO_TRACK] TextTrackCueGeneric createGenericCue(double startTime, double endTime, DOMString text);
     590    [Conditional=VIDEO_TRACK, MayThrowException] DOMString textTrackBCP47Language(TextTrack track);
    590591
    591592    [Conditional=VIDEO] TimeRanges createTimeRanges(Float32Array startTimes, Float32Array
Note: See TracChangeset for help on using the changeset viewer.