Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(20)

Side by Side Diff: webkit/media/webmediaplayer_impl.cc

Issue 11226019: Encrypted Media: Replace DecryptorClient with key event callbacks. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: rebase again Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/media/webmediaplayer_impl.h" 5 #include "webkit/media/webmediaplayer_impl.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 static WebKit::WebTimeRanges ConvertToWebTimeRanges( 104 static WebKit::WebTimeRanges ConvertToWebTimeRanges(
105 const media::Ranges<base::TimeDelta>& ranges) { 105 const media::Ranges<base::TimeDelta>& ranges) {
106 WebKit::WebTimeRanges result(ranges.size()); 106 WebKit::WebTimeRanges result(ranges.size());
107 for (size_t i = 0; i < ranges.size(); i++) { 107 for (size_t i = 0; i < ranges.size(); i++) {
108 result[i].start = ranges.start(i).InSecondsF(); 108 result[i].start = ranges.start(i).InSecondsF();
109 result[i].end = ranges.end(i).InSecondsF(); 109 result[i].end = ranges.end(i).InSecondsF();
110 } 110 }
111 return result; 111 return result;
112 } 112 }
113 113
114 // TODO(acolwell): Investigate whether the key_system & session_id parameters
115 // are really necessary.
116 typedef base::Callback<void(const std::string&,
117 const std::string&,
118 scoped_array<uint8>,
119 int)> OnNeedKeyCB;
120
121 static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log, 114 static void LogMediaSourceError(const scoped_refptr<media::MediaLog>& media_log,
122 const std::string& error) { 115 const std::string& error) {
123 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error)); 116 media_log->AddEvent(media_log->CreateMediaSourceErrorEvent(error));
124 } 117 }
125 118
126 WebMediaPlayerImpl::WebMediaPlayerImpl( 119 WebMediaPlayerImpl::WebMediaPlayerImpl(
127 WebKit::WebFrame* frame, 120 WebKit::WebFrame* frame,
128 WebKit::WebMediaPlayerClient* client, 121 WebKit::WebMediaPlayerClient* client,
129 base::WeakPtr<WebMediaPlayerDelegate> delegate, 122 base::WeakPtr<WebMediaPlayerDelegate> delegate,
130 media::FilterCollection* collection, 123 media::FilterCollection* collection,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 MessageLoop::current()->PostTask( 166 MessageLoop::current()->PostTask(
174 FROM_HERE, 167 FROM_HERE,
175 base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory, 168 base::Bind(&WebMediaPlayerImpl::IncrementExternallyAllocatedMemory,
176 AsWeakPtr())); 169 AsWeakPtr()));
177 170
178 // Also we want to be notified of |main_loop_| destruction. 171 // Also we want to be notified of |main_loop_| destruction.
179 main_loop_->AddDestructionObserver(this); 172 main_loop_->AddDestructionObserver(this);
180 173
181 media::SetDecryptorReadyCB set_decryptor_ready_cb; 174 media::SetDecryptorReadyCB set_decryptor_ready_cb;
182 if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) { 175 if (WebKit::WebRuntimeFeatures::isEncryptedMediaEnabled()) {
183 decryptor_.reset(new ProxyDecryptor(proxy_.get(), client, frame)); 176 decryptor_.reset(new ProxyDecryptor(
177 client,
178 frame,
179 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyAdded),
180 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyError),
181 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnKeyMessage),
182 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNeedKey)));
184 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB, 183 set_decryptor_ready_cb = base::Bind(&ProxyDecryptor::SetDecryptorReadyCB,
185 base::Unretained(decryptor_.get())); 184 base::Unretained(decryptor_.get()));
186 } 185 }
187 186
188 // Create default video renderer. 187 // Create default video renderer.
189 scoped_refptr<media::VideoRendererBase> video_renderer = 188 scoped_refptr<media::VideoRendererBase> video_renderer =
190 new media::VideoRendererBase( 189 new media::VideoRendererBase(
191 pipeline_message_loop, 190 pipeline_message_loop,
192 set_decryptor_ready_cb, 191 set_decryptor_ready_cb,
193 base::Bind(&WebMediaPlayerProxy::Repaint, proxy_), 192 base::Bind(&WebMediaPlayerProxy::Repaint, proxy_),
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after
1081 GetClient()->keyError( 1080 GetClient()->keyError(
1082 WebString::fromUTF8(key_system), 1081 WebString::fromUTF8(key_system),
1083 WebString::fromUTF8(session_id), 1082 WebString::fromUTF8(session_id),
1084 static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), 1083 static_cast<WebKit::WebMediaPlayerClient::MediaKeyErrorCode>(error_code),
1085 system_code); 1084 system_code);
1086 } 1085 }
1087 1086
1088 void WebMediaPlayerImpl::OnKeyMessage(const std::string& key_system, 1087 void WebMediaPlayerImpl::OnKeyMessage(const std::string& key_system,
1089 const std::string& session_id, 1088 const std::string& session_id,
1090 const std::string& message, 1089 const std::string& message,
1091 const GURL& default_url) { 1090 const std::string& default_url) {
1092 DCHECK_EQ(main_loop_, MessageLoop::current()); 1091 DCHECK_EQ(main_loop_, MessageLoop::current());
1093 1092
1093 const GURL default_url_gurl(default_url);
1094 DLOG_IF(WARNING, !default_url.empty() && !default_url_gurl.is_valid())
1095 << "Invalid URL in default_url: " << default_url;
1096
1094 GetClient()->keyMessage(WebString::fromUTF8(key_system), 1097 GetClient()->keyMessage(WebString::fromUTF8(key_system),
1095 WebString::fromUTF8(session_id), 1098 WebString::fromUTF8(session_id),
1096 reinterpret_cast<const uint8*>(message.data()), 1099 reinterpret_cast<const uint8*>(message.data()),
1097 message.size(), 1100 message.size(),
1098 default_url); 1101 default_url_gurl);
1099 } 1102 }
1100 1103
1101 void WebMediaPlayerImpl::SetOpaque(bool opaque) { 1104 void WebMediaPlayerImpl::SetOpaque(bool opaque) {
1102 DCHECK_EQ(main_loop_, MessageLoop::current()); 1105 DCHECK_EQ(main_loop_, MessageLoop::current());
1103 1106
1104 GetClient()->setOpaque(opaque); 1107 GetClient()->setOpaque(opaque);
1105 } 1108 }
1106 1109
1107 void WebMediaPlayerImpl::DataSourceInitialized(const GURL& gurl, bool success) { 1110 void WebMediaPlayerImpl::DataSourceInitialized(const GURL& gurl, bool success) {
1108 DCHECK_EQ(main_loop_, MessageLoop::current()); 1111 DCHECK_EQ(main_loop_, MessageLoop::current());
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1211 return audio_source_provider_; 1214 return audio_source_provider_;
1212 } 1215 }
1213 1216
1214 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() { 1217 void WebMediaPlayerImpl::IncrementExternallyAllocatedMemory() {
1215 DCHECK_EQ(main_loop_, MessageLoop::current()); 1218 DCHECK_EQ(main_loop_, MessageLoop::current());
1216 incremented_externally_allocated_memory_ = true; 1219 incremented_externally_allocated_memory_ = true;
1217 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory); 1220 v8::V8::AdjustAmountOfExternalAllocatedMemory(kPlayerExtraMemory);
1218 } 1221 }
1219 1222
1220 } // namespace webkit_media 1223 } // namespace webkit_media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698