Changeset 236818 in webkit
- Timestamp:
- Oct 3, 2018, 5:50:46 PM (8 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 18 edited
-
ChangeLog (modified) (1 diff)
-
Modules/encryptedmedia/MediaKeyMessageEvent.idl (modified) (1 diff)
-
Modules/encryptedmedia/MediaKeySession.idl (modified) (1 diff)
-
Modules/encryptedmedia/MediaKeyStatusMap.idl (modified) (1 diff)
-
Modules/encryptedmedia/MediaKeySystemAccess.idl (modified) (1 diff)
-
Modules/encryptedmedia/MediaKeys.idl (modified) (1 diff)
-
Modules/encryptedmedia/NavigatorEME.idl (modified) (1 diff)
-
Sources.txt (modified) (1 diff)
-
WebCore.xcodeproj/project.pbxproj (modified) (2 diffs)
-
bindings/scripts/CodeGeneratorJS.pm (modified) (2 diffs)
-
bindings/scripts/IDLAttributes.json (modified) (1 diff)
-
bindings/scripts/preprocess-idls.pl (modified) (1 diff)
-
dom/Document.cpp (modified) (2 diffs)
-
dom/Document.h (modified) (4 diffs)
-
html/HTMLMediaElement.cpp (modified) (3 diffs)
-
html/HTMLMediaElement.idl (modified) (1 diff)
-
html/MediaEncryptedEvent.idl (modified) (1 diff)
-
page/Quirks.cpp (added)
-
page/Quirks.h (added)
-
page/csp/ContentSecurityPolicySource.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r236809 r236818 1 2018-10-03 Jer Noble <jer.noble@apple.com> 2 3 Add a quirk to disable Modern EME for sites which are broken with it enabled 4 https://bugs.webkit.org/show_bug.cgi?id=190051 5 6 Reviewed by Daniel Bates. 7 8 Add a new class, parallel to Settings, to track quirk behavior. Extend the bindings 9 generator to support a DisabledByQuirk attribute, and set this attribute for all 10 the Modern EME types. Check whether the quirk is set inside HTMLMediaElement in 11 addition to the existing Setting. 12 13 * Modules/encryptedmedia/MediaKeyMessageEvent.idl: 14 * Modules/encryptedmedia/MediaKeySession.idl: 15 * Modules/encryptedmedia/MediaKeyStatusMap.idl: 16 * Modules/encryptedmedia/MediaKeySystemAccess.idl: 17 * Modules/encryptedmedia/MediaKeys.idl: 18 * Modules/encryptedmedia/NavigatorEME.idl: 19 * Sources.txt: 20 * WebCore.xcodeproj/project.pbxproj: 21 * bindings/scripts/CodeGenerator.pm: 22 (WK_ucfirst): 23 * bindings/scripts/CodeGeneratorJS.pm: 24 (NeedsRuntimeCheck): 25 (GenerateRuntimeEnableConditionalString): 26 * bindings/scripts/IDLAttributes.json: 27 * bindings/scripts/preprocess-idls.pl: 28 (GenerateConstructorAttributes): 29 * dom/Document.cpp: 30 (WebCore::Document::Document): 31 * dom/Document.h: 32 (WebCore::Document::quirks const): 33 * html/HTMLMediaElement.cpp: 34 (WebCore::HTMLMediaElement::mediaPlayerKeyNeeded): 35 (WebCore::HTMLMediaElement::mediaPlayerInitializationDataEncountered): 36 * html/HTMLMediaElement.idl: 37 * page/Quirks.cpp: Added. 38 (Quirks::Quirks): 39 (Quirks::disableEncryptedMediaAPIQuirk const): 40 * page/Quirks.h: Added. 41 1 42 2018-10-03 Antoine Quint <graouts@apple.com> 2 43 -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeyMessageEvent.idl
r208939 r236818 42 42 Conditional=ENCRYPTED_MEDIA, 43 43 Constructor(DOMString type, MediaKeyMessageEventInit eventInitDict), 44 EnabledAtRuntime=EncryptedMediaAPI 44 EnabledAtRuntime=EncryptedMediaAPI, 45 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 45 46 ] interface MediaKeyMessageEvent : Event { 46 47 readonly attribute MediaKeyMessageType messageType; -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySession.idl
r220433 r236818 29 29 [ 30 30 Conditional=ENCRYPTED_MEDIA, 31 EnabledAtRuntime=EncryptedMediaAPI 31 EnabledAtRuntime=EncryptedMediaAPI, 32 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 32 33 ] interface MediaKeySession : EventTarget { 33 34 readonly attribute DOMString sessionId; -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeyStatusMap.idl
r212107 r236818 39 39 [ 40 40 Conditional=ENCRYPTED_MEDIA, 41 EnabledAtRuntime=EncryptedMediaAPI 41 EnabledAtRuntime=EncryptedMediaAPI, 42 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 42 43 ] interface MediaKeyStatusMap { 43 44 iterable<BufferSource, MediaKeyStatus>; -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.idl
r209964 r236818 30 30 Conditional=ENCRYPTED_MEDIA, 31 31 EnabledAtRuntime=EncryptedMediaAPI, 32 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 32 33 ImplementationLacksVTable, 33 34 ] interface MediaKeySystemAccess { -
trunk/Source/WebCore/Modules/encryptedmedia/MediaKeys.idl
r210552 r236818 30 30 Conditional=ENCRYPTED_MEDIA, 31 31 EnabledAtRuntime=EncryptedMediaAPI, 32 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 32 33 ImplementationLacksVTable, 33 34 ] interface MediaKeys { -
trunk/Source/WebCore/Modules/encryptedmedia/NavigatorEME.idl
r209964 r236818 29 29 [ 30 30 Conditional=ENCRYPTED_MEDIA, 31 EnabledAtRuntime=EncryptedMediaAPI 31 EnabledAtRuntime=EncryptedMediaAPI, 32 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 32 33 ] partial interface Navigator { 33 34 [CallWith=Document] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfiguration); -
trunk/Source/WebCore/Sources.txt
r236750 r236818 1421 1421 page/PrintContext.cpp 1422 1422 page/ProcessWarming.cpp 1423 page/Quirks.cpp 1423 1424 page/RemoteDOMWindow.cpp 1424 1425 page/RemoteFrame.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r236773 r236818 13344 13344 CD94A5DA1F71CBB000F525C5 /* CDMClearKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDMClearKey.h; sourceTree = "<group>"; }; 13345 13345 CD94A5DB1F71CBB000F525C5 /* CDMClearKey.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDMClearKey.cpp; sourceTree = "<group>"; }; 13346 CD9A87F9215D6CF3006F17B5 /* Quirks.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Quirks.cpp; sourceTree = "<group>"; }; 13347 CD9A87FB215D6CF3006F17B5 /* Quirks.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Quirks.h; sourceTree = "<group>"; }; 13346 13348 CD9D375A215163E40049657B /* CDMInstanceSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CDMInstanceSession.h; sourceTree = "<group>"; }; 13347 13349 CD9D82731C7AE535006FF066 /* TextureCacheCV.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = TextureCacheCV.mm; sourceTree = "<group>"; }; … … 19535 19537 E42050162141901B0066EF3B /* ProcessWarming.cpp */, 19536 19538 E42050142141901A0066EF3B /* ProcessWarming.h */, 19539 CD9A87F9215D6CF3006F17B5 /* Quirks.cpp */, 19540 CD9A87FB215D6CF3006F17B5 /* Quirks.h */, 19537 19541 46B9518D207D632A00A7D2DD /* RemoteDOMWindow.cpp */, 19538 19542 46B9518E207D632A00A7D2DD /* RemoteDOMWindow.h */, -
trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
r236769 r236818 1706 1706 || $context->extendedAttributes->{EnabledForWorld} 1707 1707 || $context->extendedAttributes->{EnabledBySetting} 1708 || $context->extendedAttributes->{DisabledByQuirk} 1708 1709 || $context->extendedAttributes->{SecureContext} 1709 1710 || $context->extendedAttributes->{ContextHasServiceWorkerScheme}; … … 3719 3720 foreach my $flag (@flags) { 3720 3721 push(@conjuncts, "downcast<Document>(jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext())->settings()." . ToMethodName($flag) . "Enabled()"); 3722 } 3723 } 3724 3725 if ($context->extendedAttributes->{DisabledByQuirk}) { 3726 assert("Must specify value for DisabledByQuirk.") if $context->extendedAttributes->{DisabledByQuirk} eq "VALUE_IS_MISSING"; 3727 3728 AddToImplIncludes("Document.h"); 3729 AddToImplIncludes("Quirks.h"); 3730 3731 assert("DisabledByQuirk can only be used by interfaces only exposed to the Window") if $interface->extendedAttributes->{Exposed} && $interface->extendedAttributes->{Exposed} ne "Window"; 3732 3733 my @flags = split(/&/, $context->extendedAttributes->{DisabledByQuirk}); 3734 foreach my $flag (@flags) { 3735 push(@conjuncts, "!downcast<Document>(jsCast<JSDOMGlobalObject*>(" . $globalObjectPtr . ")->scriptExecutionContext())->quirks()." . ToMethodName($flag) . "Quirk()"); 3721 3736 } 3722 3737 } -
trunk/Source/WebCore/bindings/scripts/IDLAttributes.json
r236623 r236818 182 182 "values": ["*"] 183 183 }, 184 "DisabledByQuirk": { 185 "contextsAllowed": ["interface", "dictionary", "enum", "attribute", "operation", "constant"], 186 "values": ["*"] 187 }, 184 188 "EnabledForWorld": { 185 189 "contextsAllowed": ["attribute", "operation"], -
trunk/Source/WebCore/bindings/scripts/preprocess-idls.pl
r226395 r236818 259 259 next unless ($attributeName eq "Conditional" || $attributeName eq "EnabledAtRuntime" || $attributeName eq "EnabledForWorld" 260 260 || $attributeName eq "EnabledBySetting" || $attributeName eq "SecureContext" || $attributeName eq "PrivateIdentifier" 261 || $attributeName eq "PublicIdentifier" );261 || $attributeName eq "PublicIdentifier" || $attributeName eq "DisabledByQuirk"); 262 262 my $extendedAttribute = $attributeName; 263 263 $extendedAttribute .= "=" . $extendedAttributes->{$attributeName} unless $extendedAttributes->{$attributeName} eq "VALUE_IS_MISSING"; -
trunk/Source/WebCore/dom/Document.cpp
r236762 r236818 151 151 #include "ProcessingInstruction.h" 152 152 #include "PublicSuffix.h" 153 #include "Quirks.h" 153 154 #include "RealtimeMediaSourceCenter.h" 154 155 #include "RenderChildIterator.h" … … 490 491 #endif 491 492 , m_settings(frame ? Ref<Settings>(frame->settings()) : Settings::create(nullptr)) 493 , m_quirks(makeUniqueRef<Quirks>(*this)) 492 494 , m_cachedResourceLoader(m_frame ? Ref<CachedResourceLoader>(m_frame->loader().activeDocumentLoader()->cachedResourceLoader()) : CachedResourceLoader::create(nullptr)) 493 495 , m_domTreeVersion(++s_globalTreeVersion) -
trunk/Source/WebCore/dom/Document.h
r236730 r236818 64 64 #include <wtf/Logger.h> 65 65 #include <wtf/ObjectIdentifier.h> 66 #include <wtf/UniqueRef.h> 66 67 #include <wtf/WeakPtr.h> 67 68 #include <wtf/text/AtomicStringHash.h> … … 156 157 class ProcessingInstruction; 157 158 class QualifiedName; 159 class Quirks; 158 160 class Range; 159 161 class RenderFullScreen; … … 566 568 Settings& mutableSettings() { return m_settings.get(); } 567 569 570 const Quirks& quirks() const { return m_quirks; } 571 568 572 float deviceScaleFactor() const; 569 573 … … 1629 1633 const Ref<Settings> m_settings; 1630 1634 1635 UniqueRef<Quirks> m_quirks; 1636 1631 1637 std::unique_ptr<StyleResolver> m_userAgentShadowTreeStyleResolver; 1632 1638 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r236762 r236818 74 74 #include "ProgressTracker.h" 75 75 #include "PublicSuffix.h" 76 #include "Quirks.h" 76 77 #include "RenderLayerCompositor.h" 77 78 #include "RenderTheme.h" … … 2628 2629 // Only fire an error if ENCRYPTED_MEDIA is not enabled, to give clients of the 2629 2630 // "encrypted" event a chance to handle it without resulting in a synthetic error. 2630 && !RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled()2631 && (!RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled() || document().quirks().hasBrokenEncryptedMediaAPISupportQuirk()) 2631 2632 #endif 2632 2633 ) { … … 2764 2765 void HTMLMediaElement::mediaPlayerInitializationDataEncountered(const String& initDataType, RefPtr<ArrayBuffer>&& initData) 2765 2766 { 2766 if (!RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled() )2767 if (!RuntimeEnabledFeatures::sharedFeatures().encryptedMediaAPIEnabled() || document().quirks().hasBrokenEncryptedMediaAPISupportQuirk()) 2767 2768 return; 2768 2769 -
trunk/Source/WebCore/html/HTMLMediaElement.idl
r234312 r236818 105 105 [Conditional=LEGACY_ENCRYPTED_MEDIA, EnabledAtRuntime=LegacyEncryptedMediaAPI] readonly attribute WebKitMediaKeys webkitKeys; 106 106 [Conditional=LEGACY_ENCRYPTED_MEDIA, EnabledAtRuntime=LegacyEncryptedMediaAPI] void webkitSetMediaKeys(WebKitMediaKeys? mediaKeys); 107 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI ] readonly attribute MediaKeys mediaKeys;108 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI ] attribute EventHandler onencrypted;109 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI ] attribute EventHandler onwaitingforkey;110 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI ] Promise<void> setMediaKeys(MediaKeys? mediaKeys);107 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] readonly attribute MediaKeys mediaKeys; 108 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] attribute EventHandler onencrypted; 109 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] attribute EventHandler onwaitingforkey; 110 [Conditional=ENCRYPTED_MEDIA, EnabledAtRuntime=EncryptedMediaAPI, DisabledByQuirk=hasBrokenEncryptedMediaAPISupport] Promise<void> setMediaKeys(MediaKeys? mediaKeys); 111 111 112 112 [Conditional=VIDEO_TRACK, MayThrowException] TextTrack addTextTrack(DOMString kind, optional DOMString label = "", optional DOMString language = ""); -
trunk/Source/WebCore/html/MediaEncryptedEvent.idl
r208939 r236818 35 35 Conditional=ENCRYPTED_MEDIA, 36 36 Constructor(DOMString type, optional MediaEncryptedEventInit eventInitDict), 37 EnabledAtRuntime=EncryptedMediaAPI 37 EnabledAtRuntime=EncryptedMediaAPI, 38 DisabledByQuirk=hasBrokenEncryptedMediaAPISupport, 38 39 ] interface MediaEncryptedEvent : Event { 39 40 readonly attribute DOMString initDataType; -
trunk/Source/WebCore/page/csp/ContentSecurityPolicySource.cpp
r233036 r236818 30 30 #include "ContentSecurityPolicy.h" 31 31 #include "SecurityOriginData.h" 32 #include "TextEncoding.h" 32 33 #include "URL.h" 33 34
Note:
See TracChangeset
for help on using the changeset viewer.