blob: 9c44868a568695f757b0bf7790303a5df4c8f8da [file] [log] [blame]
// 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