Changeset 258693 in webkit


Ignore:
Timestamp:
Mar 19, 2020 5:06:49 AM (4 years ago)
Author:
eocanha@igalia.com
Message:

[GTK] media/track/track-automatic-subtitles.html is timing out
https://bugs.webkit.org/show_bug.cgi?id=116957

Reviewed by Adrian Perez de Castro.

Source/WebCore:

Moved CaptionUserPreferencesMediaAF::textTrackSelectionScore() implementation
to the CaptionUserPreferencesMedia superclass.

Tested by existing test.

  • page/CaptionUserPreferences.cpp:

(WebCore::CaptionUserPreferences::textTrackSelectionScore const):

  • page/CaptionUserPreferencesMediaAF.cpp:
  • page/CaptionUserPreferencesMediaAF.h:

LayoutTests:

Removed test from expectations.

  • platform/gtk/TestExpectations:
Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r258692 r258693  
     12020-03-19  Enrique Ocaña González  <eocanha@igalia.com>
     2
     3        [GTK] media/track/track-automatic-subtitles.html is timing out
     4        https://bugs.webkit.org/show_bug.cgi?id=116957
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Removed test from expectations.
     9
     10        * platform/gtk/TestExpectations:
     11
    1122020-03-19  Diego Pino Garcia  <dpino@igalia.com>
    213
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r258692 r258693  
    29142914webkit.org/b/108925 http/tests/media/video-play-stall.html [ Failure Timeout ]
    29152915
    2916 webkit.org/b/116957 media/track/track-automatic-subtitles.html [ Timeout ]
    2917 
    29182916webkit.org/b/147518 inspector/debugger/nested-inspectors.html [ Timeout ]
    29192917
  • trunk/Source/WebCore/ChangeLog

    r258691 r258693  
     12020-03-19  Enrique Ocaña González  <eocanha@igalia.com>
     2
     3        [GTK] media/track/track-automatic-subtitles.html is timing out
     4        https://bugs.webkit.org/show_bug.cgi?id=116957
     5
     6        Reviewed by Adrian Perez de Castro.
     7
     8        Moved CaptionUserPreferencesMediaAF::textTrackSelectionScore() implementation
     9        to the CaptionUserPreferencesMedia superclass.
     10
     11        Tested by existing test.
     12
     13        * page/CaptionUserPreferences.cpp:
     14        (WebCore::CaptionUserPreferences::textTrackSelectionScore const):
     15        * page/CaptionUserPreferencesMediaAF.cpp:
     16        * page/CaptionUserPreferencesMediaAF.h:
     17
    1182020-03-19  Philippe Normand  <pnormand@igalia.com>
    219
  • trunk/Source/WebCore/page/CaptionUserPreferences.cpp

    r257997 r258693  
    3131#include "AudioTrackList.h"
    3232#include "DOMWrapperWorld.h"
     33#include "HTMLMediaElement.h"
    3334#include "LocalizedStrings.h"
    3435#include "MediaSelectionOption.h"
     
    286287}
    287288
    288 int CaptionUserPreferences::textTrackSelectionScore(TextTrack* track, HTMLMediaElement*) const
    289 {
    290     if (track->kind() != TextTrack::Kind::Captions && track->kind() != TextTrack::Kind::Subtitles)
    291         return 0;
    292    
    293     if (!userPrefersSubtitles() && !userPrefersCaptions())
    294         return 0;
    295    
    296     return textTrackLanguageSelectionScore(track, preferredLanguages()) + 1;
     289int CaptionUserPreferences::textTrackSelectionScore(TextTrack* track, HTMLMediaElement* mediaElement) const
     290{
     291    CaptionDisplayMode displayMode = captionDisplayMode();
     292    if (displayMode == Manual)
     293        return 0;
     294
     295    bool legacyOverride = mediaElement->webkitClosedCaptionsVisible();
     296    if (displayMode == AlwaysOn && (!userPrefersSubtitles() && !userPrefersCaptions() && !legacyOverride))
     297        return 0;
     298    if (track->kind() != TextTrack::Kind::Captions && track->kind() != TextTrack::Kind::Subtitles && track->kind() != TextTrack::Kind::Forced)
     299        return 0;
     300    if (!track->isMainProgramContent())
     301        return 0;
     302
     303    bool trackHasOnlyForcedSubtitles = track->containsOnlyForcedSubtitles();
     304    if (!legacyOverride && ((trackHasOnlyForcedSubtitles && displayMode != ForcedOnly) || (!trackHasOnlyForcedSubtitles && displayMode == ForcedOnly)))
     305        return 0;
     306
     307    Vector<String> userPreferredCaptionLanguages = preferredLanguages();
     308
     309    if ((displayMode == Automatic && !legacyOverride) || trackHasOnlyForcedSubtitles) {
     310
     311        if (!mediaElement || !mediaElement->player())
     312            return 0;
     313
     314        String textTrackLanguage = track->validBCP47Language();
     315        if (textTrackLanguage.isEmpty())
     316            return 0;
     317
     318        Vector<String> languageList;
     319        languageList.reserveCapacity(1);
     320
     321        String audioTrackLanguage;
     322        if (testingMode())
     323            audioTrackLanguage = primaryAudioTrackLanguageOverride();
     324        else
     325            audioTrackLanguage = mediaElement->player()->languageOfPrimaryAudioTrack();
     326
     327        if (audioTrackLanguage.isEmpty())
     328            return 0;
     329
     330        bool exactMatch;
     331        if (trackHasOnlyForcedSubtitles) {
     332            languageList.append(audioTrackLanguage);
     333            size_t offset = indexOfBestMatchingLanguageInList(textTrackLanguage, languageList, exactMatch);
     334
     335            // Only consider a forced-only track if it IS in the same language as the primary audio track.
     336            if (offset)
     337                return 0;
     338        } else {
     339            languageList.append(defaultLanguage());
     340
     341            // Only enable a text track if the current audio track is NOT in the user's preferred language ...
     342            size_t offset = indexOfBestMatchingLanguageInList(audioTrackLanguage, languageList, exactMatch);
     343            if (!offset)
     344                return 0;
     345
     346            // and the text track matches the user's preferred language.
     347            offset = indexOfBestMatchingLanguageInList(textTrackLanguage, languageList, exactMatch);
     348            if (offset)
     349                return 0;
     350        }
     351
     352        userPreferredCaptionLanguages = languageList;
     353    }
     354
     355    int trackScore = 0;
     356
     357    if (userPrefersCaptions()) {
     358        // When the user prefers accessibility tracks, rank is SDH, then CC, then subtitles.
     359        if (track->kind() == TextTrack::Kind::Subtitles)
     360            trackScore = 1;
     361        else if (track->isClosedCaptions())
     362            trackScore = 2;
     363        else
     364            trackScore = 3;
     365    } else {
     366        // When the user prefers translation tracks, rank is subtitles, then SDH, then CC tracks.
     367        if (track->kind() == TextTrack::Kind::Subtitles)
     368            trackScore = 3;
     369        else if (!track->isClosedCaptions())
     370            trackScore = 2;
     371        else
     372            trackScore = 1;
     373    }
     374
     375    return trackScore + textTrackLanguageSelectionScore(track, userPreferredCaptionLanguages);
    297376}
    298377
  • trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.cpp

    r257997 r258693  
    720720}
    721721
    722 int CaptionUserPreferencesMediaAF::textTrackSelectionScore(TextTrack* track, HTMLMediaElement* mediaElement) const
    723 {
    724     CaptionDisplayMode displayMode = captionDisplayMode();
    725     if (displayMode == Manual)
    726         return 0;
    727 
    728     bool legacyOverride = mediaElement->webkitClosedCaptionsVisible();
    729     if (displayMode == AlwaysOn && (!userPrefersSubtitles() && !userPrefersCaptions() && !legacyOverride))
    730         return 0;
    731     if (track->kind() != TextTrack::Kind::Captions && track->kind() != TextTrack::Kind::Subtitles && track->kind() != TextTrack::Kind::Forced)
    732         return 0;
    733     if (!track->isMainProgramContent())
    734         return 0;
    735 
    736     bool trackHasOnlyForcedSubtitles = track->containsOnlyForcedSubtitles();
    737     if (!legacyOverride && ((trackHasOnlyForcedSubtitles && displayMode != ForcedOnly) || (!trackHasOnlyForcedSubtitles && displayMode == ForcedOnly)))
    738         return 0;
    739 
    740     Vector<String> userPreferredCaptionLanguages = preferredLanguages();
    741 
    742     if ((displayMode == Automatic && !legacyOverride) || trackHasOnlyForcedSubtitles) {
    743 
    744         if (!mediaElement || !mediaElement->player())
    745             return 0;
    746 
    747         String textTrackLanguage = track->validBCP47Language();
    748         if (textTrackLanguage.isEmpty())
    749             return 0;
    750 
    751         Vector<String> languageList;
    752         languageList.reserveCapacity(1);
    753 
    754         String audioTrackLanguage;
    755         if (testingMode())
    756             audioTrackLanguage = primaryAudioTrackLanguageOverride();
    757         else
    758             audioTrackLanguage = mediaElement->player()->languageOfPrimaryAudioTrack();
    759 
    760         if (audioTrackLanguage.isEmpty())
    761             return 0;
    762 
    763         bool exactMatch;
    764         if (trackHasOnlyForcedSubtitles) {
    765             languageList.append(audioTrackLanguage);
    766             size_t offset = indexOfBestMatchingLanguageInList(textTrackLanguage, languageList, exactMatch);
    767 
    768             // Only consider a forced-only track if it IS in the same language as the primary audio track.
    769             if (offset)
    770                 return 0;
    771         } else {
    772             languageList.append(defaultLanguage());
    773 
    774             // Only enable a text track if the current audio track is NOT in the user's preferred language ...
    775             size_t offset = indexOfBestMatchingLanguageInList(audioTrackLanguage, languageList, exactMatch);
    776             if (!offset)
    777                 return 0;
    778 
    779             // and the text track matches the user's preferred language.
    780             offset = indexOfBestMatchingLanguageInList(textTrackLanguage, languageList, exactMatch);
    781             if (offset)
    782                 return 0;
    783         }
    784 
    785         userPreferredCaptionLanguages = languageList;
    786     }
    787 
    788     int trackScore = 0;
    789 
    790     if (userPrefersCaptions()) {
    791         // When the user prefers accessibility tracks, rank is SDH, then CC, then subtitles.
    792         if (track->kind() == TextTrack::Kind::Subtitles)
    793             trackScore = 1;
    794         else if (track->isClosedCaptions())
    795             trackScore = 2;
    796         else
    797             trackScore = 3;
    798     } else {
    799         // When the user prefers translation tracks, rank is subtitles, then SDH, then CC tracks.
    800         if (track->kind() == TextTrack::Kind::Subtitles)
    801             trackScore = 3;
    802         else if (!track->isClosedCaptions())
    803             trackScore = 2;
    804         else
    805             trackScore = 1;
    806     }
    807 
    808     return trackScore + textTrackLanguageSelectionScore(track, userPreferredCaptionLanguages);
    809 }
    810 
    811722static bool textTrackCompare(const RefPtr<TextTrack>& a, const RefPtr<TextTrack>& b)
    812723{
  • trunk/Source/WebCore/page/CaptionUserPreferencesMediaAF.h

    r214169 r258693  
    6666
    6767    String captionsStyleSheetOverride() const override;
    68     int textTrackSelectionScore(TextTrack*, HTMLMediaElement*) const override;
    6968    Vector<RefPtr<AudioTrack>> sortedTrackListForMenu(AudioTrackList*) override;
    7069    Vector<RefPtr<TextTrack>> sortedTrackListForMenu(TextTrackList*) override;
Note: See TracChangeset for help on using the changeset viewer.