Index: media/mojo/clients/mojo_cdm_unittest.cc |
diff --git a/media/mojo/clients/mojo_cdm_unittest.cc b/media/mojo/clients/mojo_cdm_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..3dee666e847cac101750556c08ee5c380f725d3e |
--- /dev/null |
+++ b/media/mojo/clients/mojo_cdm_unittest.cc |
@@ -0,0 +1,120 @@ |
+// Copyright 2016 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 <stdint.h> |
+ |
+#include "base/bind.h" |
+#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
+#include "base/run_loop.h" |
+#include "base/test/test_message_loop.h" |
+#include "media/base/cdm_config.h" |
+#include "media/base/mock_filters.h" |
+#include "media/cdm/default_cdm_factory.h" |
+#include "media/mojo/clients/mojo_cdm.h" |
+#include "media/mojo/interfaces/content_decryption_module.mojom.h" |
+#include "media/mojo/services/mojo_cdm_service.h" |
+#include "media/mojo/services/mojo_cdm_service_context.h" |
+#include "mojo/public/cpp/bindings/interface_request.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+using ::testing::StrictMock; |
+ |
+namespace media { |
+ |
+namespace { |
+ |
+const char kClearKeyKeySystem[] = "org.w3.clearkey"; |
+const char kTestSecurityOrigin[] = "https://www.test.com"; |
+ |
+} // namespace |
+ |
+class MojoCdmTest : public ::testing::Test { |
+ public: |
+ enum ExpectedResult { SUCCESS, CONNECTION_ERROR }; |
+ |
+ MojoCdmTest() |
+ : mojo_cdm_service_(base::MakeUnique<MojoCdmService>( |
+ mojo_cdm_service_context_.GetWeakPtr(), |
+ &cdm_factory_)), |
+ cdm_binding_(mojo_cdm_service_.get()) {} |
+ |
+ virtual ~MojoCdmTest() {} |
+ |
+ void Initialize(ExpectedResult expected_result) { |
+ mojom::ContentDecryptionModulePtr remote_cdm; |
+ auto cdm_request = mojo::GetProxy(&remote_cdm); |
+ |
+ switch (expected_result) { |
+ case SUCCESS: |
+ cdm_binding_.Bind(std::move(cdm_request)); |
+ break; |
+ case CONNECTION_ERROR: |
+ cdm_request.ResetWithReason(0, "Request dropped for testing."); |
+ break; |
+ } |
+ |
+ MojoCdm::Create(kClearKeyKeySystem, GURL(kTestSecurityOrigin), CdmConfig(), |
+ std::move(remote_cdm), |
+ base::Bind(&MockCdmClient::OnSessionMessage, |
+ base::Unretained(&cdm_client_)), |
+ base::Bind(&MockCdmClient::OnSessionClosed, |
+ base::Unretained(&cdm_client_)), |
+ base::Bind(&MockCdmClient::OnSessionKeysChange, |
+ base::Unretained(&cdm_client_)), |
+ base::Bind(&MockCdmClient::OnSessionExpirationUpdate, |
+ base::Unretained(&cdm_client_)), |
+ base::Bind(&MojoCdmTest::OnCdmCreated, |
+ base::Unretained(this), expected_result)); |
+ |
+ base::RunLoop().RunUntilIdle(); |
+ |
+ if (expected_result == SUCCESS) { |
+ EXPECT_TRUE(mojo_cdm_); |
+ } else { |
+ EXPECT_FALSE(mojo_cdm_); |
+ } |
+ } |
+ |
+ void OnCdmCreated(ExpectedResult expected_result, |
+ const scoped_refptr<MediaKeys>& cdm, |
+ const std::string& error_message) { |
+ if (!cdm) { |
+ DVLOG(1) << error_message; |
+ return; |
+ } |
+ |
+ EXPECT_EQ(SUCCESS, expected_result); |
+ mojo_cdm_ = cdm; |
+ } |
+ |
+ // Fixture members. |
+ base::TestMessageLoop message_loop_; |
+ |
+ MojoCdmServiceContext mojo_cdm_service_context_; |
+ StrictMock<MockCdmClient> cdm_client_; |
+ |
+ // TODO(jrummell): Use a MockCdmFactory to create a MockCdm here for more test |
+ // coverage. |
+ DefaultCdmFactory cdm_factory_; |
+ |
+ std::unique_ptr<MojoCdmService> mojo_cdm_service_; |
+ mojo::Binding<mojom::ContentDecryptionModule> cdm_binding_; |
+ scoped_refptr<MediaKeys> mojo_cdm_; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(MojoCdmTest); |
+}; |
+ |
+TEST_F(MojoCdmTest, Create_Success) { |
+ Initialize(SUCCESS); |
+} |
+ |
+TEST_F(MojoCdmTest, Create_ConnectionError) { |
+ Initialize(CONNECTION_ERROR); |
+} |
+ |
+// TODO(xhwang): Add more test cases! |
+ |
+} // namespace media |