blob: 9b57e6b6e3b20a9bc3db3b6d60fa72ea7cb4e202 [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 "extensions/browser/api/display_source/display_source_api.h"
#include <utility>
#include "extensions/browser/api/display_source/display_source_connection_delegate_factory.h"
#include "extensions/common/api/display_source.h"
namespace extensions {
namespace {
const char kErrorNotSupported[] = "Not supported";
const char kErrorInvalidArguments[] = "Invalid arguments";
} // namespace
////////////////////////////////////////////////////////////////////////////////
// DisplaySourceGetAvailableSinksFunction
DisplaySourceGetAvailableSinksFunction::
~DisplaySourceGetAvailableSinksFunction() {}
ExtensionFunction::ResponseAction
DisplaySourceGetAvailableSinksFunction::Run() {
DisplaySourceConnectionDelegate* delegate =
DisplaySourceConnectionDelegateFactory::GetForBrowserContext(
browser_context());
if (!delegate) {
return RespondNow(Error(kErrorNotSupported));
}
auto success_callback = base::Bind(
&DisplaySourceGetAvailableSinksFunction::OnGetSinksCompleted, this);
auto failure_callback = base::Bind(
&DisplaySourceGetAvailableSinksFunction::OnGetSinksFailed, this);
delegate->GetAvailableSinks(success_callback, failure_callback);
return RespondLater();
}
void DisplaySourceGetAvailableSinksFunction::OnGetSinksCompleted(
const DisplaySourceSinkInfoList& sinks) {
scoped_ptr<base::ListValue> result =
api::display_source::GetAvailableSinks::Results::Create(sinks);
Respond(ArgumentList(std::move(result)));
}
void DisplaySourceGetAvailableSinksFunction::OnGetSinksFailed(
const std::string& reason) {
Respond(Error(reason));
}
////////////////////////////////////////////////////////////////////////////////
// DisplaySourceRequestAuthenticationFunction
DisplaySourceRequestAuthenticationFunction::
~DisplaySourceRequestAuthenticationFunction() {}
ExtensionFunction::ResponseAction
DisplaySourceRequestAuthenticationFunction::Run() {
scoped_ptr<api::display_source::RequestAuthentication::Params> params(
api::display_source::RequestAuthentication::Params::Create(*args_));
if (!params) {
return RespondNow(Error(kErrorInvalidArguments));
}
DisplaySourceConnectionDelegate* delegate =
DisplaySourceConnectionDelegateFactory::GetForBrowserContext(
browser_context());
if (!delegate) {
return RespondNow(Error(kErrorNotSupported));
}
auto success_callback = base::Bind(
&DisplaySourceRequestAuthenticationFunction::OnRequestAuthCompleted,
this);
auto failure_callback = base::Bind(
&DisplaySourceRequestAuthenticationFunction::OnRequestAuthFailed, this);
delegate->RequestAuthentication(params->sink_id, success_callback,
failure_callback);
return RespondLater();
}
void DisplaySourceRequestAuthenticationFunction::OnRequestAuthCompleted(
const DisplaySourceAuthInfo& auth_info) {
scoped_ptr<base::ListValue> result =
api::display_source::RequestAuthentication::Results::Create(auth_info);
Respond(ArgumentList(std::move(result)));
}
void DisplaySourceRequestAuthenticationFunction::OnRequestAuthFailed(
const std::string& reason) {
Respond(Error(reason));
}
} // namespace extensions