| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "config.h" | 5 #include "config.h" |
| 6 #include "modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h" | 6 #include "modules/encryptedmedia/NavigatorRequestMediaKeySystemAccess.h" |
| 7 | 7 |
| 8 #include "bindings/core/v8/ScriptPromiseResolver.h" | 8 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
| 10 #include "core/dom/DOMException.h" | 10 #include "core/dom/DOMException.h" |
| (...skipping 19 matching lines...) Expand all Loading... |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 static WebVector<WebEncryptedMediaInitDataType> convertInitDataTypes(const Vecto
r<String>& initDataTypes) | 32 static WebVector<WebEncryptedMediaInitDataType> convertInitDataTypes(const Vecto
r<String>& initDataTypes) |
| 33 { | 33 { |
| 34 WebVector<WebEncryptedMediaInitDataType> result(initDataTypes.size()); | 34 WebVector<WebEncryptedMediaInitDataType> result(initDataTypes.size()); |
| 35 for (size_t i = 0; i < initDataTypes.size(); ++i) | 35 for (size_t i = 0; i < initDataTypes.size(); ++i) |
| 36 result[i] = EncryptedMediaUtils::convertToInitDataType(initDataTypes[i])
; | 36 result[i] = EncryptedMediaUtils::convertToInitDataType(initDataTypes[i])
; |
| 37 return result; | 37 return result; |
| 38 } | 38 } |
| 39 | 39 |
| 40 static WebVector<WebMediaKeySystemMediaCapability> convertCapabilities(const Vec
tor<MediaKeySystemMediaCapability>& capabilities) | 40 static WebVector<WebMediaKeySystemMediaCapability> convertCapabilities(const Hea
pVector<MediaKeySystemMediaCapability>& capabilities) |
| 41 { | 41 { |
| 42 WebVector<WebMediaKeySystemMediaCapability> result(capabilities.size()); | 42 WebVector<WebMediaKeySystemMediaCapability> result(capabilities.size()); |
| 43 for (size_t i = 0; i < capabilities.size(); ++i) { | 43 for (size_t i = 0; i < capabilities.size(); ++i) { |
| 44 const WebString& contentType = capabilities[i].contentType(); | 44 const WebString& contentType = capabilities[i].contentType(); |
| 45 result[i].contentType = contentType; | 45 result[i].contentType = contentType; |
| 46 if (isValidContentType(contentType)) { | 46 if (isValidContentType(contentType)) { |
| 47 // FIXME: Fail if there are unrecognized parameters. | 47 // FIXME: Fail if there are unrecognized parameters. |
| 48 ParsedContentType type(capabilities[i].contentType()); | 48 ParsedContentType type(capabilities[i].contentType()); |
| 49 result[i].mimeType = type.mimeType(); | 49 result[i].mimeType = type.mimeType(); |
| 50 result[i].codecs = type.parameterValueForName("codecs"); | 50 result[i].codecs = type.parameterValueForName("codecs"); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 75 result[i] = EncryptedMediaUtils::convertToSessionType(sessionTypes[i]); | 75 result[i] = EncryptedMediaUtils::convertToSessionType(sessionTypes[i]); |
| 76 return result; | 76 return result; |
| 77 } | 77 } |
| 78 | 78 |
| 79 // This class allows capabilities to be checked and a MediaKeySystemAccess | 79 // This class allows capabilities to be checked and a MediaKeySystemAccess |
| 80 // object to be created asynchronously. | 80 // object to be created asynchronously. |
| 81 class MediaKeySystemAccessInitializer final : public EncryptedMediaRequest { | 81 class MediaKeySystemAccessInitializer final : public EncryptedMediaRequest { |
| 82 WTF_MAKE_NONCOPYABLE(MediaKeySystemAccessInitializer); | 82 WTF_MAKE_NONCOPYABLE(MediaKeySystemAccessInitializer); |
| 83 | 83 |
| 84 public: | 84 public: |
| 85 MediaKeySystemAccessInitializer(ScriptState*, const String& keySystem, const
Vector<MediaKeySystemConfiguration>& supportedConfigurations); | 85 MediaKeySystemAccessInitializer(ScriptState*, const String& keySystem, const
HeapVector<MediaKeySystemConfiguration>& supportedConfigurations); |
| 86 virtual ~MediaKeySystemAccessInitializer() { } | 86 virtual ~MediaKeySystemAccessInitializer() { } |
| 87 | 87 |
| 88 // EncryptedMediaRequest implementation. | 88 // EncryptedMediaRequest implementation. |
| 89 virtual WebString keySystem() const override { return m_keySystem; } | 89 virtual WebString keySystem() const override { return m_keySystem; } |
| 90 virtual const WebVector<WebMediaKeySystemConfiguration>& supportedConfigurat
ions() const override { return m_supportedConfigurations; } | 90 virtual const WebVector<WebMediaKeySystemConfiguration>& supportedConfigurat
ions() const override { return m_supportedConfigurations; } |
| 91 virtual SecurityOrigin* securityOrigin() const override { return m_resolver-
>executionContext()->securityOrigin(); } | 91 virtual SecurityOrigin* securityOrigin() const override { return m_resolver-
>executionContext()->securityOrigin(); } |
| 92 virtual void requestSucceeded(WebContentDecryptionModuleAccess*) override; | 92 virtual void requestSucceeded(WebContentDecryptionModuleAccess*) override; |
| 93 virtual void requestNotSupported(const WebString& errorMessage) override; | 93 virtual void requestNotSupported(const WebString& errorMessage) override; |
| 94 | 94 |
| 95 ScriptPromise promise() { return m_resolver->promise(); } | 95 ScriptPromise promise() { return m_resolver->promise(); } |
| 96 | 96 |
| 97 private: | 97 private: |
| 98 RefPtr<ScriptPromiseResolver> m_resolver; | 98 RefPtr<ScriptPromiseResolver> m_resolver; |
| 99 const String m_keySystem; | 99 const String m_keySystem; |
| 100 WebVector<WebMediaKeySystemConfiguration> m_supportedConfigurations; | 100 WebVector<WebMediaKeySystemConfiguration> m_supportedConfigurations; |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 MediaKeySystemAccessInitializer::MediaKeySystemAccessInitializer(ScriptState* sc
riptState, const String& keySystem, const Vector<MediaKeySystemConfiguration>& s
upportedConfigurations) | 103 MediaKeySystemAccessInitializer::MediaKeySystemAccessInitializer(ScriptState* sc
riptState, const String& keySystem, const HeapVector<MediaKeySystemConfiguration
>& supportedConfigurations) |
| 104 : m_resolver(ScriptPromiseResolver::create(scriptState)) | 104 : m_resolver(ScriptPromiseResolver::create(scriptState)) |
| 105 , m_keySystem(keySystem) | 105 , m_keySystem(keySystem) |
| 106 , m_supportedConfigurations(supportedConfigurations.size()) | 106 , m_supportedConfigurations(supportedConfigurations.size()) |
| 107 { | 107 { |
| 108 for (size_t i = 0; i < supportedConfigurations.size(); ++i) { | 108 for (size_t i = 0; i < supportedConfigurations.size(); ++i) { |
| 109 const MediaKeySystemConfiguration& config = supportedConfigurations[i]; | 109 const MediaKeySystemConfiguration& config = supportedConfigurations[i]; |
| 110 WebMediaKeySystemConfiguration webConfig; | 110 WebMediaKeySystemConfiguration webConfig; |
| 111 if (config.hasInitDataTypes()) { | 111 if (config.hasInitDataTypes()) { |
| 112 webConfig.hasInitDataTypes = true; | 112 webConfig.hasInitDataTypes = true; |
| 113 webConfig.initDataTypes = convertInitDataTypes(config.initDataTypes(
)); | 113 webConfig.initDataTypes = convertInitDataTypes(config.initDataTypes(
)); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 m_resolver->reject(DOMException::create(NotSupportedError, errorMessage)); | 145 m_resolver->reject(DOMException::create(NotSupportedError, errorMessage)); |
| 146 m_resolver.clear(); | 146 m_resolver.clear(); |
| 147 } | 147 } |
| 148 | 148 |
| 149 } // namespace | 149 } // namespace |
| 150 | 150 |
| 151 ScriptPromise NavigatorRequestMediaKeySystemAccess::requestMediaKeySystemAccess( | 151 ScriptPromise NavigatorRequestMediaKeySystemAccess::requestMediaKeySystemAccess( |
| 152 ScriptState* scriptState, | 152 ScriptState* scriptState, |
| 153 Navigator& navigator, | 153 Navigator& navigator, |
| 154 const String& keySystem, | 154 const String& keySystem, |
| 155 const Vector<MediaKeySystemConfiguration>& supportedConfigurations) | 155 const HeapVector<MediaKeySystemConfiguration>& supportedConfigurations) |
| 156 { | 156 { |
| 157 WTF_LOG(Media, "NavigatorRequestMediaKeySystemAccess::requestMediaKeySystemA
ccess()"); | 157 WTF_LOG(Media, "NavigatorRequestMediaKeySystemAccess::requestMediaKeySystemA
ccess()"); |
| 158 | 158 |
| 159 // From https://w3c.github.io/encrypted-media/#requestMediaKeySystemAccess | 159 // From https://w3c.github.io/encrypted-media/#requestMediaKeySystemAccess |
| 160 // When this method is invoked, the user agent must run the following steps: | 160 // When this method is invoked, the user agent must run the following steps: |
| 161 // 1. If keySystem is an empty string, return a promise rejected with a | 161 // 1. If keySystem is an empty string, return a promise rejected with a |
| 162 // new DOMException whose name is InvalidAccessError. | 162 // new DOMException whose name is InvalidAccessError. |
| 163 if (keySystem.isEmpty()) { | 163 if (keySystem.isEmpty()) { |
| 164 return ScriptPromise::rejectWithDOMException( | 164 return ScriptPromise::rejectWithDOMException( |
| 165 scriptState, DOMException::create(InvalidAccessError, "The keySystem
parameter is empty.")); | 165 scriptState, DOMException::create(InvalidAccessError, "The keySystem
parameter is empty.")); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 193 // initialize the MediaKeySystemAccess object. | 193 // initialize the MediaKeySystemAccess object. |
| 194 MediaKeysController* controller = MediaKeysController::from(document->page()
); | 194 MediaKeysController* controller = MediaKeysController::from(document->page()
); |
| 195 WebEncryptedMediaClient* mediaClient = controller->encryptedMediaClient(scri
ptState->executionContext()); | 195 WebEncryptedMediaClient* mediaClient = controller->encryptedMediaClient(scri
ptState->executionContext()); |
| 196 mediaClient->requestMediaKeySystemAccess(WebEncryptedMediaRequest(initialize
r)); | 196 mediaClient->requestMediaKeySystemAccess(WebEncryptedMediaRequest(initialize
r)); |
| 197 | 197 |
| 198 // 8. Return promise. | 198 // 8. Return promise. |
| 199 return promise; | 199 return promise; |
| 200 } | 200 } |
| 201 | 201 |
| 202 } // namespace blink | 202 } // namespace blink |
| OLD | NEW |