Changeset 142809 in webkit


Ignore:
Timestamp:
Feb 13, 2013 2:57:11 PM (11 years ago)
Author:
eric.carlson@apple.com
Message:

[Mac] Caption menu should have only one item selected
https://bugs.webkit.org/show_bug.cgi?id=109730

Reviewed by Dean Jackson.

Source/WebCore:

No new tests, media/track/track-user-preferences.html was modified to test the changes.

  • CMakeLists.txt: Add CaptionUserPreferences.cpp.
  • GNUmakefile.list.am: Ditto.
  • Target.pri: Ditto.
  • WebCore.gypi: Ditto.
  • WebCore.vcproj/WebCore.vcproj: Ditto.
  • WebCore.vcxproj/WebCore.vcxproj: Ditto.
  • WebCore.xcodeproj/project.pbxproj: Ditto.
  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_processingPreferenceChange.
(WebCore::HTMLMediaElement::configureTextTrackGroup): Only end up with one selected track when

called because of a preferences change.

(WebCore::HTMLMediaElement::captionPreferencesChanged): Call setClosedCaptionsVisible instead

of calling markCaptionAndSubtitleTracksAsUnconfigured directly.

(WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Process all tracks,

not just track elements.

  • html/HTMLMediaElement.h:
  • page/CaptionUserPreferences.cpp: Added so the functionality can be tested in DRT.

(WebCore::CaptionUserPreferences::registerForPreferencesChangedCallbacks):
(WebCore::CaptionUserPreferences::unregisterForPreferencesChangedCallbacks):
(WebCore::CaptionUserPreferences::setUserPrefersCaptions):
(WebCore::CaptionUserPreferences::captionPreferencesChanged):
(WebCore::CaptionUserPreferences::preferredLanguages):
(WebCore::CaptionUserPreferences::setPreferredLanguage):
(WebCore::CaptionUserPreferences::displayNameForTrack):

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

(WebCore::CaptionUserPreferencesMac::registerForPreferencesChangedCallbacks): Moved some logic

to base class.

(WebCore::CaptionUserPreferencesMac::captionPreferencesChanged): Ditto.

LayoutTests:

  • media/track/track-user-preferences-expected.txt:
  • media/track/track-user-preferences.html: Update test to check for reactions to preferences.
Location:
trunk
Files:
1 added
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r142805 r142809  
     12013-02-13  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [Mac] Caption menu should have only one item selected
     4        https://bugs.webkit.org/show_bug.cgi?id=109730
     5
     6        Reviewed by Dean Jackson.
     7
     8        * media/track/track-user-preferences-expected.txt:
     9        * media/track/track-user-preferences.html: Update test to check for reactions to preferences.
     10
    1112013-02-13  Hans Muller  <hmuller@adobe.com>
    212
  • trunk/LayoutTests/media/track/track-user-preferences-expected.txt

    r142580 r142809  
    44Set user languages to: ['no', 'es-ES', 'en', 'fr'].
    55
    6 Test 1: track selected because of 'default' attribute
     6Test 1: 'no' track selected because of user preferred language
    77- creating tracks for: [en,fr,no].
    8 EVENT(load)
    9 EXPECTED (event.target.srclang == 'fr') OK
    10 EXPECTED (event.target.readyState == '2') OK
    11 
    12 Test 2: track selected because of original user preferred language
    13 - creating tracks for: [fr,en,no].
    148EVENT(load)
    159EXPECTED (event.target.srclang == 'no') OK
    1610EXPECTED (event.target.readyState == '2') OK
    1711
    18 Test 3: preferred language changed by selecting track from menu
     12Test 2: 'no' track still selected because of language, overriding 'default' attribute
     13- creating tracks for: [fr,en,no].
     14-- 'en' track marked as default.
     15EVENT(load)
     16EXPECTED (event.target.srclang == 'no') OK
     17EXPECTED (event.target.readyState == '2') OK
     18
     19Test 3: select 'fr' track from menu
    1920- show captions menu.
     21EXPECTED (trackMenuItems[1].className == '') OK
     22EXPECTED (trackMenuItems[2].className == '') OK
     23EXPECTED (trackMenuItems[3].className == 'selected') OK
    2024- click on menu item 2.
    21 EXPECTED (video.textTracks[0].mode == 'showing') OK
    22 EXPECTED (video.textTracks[0].language == 'fr') OK
    23 - creating tracks for: [no,fr,en].
    2425EVENT(load)
    2526EXPECTED (event.target.srclang == 'fr') OK
    2627EXPECTED (event.target.readyState == '2') OK
     28EXPECTED (video.textTracks[0].mode == 'showing') OK
     29EXPECTED (video.textTracks[0].language == 'fr') OK
    2730
    28 Test 4: turning captions off from menu disables captions
     31Test 4: preferred language was changed to 'fr' by selecting track from menu
     32- creating tracks for: [ru,en,fr].
     33EVENT(load)
     34EXPECTED (event.target.srclang == 'fr') OK
     35EXPECTED (event.target.readyState == '2') OK
     36EXPECTED (video.textTracks[2].mode == 'showing') OK
     37EXPECTED (video.textTracks[2].language == 'fr') OK
     38
     39Test 5: turning captions off from menu disables caption selection
    2940- show captions menu.
    3041- click on menu item 0.
  • trunk/LayoutTests/media/track/track-user-preferences.html

    r142580 r142809  
    1212            var testStage = 0;
    1313            var captionsButtonCoordinates;
     14            var trackMenuItems;
    1415
    1516            function showCaptionMenu()
     
    2526            function trackMenuList()
    2627            {
    27                 var trackListElement = getTrackListElement();
     28                trackListElement = getTrackListElement();
    2829                if (!trackListElement)
    2930                    return;
     
    4748            {
    4849                consoleWrite("- click on menu item " + index + ".");
    49                 var trackListItems = trackMenuList();
    50                 var selectedTrackItem = trackListItems[index];
     50                var trackMenuItems = trackMenuList();
     51                var selectedTrackItem = trackMenuItems[index];
    5152                var boundingRect = selectedTrackItem.getBoundingClientRect();
    5253                var x = boundingRect.left + boundingRect.width / 2;
     
    7374                track.setAttribute('srclang', language);
    7475                track.setAttribute('onload', 'trackLoaded()');
    75                 if (isDefault)
     76                if (isDefault) {
     77                    consoleWrite("-- '" + language + "' track marked as default.");
    7678                    track.setAttribute('default', 'default');
     79                }
    7780                video.appendChild(track);
    7881            }
     
    9497                switch (testStage) {
    9598                case 1:
    96                     consoleWrite("<br>Test 1: track selected because of 'default' attribute");
    97                     createTrackElements(['en', 'fr', 'no'], 1);
    98                     expectedLanguage = 'fr';
     99                    consoleWrite("<br>Test 1: 'no' track selected because of user preferred language");
     100                    createTrackElements(['en', 'fr', 'no']);
     101                    expectedLanguage = 'no';
    99102                    break;
    100103
    101104                case 2:
    102                     consoleWrite("<br>Test 2: track selected because of original user preferred language");
    103                     createTrackElements(['fr', 'en', 'no']);
     105                    consoleWrite("<br>Test 2: 'no' track still selected because of language, overriding 'default' attribute");
     106                    createTrackElements(['fr', 'en', 'no'], 1);
    104107                    expectedLanguage = 'no';
    105108                    break;
    106109
    107110                case 3:
    108                     consoleWrite("<br>Test 3: preferred language changed by selecting track from menu");
     111                    // Clear the debug setting so it isn't considered in the track selection logic
     112                    internals.settings.setShouldDisplayTrackKind('Captions', false);
     113
     114                    consoleWrite("<br>Test 3: select 'fr' track from menu");
    109115                    showCaptionMenu();
    110116                    break;
    111117
    112118                case 4:
     119                    trackMenuItems = trackMenuList();
     120                    testExpected("trackMenuItems[1].className", "");
     121                    testExpected("trackMenuItems[2].className", "");
     122                    testExpected("trackMenuItems[3].className", "selected");
     123
    113124                    selectCaptionMenuItem(2);
    114                     testExpected("video.textTracks[0].mode", "showing");
    115                     testExpected("video.textTracks[0].language", "fr");
    116125                    expectedLanguage = 'fr';
    117                     createTrackElements([ 'no', 'fr', 'en']);
    118126                    break;
    119127
    120128                case 5:
    121                     consoleWrite("<br>Test 4: turning captions off from menu disables captions");
     129                    testExpected("video.textTracks[0].mode", "showing");
     130                    testExpected("video.textTracks[0].language", "fr");
     131
     132                    consoleWrite("<br>Test 4: preferred language was changed to 'fr' by selecting track from menu");
     133                    createTrackElements(['ru', 'en', 'fr']);
     134                    expectedLanguage = 'fr';
     135                    break;
     136
     137                case 6:
     138                    testExpected("video.textTracks[2].mode", "showing");
     139                    testExpected("video.textTracks[2].language", "fr");
     140
     141                    consoleWrite("<br>Test 5: turning captions off from menu disables caption selection");
    122142                    showCaptionMenu();
    123143                    break;
    124144
    125                 case 6:
     145                case 7:
    126146                    selectCaptionMenuItem(0);
    127147                    createTrackElements([ 'ru', 'jp', 'en']);
    128                     timer = setTimeout(nextStep, 250);
     148                    timer = setTimeout(nextStep, 100);
    129149                    break;
    130150
    131                 case 7:
     151                case 8:
    132152                    for (var ndx = 0; ndx < video.textTracks.length; ++ndx)
    133153                        testExpected("video.textTracks[" + ndx + "].mode", "disabled");
     
    146166                consoleWrite("<br>Set user languages to: ['no', 'es-ES', 'en', 'fr'].");
    147167                internals.setUserPreferredLanguages(['no', 'es-ES', 'en', 'fr']);
     168                internals.settings.setShouldDisplayTrackKind('Captions', true);
    148169            }
    149170        </script>
  • trunk/Source/WebCore/CMakeLists.txt

    r142765 r142809  
    17481748    page/AutoscrollController.cpp
    17491749    page/BarInfo.cpp
     1750    page/CaptionUserPreferences.cpp
    17501751    page/Chrome.cpp
    17511752    page/Console.cpp
  • trunk/Source/WebCore/ChangeLog

    r142805 r142809  
     12013-02-13  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [Mac] Caption menu should have only one item selected
     4        https://bugs.webkit.org/show_bug.cgi?id=109730
     5
     6        Reviewed by Dean Jackson.
     7
     8        No new tests, media/track/track-user-preferences.html was modified to test the changes.
     9
     10        * CMakeLists.txt: Add CaptionUserPreferences.cpp.
     11        * GNUmakefile.list.am: Ditto.
     12        * Target.pri: Ditto.
     13        * WebCore.gypi: Ditto.
     14        * WebCore.vcproj/WebCore.vcproj: Ditto.
     15        * WebCore.vcxproj/WebCore.vcxproj: Ditto.
     16        * WebCore.xcodeproj/project.pbxproj: Ditto.
     17
     18        * html/HTMLMediaElement.cpp:
     19        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_processingPreferenceChange.
     20        (WebCore::HTMLMediaElement::configureTextTrackGroup): Only end up with one selected track when
     21            called because of a preferences change.
     22        (WebCore::HTMLMediaElement::captionPreferencesChanged): Call setClosedCaptionsVisible instead
     23            of calling markCaptionAndSubtitleTracksAsUnconfigured directly.
     24        (WebCore::HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured): Process all tracks,
     25            not just track elements.
     26        * html/HTMLMediaElement.h:
     27
     28        * page/CaptionUserPreferences.cpp: Added so the functionality can be tested in DRT.
     29        (WebCore::CaptionUserPreferences::registerForPreferencesChangedCallbacks):
     30        (WebCore::CaptionUserPreferences::unregisterForPreferencesChangedCallbacks):
     31        (WebCore::CaptionUserPreferences::setUserPrefersCaptions):
     32        (WebCore::CaptionUserPreferences::captionPreferencesChanged):
     33        (WebCore::CaptionUserPreferences::preferredLanguages):
     34        (WebCore::CaptionUserPreferences::setPreferredLanguage):
     35        (WebCore::CaptionUserPreferences::displayNameForTrack):
     36        * page/CaptionUserPreferences.h:
     37
     38        * page/CaptionUserPreferencesMac.h:
     39        * page/CaptionUserPreferencesMac.mm:
     40        (WebCore::CaptionUserPreferencesMac::registerForPreferencesChangedCallbacks): Moved some logic
     41            to base class.
     42        (WebCore::CaptionUserPreferencesMac::captionPreferencesChanged): Ditto.
     43
    1442013-02-13  Hans Muller  <hmuller@adobe.com>
    245
  • trunk/Source/WebCore/GNUmakefile.list.am

    r142765 r142809  
    41034103        Source/WebCore/page/BarInfo.cpp \
    41044104        Source/WebCore/page/BarInfo.h \
     4105        Source/WebCore/page/CaptionUserPreferences.cpp \
    41054106        Source/WebCore/page/CaptionUserPreferences.h \
    41064107        Source/WebCore/page/Chrome.cpp \
  • trunk/Source/WebCore/Target.pri

    r142765 r142809  
    908908    page/AutoscrollController.cpp \
    909909    page/BarInfo.cpp \
     910    page/CaptionUserPreferences.cpp \
    910911    page/Chrome.cpp \
    911912    page/Console.cpp \
     
    20922093    page/AutoscrollController.h \
    20932094    page/BarInfo.h \
     2095    page/CaptionUserPreferences.h \
    20942096    page/Chrome.h \
    20952097    page/Console.h \
  • trunk/Source/WebCore/WebCore.gypi

    r142782 r142809  
    20752075            'page/BarInfo.cpp',
    20762076            'page/BarInfo.h',
     2077            'page/CaptionUserPreferences.cpp',
    20772078            'page/Chrome.cpp',
    20782079            'page/Console.cpp',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r142765 r142809  
    2711227112                        </File>
    2711327113                        <File
     27114                                RelativePath="..\page\CaptionUserPreferences.cpp"
     27115                                >
     27116                        </File>
     27117                        <File
     27118                                RelativePath="..\page\CaptionUserPreferences.h"
     27119                                >
     27120                        </File>
     27121                        <File
    2711427122                                RelativePath="..\page\Chrome.cpp"
    2711527123                                >
  • trunk/Source/WebCore/WebCore.vcxproj/WebCore.vcxproj

    r142641 r142809  
    19971997    <ClCompile Include="..\page\AutoscrollController.cpp" />
    19981998    <ClCompile Include="..\page\BarInfo.cpp" />
     1999    <ClCompile Include="..\page\CaptionUserPreferences.cpp" />
    19992000    <ClCompile Include="..\page\Chrome.cpp" />
    20002001    <ClCompile Include="..\page\animation\CompositeAnimation.cpp" />
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r142765 r142809  
    104104                0720B0A114D3323500642957 /* GestureEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0720B09F14D3323500642957 /* GestureEvent.h */; settings = {ATTRIBUTES = (Private, ); }; };
    105105                072C8B11131C518600A4FCE9 /* MediaPlayerPrivateAVFoundation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 076F0D0912B8192700C26AA4 /* MediaPlayerPrivateAVFoundation.cpp */; };
     106                072CA86116CB4DC3008AE131 /* CaptionUserPreferences.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 072CA86016CB4DC3008AE131 /* CaptionUserPreferences.cpp */; };
    106107                0735EE6A0F40C5E4004A2604 /* MediaPlayerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 0735EE690F40C5E4004A2604 /* MediaPlayerProxy.h */; settings = {ATTRIBUTES = (Private, ); }; };
    107108                0753860214489E9800B78452 /* CachedTextTrack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0753860014489E9800B78452 /* CachedTextTrack.cpp */; };
     
    73587359                0720B09F14D3323500642956 /* GestureEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GestureEvent.cpp; sourceTree = "<group>"; };
    73597360                0720B09F14D3323500642957 /* GestureEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GestureEvent.h; sourceTree = "<group>"; };
     7361                072CA86016CB4DC3008AE131 /* CaptionUserPreferences.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CaptionUserPreferences.cpp; sourceTree = "<group>"; };
    73607362                0735EE690F40C5E4004A2604 /* MediaPlayerProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaPlayerProxy.h; sourceTree = "<group>"; };
    73617363                0753860014489E9800B78452 /* CachedTextTrack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CachedTextTrack.cpp; sourceTree = "<group>"; };
     
    1630216304                                BC124EE50C2641CD009E2349 /* BarInfo.h */,
    1630316305                                BC124EE60C2641CD009E2349 /* BarInfo.idl */,
     16306                                072CA86016CB4DC3008AE131 /* CaptionUserPreferences.cpp */,
    1630416307                                079D0867162F20E800DB8658 /* CaptionUserPreferences.h */,
    1630516308                                079D0869162F21F900DB8658 /* CaptionUserPreferencesMac.h */,
     
    2938529388                                08F859D41463F9CD0067D934 /* SVGImageForContainer.cpp in Sources */,
    2938629389                                B2227A2C0D00BF220071B782 /* SVGImageElement.cpp in Sources */,
     29390                                072CA86116CB4DC3008AE131 /* CaptionUserPreferences.cpp in Sources */,
    2938729391                                B28C6A290D00C44800334AA4 /* SVGImageLoader.cpp in Sources */,
    2938829392                                B2227A2F0D00BF220071B782 /* SVGLangSpace.cpp in Sources */,
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r142580 r142809  
    290290    , m_tracksAreReady(true)
    291291    , m_haveVisibleTextTrack(false)
     292    , m_processingPreferenceChange(false)
    292293    , m_lastTextTrackUpdateTime(-1)
    293294    , m_textTracks(0)
     
    30153016}
    30163017
    3017 void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group) const
     3018void HTMLMediaElement::configureTextTrackGroup(const TrackGroup& group)
    30183019{
    30193020    ASSERT(group.tracks.size());
     
    30323033
    30333034    // First, find the track in the group that should be enabled (if any).
     3035    Vector<RefPtr<TextTrack> > currentlyEnabledTracks;
    30343036    RefPtr<TextTrack> trackToEnable;
    30353037    RefPtr<TextTrack> defaultTrack;
    30363038    RefPtr<TextTrack> fallbackTrack;
    3037     for (size_t i = 0; !trackToEnable && i < group.tracks.size(); ++i) {
     3039    for (size_t i = 0; i < group.tracks.size(); ++i) {
    30383040        RefPtr<TextTrack> textTrack = group.tracks[i];
     3041
     3042        if (m_processingPreferenceChange && textTrack->mode() == TextTrack::showingKeyword())
     3043            currentlyEnabledTracks.append(textTrack);
     3044
     3045        if (trackToEnable)
     3046            continue;
    30393047
    30403048        if (userIsInterestedInThisTrackKind(textTrack->kind())) {
     
    30753083    if (!trackToEnable && fallbackTrack)
    30763084        trackToEnable = fallbackTrack;
     3085
     3086    if (currentlyEnabledTracks.size()) {
     3087        m_processingPreferenceChange = false;
     3088        for (size_t i = 0; i < currentlyEnabledTracks.size(); ++i) {
     3089            RefPtr<TextTrack> textTrack = currentlyEnabledTracks[i];
     3090            if (textTrack != trackToEnable)
     3091                textTrack->setMode(TextTrack::disabledKeyword());
     3092        }
     3093    }
    30773094
    30783095    if (trackToEnable)
     
    44144431        return;
    44154432
     4433    m_processingPreferenceChange = true;
     4434    setClosedCaptionsVisible(userPrefersCaptions());
     4435
    44164436    if (hasMediaControls())
    44174437        mediaControls()->textTrackPreferencesChanged();
    4418    
    4419     markCaptionAndSubtitleTracksAsUnconfigured();
    44204438}
    44214439
    44224440void HTMLMediaElement::markCaptionAndSubtitleTracksAsUnconfigured()
    44234441{
    4424     // Mark all track elements as not "configured" so that configureTextTracks()
     4442    // Mark all tracks as not "configured" so that configureTextTracks()
    44254443    // will reconsider which tracks to display in light of new user preferences
    44264444    // (e.g. default tracks should not be displayed if the user has turned off
    44274445    // captions and non-default tracks should be displayed based on language
    44284446    // preferences if the user has turned captions on).
    4429     for (RefPtr<Node> node = firstChild(); node; node = node->nextSibling()) {
    4430         if (!node->hasTagName(trackTag))
    4431             continue;
     4447    for (unsigned i = 0; i < m_textTracks->length(); ++i) {
    44324448       
    4433         HTMLTrackElement* trackElement = static_cast<HTMLTrackElement*>(node.get());
    4434         RefPtr<TextTrack> textTrack = trackElement->track();
    4435         if (!textTrack)
    4436             continue;
    4437        
     4449        RefPtr<TextTrack> textTrack = m_textTracks->item(i);
    44384450        String kind = textTrack->kind();
    44394451
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r142327 r142809  
    254254    void configureTextTrackGroupForLanguage(const TrackGroup&) const;
    255255    void configureTextTracks();
    256     void configureTextTrackGroup(const TrackGroup&) const;
     256    void configureTextTrackGroup(const TrackGroup&);
    257257
    258258    void toggleTrackAtIndex(int index, bool exclusive = true);
     
    692692    bool m_tracksAreReady : 1;
    693693    bool m_haveVisibleTextTrack : 1;
     694    bool m_processingPreferenceChange : 1;
    694695    float m_lastTextTrackUpdateTime;
    695696
  • trunk/Source/WebCore/page/CaptionUserPreferences.h

    r142580 r142809  
    5151    virtual ~CaptionUserPreferences() { }
    5252
    53     virtual bool userHasCaptionPreferences() const { return false; }
     53    virtual bool userHasCaptionPreferences() const { return m_testingMode && m_havePreferences; }
    5454    virtual bool userPrefersCaptions() const { return m_testingMode ? m_userPrefersCaptions : false; }
    55     virtual void setUserPrefersCaptions(bool preference) { m_userPrefersCaptions = preference; }
     55    virtual void setUserPrefersCaptions(bool preference);
    5656    virtual float captionFontSizeScale(bool& important) const { important = false; return 0.05f; }
    5757    virtual String captionsStyleSheetOverride() const { return emptyString(); }
    58     virtual void registerForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*) { }
    59     virtual void unregisterForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*) { }
    6058
    61     virtual void setPreferredLanguage(String language) { m_userPreferredLanguage = language; }
    62     virtual Vector<String> preferredLanguages() const
    63     {
    64         Vector<String> languages = userPreferredLanguages();
    65         if (m_testingMode && !m_userPreferredLanguage.isEmpty())
    66             languages.insert(0, m_userPreferredLanguage);
    67         return languages;
    68     }
     59    virtual void registerForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*);
     60    virtual void unregisterForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*);
     61    virtual void captionPreferencesChanged();
     62    bool havePreferenceChangeListeners() const { return !m_captionPreferenceChangeListeners.isEmpty(); }
    6963
    70     virtual String displayNameForTrack(TextTrack* track) const
    71     {
    72         if (track->label().isEmpty() && track->language().isEmpty())
    73             return textTrackNoLabelText();
    74         if (!track->label().isEmpty())
    75             return track->label();
    76         return track->language();
    77     }
     64    virtual void setPreferredLanguage(String);
     65    virtual Vector<String> preferredLanguages() const;
     66
     67    virtual String displayNameForTrack(TextTrack*) const;
    7868
    7969    virtual bool testingMode() const { return m_testingMode; }
     
    8676        : m_pageGroup(group)
    8777        , m_testingMode(false)
     78        , m_havePreferences(false)
    8879        , m_userPrefersCaptions(false)
    8980    {
     
    9182
    9283private:
     84    HashSet<CaptionPreferencesChangedListener*> m_captionPreferenceChangeListeners;
    9385    PageGroup* m_pageGroup;
    9486    String m_userPreferredLanguage;
    9587    bool m_testingMode;
     88    bool m_havePreferences;
    9689    bool m_userPrefersCaptions;
    9790};
  • trunk/Source/WebCore/page/CaptionUserPreferencesMac.h

    r142580 r142809  
    4747    virtual float captionFontSizeScale(bool&) const OVERRIDE;
    4848    virtual String captionsStyleSheetOverride() const OVERRIDE;
     49
    4950    virtual void registerForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*) OVERRIDE;
    50     virtual void unregisterForPreferencesChangedCallbacks(CaptionPreferencesChangedListener*) OVERRIDE;
    5151
    5252    virtual void setPreferredLanguage(String) OVERRIDE;
    5353    virtual Vector<String> preferredLanguages() const OVERRIDE;
    5454
    55     void captionPreferencesChanged();
     55    virtual void captionPreferencesChanged() OVERRIDE;
    5656#endif
    5757
     
    7575    void updateCaptionStyleSheetOveride();
    7676
    77     HashSet<CaptionPreferencesChangedListener*> m_captionPreferenceChangeListeners;
    7877    bool m_listeningForPreferenceChanges;
    7978#endif
  • trunk/Source/WebCore/page/CaptionUserPreferencesMac.mm

    r142639 r142809  
    129129void CaptionUserPreferencesMac::registerForPreferencesChangedCallbacks(CaptionPreferencesChangedListener* listener)
    130130{
    131     if (!MediaAccessibilityLibrary()) {
    132         CaptionUserPreferences::registerForPreferencesChangedCallbacks(listener);
     131    CaptionUserPreferences::registerForPreferencesChangedCallbacks(listener);
     132
     133    if (!MediaAccessibilityLibrary())
    133134        return;
    134     }
    135 
    136     ASSERT(!m_captionPreferenceChangeListeners.contains(listener));
    137135
    138136    if (!kMAXCaptionAppearanceSettingsChangedNotification)
     
    141139    if (!m_listeningForPreferenceChanges) {
    142140        m_listeningForPreferenceChanges = true;
    143         CFNotificationCenterAddObserver (CFNotificationCenterGetLocalCenter(), this, userCaptionPreferencesChangedNotificationCallback, kMAXCaptionAppearanceSettingsChangedNotification, NULL, CFNotificationSuspensionBehaviorCoalesce);
     141        CFNotificationCenterAddObserver(CFNotificationCenterGetLocalCenter(), this, userCaptionPreferencesChangedNotificationCallback, kMAXCaptionAppearanceSettingsChangedNotification, NULL, CFNotificationSuspensionBehaviorCoalesce);
    144142    }
    145143   
    146144    updateCaptionStyleSheetOveride();
    147     m_captionPreferenceChangeListeners.add(listener);
    148 }
    149 
    150 void CaptionUserPreferencesMac::unregisterForPreferencesChangedCallbacks(CaptionPreferencesChangedListener* listener)
    151 {
    152     if (!MediaAccessibilityLibrary()) {
    153         CaptionUserPreferences::unregisterForPreferencesChangedCallbacks(listener);
    154         return;
    155     }
    156 
    157     if (kMAXCaptionAppearanceSettingsChangedNotification)
    158         m_captionPreferenceChangeListeners.remove(listener);
     145}
     146
     147void CaptionUserPreferencesMac::captionPreferencesChanged()
     148{
     149    if (havePreferenceChangeListeners())
     150        updateCaptionStyleSheetOveride();
     151
     152    CaptionUserPreferences::captionPreferencesChanged();
    159153}
    160154
     
    422416}
    423417
    424 void CaptionUserPreferencesMac::captionPreferencesChanged()
    425 {
    426     if (m_captionPreferenceChangeListeners.isEmpty())
    427         return;
    428 
    429     updateCaptionStyleSheetOveride();
    430 
    431     for (HashSet<CaptionPreferencesChangedListener*>::iterator i = m_captionPreferenceChangeListeners.begin(); i != m_captionPreferenceChangeListeners.end(); ++i)
    432         (*i)->captionPreferencesChanged();
    433 }
    434 
    435418void CaptionUserPreferencesMac::updateCaptionStyleSheetOveride()
    436419{
Note: See TracChangeset for help on using the changeset viewer.