Changeset 209964 in webkit


Ignore:
Timestamp:
Dec 17, 2016 9:18:54 AM (7 years ago)
Author:
jer.noble@apple.com
Message:

Add implementation for navigator.requestMediaKeySystemAccess()
https://bugs.webkit.org/show_bug.cgi?id=165850

Reviewed by Eric Carlson.

Source/WebCore:

Test: media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html

Add an implementation of NavigatorEME::requestMediaKeySystemAccess() as well as the CDM
object on which it depends.

  • Modules/encryptedmedia/CDM.cpp: Added.

(WebCore::cdmFactories):
(WebCore::createCDMPrivateForKeySystem):
(WebCore::CDM::registerCDMFactory):
(WebCore::CDM::unregisterCDMFactory):
(WebCore::CDM::supportsKeySystem):
(WebCore::CDM::create):
(WebCore::CDM::CDM):
(WebCore::CDM::getSupportedConfiguration):
(WebCore::CDM::doSupportedConfigurationStep):
(WebCore::CDM::isPersistentType):
(WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
(WebCore::CDM::getConsentStatus):

  • Modules/encryptedmedia/CDM.h: Added.

(WebCore::CDMFactory::~CDMFactory):
(WebCore::CDM::keySystem):
(WebCore::CDM::createWeakPtr):

  • Modules/encryptedmedia/CDMPrivate.h: Added.

(WebCore::CDMPrivate::~CDMPrivate):

  • Modules/encryptedmedia/NavigatorEME.cpp:

(WebCore::NavigatorEME::requestMediaKeySystemAccess):
(WebCore::tryNextSupportedConfiguration):

  • Modules/encryptedmedia/NavigatorEME.h:
  • Modules/encryptedmedia/NavigatorEME.idl:

To aid in testing, a new Internals object is added, MockCDMFactory, which can be
controlled by LayoutTests to change the behavior of the Mock objects it creates.

  • testing/Internals.cpp:

(WebCore::Internals::registerMockCDM):

  • testing/Internals.h:
  • testing/Internals.idl:
  • testing/MockCDMFactory.cpp: Added.

(WebCore::MockCDMFactory::MockCDMFactory):
(WebCore::MockCDMFactory::~MockCDMFactory):
(WebCore::MockCDMFactory::unregister):
(WebCore::MockCDMFactory::supportsKeySystem):
(WebCore::MockCDMFactory::createCDM):
(WebCore::MockCDM::MockCDM):
(WebCore::MockCDM::supportsInitDataType):
(WebCore::MockCDM::supportsConfiguration):
(WebCore::MockCDM::supportsConfigurationWithRestrictions):
(WebCore::MockCDM::supportsSessionTypeWithConfiguration):
(WebCore::MockCDM::supportsRobustness):
(WebCore::MockCDM::distinctiveIdentifiersRequirement):
(WebCore::MockCDM::persistentStateRequirement):
(WebCore::MockCDM::distinctiveIdentifiersAreUniquePerOriginAndClearable):

  • testing/MockCDMFactory.h: Added.

(WebCore::MockCDMFactory::create):
(WebCore::MockCDMFactory::supportedDataTypes):
(WebCore::MockCDMFactory::setSupportedDataTypes):
(WebCore::MockCDMFactory::supportedRobustness):
(WebCore::MockCDMFactory::setSupportedRobustness):
(WebCore::MockCDMFactory::distinctiveIdentifiersRequirement):
(WebCore::MockCDMFactory::setDistinctiveIdentifiersRequirement):
(WebCore::MockCDMFactory::persistentStateRequirement):
(WebCore::MockCDMFactory::setPersistentStateRequirement):

  • testing/MockCDMFactory.idl: Added.

Move the MediaKeySessionType definition out of the MediaKeys.idl file and into its own.
Move the MediaKeysRequiriment definition out of the MediaKeySystemConfiguration.idl file
and into its own. Generally fix up the .idl files so that they properly work with their
implementation files.

  • Modules/encryptedmedia/MediaKeySessionType.idl: Added.
  • Modules/encryptedmedia/MediaKeySystemAccess.cpp:

(WebCore::MediaKeySystemAccess::create):
(WebCore::MediaKeySystemAccess::MediaKeySystemAccess):
(WebCore::MediaKeySystemAccess::keySystem): Deleted.
(WebCore::MediaKeySystemAccess::getConfiguration): Deleted.

  • Modules/encryptedmedia/MediaKeySystemAccess.h:

(WebCore::MediaKeySystemAccess::keySystem):
(WebCore::MediaKeySystemAccess::getConfiguration):
(WebCore::MediaKeySystemAccess::create): Deleted.

  • Modules/encryptedmedia/MediaKeySystemAccess.idl:
  • Modules/encryptedmedia/MediaKeySystemConfiguration.h:
  • Modules/encryptedmedia/MediaKeySystemConfiguration.idl:
  • Modules/encryptedmedia/MediaKeySystemMediaCapability.idl:
  • Modules/encryptedmedia/MediaKeys.idl:
  • Modules/encryptedmedia/MediaKeysRequirement.idl: Added.
  • Modules/encryptedmedia/MediaKeysRestrictions.h: Added.
  • bindings/js/JSMediaKeySystemAccessCustom.cpp: Removed.

As some of these enums are referenced in the Internals project, they need to be exported
from WebCore correctly. Teach the code generator how to export the symbols generated by
enums.

  • bindings/scripts/CodeGeneratorJS.pm:

(GenerateEnumerationHeaderContent):

Add new files to the project.

  • CMakeLists.txt:
  • DerivedSources.make:
  • WebCore.xcodeproj/project.pbxproj:

LayoutTests:

  • media/encrypted-media/mock-navigator-requestMediaKeySystemAccess-expected.txt: Added.
  • media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html: Added.
  • platform/ios-simulator/TestExpectations:
  • platform/mac/TestExpectations:
Location:
trunk
Files:
11 added
1 deleted
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r209961 r209964  
     12016-12-17  Jer Noble  <jer.noble@apple.com>
     2
     3        Add implementation for navigator.requestMediaKeySystemAccess()
     4        https://bugs.webkit.org/show_bug.cgi?id=165850
     5
     6        Reviewed by Eric Carlson.
     7
     8        * media/encrypted-media/mock-navigator-requestMediaKeySystemAccess-expected.txt: Added.
     9        * media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html: Added.
     10        * platform/ios-simulator/TestExpectations:
     11        * platform/mac/TestExpectations:
     12
    1132016-12-17  Youenn Fablet  <youenn@apple.com>
    214
  • trunk/LayoutTests/platform/ios-simulator/TestExpectations

    r209943 r209964  
    27602760fast/css/deferred-parsing/hover-test.html [ Skip ]
    27612761
     2762# New Encrypted Media API not enabled on iOS
     2763media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html [ Skip ]
  • trunk/LayoutTests/platform/mac/TestExpectations

    r209837 r209964  
    14681468
    14691469webkit.org/b/165874 [ Debug ] streams/pipe-to.html [ Pass Failure ]
     1470
     1471# New Encrypted Media API not enabled on Mac
     1472media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html [ Skip ]
  • trunk/Source/WebCore/CMakeLists.txt

    r209962 r209964  
    11651165    bindings/js/JSMainThreadExecState.cpp
    11661166    bindings/js/JSMediaKeySessionCustom.cpp
    1167     bindings/js/JSMediaKeySystemAccessCustom.cpp
    11681167    bindings/js/JSMessageChannelCustom.cpp
    11691168    bindings/js/JSMessageEventCustom.cpp
     
    30423041if (ENABLE_ENCRYPTED_MEDIA)
    30433042    list(APPEND WebCore_SOURCES
     3043        Modules/encryptedmedia/CDM.cpp
    30443044        Modules/encryptedmedia/MediaKeyMessageEvent.cpp
    30453045        Modules/encryptedmedia/MediaKeySession.cpp
     
    30563056        Modules/encryptedmedia/MediaKeyMessageEvent.idl
    30573057        Modules/encryptedmedia/MediaKeySession.idl
     3058        Modules/encryptedmedia/MediaKeySessionType.idl
    30583059        Modules/encryptedmedia/MediaKeyStatusMap.idl
    30593060        Modules/encryptedmedia/MediaKeySystemAccess.idl
     
    30613062        Modules/encryptedmedia/MediaKeySystemMediaCapability.idl
    30623063        Modules/encryptedmedia/MediaKeys.idl
     3064        Modules/encryptedmedia/MediaKeysRequirement.idl
    30633065        Modules/encryptedmedia/NavigatorEME.idl
    30643066
     
    34543456    testing/MallocStatistics.idl
    34553457    testing/MemoryInfo.idl
     3458    testing/MockCDMFactory.idl
    34563459    testing/MockContentFilterSettings.idl
    34573460    testing/MockPageOverlay.idl
     
    34703473    testing/InternalSettings.cpp
    34713474    testing/Internals.cpp
     3475    testing/MockCDMFactory.cpp
    34723476    testing/MockGamepad.cpp
    34733477    testing/MockGamepadProvider.cpp
  • trunk/Source/WebCore/ChangeLog

    r209962 r209964  
     12016-12-17  Jer Noble  <jer.noble@apple.com>
     2
     3        Add implementation for navigator.requestMediaKeySystemAccess()
     4        https://bugs.webkit.org/show_bug.cgi?id=165850
     5
     6        Reviewed by Eric Carlson.
     7
     8        Test: media/encrypted-media/mock-navigator-requestMediaKeySystemAccess.html
     9
     10        Add an implementation of NavigatorEME::requestMediaKeySystemAccess() as well as the CDM
     11        object on which it depends.
     12
     13        * Modules/encryptedmedia/CDM.cpp: Added.
     14        (WebCore::cdmFactories):
     15        (WebCore::createCDMPrivateForKeySystem):
     16        (WebCore::CDM::registerCDMFactory):
     17        (WebCore::CDM::unregisterCDMFactory):
     18        (WebCore::CDM::supportsKeySystem):
     19        (WebCore::CDM::create):
     20        (WebCore::CDM::CDM):
     21        (WebCore::CDM::getSupportedConfiguration):
     22        (WebCore::CDM::doSupportedConfigurationStep):
     23        (WebCore::CDM::isPersistentType):
     24        (WebCore::CDM::getSupportedCapabilitiesForAudioVideoType):
     25        (WebCore::CDM::getConsentStatus):
     26        * Modules/encryptedmedia/CDM.h: Added.
     27        (WebCore::CDMFactory::~CDMFactory):
     28        (WebCore::CDM::keySystem):
     29        (WebCore::CDM::createWeakPtr):
     30        * Modules/encryptedmedia/CDMPrivate.h: Added.
     31        (WebCore::CDMPrivate::~CDMPrivate):
     32        * Modules/encryptedmedia/NavigatorEME.cpp:
     33        (WebCore::NavigatorEME::requestMediaKeySystemAccess):
     34        (WebCore::tryNextSupportedConfiguration):
     35        * Modules/encryptedmedia/NavigatorEME.h:
     36        * Modules/encryptedmedia/NavigatorEME.idl:
     37
     38        To aid in testing, a new Internals object is added, MockCDMFactory, which can be
     39        controlled by LayoutTests to change the behavior of the Mock objects it creates.
     40
     41        * testing/Internals.cpp:
     42        (WebCore::Internals::registerMockCDM):
     43        * testing/Internals.h:
     44        * testing/Internals.idl:
     45        * testing/MockCDMFactory.cpp: Added.
     46        (WebCore::MockCDMFactory::MockCDMFactory):
     47        (WebCore::MockCDMFactory::~MockCDMFactory):
     48        (WebCore::MockCDMFactory::unregister):
     49        (WebCore::MockCDMFactory::supportsKeySystem):
     50        (WebCore::MockCDMFactory::createCDM):
     51        (WebCore::MockCDM::MockCDM):
     52        (WebCore::MockCDM::supportsInitDataType):
     53        (WebCore::MockCDM::supportsConfiguration):
     54        (WebCore::MockCDM::supportsConfigurationWithRestrictions):
     55        (WebCore::MockCDM::supportsSessionTypeWithConfiguration):
     56        (WebCore::MockCDM::supportsRobustness):
     57        (WebCore::MockCDM::distinctiveIdentifiersRequirement):
     58        (WebCore::MockCDM::persistentStateRequirement):
     59        (WebCore::MockCDM::distinctiveIdentifiersAreUniquePerOriginAndClearable):
     60        * testing/MockCDMFactory.h: Added.
     61        (WebCore::MockCDMFactory::create):
     62        (WebCore::MockCDMFactory::supportedDataTypes):
     63        (WebCore::MockCDMFactory::setSupportedDataTypes):
     64        (WebCore::MockCDMFactory::supportedRobustness):
     65        (WebCore::MockCDMFactory::setSupportedRobustness):
     66        (WebCore::MockCDMFactory::distinctiveIdentifiersRequirement):
     67        (WebCore::MockCDMFactory::setDistinctiveIdentifiersRequirement):
     68        (WebCore::MockCDMFactory::persistentStateRequirement):
     69        (WebCore::MockCDMFactory::setPersistentStateRequirement):
     70        * testing/MockCDMFactory.idl: Added.
     71
     72        Move the MediaKeySessionType definition out of the MediaKeys.idl file and into its own.
     73        Move the MediaKeysRequiriment definition out of the MediaKeySystemConfiguration.idl file
     74        and into its own. Generally fix up the .idl files so that they properly work with their
     75        implementation files.
     76
     77        * Modules/encryptedmedia/MediaKeySessionType.idl: Added.
     78        * Modules/encryptedmedia/MediaKeySystemAccess.cpp:
     79        (WebCore::MediaKeySystemAccess::create):
     80        (WebCore::MediaKeySystemAccess::MediaKeySystemAccess):
     81        (WebCore::MediaKeySystemAccess::keySystem): Deleted.
     82        (WebCore::MediaKeySystemAccess::getConfiguration): Deleted.
     83        * Modules/encryptedmedia/MediaKeySystemAccess.h:
     84        (WebCore::MediaKeySystemAccess::keySystem):
     85        (WebCore::MediaKeySystemAccess::getConfiguration):
     86        (WebCore::MediaKeySystemAccess::create): Deleted.
     87        * Modules/encryptedmedia/MediaKeySystemAccess.idl:
     88        * Modules/encryptedmedia/MediaKeySystemConfiguration.h:
     89        * Modules/encryptedmedia/MediaKeySystemConfiguration.idl:
     90        * Modules/encryptedmedia/MediaKeySystemMediaCapability.idl:
     91        * Modules/encryptedmedia/MediaKeys.idl:
     92        * Modules/encryptedmedia/MediaKeysRequirement.idl: Added.
     93        * Modules/encryptedmedia/MediaKeysRestrictions.h: Added.
     94        * bindings/js/JSMediaKeySystemAccessCustom.cpp: Removed.
     95
     96        As some of these enums are referenced in the Internals project, they need to be exported
     97        from WebCore correctly. Teach the code generator how to export the symbols generated by
     98        enums.
     99
     100        * bindings/scripts/CodeGeneratorJS.pm:
     101        (GenerateEnumerationHeaderContent):
     102
     103        Add new files to the project.
     104
     105        * CMakeLists.txt:
     106        * DerivedSources.make:
     107        * WebCore.xcodeproj/project.pbxproj:
     108
    11092016-12-17  Darin Adler  <darin@apple.com>
    2110
  • trunk/Source/WebCore/DerivedSources.make

    r209959 r209964  
    9595    $(WebCore)/Modules/encryptedmedia/MediaKeyMessageEvent.idl \
    9696    $(WebCore)/Modules/encryptedmedia/MediaKeySession.idl \
     97    $(WebCore)/Modules/encryptedmedia/MediaKeySessionType.idl \
    9798    $(WebCore)/Modules/encryptedmedia/MediaKeyStatusMap.idl \
    9899    $(WebCore)/Modules/encryptedmedia/MediaKeySystemAccess.idl \
     
    100101    $(WebCore)/Modules/encryptedmedia/MediaKeySystemMediaCapability.idl \
    101102    $(WebCore)/Modules/encryptedmedia/MediaKeys.idl \
     103    $(WebCore)/Modules/encryptedmedia/MediaKeysRequirement.idl \
    102104    $(WebCore)/Modules/encryptedmedia/NavigatorEME.idl \
    103105    $(WebCore)/Modules/encryptedmedia/legacy/WebKitMediaKeyMessageEvent.idl \
     
    749751    $(WebCore)/testing/MallocStatistics.idl \
    750752    $(WebCore)/testing/MemoryInfo.idl \
     753    $(WebCore)/testing/MockCDMFactory.idl \
    751754    $(WebCore)/testing/MockContentFilterSettings.idl \
    752755    $(WebCore)/testing/MockPageOverlay.idl \
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.cpp

    r208539 r209964  
    3232#if ENABLE(ENCRYPTED_MEDIA)
    3333
     34#include "CDM.h"
    3435#include "MediaKeySystemConfiguration.h"
    3536#include "NotImplemented.h"
     
    3738namespace WebCore {
    3839
    39 MediaKeySystemAccess::MediaKeySystemAccess() = default;
     40Ref<MediaKeySystemAccess> MediaKeySystemAccess::create(const String& keySystem, MediaKeySystemConfiguration&& configuration, Ref<CDM>&& implementation)
     41{
     42    return adoptRef(*new MediaKeySystemAccess(keySystem, WTFMove(configuration), WTFMove(implementation)));
     43}
     44
     45MediaKeySystemAccess::MediaKeySystemAccess(const String& keySystem, MediaKeySystemConfiguration&& configuration, Ref<CDM>&& implementation)
     46    : m_keySystem(keySystem)
     47    , m_configuration(new MediaKeySystemConfiguration(WTFMove(configuration)))
     48    , m_implementation(WTFMove(implementation))
     49{
     50}
    4051
    4152MediaKeySystemAccess::~MediaKeySystemAccess() = default;
    42 
    43 const String& MediaKeySystemAccess::keySystem() const
    44 {
    45     notImplemented();
    46     return m_keySystem;
    47 }
    48 
    49 const MediaKeySystemConfiguration& MediaKeySystemAccess::getConfiguration() const
    50 {
    51     notImplemented();
    52     return m_configuration;
    53 }
    5453
    5554void MediaKeySystemAccess::createMediaKeys(Ref<DeferredPromise>&&)
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.h

    r208539 r209964  
    3232
    3333#include "JSDOMPromise.h"
    34 #include "MediaKeySystemConfiguration.h"
    3534#include <wtf/RefCounted.h>
    3635#include <wtf/text/WTFString.h>
     
    3837namespace WebCore {
    3938
     39class CDM;
    4040class MediaKeys;
     41
     42struct MediaKeySystemConfiguration;
    4143
    4244class MediaKeySystemAccess : public RefCounted<MediaKeySystemAccess> {
    4345public:
    44     static Ref<MediaKeySystemAccess> create()
    45     {
    46         return adoptRef(*new MediaKeySystemAccess);
    47     }
     46    static Ref<MediaKeySystemAccess> create(const String& keySystem, MediaKeySystemConfiguration&&, Ref<CDM>&&);
     47    ~MediaKeySystemAccess();
    4848
    49     virtual ~MediaKeySystemAccess();
    50 
    51     const String& keySystem() const;
    52     const MediaKeySystemConfiguration& getConfiguration() const;
     49    const String& keySystem() const { return m_keySystem; }
     50    const MediaKeySystemConfiguration& getConfiguration() const { return *m_configuration; }
    5351    void createMediaKeys(Ref<DeferredPromise>&&);
    5452
    5553private:
    56     MediaKeySystemAccess();
     54    MediaKeySystemAccess(const String& keySystem, MediaKeySystemConfiguration&&, Ref<CDM>&&);
    5755
    5856    String m_keySystem;
    59     MediaKeySystemConfiguration m_configuration;
     57    std::unique_ptr<MediaKeySystemConfiguration> m_configuration;
     58    Ref<CDM> m_implementation;
    6059};
    6160
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemAccess.idl

    r208939 r209964  
    2929[
    3030    Conditional=ENCRYPTED_MEDIA,
    31     EnabledAtRuntime=EncryptedMediaAPI
     31    EnabledAtRuntime=EncryptedMediaAPI,
     32    ImplementationLacksVTable,
    3233] interface MediaKeySystemAccess {
    3334    readonly attribute DOMString keySystem;
    34     [Custom] MediaKeySystemConfiguration getConfiguration();
     35    MediaKeySystemConfiguration getConfiguration();
    3536    Promise<MediaKeys> createMediaKeys();
    3637};
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.h

    r208539 r209964  
    3131#if ENABLE(ENCRYPTED_MEDIA)
    3232
     33#include "MediaKeySessionType.h"
    3334#include "MediaKeySystemMediaCapability.h"
    3435#include "MediaKeysRequirement.h"
     
    4748    MediaKeysRequirement distinctiveIdentifier;
    4849    MediaKeysRequirement persistentState;
    49     Vector<String> sessionTypes;
     50    Vector<MediaKeySessionType> sessionTypes;
    5051};
    5152
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemConfiguration.idl

    r208539 r209964  
    2727 */
    2828
    29 enum MediaKeysRequirement {
    30     "required",
    31     "optional",
    32     "not-allowed"
    33 };
    34 
    3529[
    36     Conditional=ENCRYPTED_MEDIA
     30    Conditional=ENCRYPTED_MEDIA,
     31    JSGenerateToJSObject
    3732] dictionary MediaKeySystemConfiguration {
    3833    DOMString label = "";
     
    4237    MediaKeysRequirement distinctiveIdentifier = "optional";
    4338    MediaKeysRequirement persistentState = "optional";
    44     sequence<DOMString> sessionTypes;
     39    sequence<MediaKeySessionType> sessionTypes;
    4540};
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeySystemMediaCapability.idl

    r208539 r209964  
    2828
    2929[
    30     Conditional=ENCRYPTED_MEDIA
     30    Conditional=ENCRYPTED_MEDIA,
     31    JSGenerateToJSObject,
    3132] dictionary MediaKeySystemMediaCapability {
    3233    DOMString contentType = "";
  • trunk/Source/WebCore/Modules/encryptedmedia/MediaKeys.idl

    r208939 r209964  
    2727 */
    2828
    29 enum MediaKeySessionType {
    30     "temporary",
    31     "persistent-usage-record",
    32     "persistent-license"
    33 };
    34  
    3529[
    3630    Conditional=ENCRYPTED_MEDIA,
  • trunk/Source/WebCore/Modules/encryptedmedia/NavigatorEME.cpp

    r208539 r209964  
    3232#if ENABLE(ENCRYPTED_MEDIA)
    3333
     34#include "CDM.h"
     35#include "Document.h"
     36#include "JSMediaKeySystemAccess.h"
    3437#include "NotImplemented.h"
    3538
    3639namespace WebCore {
    3740
    38 void NavigatorEME::requestMediaKeySystemAccess(Navigator&, const String&, Vector<MediaKeySystemConfiguration>&&, Ref<DeferredPromise>&&)
     41static void tryNextSupportedConfiguration(RefPtr<CDM>&& implementation, Vector<MediaKeySystemConfiguration>&& supportedConfigurations, RefPtr<DeferredPromise>&&);
     42
     43void NavigatorEME::requestMediaKeySystemAccess(Navigator&, Document& document, const String& keySystem, Vector<MediaKeySystemConfiguration>&& supportedConfigurations, Ref<DeferredPromise>&& promise)
    3944{
    40     notImplemented();
     45    // https://w3c.github.io/encrypted-media/#dom-navigator-requestmediakeysystemaccess
     46    // W3C Editor's Draft 09 November 2016
     47
     48    // When this method is invoked, the user agent must run the following steps:
     49    // 1. If keySystem is the empty string, return a promise rejected with a newly created TypeError.
     50    // 2. If supportedConfigurations is empty, return a promise rejected with a newly created TypeError.
     51    if (keySystem.isEmpty() || supportedConfigurations.isEmpty()) {
     52        promise->reject(TypeError);
     53        return;
     54    }
     55
     56    document.postTask([keySystem, supportedConfigurations = WTFMove(supportedConfigurations), promise = WTFMove(promise), &document] (ScriptExecutionContext&) mutable {
     57        // 3. Let document be the calling context's Document.
     58        // 4. Let origin be the origin of document.
     59        // 5. Let promise be a new promise.
     60        // 6. Run the following steps in parallel:
     61        // 6.1. If keySystem is not one of the Key Systems supported by the user agent, reject promise with a NotSupportedError.
     62        //      String comparison is case-sensitive.
     63        if (!CDM::supportsKeySystem(keySystem)) {
     64            promise->reject(NOT_SUPPORTED_ERR);
     65            return;
     66        }
     67
     68        // 6.2. Let implementation be the implementation of keySystem.
     69        RefPtr<CDM> implementation = CDM::create(document, keySystem);
     70        tryNextSupportedConfiguration(WTFMove(implementation), WTFMove(supportedConfigurations), WTFMove(promise));
     71    });
     72}
     73
     74static void tryNextSupportedConfiguration(RefPtr<CDM>&& implementation, Vector<MediaKeySystemConfiguration>&& supportedConfigurations, RefPtr<DeferredPromise>&& promise)
     75{
     76    // 6.3. For each value in supportedConfigurations:
     77    if (!supportedConfigurations.isEmpty()) {
     78        // 6.3.1. Let candidate configuration be the value.
     79        // 6.3.2. Let supported configuration be the result of executing the Get Supported Configuration
     80        //        algorithm on implementation, candidate configuration, and origin.
     81        MediaKeySystemConfiguration candidateCofiguration = WTFMove(supportedConfigurations.first());
     82        supportedConfigurations.remove(0);
     83
     84        CDM::SupportedConfigurationCallback callback = [implementation = implementation, supportedConfigurations = WTFMove(supportedConfigurations), promise] (std::optional<MediaKeySystemConfiguration> supportedConfiguration) mutable {
     85            // 6.3.3. If supported configuration is not NotSupported, run the following steps:
     86            if (supportedConfiguration) {
     87                // 6.3.3.1. Let access be a new MediaKeySystemAccess object, and initialize it as follows:
     88                // 6.3.3.1.1. Set the keySystem attribute to keySystem.
     89                // 6.3.3.1.2. Let the configuration value be supported configuration.
     90                // 6.3.3.1.3. Let the cdm implementation value be implementation.
     91                auto access = MediaKeySystemAccess::create(implementation->keySystem(), WTFMove(supportedConfiguration.value()), implementation.releaseNonNull());
     92                // 6.3.3.2. Resolve promise with access and abort the parallel steps of this algorithm.
     93                promise->resolve<IDLInterface<MediaKeySystemAccess>>(access.get());
     94                return;
     95            }
     96
     97            tryNextSupportedConfiguration(WTFMove(implementation), WTFMove(supportedConfigurations), WTFMove(promise));
     98        };
     99        implementation->getSupportedConfiguration(WTFMove(candidateCofiguration), WTFMove(callback));
     100        return;
     101    }
     102
     103
     104    // 6.4. Reject promise with a NotSupportedError.
     105    promise->reject(NOT_SUPPORTED_ERR);
    41106}
    42107
  • trunk/Source/WebCore/Modules/encryptedmedia/NavigatorEME.h

    r208539 r209964  
    4343class NavigatorEME final : public Supplement<Page> {
    4444public:
    45     static void requestMediaKeySystemAccess(Navigator&, const String&, Vector<MediaKeySystemConfiguration>&&, Ref<DeferredPromise>&&);
     45    static void requestMediaKeySystemAccess(Navigator&, Document&, const String&, Vector<MediaKeySystemConfiguration>&&, Ref<DeferredPromise>&&);
    4646};
    4747
  • trunk/Source/WebCore/Modules/encryptedmedia/NavigatorEME.idl

    r208939 r209964  
    3131    EnabledAtRuntime=EncryptedMediaAPI
    3232] partial interface Navigator {
    33     Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfiguration);
     33    [CallWith=Document] Promise<MediaKeySystemAccess> requestMediaKeySystemAccess(DOMString keySystem, sequence<MediaKeySystemConfiguration> supportedConfiguration);
    3434};
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r209962 r209964  
    12441244                2D9BF7471DBFDC49007A7D99 /* MediaKeyMessageEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BF72F1DBFDC0F007A7D99 /* MediaKeyMessageEvent.cpp */; };
    12451245                2D9BF74A1DBFDDFF007A7D99 /* JSMediaKeySessionCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BF7481DBFDDF8007A7D99 /* JSMediaKeySessionCustom.cpp */; };
    1246                 2D9BF74B1DBFDE02007A7D99 /* JSMediaKeySystemAccessCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2D9BF7491DBFDDF8007A7D99 /* JSMediaKeySystemAccessCustom.cpp */; };
    12471246                2D9F0E1314FF1CBF00BA0FF7 /* linearSRGB.icc in Resources */ = {isa = PBXBuildFile; fileRef = 2D9F0E1214FF1CBF00BA0FF7 /* linearSRGB.icc */; };
    12481247                2DB9C4AA1B3231F40070F27F /* NSEventSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 2DB9C4A91B3231F40070F27F /* NSEventSPI.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    59115910                CDF2B0191820540700F2B424 /* MockTracks.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF2B00F1820540600F2B424 /* MockTracks.h */; };
    59125911                CDF4B7121E0087AE00E235A2 /* LegacyCDMSession.h in Headers */ = {isa = PBXBuildFile; fileRef = CDDE02E918B3DFC700CF7FF1 /* LegacyCDMSession.h */; settings = {ATTRIBUTES = (Private, ); }; };
     5912                CDF4B7151E00B7E500E235A2 /* CDM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B7131E00B7E500E235A2 /* CDM.cpp */; };
     5913                CDF4B7161E00B7E500E235A2 /* CDM.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7141E00B7E500E235A2 /* CDM.h */; };
     5914                CDF4B7181E01CB9100E235A2 /* MediaKeysRestrictions.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7171E01CB9100E235A2 /* MediaKeysRestrictions.h */; };
     5915                CDF4B71A1E01D3D000E235A2 /* MediaKeySessionType.idl in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7191E01D3D000E235A2 /* MediaKeySessionType.idl */; };
     5916                CDF4B71D1E01E11A00E235A2 /* JSMediaKeySessionType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B71B1E01E11A00E235A2 /* JSMediaKeySessionType.cpp */; };
     5917                CDF4B71E1E01E11A00E235A2 /* JSMediaKeySessionType.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B71C1E01E11A00E235A2 /* JSMediaKeySessionType.h */; };
     5918                CDF4B7201E03BF6F00E235A2 /* MockCDMFactory.idl in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B71F1E03BF6F00E235A2 /* MockCDMFactory.idl */; };
     5919                CDF4B7241E03BF8100E235A2 /* MockCDMFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7221E03BF8100E235A2 /* MockCDMFactory.h */; };
     5920                CDF4B7261E03C15B00E235A2 /* CDMPrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7251E03C15B00E235A2 /* CDMPrivate.h */; };
     5921                CDF4B7281E03C57300E235A2 /* MediaKeysRequirement.idl in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B7271E03C57300E235A2 /* MediaKeysRequirement.idl */; };
     5922                CDF4B72B1E03C63E00E235A2 /* JSMediaKeysRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B7291E03C63E00E235A2 /* JSMediaKeysRequirement.cpp */; };
     5923                CDF4B72C1E03C63E00E235A2 /* JSMediaKeysRequirement.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B72A1E03C63E00E235A2 /* JSMediaKeysRequirement.h */; };
     5924                CDF4B7301E03CA4A00E235A2 /* JSMockCDMFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF4B72E1E03CA4A00E235A2 /* JSMockCDMFactory.h */; };
     5925                CDF4B7311E03D00700E235A2 /* MockCDMFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B7211E03BF8100E235A2 /* MockCDMFactory.cpp */; };
     5926                CDF4B7321E03D06000E235A2 /* JSMockCDMFactory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B72D1E03CA4A00E235A2 /* JSMockCDMFactory.cpp */; };
     5927                CDF4B7331E03D14900E235A2 /* JSMediaKeysRequirement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = CDF4B7291E03C63E00E235A2 /* JSMediaKeysRequirement.cpp */; };
    59135928                CDF65CC8145B1E7500C4C7AA /* MediaController.h in Headers */ = {isa = PBXBuildFile; fileRef = CD27F6E4145767870078207D /* MediaController.h */; settings = {ATTRIBUTES = (Private, ); }; };
    59145929                CDF65CCA145B448800C4C7AA /* MediaControllerInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = CDF65CC9145B43A700C4C7AA /* MediaControllerInterface.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    83758390                2D9BF7411DBFDC0F007A7D99 /* NavigatorEME.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NavigatorEME.h; sourceTree = "<group>"; };
    83768391                2D9BF7481DBFDDF8007A7D99 /* JSMediaKeySessionCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaKeySessionCustom.cpp; sourceTree = "<group>"; };
    8377                 2D9BF7491DBFDDF8007A7D99 /* JSMediaKeySystemAccessCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaKeySystemAccessCustom.cpp; sourceTree = "<group>"; };
    83788392                2D9F0E1214FF1CBF00BA0FF7 /* linearSRGB.icc */ = {isa = PBXFileReference; lastKnownFileType = file; path = linearSRGB.icc; sourceTree = "<group>"; };
    83798393                2DAAE32C19DCAF6000E002D2 /* MockPageOverlayClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockPageOverlayClient.cpp; sourceTree = "<group>"; };
     
    1387913893                CDF2B00F1820540600F2B424 /* MockTracks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockTracks.h; sourceTree = "<group>"; };
    1388013894                CDF419991AB0DA14004E64E1 /* missingImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "missingImage@3x.png"; sourceTree = "<group>"; };
     13895                CDF4B7131E00B7E500E235A2 /* CDM.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDM.cpp; sourceTree = "<group>"; };
     13896                CDF4B7141E00B7E500E235A2 /* CDM.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDM.h; sourceTree = "<group>"; };
     13897                CDF4B7171E01CB9100E235A2 /* MediaKeysRestrictions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaKeysRestrictions.h; sourceTree = "<group>"; };
     13898                CDF4B7191E01D3D000E235A2 /* MediaKeySessionType.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaKeySessionType.idl; sourceTree = "<group>"; };
     13899                CDF4B71B1E01E11A00E235A2 /* JSMediaKeySessionType.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaKeySessionType.cpp; sourceTree = "<group>"; };
     13900                CDF4B71C1E01E11A00E235A2 /* JSMediaKeySessionType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaKeySessionType.h; sourceTree = "<group>"; };
     13901                CDF4B71F1E03BF6F00E235A2 /* MockCDMFactory.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MockCDMFactory.idl; sourceTree = "<group>"; };
     13902                CDF4B7211E03BF8100E235A2 /* MockCDMFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MockCDMFactory.cpp; sourceTree = "<group>"; };
     13903                CDF4B7221E03BF8100E235A2 /* MockCDMFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MockCDMFactory.h; sourceTree = "<group>"; };
     13904                CDF4B7251E03C15B00E235A2 /* CDMPrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDMPrivate.h; sourceTree = "<group>"; };
     13905                CDF4B7271E03C57300E235A2 /* MediaKeysRequirement.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MediaKeysRequirement.idl; sourceTree = "<group>"; };
     13906                CDF4B7291E03C63E00E235A2 /* JSMediaKeysRequirement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMediaKeysRequirement.cpp; sourceTree = "<group>"; };
     13907                CDF4B72A1E03C63E00E235A2 /* JSMediaKeysRequirement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMediaKeysRequirement.h; sourceTree = "<group>"; };
     13908                CDF4B72D1E03CA4A00E235A2 /* JSMockCDMFactory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSMockCDMFactory.cpp; sourceTree = "<group>"; };
     13909                CDF4B72E1E03CA4A00E235A2 /* JSMockCDMFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSMockCDMFactory.h; sourceTree = "<group>"; };
    1388113910                CDF65CC9145B43A700C4C7AA /* MediaControllerInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MediaControllerInterface.h; sourceTree = "<group>"; };
    1388213911                CDF65CCC145B6AFE00C4C7AA /* JSHTMLMediaElementCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSHTMLMediaElementCustom.cpp; sourceTree = "<group>"; };
     
    1656516594                                A7BF7EDD14C9175A0014489D /* InternalSettings.h */,
    1656616595                                A7BF7EDE14C9175A0014489D /* InternalSettings.idl */,
     16596                                CDF4B71F1E03BF6F00E235A2 /* MockCDMFactory.idl */,
     16597                                CDF4B7211E03BF8100E235A2 /* MockCDMFactory.cpp */,
     16598                                CDF4B7221E03BF8100E235A2 /* MockCDMFactory.h */,
    1656716599                                A7BE7EDD14C9175A0014489D /* MallocStatistics.h */,
    1656816600                                A7BE7EDE14C9175A0014489D /* MallocStatistics.idl */,
     
    1660716639                                CD5393D1175E018600C07123 /* JSMemoryInfo.cpp */,
    1660816640                                CD5393D2175E018600C07123 /* JSMemoryInfo.h */,
     16641                                CDF4B72D1E03CA4A00E235A2 /* JSMockCDMFactory.cpp */,
     16642                                CDF4B72E1E03CA4A00E235A2 /* JSMockCDMFactory.h */,
    1660916643                                A19AEA1D1AAA806E00B52B25 /* JSMockContentFilterSettings.cpp */,
    1661016644                                A19AEA1E1AAA806E00B52B25 /* JSMockContentFilterSettings.h */,
     
    2199622030                                B56576E417DA599F00A56BDC /* JSMainThreadExecStateInstrumentation.h */,
    2199722031                                2D9BF7481DBFDDF8007A7D99 /* JSMediaKeySessionCustom.cpp */,
    21998                                 2D9BF7491DBFDDF8007A7D99 /* JSMediaKeySystemAccessCustom.cpp */,
    2199922032                                C6F420A016B7164E0052A9F2 /* JSMutationCallback.cpp */,
    2200022033                                C6F420A116B7164E0052A9F2 /* JSMutationCallback.h */,
     
    2276322796                        children = (
    2276422797                                2D0621461DA639EC00A7FB26 /* legacy */,
     22798                                CDF4B7131E00B7E500E235A2 /* CDM.cpp */,
     22799                                CDF4B7141E00B7E500E235A2 /* CDM.h */,
     22800                                CDF4B7251E03C15B00E235A2 /* CDMPrivate.h */,
    2276522801                                2D9BF72F1DBFDC0F007A7D99 /* MediaKeyMessageEvent.cpp */,
    2276622802                                2D9BF7301DBFDC0F007A7D99 /* MediaKeyMessageEvent.h */,
     
    2277522811                                2D9BF6F71DBFB71F007A7D99 /* MediaKeySession.idl */,
    2277622812                                2D9BF7371DBFDC0F007A7D99 /* MediaKeySessionType.h */,
     22813                                CDF4B7191E01D3D000E235A2 /* MediaKeySessionType.idl */,
    2277722814                                2D9BF7381DBFDC0F007A7D99 /* MediaKeysRequirement.h */,
     22815                                CDF4B7271E03C57300E235A2 /* MediaKeysRequirement.idl */,
     22816                                CDF4B7171E01CB9100E235A2 /* MediaKeysRestrictions.h */,
    2277822817                                2D9BF7391DBFDC0F007A7D99 /* MediaKeyStatus.h */,
    2277922818                                2D9BF73A1DBFDC0F007A7D99 /* MediaKeyStatusMap.cpp */,
     
    2280322842                                2D9BF7171DBFDAB1007A7D99 /* JSMediaKeySession.cpp */,
    2280422843                                2D9BF7181DBFDAB1007A7D99 /* JSMediaKeySession.h */,
     22844                                CDF4B71B1E01E11A00E235A2 /* JSMediaKeySessionType.cpp */,
     22845                                CDF4B71C1E01E11A00E235A2 /* JSMediaKeySessionType.h */,
    2280522846                                2D9BF7191DBFDAB1007A7D99 /* JSMediaKeyStatusMap.cpp */,
    2280622847                                2D9BF71A1DBFDAB1007A7D99 /* JSMediaKeyStatusMap.h */,
     
    2281122852                                2D9BF71F1DBFDAB1007A7D99 /* JSMediaKeySystemMediaCapability.cpp */,
    2281222853                                2D9BF7201DBFDAB1007A7D99 /* JSMediaKeySystemMediaCapability.h */,
     22854                                CDF4B7291E03C63E00E235A2 /* JSMediaKeysRequirement.cpp */,
     22855                                CDF4B72A1E03C63E00E235A2 /* JSMediaKeysRequirement.h */,
    2281322856                                CDA98D9B160128A500FEA3B1 /* JSWebKitMediaKeyError.cpp */,
    2281422857                                CDA98D9C160128A500FEA3B1 /* JSWebKitMediaKeyError.h */,
     
    2545225495                                2E37DFDB12DBAFB800A6B233 /* DOMURL.h in Headers */,
    2545325496                                CD9DE18217AAD6A400EA386D /* DOMURLMediaSource.h in Headers */,
     25497                                CDF4B7241E03BF8100E235A2 /* MockCDMFactory.h in Headers */,
    2545425498                                15FCC9FE1B4DF85E00E72326 /* DOMURLMediaStream.h in Headers */,
    2545525499                                1403B99709EB13AF00797C7F /* DOMWindow.h in Headers */,
     
    2564725691                                51E399001D6E4750009C8831 /* GameControllerGamepad.h in Headers */,
    2564825692                                51E399021D6E4750009C8831 /* GameControllerGamepadProvider.h in Headers */,
     25693                                CDF4B71E1E01E11A00E235A2 /* JSMediaKeySessionType.h in Headers */,
    2564925694                                516C62211950D48700337E75 /* GamepadEvent.h in Headers */,
    2565025695                                51A9D9EA195B931F001B2B5C /* GamepadManager.h in Headers */,
     
    2578425829                                A871D45A0A127CBC00B12A68 /* HTMLObjectElement.h in Headers */,
    2578525830                                A8EA79F10A1916DF00A8EF5F /* HTMLOListElement.h in Headers */,
     25831                                CDF4B7201E03BF6F00E235A2 /* MockCDMFactory.idl in Headers */,
    2578625832                                A81369DE097374F600D74463 /* HTMLOptGroupElement.h in Headers */,
    2578725833                                A81369DC097374F600D74463 /* HTMLOptionElement.h in Headers */,
     
    2601626062                                1221E06D1C03D224006A1A00 /* JSAnimationTimeline.h in Headers */,
    2601726063                                1AE96A8B1D1A0DDD00B86768 /* JSApplePayPaymentAuthorizedEvent.h in Headers */,
     26064                                CDF4B7301E03CA4A00E235A2 /* JSMockCDMFactory.h in Headers */,
    2601826065                                1AE96A8D1D1A0DDD00B86768 /* JSApplePayPaymentMethodSelectedEvent.h in Headers */,
    2601926066                                1AE96A8F1D1A0DDD00B86768 /* JSApplePaySession.h in Headers */,
     
    2646226509                                B2FA3D6B0AB75A6F000E5AC4 /* JSSVGFEBlendElement.h in Headers */,
    2646326510                                B2FA3D6D0AB75A6F000E5AC4 /* JSSVGFEColorMatrixElement.h in Headers */,
     26511                                CDF4B7261E03C15B00E235A2 /* CDMPrivate.h in Headers */,
    2646426512                                B2FA3D6F0AB75A6F000E5AC4 /* JSSVGFEComponentTransferElement.h in Headers */,
    2646526513                                B2FA3D710AB75A6F000E5AC4 /* JSSVGFECompositeElement.h in Headers */,
     
    2660126649                                7EA30F6A16DFFE7500257D0B /* JSWebGLCompressedTextureATC.h in Headers */,
    2660226650                                7EA30F6A17EFFE7500257D0B /* JSWebGLCompressedTexturePVRTC.h in Headers */,
     26651                                CDF4B7281E03C57300E235A2 /* MediaKeysRequirement.idl in Headers */,
    2660326652                                6E3FAD3914733F4000E42306 /* JSWebGLCompressedTextureS3TC.h in Headers */,
    2660426653                                6EE8A77310F803F3005A4A24 /* JSWebGLContextAttributes.h in Headers */,
     
    2670026749                                A7AD2F880EC89D07008AB002 /* LinkHash.h in Headers */,
    2670126750                                5143B2631DDD15200014FAC6 /* LinkIcon.h in Headers */,
     26751                                CDF4B72C1E03C63E00E235A2 /* JSMediaKeysRequirement.h in Headers */,
    2670226752                                1A4DA4221CDD3A8300F4473C /* LinkIconCollector.h in Headers */,
    2670326753                                1A250E0D1CDD632000D0BE63 /* LinkIconType.h in Headers */,
     
    2684526895                                BCB16C180979C3BD00467741 /* MemoryCache.h in Headers */,
    2684626896                                517139081BF64DEF000D5F01 /* MemoryCursor.h in Headers */,
     26897                                CDF4B71A1E01D3D000E235A2 /* MediaKeySessionType.idl in Headers */,
    2684726898                                51BA4ACB1BBC5BD900DF3D6D /* MemoryIDBBackingStore.h in Headers */,
    2684826899                                518F97031BE94C630023187C /* MemoryIndex.h in Headers */,
     
    2806028111                                A1ED778F1BE4291800DC1791 /* UIKitSPI.h in Headers */,
    2806128112                                AA4739D21757AFEC00E76767 /* UIRequestEvent.h in Headers */,
     28113                                CDF4B7161E00B7E500E235A2 /* CDM.h in Headers */,
    2806228114                                9B2D8A7914997CCF00ECEF3E /* UndoStep.h in Headers */,
    2806328115                                A863E2011343412000274926 /* UnicodeBidi.h in Headers */,
     
    2835828410                                1AB7FC7F0A8B92EC00D9D37B /* XPathResult.h in Headers */,
    2835928411                                1AB7FC820A8B92EC00D9D37B /* XPathStep.h in Headers */,
     28412                                CDF4B7181E01CB9100E235A2 /* MediaKeysRestrictions.h in Headers */,
    2836028413                                1AB7FC840A8B92EC00D9D37B /* XPathUtil.h in Headers */,
    2836128414                                1AB7FC860A8B92EC00D9D37B /* XPathValue.h in Headers */,
     
    2866228715                                53ED3FDE167A88E7006762E6 /* JSInternalSettingsGenerated.cpp in Sources */,
    2866328716                                A740B59714C935AF00A77FA4 /* JSMallocStatistics.cpp in Sources */,
     28717                                CDF4B7331E03D14900E235A2 /* JSMediaKeysRequirement.cpp in Sources */,
    2866428718                                CD5393D3175E018600C07123 /* JSMemoryInfo.cpp in Sources */,
    2866528719                                A19AEA221AAA808A00B52B25 /* JSMockContentFilterSettings.cpp in Sources */,
     
    2867228726                                51058ADB1D6792C1009A538C /* MockGamepad.cpp in Sources */,
    2867328727                                51058ADD1D6792C1009A538C /* MockGamepadProvider.cpp in Sources */,
     28728                                CDF4B7311E03D00700E235A2 /* MockCDMFactory.cpp in Sources */,
    2867428729                                2D6F3E901C1ECB270061DBD4 /* MockPageOverlay.cpp in Sources */,
     28730                                CDF4B7321E03D06000E235A2 /* JSMockCDMFactory.cpp in Sources */,
    2867528731                                2D97F04719DD413C001EE9C3 /* MockPageOverlayClient.cpp in Sources */,
    2867628732                                AA5F3B8F16CC4B3900455EB0 /* PlatformSpeechSynthesizerMock.cpp in Sources */,
     
    2877828834                                FD31601712B0267600C1A359 /* AudioNodeOutput.cpp in Sources */,
    2877928835                                FD31601C12B0267600C1A359 /* AudioParam.cpp in Sources */,
     28836                                CDF4B7151E00B7E500E235A2 /* CDM.cpp in Sources */,
    2878028837                                FD35918F138DB22000E1EBEC /* AudioParamTimeline.cpp in Sources */,
    2878128838                                FD31601F12B0267600C1A359 /* AudioProcessingEvent.cpp in Sources */,
     
    2929729354                                84730D7C1248F0B300D3A9C9 /* FEDisplacementMap.cpp in Sources */,
    2929829355                                4358E8801360A31700E4748C /* FEDropShadow.cpp in Sources */,
     29356                                CDF4B72B1E03C63E00E235A2 /* JSMediaKeysRequirement.cpp in Sources */,
    2929929357                                84730D7E1248F0B300D3A9C9 /* FEFlood.cpp in Sources */,
    2930029358                                84801954108BAFB300CB2B1F /* FEGaussianBlur.cpp in Sources */,
     
    3006730125                                2D9BF7241DBFDAD0007A7D99 /* JSMediaKeyStatusMap.cpp in Sources */,
    3006830126                                2D9BF7251DBFDAD3007A7D99 /* JSMediaKeySystemAccess.cpp in Sources */,
    30069                                 2D9BF74B1DBFDE02007A7D99 /* JSMediaKeySystemAccessCustom.cpp in Sources */,
    3007030127                                2D9BF7261DBFDAD5007A7D99 /* JSMediaKeySystemConfiguration.cpp in Sources */,
    3007130128                                2D9BF7271DBFDAD8007A7D99 /* JSMediaKeySystemMediaCapability.cpp in Sources */,
     
    3138931446                                B2A1F2AD0CEF0ABF00442F6A /* SVGGlyphElement.cpp in Sources */,
    3139031447                                24D912BD13CA9A9700D21915 /* SVGGlyphRefElement.cpp in Sources */,
     31448                                CDF4B71D1E01E11A00E235A2 /* JSMediaKeySessionType.cpp in Sources */,
    3139131449                                B2227A290D00BF220071B782 /* SVGGradientElement.cpp in Sources */,
    3139231450                                B2227AB50D00BF220071B782 /* SVGGraphicsElement.cpp in Sources */,
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorJS.pm

    r209927 r209964  
    11051105    my $result = "";
    11061106    $result .= "#if ${conditionalString}\n\n" if $conditionalString;
    1107     $result .= "template<> JSC::JSString* convertEnumerationToJS(JSC::ExecState&, $className);\n\n";
    1108     $result .= "template<> std::optional<$className> parseEnumeration<$className>(JSC::ExecState&, JSC::JSValue);\n";
    1109     $result .= "template<> $className convertEnumeration<$className>(JSC::ExecState&, JSC::JSValue);\n";
    1110     $result .= "template<> const char* expectedEnumerationValues<$className>();\n\n";
     1107
     1108    my $exportMacro = GetExportMacroForJSClass($enumeration);
     1109
     1110    $result .= "template<> ${exportMacro}JSC::JSString* convertEnumerationToJS(JSC::ExecState&, $className);\n\n";
     1111    $result .= "template<> ${exportMacro}std::optional<$className> parseEnumeration<$className>(JSC::ExecState&, JSC::JSValue);\n";
     1112    $result .= "template<> ${exportMacro}$className convertEnumeration<$className>(JSC::ExecState&, JSC::JSValue);\n";
     1113    $result .= "template<> ${exportMacro}const char* expectedEnumerationValues<$className>();\n\n";
    11111114    $result .= "#endif\n\n" if $conditionalString;
    11121115   
  • trunk/Source/WebCore/testing/Internals.cpp

    r209943 r209964  
    163163#endif
    164164
     165#if ENABLE(ENCRYPTED_MEDIA)
     166#include "MockCDMFactory.h"
     167#endif
     168
    165169#if ENABLE(VIDEO_TRACK)
    166170#include "CaptionUserPreferences.h"
     
    26102614#endif
    26112615
     2616#if ENABLE(ENCRYPTED_MEDIA)
     2617Ref<MockCDMFactory> Internals::registerMockCDM()
     2618{
     2619    return MockCDMFactory::create();
     2620}
     2621#endif
     2622
     2623
    26122624String Internals::markerTextForListItem(Element& element)
    26132625{
  • trunk/Source/WebCore/testing/Internals.h

    r209943 r209964  
    5959class MediaSession;
    6060class MemoryInfo;
     61class MockCDMFactory;
    6162class MockContentFilterSettings;
    6263class MockPageOverlay;
     
    373374#endif
    374375
     376#if ENABLE(ENCRYPTED_MEDIA)
     377    Ref<MockCDMFactory> registerMockCDM();
     378#endif
     379
    375380#if ENABLE(SPEECH_SYNTHESIS)
    376381    void enableMockSpeechSynthesizer();
  • trunk/Source/WebCore/testing/Internals.idl

    r209943 r209964  
    379379
    380380    [Conditional=LEGACY_ENCRYPTED_MEDIA] void initializeMockCDM();
     381    [Conditional=ENCRYPTED_MEDIA] MockCDMFactory registerMockCDM();
    381382
    382383    [Conditional=SPEECH_SYNTHESIS] void enableMockSpeechSynthesizer();
Note: See TracChangeset for help on using the changeset viewer.