Changeset 148285 in webkit


Ignore:
Timestamp:
Apr 12, 2013, 10:23:42 AM (12 years ago)
Author:
eric.carlson@apple.com
Message:

Support "forced" subtitles
https://bugs.webkit.org/show_bug.cgi?id=114460

Reviewed by Jer Noble.

Source/WebCore:

Test: media/track/track-forced-subtitles.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::configureTextTrackGroup): Enable a forced track if nothing else is enabled.
(WebCore::HTMLMediaElement::configureTextTracks): Include forced tracks with captions+subtitles.

  • html/track/InbandTextTrack.cpp:

(WebCore::InbandTextTrack::InbandTextTrack): Deal with kind=forced.

  • html/track/TextTrack.cpp:

(WebCore::TextTrack::forcedKeyword): New keyword.
(WebCore::TextTrack::isValidKindKeyword): Include forced.
(WebCore::TextTrack::platformTextTrack): Ditto.

  • html/track/TextTrack.h:
  • page/CaptionUserPreferences.cpp:

(WebCore::CaptionUserPreferences::primaryAudioTrackLanguageOverride): New override to support testing.

  • page/CaptionUserPreferences.h:
  • page/CaptionUserPreferencesMac.mm:

(WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Support forced tracks.

  • platform/graphics/InbandTextTrackPrivate.h:
  • platform/graphics/PlatformTextTrack.h: Add Forced, minor cleanup.
  • platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:

(WebCore::InbandTextTrackPrivateAVF::processCue): Drive-by enhancement: log cue position.

  • platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:

(WebCore::InbandTextTrackPrivateAVFObjC::kind): Support forced.
(WebCore::InbandTextTrackPrivateAVFObjC::label): Drive-by cleanup.

  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Don't filter out forced tracks.
(WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Log the language returned.

  • testing/Internals.cpp:

(WebCore::Internals::setPrimaryAudioTrackLanguageOverride): New.
(WebCore::Internals::setCaptionDisplayMode): New.

  • testing/Internals.h:
  • testing/Internals.idl:

LayoutTests:

  • media/content/CC+Subtitles.m4v: Added.
  • media/track/track-forced-subtitles-in-band-expected.txt: Added.
  • media/track/track-forced-subtitles-in-band.html: Added.
  • media/trackmenu-test.js:
  • platform/efl/TestExpectations: Skip new test.
  • platform/gtk/TestExpectations: Ditto.
  • platform/mac/TestExpectations: Ditto.
  • platform/qt/TestExpectations: Ditto.
  • platform/win/TestExpectations: Ditto.
Location:
trunk
Files:
2 added
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r148282 r148285  
     12013-04-12  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Support "forced" subtitles
     4        https://bugs.webkit.org/show_bug.cgi?id=114460
     5
     6        Reviewed by Jer Noble.
     7
     8        * media/content/CC+Subtitles.m4v: Added.
     9        * media/track/track-forced-subtitles-in-band-expected.txt: Added.
     10        * media/track/track-forced-subtitles-in-band.html: Added.
     11        * media/trackmenu-test.js:
     12
     13        * platform/efl/TestExpectations: Skip new test.
     14        * platform/gtk/TestExpectations: Ditto.
     15        * platform/mac/TestExpectations: Ditto.
     16        * platform/qt/TestExpectations: Ditto.
     17        * platform/win/TestExpectations: Ditto.
     18
    1192013-04-12  Ryosuke Niwa  <rniwa@webkit.org>
    220
  • trunk/LayoutTests/media/trackmenu-test.js

    r147675 r148285  
    1 var captionsButtonCoordinates;
     1var captionsButtonCoordinates = null;
    22
    33function clickCCButton()
    44{
     5    if (!captionsButtonCoordinates) {
     6        try {
     7            captionsButtonCoordinates = mediaControlsButtonCoordinates(video, "toggle-closed-captions-button");
     8        } catch (exception) {
     9            failTest(exception.description);
     10            return;
     11        }
     12    }
     13
    514    eventSender.mouseMoveTo(captionsButtonCoordinates[0], captionsButtonCoordinates[1]);
    615    eventSender.mouseDown();
     
    1423        run("internals.setUserPreferredLanguages(['en'])");
    1524
    16         try {
    17             captionsButtonCoordinates = mediaControlsButtonCoordinates(video, "toggle-closed-captions-button");
    18         } catch (exception) {
    19             failTest(exception.description);
    20             return;
    21         }
    2225        clickCCButton();
    2326        window.setTimeout(testFunction, 100);
  • trunk/LayoutTests/platform/efl/TestExpectations

    r148282 r148285  
    16381638Bug(EFL) media/track/track-in-band-style.html [ Skip ]
    16391639Bug(EFL) media/track/track-in-band-legacy-api.html [ Skip ]
     1640Bug(EFL) media/track/track-forced-subtitles-in-band.html [ Skip ]
    16401641
    16411642# All debug bots timeout (crash) on this one
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r148282 r148285  
    404404webkit.org/b/103771 media/track/track-in-band-style.html [ Timeout ]
    405405webkit.org/b/103771 media/track/track-in-band-legacy-api.html [ Failure ]
     406webkit.org/b/103771 media/track/track-forced-subtitles-in-band.html [ Failure ]
    406407
    407408#Incorrect rebaseline
  • trunk/LayoutTests/platform/mac/TestExpectations

    r148282 r148285  
    13671367webkit.org/b/103663 [ MountainLion Lion SnowLeopard ] media/track/track-in-band-style.html
    13681368webkit.org/b/103663 [ MountainLion Lion SnowLeopard ] media/track/track-in-band-legacy-api.html
     1369webkit.org/b/103663 [ MountainLion Lion SnowLeopard ] media/track/track-forced-subtitles-in-band.html
    13691370
    13701371# These two tests sometimes timeout
  • trunk/LayoutTests/platform/qt/TestExpectations

    r148282 r148285  
    26242624webkit.org/b/103769 media/track/track-in-band-style.html [ Skip ]
    26252625webkit.org/b/103769 media/track/track-in-band-legacy-api.html [ Skip ]
     2626webkit.org/b/103769 media/track/track-forced-subtitles-in-band.html [ Skip ]
    26262627
    26272628webkit.org/b/104150 fast/media/implicit-media-all.html [ ImageOnlyFailure ]
  • trunk/LayoutTests/platform/win/TestExpectations

    r148282 r148285  
    25402540webkit.org/b/103770 media/track/track-in-band-style.html [ Skip ]
    25412541webkit.org/b/103770 media/track/track-in-band-legacy-api.html [ Skip ]
     2542webkit.org/b/103770 media/track/track-forced-subtitles-in-band.html [ Skip ]
    25422543
    25432544# https://bugs.webkit.org/show_bug.cgi?id=97026
  • trunk/Source/WebCore/ChangeLog

    r148283 r148285  
     12013-04-12  Eric Carlson  <eric.carlson@apple.com>
     2
     3        Support "forced" subtitles
     4        https://bugs.webkit.org/show_bug.cgi?id=114460
     5
     6        Reviewed by Jer Noble.
     7
     8        Test: media/track/track-forced-subtitles.html
     9
     10        * html/HTMLMediaElement.cpp:
     11        (WebCore::HTMLMediaElement::configureTextTrackGroup): Enable a forced track if nothing else is enabled.
     12        (WebCore::HTMLMediaElement::configureTextTracks): Include forced tracks with captions+subtitles.
     13
     14        * html/track/InbandTextTrack.cpp:
     15        (WebCore::InbandTextTrack::InbandTextTrack): Deal with kind=forced.
     16
     17        * html/track/TextTrack.cpp:
     18        (WebCore::TextTrack::forcedKeyword): New keyword.
     19        (WebCore::TextTrack::isValidKindKeyword): Include forced.
     20        (WebCore::TextTrack::platformTextTrack): Ditto.
     21        * html/track/TextTrack.h:
     22
     23        * page/CaptionUserPreferences.cpp:
     24        (WebCore::CaptionUserPreferences::primaryAudioTrackLanguageOverride): New override to support testing.
     25        * page/CaptionUserPreferences.h:
     26
     27        * page/CaptionUserPreferencesMac.mm:
     28        (WebCore::CaptionUserPreferencesMac::textTrackSelectionScore): Support forced tracks.
     29        * platform/graphics/InbandTextTrackPrivate.h:
     30
     31        * platform/graphics/PlatformTextTrack.h: Add Forced, minor cleanup.
     32
     33        * platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp:
     34        (WebCore::InbandTextTrackPrivateAVF::processCue): Drive-by enhancement: log cue position.
     35
     36        * platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm:
     37        (WebCore::InbandTextTrackPrivateAVFObjC::kind): Support forced.
     38        (WebCore::InbandTextTrackPrivateAVFObjC::label): Drive-by cleanup.
     39
     40        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
     41        (WebCore::MediaPlayerPrivateAVFoundationObjC::processTextTracks): Don't filter out forced tracks.
     42        (WebCore::MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack): Log the language returned.
     43
     44        * testing/Internals.cpp:
     45        (WebCore::Internals::setPrimaryAudioTrackLanguageOverride): New.
     46        (WebCore::Internals::setCaptionDisplayMode): New.
     47        * testing/Internals.h:
     48        * testing/Internals.idl:
     49
    1502013-04-12  Ryosuke Niwa  <rniwa@webkit.org>
    251
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r148099 r148285  
    30753075    RefPtr<TextTrack> defaultTrack;
    30763076    RefPtr<TextTrack> fallbackTrack;
     3077    RefPtr<TextTrack> forcedSubitleTrack;
    30773078    int highestTrackScore = 0;
     3079    int highestForcedScore = 0;
    30783080    for (size_t i = 0; i < group.tracks.size(); ++i) {
    30793081        RefPtr<TextTrack> textTrack = group.tracks[i];
     
    31023104            if (!defaultTrack && !fallbackTrack)
    31033105                fallbackTrack = textTrack;
     3106            if (textTrack->containsOnlyForcedSubtitles() && trackScore > highestForcedScore) {
     3107                forcedSubitleTrack = textTrack;
     3108                highestForcedScore = trackScore;
     3109            }
    31043110        } else if (!group.visibleTrack && !defaultTrack && textTrack->isDefault()) {
    31053111            // * If the track element has a default attribute specified, and there is no other text track in the media
     
    31123118    if (!trackToEnable && defaultTrack)
    31133119        trackToEnable = defaultTrack;
     3120
     3121    // If no track matches the user's preferred language, none was marked as 'default', and there is a forced subtitle track
     3122    // in the same language as the language of the primary audio track, enable it.
     3123    if (!trackToEnable && forcedSubitleTrack)
     3124        trackToEnable = forcedSubitleTrack;
    31143125
    31153126    // If no track matches the user's preferred language and non was marked 'default', enable the first track
     
    31903201        String kind = textTrack->kind();
    31913202        TrackGroup* currentGroup;
    3192         if (kind == TextTrack::subtitlesKeyword() || kind == TextTrack::captionsKeyword())
     3203        if (kind == TextTrack::subtitlesKeyword() || kind == TextTrack::captionsKeyword() || kind == TextTrack::forcedKeyword())
    31933204            currentGroup = &captionAndSubtitleTracks;
    31943205        else if (kind == TextTrack::descriptionsKeyword())
  • trunk/Source/WebCore/html/track/InbandTextTrack.cpp

    r146380 r148285  
    6969    case InbandTextTrackPrivate::Metadata:
    7070        setKind(TextTrack::metadataKeyword());
     71        break;
     72    case InbandTextTrackPrivate::Forced:
     73        setKind(TextTrack::forcedKeyword());
    7174        break;
    7275    case InbandTextTrackPrivate::None:
  • trunk/Source/WebCore/html/track/TextTrack.cpp

    r147675 r148285  
    7777    return metadata;
    7878}
     79   
     80const AtomicString& TextTrack::forcedKeyword()
     81{
     82    DEFINE_STATIC_LOCAL(const AtomicString, forced, ("forced", AtomicString::ConstructFromLiteral));
     83    return forced;
     84}
    7985
    8086const AtomicString& TextTrack::disabledKeyword()
     
    156162    if (value == metadataKeyword())
    157163        return true;
     164    if (value == forcedKeyword())
     165        return true;
    158166
    159167    return false;
     
    514522    else if (m_kind == metadataKeyword())
    515523        kind = PlatformTextTrack::MetaData;
     524    else if (m_kind == forcedKeyword())
     525        kind = PlatformTextTrack::Forced;
    516526
    517527    PlatformTextTrack::TrackType type = PlatformTextTrack::OutOfBand;
  • trunk/Source/WebCore/html/track/TextTrack.h

    r147675 r148285  
    8888    static const AtomicString& chaptersKeyword();
    8989    static const AtomicString& metadataKeyword();
     90    static const AtomicString& forcedKeyword();
    9091    static bool isValidKindKeyword(const AtomicString&);
    9192
  • trunk/Source/WebCore/page/CaptionUserPreferences.cpp

    r148050 r148285  
    245245}
    246246
     247String CaptionUserPreferences::primaryAudioTrackLanguageOverride() const
     248{
     249    if (!m_primaryAudioTrackLanguageOverride.isEmpty())
     250        return m_primaryAudioTrackLanguageOverride;
     251    return defaultLanguage();
     252}
    247253   
    248254}
  • trunk/Source/WebCore/page/CaptionUserPreferences.h

    r148050 r148285  
    8282    virtual Vector<RefPtr<TextTrack> > sortedTrackListForMenu(TextTrackList*);
    8383
     84    void setPrimaryAudioTrackLanguageOverride(const String& language) { m_primaryAudioTrackLanguageOverride = language;  }
     85    String primaryAudioTrackLanguageOverride() const;
     86
    8487    virtual bool testingMode() const { return m_testingMode; }
    8588    virtual void setTestingMode(bool override) { m_testingMode = override; }
     
    100103    String m_userPreferredLanguage;
    101104    String m_captionsStyleSheetOverride;
     105    String m_primaryAudioTrackLanguageOverride;
    102106    bool m_testingMode;
    103107    bool m_havePreferences;
  • trunk/Source/WebCore/page/CaptionUserPreferencesMac.mm

    r148050 r148285  
    620620{
    621621    CaptionDisplayMode displayMode = captionDisplayMode();
    622     if (displayMode == ForcedOnly)
    623         return 0;
    624622    if (displayMode == AlwaysOn && (!userPrefersSubtitles() && !userPrefersCaptions()))
    625623        return 0;
    626     if (track->kind() != TextTrack::captionsKeyword() && track->kind() != TextTrack::subtitlesKeyword())
    627         return 0;
    628     if (track->containsOnlyForcedSubtitles())
     624    if (track->kind() != TextTrack::captionsKeyword() && track->kind() != TextTrack::subtitlesKeyword() && track->kind() != TextTrack::forcedKeyword())
    629625        return 0;
    630626    if (!track->isMainProgramContent())
    631627        return 0;
     628    if (displayMode == ForcedOnly && !track->containsOnlyForcedSubtitles())
     629        return 0;
    632630
    633631    Vector<String> userPreferredCaptionLanguages = preferredLanguages();
    634632
    635     if (displayMode == Automatic) {
    636 
    637         // Only enable a text track if the current audio track is not in the user's preferred language.
     633    if (displayMode == Automatic || track->containsOnlyForcedSubtitles()) {
     634
    638635        if (!mediaElement || !mediaElement->player())
    639636            return 0;
    640637
    641         String audioTrackLanguage = mediaElement->player()->languageOfPrimaryAudioTrack();
     638        String audioTrackLanguage;
     639
     640        Vector<String> languageList;
     641        languageList.reserveCapacity(1);
     642
     643        if (testingMode())
     644            audioTrackLanguage = primaryAudioTrackLanguageOverride();
     645        else
     646            audioTrackLanguage = mediaElement->player()->languageOfPrimaryAudioTrack();
    642647
    643648        if (audioTrackLanguage.isEmpty())
    644649            return 0;
    645650
    646         Vector<String> languages;
    647         languages.append(defaultLanguage());
    648         size_t offset = indexOfBestMatchingLanguageInList(audioTrackLanguage, languages);
    649         if (!offset)
    650             return 0;
    651 
    652         userPreferredCaptionLanguages = languages;
     651        if (displayMode == Automatic) {
     652            // Only enable a text track if the current audio track is not in the user's preferred language.
     653            languageList.append(defaultLanguage());
     654            size_t offset = indexOfBestMatchingLanguageInList(audioTrackLanguage, languageList);
     655            if (offset)
     656                return 0;
     657        } else {
     658            // Only consider a forced-only track if it is in the same language as the primary audio track.
     659            String trackLanguage = track->language();
     660            if (trackLanguage.isEmpty())
     661                return 0;
     662
     663            languageList.append(audioTrackLanguage);
     664            size_t offset = indexOfBestMatchingLanguageInList(trackLanguage, languageList);
     665            if (offset)
     666                return 0;
     667        }
     668
     669        userPreferredCaptionLanguages = languageList;
    653670    }
    654671
  • trunk/Source/WebCore/platform/graphics/InbandTextTrackPrivate.h

    r146380 r148285  
    5050    InbandTextTrackPrivateClient* client() { return m_client; }
    5151
    52     enum Mode { Disabled, Hidden, Showing };
     52    enum Mode {
     53        Disabled,
     54        Hidden,
     55        Showing
     56    };
    5357    virtual void setMode(Mode mode) { m_mode = mode; };
    5458    virtual InbandTextTrackPrivate::Mode mode() const { return m_mode; }
    5559
    56     enum Kind { Subtitles, Captions, Descriptions, Chapters, Metadata, None };
     60    enum Kind {
     61        Subtitles,
     62        Captions,
     63        Descriptions,
     64        Chapters,
     65        Metadata,
     66        Forced,
     67        None
     68    };
    5769    virtual Kind kind() const { return Subtitles; }
    5870    virtual bool isClosedCaptions() const { return false; }
  • trunk/Source/WebCore/platform/graphics/PlatformTextTrack.h

    r145322 r148285  
    4747class PlatformTextTrack : public RefCounted<PlatformTextTrack> {
    4848public:
    49     enum TrackKind { Subtitle = 0, Caption = 1, Description = 2, Chapter = 3, MetaData = 4 };
    50     enum TrackType { InBand = 0, OutOfBand = 1, Script = 2 };
     49    enum TrackKind {
     50        Subtitle = 0,
     51        Caption = 1,
     52        Description = 2,
     53        Chapter = 3,
     54        MetaData = 4,
     55        Forced = 5,
     56    };
     57    enum TrackType {
     58        InBand = 0,
     59        OutOfBand = 1,
     60        Script = 2
     61    };
    5162
    5263    static PassRefPtr<PlatformTextTrack> create(PlatformTextTrackClient* client, const String& label, const String& language, TrackKind kind, TrackType type)
  • trunk/Source/WebCore/platform/graphics/avfoundation/InbandTextTrackPrivateAVF.cpp

    r145326 r148285  
    357357                    cueData->setPosition(cueData->position() - cueData->size() / 2);
    358358               
    359                 LOG(Media, "InbandTextTrackPrivateAVF::processCue(%p) - adding cue for time %.2f", this, cueData->startTime());
     359                LOG(Media, "InbandTextTrackPrivateAVF::processCue(%p) - adding cue for time = %.2f, position =  %.2f, line =  %.2f", this, cueData->startTime(), cueData->position(), cueData->line());
    360360                client()->addGenericCue(this, cueData);
    361361            }
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/InbandTextTrackPrivateAVFObjC.mm

    r146380 r148285  
    100100
    101101    NSString *mediaType = [m_mediaSelectionOption mediaType];
     102   
    102103    if ([mediaType isEqualToString:AVMediaTypeClosedCaption])
    103104        return Captions;
    104105    if ([mediaType isEqualToString:AVMediaTypeSubtitle]) {
     106
     107        if ([m_mediaSelectionOption hasMediaCharacteristic:AVMediaCharacteristicContainsOnlyForcedSubtitles])
     108            return Forced;
    105109
    106110        // An "SDH" track is a subtitle track created for the deaf or hard-of-hearing. "captions" in WebVTT are
     
    154158        return emptyAtom;
    155159
     160    NSString *title = 0;
     161
    156162    NSArray *titles = [AVMetadataItem metadataItemsFromArray:[m_mediaSelectionOption.get() commonMetadata] withKey:AVMetadataCommonKeyTitle keySpace:AVMetadataKeySpaceCommon];
    157163    if ([titles count]) {
     
    159165        NSArray *titlesForPreferredLanguages = [AVMetadataItem metadataItemsFromArray:titles filteredAndSortedAccordingToPreferredLanguages:[NSLocale preferredLanguages]];
    160166        if ([titlesForPreferredLanguages count])
    161             return [[titlesForPreferredLanguages objectAtIndex:0] stringValue];
     167            title = [[titlesForPreferredLanguages objectAtIndex:0] stringValue];
    162168
    163         return [[titles objectAtIndex:0] stringValue];
     169        if (!title)
     170            title = [[titles objectAtIndex:0] stringValue];
    164171    }
    165172
    166     return emptyAtom;
     173    return title ? AtomicString(title) : emptyAtom;
    167174}
    168175
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r148140 r148285  
    13321332            continue;
    13331333
    1334         if ([[option mediaType] isEqualToString:AVMediaTypeSubtitle] && [option hasMediaCharacteristic:AVMediaCharacteristicContainsOnlyForcedSubtitles])
    1335             continue;
    1336 
    13371334        m_textTracks.append(InbandTextTrackPrivateAVFObjC::create(this, option));
    13381335    }
     
    14051402    if (currentlySelectedAudibleOption) {
    14061403        m_languageOfPrimaryAudioTrack = [[currentlySelectedAudibleOption locale] localeIdentifier];
     1404        LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - returning language of selected audible option: %s", this, m_languageOfPrimaryAudioTrack.utf8().data());
     1405
    14071406        return m_languageOfPrimaryAudioTrack;
    14081407    }
     
    14141413    if (!tracks || [tracks count] != 1) {
    14151414        m_languageOfPrimaryAudioTrack = emptyString();
     1415        LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - %i audio tracks, returning emptyString()", this, (tracks ? [tracks count] : 0));
    14161416        return m_languageOfPrimaryAudioTrack;
    14171417    }
     
    14231423    if (language && ![language isEqualToString:@"und"]) {
    14241424        m_languageOfPrimaryAudioTrack = language;
     1425        LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - returning language of single audio track: %s", this, m_languageOfPrimaryAudioTrack.utf8().data());
    14251426        return m_languageOfPrimaryAudioTrack;
    14261427    }
    14271428
     1429    LOG(Media, "MediaPlayerPrivateAVFoundationObjC::languageOfPrimaryAudioTrack(%p) - single audio track has no language, returning emptyString()", this);
    14281430    m_languageOfPrimaryAudioTrack = emptyString();
    14291431    return m_languageOfPrimaryAudioTrack;
  • trunk/Source/WebCore/testing/Internals.cpp

    r148282 r148285  
    22032203}
    22042204
    2205 }
     2205void Internals::setPrimaryAudioTrackLanguageOverride(const String& language, ExceptionCode& ec)
     2206{
     2207    Document* document = contextDocument();
     2208    if (!document || !document->page()) {
     2209        ec = INVALID_ACCESS_ERR;
     2210        return;
     2211    }
     2212
     2213#if ENABLE(VIDEO_TRACK) && !PLATFORM(WIN)
     2214    document->page()->group().captionPreferences()->setPrimaryAudioTrackLanguageOverride(language);
     2215#else
     2216    UNUSED_PARAM(language);
     2217#endif
     2218}
     2219
     2220void Internals::setCaptionDisplayMode(const String& mode, ExceptionCode& ec)
     2221{
     2222    Document* document = contextDocument();
     2223    if (!document || !document->page()) {
     2224        ec = INVALID_ACCESS_ERR;
     2225        return;
     2226    }
     2227   
     2228#if ENABLE(VIDEO_TRACK) && !PLATFORM(WIN)
     2229    CaptionUserPreferences* captionPreferences = document->page()->group().captionPreferences();
     2230   
     2231    if (equalIgnoringCase(mode, "Automatic"))
     2232        captionPreferences->setCaptionDisplayMode(CaptionUserPreferences::Automatic);
     2233    else if (equalIgnoringCase(mode, "ForcedOnly"))
     2234        captionPreferences->setCaptionDisplayMode(CaptionUserPreferences::ForcedOnly);
     2235    else if (equalIgnoringCase(mode, "AlwaysOn"))
     2236        captionPreferences->setCaptionDisplayMode(CaptionUserPreferences::AlwaysOn);
     2237    else
     2238        ec = SYNTAX_ERR;
     2239#else
     2240    UNUSED_PARAM(mode);
     2241#endif
     2242}
     2243
     2244}
  • trunk/Source/WebCore/testing/Internals.h

    r148282 r148285  
    319319    String captionsStyleSheetOverride(ExceptionCode&);
    320320    void setCaptionsStyleSheetOverride(const String&, ExceptionCode&);
     321    void setPrimaryAudioTrackLanguageOverride(const String&, ExceptionCode&);
     322    void setCaptionDisplayMode(const String&, ExceptionCode&);
    321323
    322324private:
  • trunk/Source/WebCore/testing/Internals.idl

    r148282 r148285  
    280280    [Conditional=VIDEO_TRACK] DOMString captionsStyleSheetOverride() raises (DOMException);
    281281    [Conditional=VIDEO_TRACK] void setCaptionsStyleSheetOverride(in DOMString override) raises (DOMException);
     282    [Conditional=VIDEO_TRACK] void setPrimaryAudioTrackLanguageOverride(in DOMString language) raises(DOMException);
     283    [Conditional=VIDEO_TRACK] void setCaptionDisplayMode(in DOMString mode) raises (DOMException);
    282284
    283285    boolean isSelectPopupVisible(in Node node);
Note: See TracChangeset for help on using the changeset viewer.