Index: extensions/browser/api/display_source/display_source_apitest.cc |
diff --git a/extensions/browser/api/display_source/display_source_apitest.cc b/extensions/browser/api/display_source/display_source_apitest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9c44868a568695f757b0bf7790303a5df4c8f8da |
--- /dev/null |
+++ b/extensions/browser/api/display_source/display_source_apitest.cc |
@@ -0,0 +1,99 @@ |
+// Copyright 2015 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 "base/memory/scoped_ptr.h" |
+#include "content/public/test/test_utils.h" |
+#include "extensions/browser/api/display_source/display_source_connection_delegate.h" |
+#include "extensions/browser/api/display_source/display_source_connection_delegate_factory.h" |
+#include "extensions/shell/test/shell_apitest.h" |
+ |
+namespace extensions { |
+ |
+using api::display_source::SinkInfo; |
+using api::display_source::SinkState; |
+using api::display_source::SINK_STATE_DISCONNECTED; |
+using api::display_source::AUTHENTICATION_METHOD_PBC; |
+ |
+namespace { |
+ |
+DisplaySourceSinkInfoPtr CreateSinkInfoPtr(int id, |
+ const std::string& name, |
+ SinkState state) { |
+ DisplaySourceSinkInfoPtr ptr(new SinkInfo()); |
+ ptr->id = id; |
+ ptr->name = name; |
+ ptr->state = state; |
+ |
+ return ptr; |
+} |
+ |
+} // namespace |
+ |
+class MockDisplaySourceConnectionDelegate |
+ : public DisplaySourceConnectionDelegate { |
+ public: |
+ DisplaySourceSinkInfoList last_found_sinks() const override { return sinks_; } |
+ const Connection* connection() const override { return nullptr; } |
+ void GetAvailableSinks(const SinkInfoListCallback& sinks_callback, |
+ const FailureCallback& failure_callback) override { |
+ AddSink(CreateSinkInfoPtr(1, "sink 1", SINK_STATE_DISCONNECTED)); |
+ sinks_callback.Run(sinks_); |
+ } |
+ |
+ void RequestAuthentication(int sink_id, |
+ const AuthInfoCallback& auth_info_callback, |
+ const FailureCallback& failure_callback) override { |
+ DisplaySourceAuthInfo info; |
+ info.method = AUTHENTICATION_METHOD_PBC; |
+ auth_info_callback.Run(info); |
+ } |
+ |
+ void Connect(int sink_id, |
+ const DisplaySourceAuthInfo& auth_info, |
+ const base::Closure& connected_callback, |
+ const FailureCallback& failure_callback) override {} |
+ |
+ void Disconnect(const base::Closure& disconnected_callback, |
+ const FailureCallback& failure_callback) override {} |
+ |
+ void StartWatchingSinks() override { |
+ AddSink(CreateSinkInfoPtr(2, "sink 2", SINK_STATE_DISCONNECTED)); |
+ } |
+ |
+ void StopWatchingSinks() override {} |
+ |
+ private: |
+ void AddSink(DisplaySourceSinkInfoPtr sink) { |
+ sinks_.push_back(sink); |
+ FOR_EACH_OBSERVER(DisplaySourceConnectionDelegate::Observer, observers_, |
+ OnSinksUpdated(sinks_)); |
+ } |
+ |
+ DisplaySourceSinkInfoList sinks_; |
+}; |
+ |
+class DisplaySourceApiTest : public ShellApiTest { |
+ public: |
+ DisplaySourceApiTest() = default; |
+ |
+ private: |
+ static scoped_ptr<KeyedService> CreateMockDelegate( |
+ content::BrowserContext* profile) { |
+ return make_scoped_ptr<KeyedService>( |
+ new MockDisplaySourceConnectionDelegate()); |
+ } |
+ |
+ void SetUpOnMainThread() override { |
+ ShellApiTest::SetUpOnMainThread(); |
+ DisplaySourceConnectionDelegateFactory::GetInstance()->SetTestingFactory( |
+ browser_context(), &CreateMockDelegate); |
+ content::RunAllPendingInMessageLoop(); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(DisplaySourceApiTest, DisplaySourceExtension) { |
+ ASSERT_TRUE(RunAppTest("api_test/display_source/api")) << message_; |
+} |
+ |
+} // namespace extensions |