Changeset 274734 in webkit
- Timestamp:
- Mar 19, 2021 12:55:02 PM (3 years ago)
- Location:
- trunk
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r274733 r274734 1 2021-03-19 Jer Noble <jer.noble@apple.com> 2 3 Many media/media-fragments/ tests are crashing due to other tests that run before them. 4 https://bugs.webkit.org/show_bug.cgi?id=223277 5 <rdar://problem/75492360> 6 7 Reviewed by Eric Carlson. 8 9 * platform/mac/TestExpectations: 10 1 11 2021-03-19 Youenn Fablet <youenn@apple.com> 2 12 -
trunk/LayoutTests/platform/mac/TestExpectations
r274681 r274734 17 17 media/mac [ Pass ] 18 18 model-element [ Pass ] 19 webkit.org/b/223277 media/media-fragments [ Pass Failure ]20 19 21 20 fast/forms/search/search-padding-cancel-results-buttons.html [ Pass ] -
trunk/Source/WebCore/ChangeLog
r274733 r274734 1 2021-03-19 Jer Noble <jer.noble@apple.com> 2 3 Many media/media-fragments/ tests are crashing due to other tests that run before them. 4 https://bugs.webkit.org/show_bug.cgi?id=223277 5 <rdar://problem/75492360> 6 7 Reviewed by Eric Carlson. 8 9 Work around the crashing function by pre-conforming the fragment identifier according 10 to the format required by the crashing function. 11 12 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 13 (WebCore::hasBrokenFragmentSupport): 14 (WebCore::conformFragmentIdentifierForURL): 15 (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL): 16 1 17 2021-03-19 Youenn Fablet <youenn@apple.com> 2 18 -
trunk/Source/WebCore/PAL/ChangeLog
r274600 r274734 1 2021-03-19 Jer Noble <jer.noble@apple.com> 2 3 Many media/media-fragments/ tests are crashing due to other tests that run before them. 4 https://bugs.webkit.org/show_bug.cgi?id=223277 5 <rdar://problem/75492360> 6 7 Reviewed by Eric Carlson. 8 9 * pal/cocoa/AVFoundationSoftLink.h: 10 * pal/cocoa/AVFoundationSoftLink.mm: 11 1 12 2021-03-17 Aditya Keerthi <akeerthi@apple.com> 2 13 -
trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.h
r271219 r274734 38 38 39 39 SOFT_LINK_CLASS_FOR_HEADER(PAL, AVAssetCache) 40 SOFT_LINK_CLASS_FOR_HEADER(PAL, AVAssetCollection) 40 41 SOFT_LINK_CLASS_FOR_HEADER(PAL, AVAssetImageGenerator) 41 42 SOFT_LINK_CLASS_FOR_HEADER(PAL, AVAssetReader) -
trunk/Source/WebCore/PAL/pal/cocoa/AVFoundationSoftLink.mm
r271219 r274734 82 82 SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVPlayerLayer, PAL_EXPORT) 83 83 SOFT_LINK_CLASS_FOR_SOURCE_WITH_EXPORT(PAL, AVFoundation, AVURLAsset, PAL_EXPORT) 84 SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT(PAL, AVFoundation, AVAssetCollection, PAL_EXPORT) 84 85 SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT(PAL, AVFoundation, AVAssetReaderSampleReferenceOutput, PAL_EXPORT) 85 86 SOFT_LINK_CLASS_FOR_SOURCE_OPTIONAL_WITH_EXPORT(PAL, AVFoundation, AVAssetResourceLoadingRequest, PAL_EXPORT) -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r274589 r274734 810 810 } 811 811 812 static bool hasBrokenFragmentSupport() 813 { 814 #if PLATFORM(MAC) 815 // On some versions of macOS, Photos.framework has overriden utility methods from AVFoundation that cause 816 // a exception to be thrown when parsing fragment identifiers from a URL. Their implementation requires 817 // an even number of components when splitting the fragment identifier with separator characters ['&','=']. 818 // Work around this broken implementation by pre-parsing the fragment and ensuring that it meets their 819 // criteria. Problematic strings from the TC0051.html test include "t=3&", and this problem generally is 820 // with subtrings between the '&' character not including an equal sign. 821 static bool hasBrokenFragmentSupport = false; 822 static dispatch_once_t onceToken; 823 dispatch_once(&onceToken, ^{ 824 @try { 825 auto selector = NSSelectorFromString(@"isURLForAssetInCollection:"); 826 auto theClass = PAL::getAVAssetCollectionClass(); 827 if (![theClass respondsToSelector:selector]) 828 return; 829 [theClass performSelector:selector withObject:[NSURL URLWithString:@"file:///invalid-file.mp4#t=3&"]]; 830 } @catch (NSException *exception) { 831 hasBrokenFragmentSupport = true; 832 } 833 }); 834 return hasBrokenFragmentSupport; 835 #else 836 return false; 837 #endif 838 } 839 840 static URL conformFragmentIdentifierForURL(const URL& url) 841 { 842 #if PLATFORM(MAC) 843 ASSERT(hasBrokenFragmentSupport()); 844 845 auto hasInvalidNumberOfEqualCharacters = [](const StringView& fragmentParameter) { 846 auto results = fragmentParameter.splitAllowingEmptyEntries('='); 847 auto iterator = results.begin(); 848 return iterator == results.end() || ++iterator == results.end() || ++iterator != results.end(); 849 }; 850 851 StringBuilder replacementFragmentIdentifierBuilder; 852 bool firstParameter = true; 853 bool hasInvalidFragmentIdentifier = false; 854 855 for (auto fragmentParameter : url.fragmentIdentifier().splitAllowingEmptyEntries('&')) { 856 if (hasInvalidNumberOfEqualCharacters(fragmentParameter)) { 857 hasInvalidFragmentIdentifier = true; 858 continue; 859 } 860 if (!firstParameter) 861 replacementFragmentIdentifierBuilder.append('&'); 862 else 863 firstParameter = false; 864 replacementFragmentIdentifierBuilder.append(fragmentParameter); 865 } 866 867 if (!hasInvalidFragmentIdentifier) 868 return url; 869 870 URL validURL = url; 871 if (replacementFragmentIdentifierBuilder.isEmpty()) 872 validURL.removeFragmentIdentifier(); 873 else 874 validURL.setFragmentIdentifier(replacementFragmentIdentifierBuilder.toString()); 875 876 return validURL; 877 #else 878 ASSERT_NOT_REACHED(); 879 return url; 880 #endif 881 } 882 812 883 void MediaPlayerPrivateAVFoundationObjC::createAVAssetForURL(const URL& url, RetainPtr<NSMutableDictionary> options) 813 884 { … … 901 972 registerFormatReaderIfNecessary(); 902 973 903 NSURL *cocoaURL = canonicalURL(url); 974 NSURL *cocoaURL = nil; 975 if (hasBrokenFragmentSupport() && url.hasFragmentIdentifier()) 976 cocoaURL = canonicalURL(conformFragmentIdentifierForURL(url)); 977 else 978 cocoaURL = canonicalURL(url); 979 904 980 m_avAsset = adoptNS([PAL::allocAVURLAssetInstance() initWithURL:cocoaURL options:options.get()]); 905 981
Note: See TracChangeset
for help on using the changeset viewer.