Files
brave-core/browser/extensions/api/ftx_api.cc
T
Mario Sanchez Prada 86ea5a4a01 Use ExtensionFunction::args() instead of accessing its private members
Chromium change:

https://source.chromium.org/chromium/chromium/src/+/a6dba25659702847866ae636d6e334cb4096c4dc

commit a6dba25659702847866ae636d6e334cb4096c4dc
Author: Alex Turner <alexmt@chromium.org>
Date:   Wed Aug 18 01:29:05 2021 +0000

    Move args_ to private in ExtensionFunction

    Following the change in crrev.com/c/3066527, ExtensionFunction now
    provides the protected methods has_args() and args(). We can therefore
    now make args_ private. This requires converting a large number of
    `Params::Create(*args_)` calls to `Params::Create(args())`.

    Bug: 1187062
2021-10-05 16:19:51 -04:00

278 lines
8.8 KiB
C++

// Copyright (c) 2021 The Brave Authors. All rights reserved.
// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this file,
// you can obtain one at http://mozilla.org/MPL/2.0/.
#include "brave/browser/extensions/api/ftx_api.h"
#include <memory>
#include <string>
#include <utility>
#include "brave/browser/ftx/ftx_service_factory.h"
#include "brave/browser/profiles/profile_util.h"
#include "brave/common/extensions/api/ftx.h"
#include "brave/components/ftx/browser/ftx_service.h"
#include "brave/components/ftx/browser/regions.h"
#include "brave/components/ftx/common/pref_names.h"
#include "brave/components/ntp_widget_utils/browser/ntp_widget_utils_region.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/extension_tab_util.h"
#include "chrome/browser/profiles/profile.h"
#include "components/prefs/pref_service.h"
#include "extensions/browser/extension_util.h"
#include "extensions/common/constants.h"
namespace {
FTXService* GetFTXService(content::BrowserContext* context) {
return FTXServiceFactory::GetInstance()->GetForProfile(
Profile::FromBrowserContext(context));
}
} // namespace
namespace extensions {
namespace api {
ExtensionFunction::ResponseAction FtxGetFuturesDataFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
bool data_request = service->GetFuturesData(
base::BindOnce(&FtxGetFuturesDataFunction::OnFuturesData, this));
if (!data_request) {
return RespondNow(Error("Could not make request for futures data"));
}
return RespondLater();
}
void FtxGetFuturesDataFunction::OnFuturesData(const FTXFuturesData& data) {
base::ListValue result;
for (const TokenPriceData& currency : data) {
auto point = std::make_unique<base::Value>(base::Value::Type::DICTIONARY);
point->SetStringKey("symbol", currency.symbol);
point->SetDoubleKey("price", currency.price);
point->SetDoubleKey("percentChangeDay", currency.percentChangeDay);
point->SetDoubleKey("volumeDay", currency.volumeDay);
result.Append(std::move(point));
}
Respond(OneArgument(std::move(result)));
}
ExtensionFunction::ResponseAction FtxGetChartDataFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
std::unique_ptr<ftx::GetChartData::Params> params(
ftx::GetChartData::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
bool data_request = service->GetChartData(
params->symbol, params->start, params->end,
base::BindOnce(&FtxGetChartDataFunction::OnChartData, this));
if (!data_request) {
return RespondNow(Error("Could not make request for chart data"));
}
return RespondLater();
}
void FtxGetChartDataFunction::OnChartData(const FTXChartData& data) {
base::ListValue result;
for (const auto& data_point : data) {
auto point = std::make_unique<base::Value>(base::Value::Type::DICTIONARY);
for (const auto& att : data_point) {
point->SetDoubleKey(att.first, att.second);
}
result.Append(std::move(point));
}
Respond(OneArgument(std::move(result)));
}
ExtensionFunction::ResponseAction FtxSetOauthHostFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
std::unique_ptr<ftx::SetOauthHost::Params> params(
ftx::SetOauthHost::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
if (params->host != "ftx.us" && params->host != "ftx.com") {
return RespondNow(NoArguments());
}
Profile* profile = Profile::FromBrowserContext(browser_context());
profile->GetPrefs()->SetString(kFTXOauthHost, params->host);
return RespondNow(NoArguments());
}
ExtensionFunction::ResponseAction FtxGetOauthHostFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
Profile* profile = Profile::FromBrowserContext(browser_context());
const std::string host = profile->GetPrefs()->GetString(kFTXOauthHost);
return RespondNow(OneArgument(base::Value(host)));
}
ExtensionFunction::ResponseAction FtxGetClientUrlFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
const std::string client_url = service->GetOAuthClientUrl();
return RespondNow(OneArgument(base::Value(client_url)));
}
ExtensionFunction::ResponseAction FtxDisconnectFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
service->ClearAuth();
return RespondNow(NoArguments());
}
ExtensionFunction::ResponseAction FtxGetAccountBalancesFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
bool balance_success = service->GetAccountBalances(base::BindOnce(
&FtxGetAccountBalancesFunction::OnGetAccountBalances, this));
if (!balance_success) {
return RespondNow(Error("Could not send request to get balance"));
}
return RespondLater();
}
void FtxGetAccountBalancesFunction::OnGetAccountBalances(
const FTXAccountBalances& balances,
bool auth_invalid) {
base::Value result(base::Value::Type::DICTIONARY);
for (const auto& balance : balances) {
result.SetDoubleKey(balance.first, balance.second);
}
Respond(TwoArguments(std::move(result), base::Value(auth_invalid)));
}
ExtensionFunction::ResponseAction FtxIsSupportedFunction::Run() {
Profile* profile = Profile::FromBrowserContext(browser_context());
bool is_supported = ntp_widget_utils::IsRegionSupported(
profile->GetPrefs(), ::ftx::unsupported_regions, false);
return RespondNow(OneArgument(base::Value(is_supported)));
}
ExtensionFunction::ResponseAction FtxGetConvertQuoteFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
std::unique_ptr<ftx::GetConvertQuote::Params> params(
ftx::GetConvertQuote::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
bool data_request = service->GetConvertQuote(
params->from, params->to, params->amount,
base::BindOnce(&FtxGetConvertQuoteFunction::OnConvertQuote, this));
if (!data_request) {
return RespondNow(Error("Could not make request for convert quote"));
}
return RespondLater();
}
void FtxGetConvertQuoteFunction::OnConvertQuote(const std::string& quote_id) {
Respond(OneArgument(base::Value(quote_id)));
}
ExtensionFunction::ResponseAction FtxGetConvertQuoteInfoFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
std::unique_ptr<ftx::GetConvertQuoteInfo::Params> params(
ftx::GetConvertQuoteInfo::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
bool data_request = service->GetConvertQuoteInfo(
params->quote_id,
base::BindOnce(
&FtxGetConvertQuoteInfoFunction::OnConvertQuoteInfo, this));
if (!data_request) {
return RespondNow(Error("Could not make request for convert quote info"));
}
return RespondLater();
}
void FtxGetConvertQuoteInfoFunction::OnConvertQuoteInfo(const std::string& cost,
const std::string& price,
const std::string& proceeds) {
base::Value quote(base::Value::Type::DICTIONARY);
quote.SetStringKey("cost", cost);
quote.SetStringKey("price", price);
quote.SetStringKey("proceeds", proceeds);
Respond(OneArgument(std::move(quote)));
}
ExtensionFunction::ResponseAction FtxExecuteConvertQuoteFunction::Run() {
auto* service = GetFTXService(browser_context());
if (!service) {
return RespondNow(Error("Not available in Tor/incognito/guest profile"));
}
std::unique_ptr<ftx::ExecuteConvertQuote::Params> params(
ftx::ExecuteConvertQuote::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
bool data_request = service->ExecuteConvertQuote(
params->quote_id,
base::BindOnce(
&FtxExecuteConvertQuoteFunction::OnExecuteConvertQuote, this));
if (!data_request) {
return RespondNow(Error("Could not make request to execute quote"));
}
return RespondLater();
}
void FtxExecuteConvertQuoteFunction::OnExecuteConvertQuote(bool success) {
Respond(OneArgument(base::Value(success)));
}
} // namespace api
} // namespace extensions