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 |