OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/media/webcontentdecryptionmodulesession_impl.h" | 5 #include "content/renderer/media/webcontentdecryptionmodulesession_impl.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
12 #include "content/renderer/media/cdm_result_promise.h" | 12 #include "content/renderer/media/cdm_result_promise.h" |
13 #include "content/renderer/media/cdm_session_adapter.h" | 13 #include "content/renderer/media/cdm_session_adapter.h" |
14 #include "media/base/cdm_promise.h" | 14 #include "media/base/cdm_promise.h" |
15 #include "third_party/WebKit/public/platform/WebURL.h" | 15 #include "third_party/WebKit/public/platform/WebURL.h" |
16 | 16 |
17 namespace content { | 17 namespace content { |
18 | 18 |
19 const char kCreateSessionUMAName[] = "CreateSession"; | 19 const char kCreateSessionUMAName[] = "CreateSession"; |
20 | 20 |
21 typedef base::Callback<blink::WebContentDecryptionModuleResult::SessionStatus( | |
22 const std::string& web_session_id)> SessionInitializedCB; | |
23 | |
24 class NewSessionCdmResultPromise : public CdmResultPromise<std::string> { | |
25 public: | |
26 NewSessionCdmResultPromise(blink::WebContentDecryptionModuleResult result, | |
27 std::string uma_name, | |
28 const SessionInitializedCB& new_session_created_cb) | |
29 : CdmResultPromise<std::string>(result, uma_name), | |
30 new_session_created_cb_(new_session_created_cb) {} | |
31 | |
32 protected: | |
33 virtual void OnResolve(const std::string& web_session_id) OVERRIDE { | |
34 blink::WebContentDecryptionModuleResult::SessionStatus status = | |
35 new_session_created_cb_.Run(web_session_id); | |
36 web_cdm_result_.completeWithSession(status); | |
37 } | |
38 | |
39 private: | |
40 SessionInitializedCB new_session_created_cb_; | |
41 }; | |
42 | |
43 WebContentDecryptionModuleSessionImpl::WebContentDecryptionModuleSessionImpl( | 21 WebContentDecryptionModuleSessionImpl::WebContentDecryptionModuleSessionImpl( |
44 const scoped_refptr<CdmSessionAdapter>& adapter) | 22 const scoped_refptr<CdmSessionAdapter>& adapter) |
45 : adapter_(adapter), | 23 : adapter_(adapter), |
46 is_closed_(false), | 24 is_closed_(false), |
47 weak_ptr_factory_(this) { | 25 weak_ptr_factory_(this) { |
48 } | 26 } |
49 | 27 |
50 WebContentDecryptionModuleSessionImpl:: | 28 WebContentDecryptionModuleSessionImpl:: |
51 ~WebContentDecryptionModuleSessionImpl() { | 29 ~WebContentDecryptionModuleSessionImpl() { |
52 if (!web_session_id_.empty()) | 30 if (!web_session_id_.empty()) |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, | 96 &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, |
119 base::Unretained(this))))); | 97 base::Unretained(this))))); |
120 } | 98 } |
121 | 99 |
122 void WebContentDecryptionModuleSessionImpl::update( | 100 void WebContentDecryptionModuleSessionImpl::update( |
123 const uint8* response, | 101 const uint8* response, |
124 size_t response_length, | 102 size_t response_length, |
125 blink::WebContentDecryptionModuleResult result) { | 103 blink::WebContentDecryptionModuleResult result) { |
126 DCHECK(response); | 104 DCHECK(response); |
127 DCHECK(!web_session_id_.empty()); | 105 DCHECK(!web_session_id_.empty()); |
128 adapter_->UpdateSession( | 106 adapter_->UpdateSession(web_session_id_, |
129 web_session_id_, | 107 response, |
130 response, | 108 response_length, |
131 response_length, | 109 scoped_ptr<media::SimpleCdmPromise>( |
132 scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); | 110 new CdmResultPromise<>(result, std::string()))); |
133 } | 111 } |
134 | 112 |
135 void WebContentDecryptionModuleSessionImpl::close( | 113 void WebContentDecryptionModuleSessionImpl::close( |
136 blink::WebContentDecryptionModuleResult result) { | 114 blink::WebContentDecryptionModuleResult result) { |
137 DCHECK(!web_session_id_.empty()); | 115 DCHECK(!web_session_id_.empty()); |
138 adapter_->CloseSession( | 116 adapter_->CloseSession(web_session_id_, |
139 web_session_id_, | 117 scoped_ptr<media::SimpleCdmPromise>( |
140 scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); | 118 new CdmResultPromise<>(result, std::string()))); |
141 } | 119 } |
142 | 120 |
143 void WebContentDecryptionModuleSessionImpl::remove( | 121 void WebContentDecryptionModuleSessionImpl::remove( |
144 blink::WebContentDecryptionModuleResult result) { | 122 blink::WebContentDecryptionModuleResult result) { |
145 DCHECK(!web_session_id_.empty()); | 123 DCHECK(!web_session_id_.empty()); |
146 adapter_->RemoveSession( | 124 adapter_->RemoveSession(web_session_id_, |
147 web_session_id_, | 125 scoped_ptr<media::SimpleCdmPromise>( |
148 scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); | 126 new CdmResultPromise<>(result, std::string()))); |
149 } | 127 } |
150 | 128 |
151 void WebContentDecryptionModuleSessionImpl::getUsableKeyIds( | 129 void WebContentDecryptionModuleSessionImpl::getUsableKeyIds( |
152 blink::WebContentDecryptionModuleResult result) { | 130 blink::WebContentDecryptionModuleResult result) { |
153 DCHECK(!web_session_id_.empty()); | 131 DCHECK(!web_session_id_.empty()); |
154 adapter_->GetUsableKeyIds( | 132 adapter_->GetUsableKeyIds( |
155 web_session_id_, | 133 web_session_id_, |
156 scoped_ptr<media::KeyIdsPromise>( | 134 scoped_ptr<media::KeyIdsPromise>( |
157 new CdmResultPromise<media::KeyIdsVector>(result))); | 135 new CdmResultPromise<media::KeyIdsVector>(result, std::string()))); |
158 } | 136 } |
159 | 137 |
160 void WebContentDecryptionModuleSessionImpl::release( | 138 void WebContentDecryptionModuleSessionImpl::release( |
161 blink::WebContentDecryptionModuleResult result) { | 139 blink::WebContentDecryptionModuleResult result) { |
162 close(result); | 140 close(result); |
163 } | 141 } |
164 | 142 |
165 void WebContentDecryptionModuleSessionImpl::OnSessionMessage( | 143 void WebContentDecryptionModuleSessionImpl::OnSessionMessage( |
166 const std::vector<uint8>& message, | 144 const std::vector<uint8>& message, |
167 const GURL& destination_url) { | 145 const GURL& destination_url) { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 | 199 |
222 DCHECK(web_session_id_.empty()) << "Session ID may not be changed once set."; | 200 DCHECK(web_session_id_.empty()) << "Session ID may not be changed once set."; |
223 web_session_id_ = web_session_id; | 201 web_session_id_ = web_session_id; |
224 return adapter_->RegisterSession(web_session_id_, | 202 return adapter_->RegisterSession(web_session_id_, |
225 weak_ptr_factory_.GetWeakPtr()) | 203 weak_ptr_factory_.GetWeakPtr()) |
226 ? blink::WebContentDecryptionModuleResult::NewSession | 204 ? blink::WebContentDecryptionModuleResult::NewSession |
227 : blink::WebContentDecryptionModuleResult::SessionAlreadyExists; | 205 : blink::WebContentDecryptionModuleResult::SessionAlreadyExists; |
228 } | 206 } |
229 | 207 |
230 } // namespace content | 208 } // namespace content |
OLD | NEW |