Index: content/renderer/media/webcontentdecryptionmoduleresult_helper.cc |
diff --git a/content/renderer/media/webcontentdecryptionmoduleresult_helper.cc b/content/renderer/media/webcontentdecryptionmoduleresult_helper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cdf6fe457f216e1e27a2caaff0f379fa94e8f365 |
--- /dev/null |
+++ b/content/renderer/media/webcontentdecryptionmoduleresult_helper.cc |
@@ -0,0 +1,115 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/renderer/media/webcontentdecryptionmoduleresult_helper.h" |
+ |
+#include "base/bind.h" |
+#include "base/logging.h" |
+#include "third_party/WebKit/public/platform/WebString.h" |
+ |
+namespace content { |
+ |
+static blink::WebContentDecryptionModuleException ConvertException( |
+ media::MediaKeys::Exception exception_code) { |
+ switch (exception_code) { |
+ case media::MediaKeys::NOT_SUPPORTED_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionNotSupportedError; |
+ case media::MediaKeys::INVALID_STATE_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionInvalidStateError; |
+ case media::MediaKeys::INVALID_ACCESS_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionInvalidAccessError; |
+ case media::MediaKeys::QUOTA_EXCEEDED_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionQuotaExceededError; |
+ case media::MediaKeys::UNKNOWN_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionUnknownError; |
+ case media::MediaKeys::CLIENT_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionClientError; |
+ case media::MediaKeys::OUTPUT_ERROR: |
+ return blink::WebContentDecryptionModuleExceptionOutputError; |
+ default: |
+ NOTREACHED(); |
+ return blink::WebContentDecryptionModuleExceptionUnknownError; |
+ } |
+} |
+ |
+template <typename T> |
+WebCdmPromiseTemplate<T>::WebCdmPromiseTemplate( |
+ blink::WebContentDecryptionModuleResult result) |
+ : media::CdmPromiseTemplate<T>( |
+ base::Bind(&WebCdmPromiseTemplate::OnResolve, base::Unretained(this)), |
+ base::Bind(&WebCdmPromiseTemplate::OnReject, base::Unretained(this))), |
+ webCDMResult_(result) { |
+} |
+ |
+template <typename T> |
+WebCdmPromiseTemplate<T>::WebCdmPromiseTemplate( |
+ blink::WebContentDecryptionModuleResult result, |
+ const std::string& uma_name) |
+ : media::CdmPromiseTemplate<T>( |
+ base::Bind(&WebCdmPromiseTemplate::OnResolve, base::Unretained(this)), |
+ base::Bind(&WebCdmPromiseTemplate::OnReject, base::Unretained(this)), |
+ uma_name), |
+ webCDMResult_(result) { |
+} |
+ |
+template <> |
+void WebCdmPromiseTemplate<std::string>::OnResolve(const std::string& result) { |
+ // This must be overridden in a subclass. |
+ NOTIMPLEMENTED(); |
+} |
+ |
+template <> |
+void WebCdmPromiseTemplate<media::KeyIdsVector>::OnResolve( |
+ const media::KeyIdsVector& result) { |
+ // TODO(jrummell): Update blink::WebContentDecryptionModuleResult to |
+ // handle the set of keys. |
+ OnReject(media::MediaKeys::NOT_SUPPORTED_ERROR, 0, "Not implemented."); |
+} |
+ |
+template <typename T> |
+void WebCdmPromiseTemplate<T>::OnReject( |
+ media::MediaKeys::Exception exception_code, |
+ uint32 system_code, |
+ const std::string& error_message) { |
+ webCDMResult_.completeWithError(ConvertException(exception_code), |
+ system_code, |
+ blink::WebString::fromUTF8(error_message)); |
+} |
+ |
+WebCdmPromiseTemplate<void>::WebCdmPromiseTemplate( |
+ blink::WebContentDecryptionModuleResult result) |
+ : media::CdmPromiseTemplate<void>( |
+ base::Bind(&WebCdmPromiseTemplate::OnResolve, base::Unretained(this)), |
+ base::Bind(&WebCdmPromiseTemplate::OnReject, base::Unretained(this))), |
+ webCDMResult_(result) { |
+} |
+ |
+WebCdmPromiseTemplate<void>::WebCdmPromiseTemplate( |
+ blink::WebContentDecryptionModuleResult result, |
+ const std::string& uma_name) |
+ : media::CdmPromiseTemplate<void>( |
+ base::Bind(&WebCdmPromiseTemplate::OnResolve, base::Unretained(this)), |
+ base::Bind(&WebCdmPromiseTemplate::OnReject, base::Unretained(this)), |
+ uma_name), |
+ webCDMResult_(result) { |
+} |
+ |
+void WebCdmPromiseTemplate<void>::OnResolve() { |
+ webCDMResult_.complete(); |
+} |
+ |
+void WebCdmPromiseTemplate<void>::OnReject( |
+ media::MediaKeys::Exception exception_code, |
+ uint32 system_code, |
+ const std::string& error_message) { |
+ webCDMResult_.completeWithError(ConvertException(exception_code), |
+ system_code, |
+ blink::WebString::fromUTF8(error_message)); |
+} |
+ |
+// Explicit template instantiation for the templates needed. |
+template class WebCdmPromiseTemplate<std::string>; |
+template class WebCdmPromiseTemplate<media::KeyIdsVector>; |
+ |
+} // namespace content |