1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/media/webcontentdecryptionmodulesession_impl.h" 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/bind.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/callback_helpers.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/logging.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/string_util.h" 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/renderer/media/cdm_result_promise.h" 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/renderer/media/cdm_session_adapter.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "media/base/cdm_promise.h" 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "third_party/WebKit/public/platform/WebURL.h" 16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content { 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)const char kCreateSessionUMAName[] = "CreateSession"; 206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef base::Callback<blink::WebContentDecryptionModuleResult::SessionStatus( 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& web_session_id)> SessionInitializedCB; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass NewSessionCdmResultPromise : public CdmResultPromise<std::string> { 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public: 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NewSessionCdmResultPromise(blink::WebContentDecryptionModuleResult result, 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string uma_name, 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const SessionInitializedCB& new_session_created_cb) 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : CdmResultPromise<std::string>(result, uma_name), 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new_session_created_cb_(new_session_created_cb) {} 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnResolve(const std::string& web_session_id) OVERRIDE { 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModuleResult::SessionStatus status = 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new_session_created_cb_.Run(web_session_id); 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_.completeWithSession(status); 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SessionInitializedCB new_session_created_cb_; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebContentDecryptionModuleSessionImpl::WebContentDecryptionModuleSessionImpl( 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const scoped_refptr<CdmSessionAdapter>& adapter) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : adapter_(adapter), 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) is_closed_(false), 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) weak_ptr_factory_(this) { 48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochWebContentDecryptionModuleSessionImpl:: 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ~WebContentDecryptionModuleSessionImpl() { 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!web_session_id_.empty()) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->UnregisterSession(web_session_id_); 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WebContentDecryptionModuleSessionImpl::setClientInterface(Client* client) { 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch client_ = client; 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)blink::WebString WebContentDecryptionModuleSessionImpl::sessionId() const { 61f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return blink::WebString::fromUTF8(web_session_id_); 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::initializeNewSession( 65f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const blink::WebString& init_data_type, 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const uint8* init_data, 67f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) size_t init_data_length) { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Remove once blink updated. 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 72a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::update(const uint8* response, 73a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) size_t response_length) { 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Remove once blink updated. 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::release() { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Remove once blink updated. 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WebContentDecryptionModuleSessionImpl::initializeNewSession( 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebString& init_data_type, 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const uint8* init_data, 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t init_data_length, 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebString& session_type, 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebContentDecryptionModuleResult result) { 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // TODO(ddorwin): Guard against this in supported types check and remove this. 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Chromium only supports ASCII MIME types. 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if (!base::IsStringASCII(init_data_type)) { 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch NOTREACHED(); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::string message = "The initialization data type " + 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci init_data_type.utf8() + 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci " is not supported by the key system."; 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result.completeWithError( 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModuleExceptionNotSupportedError, 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebString::fromUTF8(message)); 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return; 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string init_data_type_as_ascii = base::UTF16ToASCII(init_data_type); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DLOG_IF(WARNING, init_data_type_as_ascii.find('/') != std::string::npos) 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "init_data_type '" << init_data_type_as_ascii 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch << "' may be a MIME type"; 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->InitializeNewSession( 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci init_data_type_as_ascii, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci init_data, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci init_data_length, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci media::MediaKeys::TEMPORARY_SESSION, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<media::NewSessionCdmPromise>(new NewSessionCdmResultPromise( 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci result, 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->GetKeySystemUMAPrefix() + kCreateSessionUMAName, 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind( 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &WebContentDecryptionModuleSessionImpl::OnSessionInitialized, 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Unretained(this))))); 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WebContentDecryptionModuleSessionImpl::update( 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const uint8* response, 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch size_t response_length, 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebContentDecryptionModuleResult result) { 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(response); 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!web_session_id_.empty()); 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch adapter_->UpdateSession( 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_, 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci response, 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci response_length, 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebContentDecryptionModuleSessionImpl::close( 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModuleResult result) { 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!web_session_id_.empty()); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->CloseSession( 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_, 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebContentDecryptionModuleSessionImpl::remove( 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModuleResult result) { 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!web_session_id_.empty()); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->RemoveSession( 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_, 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<media::SimpleCdmPromise>(new SimpleCdmResultPromise(result))); 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebContentDecryptionModuleSessionImpl::getUsableKeyIds( 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModuleResult result) { 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(!web_session_id_.empty()); 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci adapter_->GetUsableKeyIds( 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_, 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<media::KeyIdsPromise>( 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new CdmResultPromise<media::KeyIdsVector>(result))); 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid WebContentDecryptionModuleSessionImpl::release( 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebContentDecryptionModuleResult result) { 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci close(result); 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 165a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::OnSessionMessage( 166eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<uint8>& message, 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& destination_url) { 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DCHECK(client_) << "Client not set before message event"; 169cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) client_->message( 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) message.empty() ? NULL : &message[0], message.size(), destination_url); 171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 172eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebContentDecryptionModuleSessionImpl::OnSessionKeysChange( 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool has_additional_usable_key) { 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Update this once Blink client supports this. 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid WebContentDecryptionModuleSessionImpl::OnSessionExpirationUpdate( 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const base::Time& new_expiry_time) { 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Update this once Blink client supports this. 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The EME spec has expiration attribute as the time in milliseconds, so use 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // InMillisecondsF() to convert. 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::OnSessionReady() { 1865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) client_->ready(); 187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::OnSessionClosed() { 190f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if (!is_closed_) { 191f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) is_closed_ = true; 192f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) client_->close(); 193f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void WebContentDecryptionModuleSessionImpl::OnSessionError( 197f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) media::MediaKeys::Exception exception_code, 198f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) uint32 system_code, 199f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& error_message) { 200f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Convert |exception_code| back to MediaKeyErrorCode if possible. 201f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // TODO(jrummell): Update this conversion when promises flow 202f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // back into blink:: (as blink:: will have its own error definition). 203f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) switch (exception_code) { 204f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) case media::MediaKeys::CLIENT_ERROR: 205f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) client_->error(Client::MediaKeyErrorCodeClient, system_code); 206f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) break; 207f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) default: 208f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // This will include all other CDM4 errors and any error generated 209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // by CDM5 or later. 210f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) client_->error(Client::MediaKeyErrorCodeUnknown, system_code); 211f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) break; 212f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 213f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 214f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciblink::WebContentDecryptionModuleResult::SessionStatus 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWebContentDecryptionModuleSessionImpl::OnSessionInitialized( 217f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) const std::string& web_session_id) { 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // CDM will return NULL if the session to be loaded can't be found. 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (web_session_id.empty()) 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleResult::SessionNotFound; 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DCHECK(web_session_id_.empty()) << "Session ID may not be changed once set."; 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_session_id_ = web_session_id; 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return adapter_->RegisterSession(web_session_id_, 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci weak_ptr_factory_.GetWeakPtr()) 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ? blink::WebContentDecryptionModuleResult::NewSession 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : blink::WebContentDecryptionModuleResult::SessionAlreadyExists; 228f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 229f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 230eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} // namespace content 231