11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/renderer/media/cdm_result_promise.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/bind.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/logging.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "third_party/WebKit/public/platform/WebString.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace content { 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic blink::WebContentDecryptionModuleException ConvertException( 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci media::MediaKeys::Exception exception_code) { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci switch (exception_code) { 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::NOT_SUPPORTED_ERROR: 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionNotSupportedError; 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::INVALID_STATE_ERROR: 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionInvalidStateError; 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::INVALID_ACCESS_ERROR: 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionInvalidAccessError; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::QUOTA_EXCEEDED_ERROR: 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionQuotaExceededError; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::UNKNOWN_ERROR: 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionUnknownError; 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::CLIENT_ERROR: 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionClientError; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci case media::MediaKeys::OUTPUT_ERROR: 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionOutputError; 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci default: 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return blink::WebContentDecryptionModuleExceptionUnknownError; 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <typename T> 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<T>::CdmResultPromise( 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebContentDecryptionModuleResult& result) 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : media::CdmPromiseTemplate<T>( 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnResolve, base::Unretained(this)), 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnReject, base::Unretained(this))), 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_(result) { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <typename T> 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<T>::CdmResultPromise( 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebContentDecryptionModuleResult& result, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& uma_name) 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : media::CdmPromiseTemplate<T>( 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnResolve, base::Unretained(this)), 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnReject, base::Unretained(this)), 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uma_name), 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_(result) { 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <typename T> 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<T>::~CdmResultPromise() { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <> 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CdmResultPromise<std::string>::OnResolve(const std::string& result) { 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // This must be overridden in a subclass. 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci NOTREACHED(); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <> 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CdmResultPromise<media::KeyIdsVector>::OnResolve( 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const media::KeyIdsVector& result) { 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // TODO(jrummell): Update blink::WebContentDecryptionModuleResult to 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // handle the set of keys. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci OnReject(media::MediaKeys::NOT_SUPPORTED_ERROR, 0, "Not implemented."); 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate <typename T> 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CdmResultPromise<T>::OnReject(media::MediaKeys::Exception exception_code, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 system_code, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& error_message) { 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_.completeWithError(ConvertException(exception_code), 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_code, 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebString::fromUTF8(error_message)); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<void>::CdmResultPromise( 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebContentDecryptionModuleResult& result) 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : media::CdmPromiseTemplate<void>( 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnResolve, base::Unretained(this)), 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnReject, base::Unretained(this))), 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_(result) { 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<void>::CdmResultPromise( 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebContentDecryptionModuleResult& result, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& uma_name) 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : media::CdmPromiseTemplate<void>( 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnResolve, base::Unretained(this)), 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Bind(&CdmResultPromise::OnReject, base::Unretained(this)), 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uma_name), 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_(result) { 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciCdmResultPromise<void>::~CdmResultPromise() { 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CdmResultPromise<void>::OnResolve() { 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_.complete(); 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid CdmResultPromise<void>::OnReject( 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci media::MediaKeys::Exception exception_code, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci uint32 system_code, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& error_message) { 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_cdm_result_.completeWithError(ConvertException(exception_code), 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci system_code, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebString::fromUTF8(error_message)); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Explicit template instantiation for the templates needed. 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate class CdmResultPromise<std::string>; 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitemplate class CdmResultPromise<media::KeyIdsVector>; 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace content 122