Changeset 291361 in webkit
- Timestamp:
- Mar 16, 2022, 1:29:20 PM (4 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/page/CaptionUserPreferences.cpp (modified) (2 diffs)
-
WebCore/platform/MediaSelectionOption.h (modified) (2 diffs)
-
WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm (modified) (2 diffs)
-
WebCore/platform/ios/WebAVPlayerController.h (modified) (1 diff)
-
WebCore/platform/ios/WebAVPlayerController.mm (modified) (2 diffs)
-
WebCore/platform/mac/WebPlaybackControlsManager.mm (modified) (2 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/Shared/WebCoreArgumentCoders.cpp (modified) (1 diff)
-
WebKit/Shared/WebCoreArgumentCoders.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r291357 r291361 1 2022-03-16 Eric Carlson <eric.carlson@apple.com> 2 3 [iOS] WebAVMediaSelectionOption should implement -mediaType 4 https://bugs.webkit.org/show_bug.cgi?id=237966 5 rdar://89934589 6 7 Reviewed by Jer Noble. 8 9 WebKit uses AVKit to implement "video fullscreen" on iOS. AVKit can only be used 10 in the UI process, but WebKit's AVFoundation objects are in the GPU process, so we 11 create "proxy" objects in the UI process and pass state from them between the two 12 processes. One such object is WebAVMediaSelectionOption, which proxies for an 13 AVMediaSelectionOption. This proxy originally only implemented -localizedDisplayName 14 but AVKit now sometimes uses -mediaType, which causes an assert when it messages the 15 non-existent selector. Add -mediaType to fix the assert, and add log-only stubs 16 for every other AVMediaSelectionOption selector to catch future changes. 17 18 * page/CaptionUserPreferences.cpp: 19 (WebCore::CaptionUserPreferences::mediaSelectionOptionForTrack const): 20 * platform/MediaSelectionOption.h: 21 (WebCore::MediaSelectionOption::MediaSelectionOption): 22 (WebCore::MediaSelectionOption::isolatedCopy const): 23 (WebCore::MediaSelectionOption::isolatedCopy): 24 (WebCore::MediaSelectionOption::encode const): 25 (WebCore::MediaSelectionOption::decode): 26 * platform/ios/PlaybackSessionInterfaceAVKit.mm: 27 (WebCore::toAVMediaType): 28 (WebCore::mediaSelectionOptions): 29 * platform/ios/WebAVPlayerController.h: 30 * platform/ios/WebAVPlayerController.mm: 31 (-[WebAVMediaSelectionOption initWithMediaType:displayName:]): 32 (-[WebAVMediaSelectionOption mediaSubTypes]): 33 (-[WebAVMediaSelectionOption hasMediaCharacteristic:]): 34 (-[WebAVMediaSelectionOption isPlayable]): 35 (-[WebAVMediaSelectionOption extendedLanguageTag]): 36 (-[WebAVMediaSelectionOption locale]): 37 (-[WebAVMediaSelectionOption commonMetadata]): 38 (-[WebAVMediaSelectionOption availableMetadataFormats]): 39 (-[WebAVMediaSelectionOption metadataForFormat:]): 40 (-[WebAVMediaSelectionOption associatedMediaSelectionOptionInMediaSelectionGroup:]): 41 (-[WebAVMediaSelectionOption propertyList]): 42 (-[WebAVMediaSelectionOption displayNameWithLocale:]): 43 (-[WebAVMediaSelectionOption mediaCharacteristics]): 44 (-[WebAVMediaSelectionOption outOfBandSource]): 45 (-[WebAVMediaSelectionOption outOfBandIdentifier]): 46 (-[WebAVMediaSelectionOption _isDesignatedDefault]): 47 (-[WebAVMediaSelectionOption languageCode]): 48 (-[WebAVMediaSelectionOption track]): 49 * platform/mac/WebPlaybackControlsManager.mm: 50 (toAVTouchBarMediaSelectionOptionType): 51 (mediaSelectionOptions): 52 1 53 2022-03-16 Philippe Normand <pnormand@igalia.com> 2 54 -
trunk/Source/WebCore/page/CaptionUserPreferences.cpp
r286743 r291361 224 224 MediaSelectionOption CaptionUserPreferences::mediaSelectionOptionForTrack(TextTrack* track) const 225 225 { 226 auto type = MediaSelectionOption::Type::Regular;226 auto legibleType = MediaSelectionOption::LegibleType::Regular; 227 227 if (track == &TextTrack::captionMenuOffItem()) 228 type = MediaSelectionOption::Type::LegibleOff;228 legibleType = MediaSelectionOption::LegibleType::LegibleOff; 229 229 else if (track == &TextTrack::captionMenuAutomaticItem()) 230 type = MediaSelectionOption::Type::LegibleAuto; 231 return { displayNameForTrack(track), type }; 230 legibleType = MediaSelectionOption::LegibleType::LegibleAuto; 231 232 auto mediaType = MediaSelectionOption::MediaType::Unknown; 233 switch (track->kind()) { 234 case TextTrack::Kind::Forced: 235 case TextTrack::Kind::Descriptions: 236 case TextTrack::Kind::Subtitles: 237 mediaType = MediaSelectionOption::MediaType::Subtitles; 238 break; 239 case TextTrack::Kind::Captions: 240 mediaType = MediaSelectionOption::MediaType::Captions; 241 break; 242 case TextTrack::Kind::Metadata: 243 mediaType = MediaSelectionOption::MediaType::Metadata; 244 break; 245 case TextTrack::Kind::Chapters: 246 ASSERT_NOT_REACHED(); 247 break; 248 } 249 250 return { mediaType, displayNameForTrack(track), legibleType }; 232 251 } 233 252 … … 274 293 MediaSelectionOption CaptionUserPreferences::mediaSelectionOptionForTrack(AudioTrack* track) const 275 294 { 276 return { displayNameForTrack(track), MediaSelectionOption::Type::Regular };295 return { MediaSelectionOption::MediaType::Audio, displayNameForTrack(track), MediaSelectionOption::LegibleType::Regular }; 277 296 } 278 297 -
trunk/Source/WebCore/platform/MediaSelectionOption.h
r290901 r291361 31 31 32 32 struct MediaSelectionOption { 33 enum class Type { 33 enum class MediaType { 34 Unknown, 35 Audio, 36 Subtitles, 37 Captions, 38 Metadata, 39 }; 40 41 enum class LegibleType { 34 42 Regular, 35 43 LegibleOff, … … 38 46 39 47 MediaSelectionOption() = default; 40 MediaSelectionOption(const String& displayName, Type type) 41 : displayName { displayName } 42 , type { type } 48 MediaSelectionOption(MediaType mediaType, const String& displayName, LegibleType legibleType) 49 : mediaType { mediaType } 50 , displayName { displayName } 51 , legibleType { legibleType } 43 52 { 44 53 } 45 54 46 MediaSelectionOption isolatedCopy() const & { return { displayName.isolatedCopy(), type }; }47 MediaSelectionOption isolatedCopy() && { return { WTFMove(displayName).isolatedCopy(), type }; }55 MediaSelectionOption isolatedCopy() const & { return { mediaType, displayName.isolatedCopy(), legibleType }; } 56 MediaSelectionOption isolatedCopy() && { return { mediaType, WTFMove(displayName).isolatedCopy(), legibleType }; } 48 57 58 template<class Encoder> void encode(Encoder&) const; 59 template<class Decoder> static bool WARN_UNUSED_RETURN decode(Decoder&, MediaSelectionOption&); 60 61 MediaType mediaType { MediaType::Unknown }; 49 62 String displayName; 50 Type type {Type::Regular };63 LegibleType legibleType { LegibleType::Regular }; 51 64 }; 52 65 66 template<class Encoder> void MediaSelectionOption::encode(Encoder& encoder) const 67 { 68 encoder << mediaType; 69 encoder << displayName; 70 encoder << legibleType; 71 } 72 73 template<class Decoder> bool MediaSelectionOption::decode(Decoder& decoder, MediaSelectionOption& option) 74 { 75 return decoder.decode(option.mediaType) 76 && decoder.decode(option.displayName) 77 && decoder.decode(option.legibleType); 78 } 79 53 80 } // namespace WebCore 81 82 namespace WTF { 83 84 template<> struct EnumTraits<WebCore::MediaSelectionOption::MediaType> { 85 using values = EnumValues< 86 WebCore::MediaSelectionOption::MediaType, 87 WebCore::MediaSelectionOption::MediaType::Unknown, 88 WebCore::MediaSelectionOption::MediaType::Audio, 89 WebCore::MediaSelectionOption::MediaType::Subtitles, 90 WebCore::MediaSelectionOption::MediaType::Captions, 91 WebCore::MediaSelectionOption::MediaType::Metadata 92 >; 93 }; 94 95 template<> struct EnumTraits<WebCore::MediaSelectionOption::LegibleType> { 96 using values = EnumValues< 97 WebCore::MediaSelectionOption::LegibleType, 98 WebCore::MediaSelectionOption::LegibleType::Regular, 99 WebCore::MediaSelectionOption::LegibleType::LegibleOff, 100 WebCore::MediaSelectionOption::LegibleType::LegibleAuto 101 >; 102 }; 103 104 } // namespace WTF -
trunk/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm
r280840 r291361 43 43 44 44 #import <pal/cf/CoreMediaSoftLink.h> 45 #import <pal/cocoa/AVFoundationSoftLink.h> 45 46 46 47 SOFTLINK_AVKIT_FRAMEWORK() … … 162 163 } 163 164 165 static AVMediaType toAVMediaType(MediaSelectionOption::MediaType type) 166 { 167 switch (type) { 168 case MediaSelectionOption::MediaType::Audio: 169 return AVMediaTypeAudio; 170 break; 171 case MediaSelectionOption::MediaType::Subtitles: 172 return AVMediaTypeSubtitle; 173 break; 174 case MediaSelectionOption::MediaType::Captions: 175 return AVMediaTypeClosedCaption; 176 break; 177 case MediaSelectionOption::MediaType::Metadata: 178 return AVMediaTypeMetadata; 179 break; 180 case MediaSelectionOption::MediaType::Unknown: 181 ASSERT_NOT_REACHED(); 182 break; 183 } 184 185 return AVMediaTypeMetadata; 186 } 187 164 188 static RetainPtr<NSArray> mediaSelectionOptions(const Vector<MediaSelectionOption>& options) 165 189 { 166 190 return createNSArray(options, [] (auto& option) { 167 auto webOption = adoptNS([[WebAVMediaSelectionOption alloc] init]); 168 [webOption setLocalizedDisplayName:option.displayName]; 169 return webOption; 191 return [[WebAVMediaSelectionOption alloc] initWithMediaType:toAVMediaType(option.mediaType) displayName:option.displayName]; 170 192 }); 171 193 } -
trunk/Source/WebCore/platform/ios/WebAVPlayerController.h
r284743 r291361 34 34 35 35 @interface WebAVMediaSelectionOption : NSObject 36 - (instancetype)initWithMediaType:(AVMediaType)type displayName:(NSString *)displayName; 37 36 38 @property (retain) NSString *localizedDisplayName; 39 @property (nonatomic, readonly) AVMediaType mediaType; 40 37 41 @end 38 42 -
trunk/Source/WebCore/platform/ios/WebAVPlayerController.mm
r287986 r291361 763 763 @implementation WebAVMediaSelectionOption 764 764 765 - (instancetype)initWithMediaType:(AVMediaType)mediaType displayName:(NSString *)displayName 766 { 767 self = [super init]; 768 if (!self) 769 return nil; 770 771 _mediaType = mediaType; 772 _localizedDisplayName = displayName; 773 774 return self; 775 } 776 765 777 - (void)dealloc 766 778 { … … 769 781 } 770 782 783 - (NSArray<NSNumber *> *)mediaSubTypes 784 { 785 ASSERT_NOT_REACHED(); 786 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption mediaSubTypes] unimplemented"); 787 return @[]; 788 } 789 790 - (BOOL)hasMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic 791 { 792 ASSERT_NOT_REACHED(); 793 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption hasMediaCharacteristic:] unimplemented"); 794 return NO; 795 } 796 797 - (BOOL) isPlayable 798 { 799 ASSERT_NOT_REACHED(); 800 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption isPlayable:] unimplemented"); 801 return YES; 802 } 803 804 - (NSString *)extendedLanguageTag 805 { 806 ASSERT_NOT_REACHED(); 807 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption extendedLanguageTag] unimplemented"); 808 return nil; 809 } 810 811 - (NSLocale *)locale 812 { 813 ASSERT_NOT_REACHED(); 814 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption locale] unimplemented"); 815 return nil; 816 } 817 818 - (NSArray<AVMetadataItem *> *)commonMetadata 819 { 820 ASSERT_NOT_REACHED(); 821 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption commonMetadata] unimplemented"); 822 return @[]; 823 } 824 825 - (NSArray<NSString *> *)availableMetadataFormats 826 { 827 ASSERT_NOT_REACHED(); 828 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption availableMetadataFormats] unimplemented"); 829 return @[]; 830 } 831 832 - (NSArray<AVMetadataItem *> *)metadataForFormat:(NSString *)format 833 { 834 ASSERT_NOT_REACHED(); 835 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption metadataForFormat:] unimplemented"); 836 return @[]; 837 } 838 839 - (AVMediaSelectionOption *)associatedMediaSelectionOptionInMediaSelectionGroup:(AVMediaSelectionGroup *)mediaSelectionGroup 840 { 841 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption associatedMediaSelectionOptionInMediaSelectionGroup] unimplemented"); 842 ASSERT_NOT_REACHED(); 843 return nil; 844 } 845 846 - (id)propertyList 847 { 848 ASSERT_NOT_REACHED(); 849 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption propertyList] unimplemented"); 850 return @[]; 851 } 852 853 - (NSString *)displayNameWithLocale:(NSLocale *)locale 854 { 855 ASSERT_NOT_REACHED(); 856 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption displayNameWithLocale:] unimplemented"); 857 return nil; 858 } 859 860 - (NSArray<NSString *> *)mediaCharacteristics 861 { 862 ASSERT_NOT_REACHED(); 863 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption mediaCharacteristics] unimplemented"); 864 return @[]; 865 } 866 867 - (NSString *)outOfBandSource 868 { 869 ASSERT_NOT_REACHED(); 870 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption outOfBandSource] unimplemented"); 871 return nil; 872 } 873 874 - (NSString *)outOfBandIdentifier 875 { 876 ASSERT_NOT_REACHED(); 877 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption outOfBandIdentifier] unimplemented"); 878 return nil; 879 } 880 881 - (BOOL)_isDesignatedDefault 882 { 883 ASSERT_NOT_REACHED(); 884 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption _isDesignatedDefault] unimplemented"); 885 return NO; 886 } 887 888 - (NSString *)languageCode 889 { 890 ASSERT_NOT_REACHED(); 891 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption languageCode] unimplemented"); 892 return nil; 893 } 894 895 - (AVAssetTrack *)track 896 { 897 ASSERT_NOT_REACHED(); 898 WTFLogAlways("ERROR: -[WebAVMediaSelectionOption track:] unimplemented"); 899 return nil; 900 } 901 771 902 @end 772 903 -
trunk/Source/WebCore/platform/mac/WebPlaybackControlsManager.mm
r281543 r291361 245 245 } 246 246 247 static AVTouchBarMediaSelectionOptionType toAVTouchBarMediaSelectionOptionType(MediaSelectionOption:: Type type)247 static AVTouchBarMediaSelectionOptionType toAVTouchBarMediaSelectionOptionType(MediaSelectionOption::LegibleType type) 248 248 { 249 249 switch (type) { 250 case MediaSelectionOption:: Type::Regular:250 case MediaSelectionOption::LegibleType::Regular: 251 251 return AVTouchBarMediaSelectionOptionTypeRegular; 252 case MediaSelectionOption:: Type::LegibleOff:252 case MediaSelectionOption::LegibleType::LegibleOff: 253 253 return AVTouchBarMediaSelectionOptionTypeLegibleOff; 254 case MediaSelectionOption:: Type::LegibleAuto:254 case MediaSelectionOption::LegibleType::LegibleAuto: 255 255 return AVTouchBarMediaSelectionOptionTypeLegibleAuto; 256 256 } … … 263 263 { 264 264 return createNSArray(options, [] (auto& option) { 265 return adoptNS([allocAVTouchBarMediaSelectionOptionInstance() initWithTitle:option.displayName type:toAVTouchBarMediaSelectionOptionType(option. type)]);265 return adoptNS([allocAVTouchBarMediaSelectionOptionInstance() initWithTitle:option.displayName type:toAVTouchBarMediaSelectionOptionType(option.legibleType)]); 266 266 }); 267 267 } -
trunk/Source/WebKit/ChangeLog
r291352 r291361 1 2022-03-16 Eric Carlson <eric.carlson@apple.com> 2 3 [iOS] WebAVMediaSelectionOption should implement -mediaType 4 https://bugs.webkit.org/show_bug.cgi?id=237966 5 rdar://89934589 6 7 Reviewed by Jer Noble. 8 9 * Shared/WebCoreArgumentCoders.cpp: 10 (IPC::ArgumentCoder<MediaSelectionOption>::encode): Deleted. 11 (IPC::ArgumentCoder<MediaSelectionOption>::decode): Deleted. 12 * Shared/WebCoreArgumentCoders.h: 13 1 14 2022-03-16 Per Arne Vollan <pvollan@apple.com> 2 15 -
trunk/Source/WebKit/Shared/WebCoreArgumentCoders.cpp
r290813 r291361 2881 2881 #endif 2882 2882 2883 void ArgumentCoder<MediaSelectionOption>::encode(Encoder& encoder, const MediaSelectionOption& option)2884 {2885 encoder << option.displayName;2886 encoder << option.type;2887 }2888 2889 std::optional<MediaSelectionOption> ArgumentCoder<MediaSelectionOption>::decode(Decoder& decoder)2890 {2891 std::optional<String> displayName;2892 decoder >> displayName;2893 if (!displayName)2894 return std::nullopt;2895 2896 std::optional<MediaSelectionOption::Type> type;2897 decoder >> type;2898 if (!type)2899 return std::nullopt;2900 2901 return {{ WTFMove(*displayName), WTFMove(*type) }};2902 }2903 2904 2883 void ArgumentCoder<PromisedAttachmentInfo>::encode(Encoder& encoder, const PromisedAttachmentInfo& info) 2905 2884 { -
trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h
r290813 r291361 711 711 #endif 712 712 713 template<> struct ArgumentCoder<WebCore::MediaSelectionOption> {714 static void encode(Encoder&, const WebCore::MediaSelectionOption&);715 static std::optional<WebCore::MediaSelectionOption> decode(Decoder&);716 };717 718 713 template<> struct ArgumentCoder<WebCore::PromisedAttachmentInfo> { 719 714 static void encode(Encoder&, const WebCore::PromisedAttachmentInfo&); … … 905 900 }; 906 901 #endif 907 908 template<> struct EnumTraits<WebCore::MediaSelectionOption::Type> {909 using values = EnumValues<910 WebCore::MediaSelectionOption::Type,911 WebCore::MediaSelectionOption::Type::Regular,912 WebCore::MediaSelectionOption::Type::LegibleOff,913 WebCore::MediaSelectionOption::Type::LegibleAuto914 >;915 };916 902 917 903 template <> struct EnumTraits<WebCore::WorkerType> {
Note:
See TracChangeset
for help on using the changeset viewer.