Files
brave-core/browser/extensions/api/gemini_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

242 lines
7.3 KiB
C++

/* Copyright (c) 2020 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/gemini_api.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "brave/common/extensions/api/gemini.h"
#include "brave/browser/gemini/gemini_service_factory.h"
#include "brave/components/ntp_widget_utils/browser/ntp_widget_utils_region.h"
#include "brave/components/gemini/browser/gemini_service.h"
#include "brave/components/gemini/browser/regions.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 "extensions/browser/extension_util.h"
#include "extensions/common/constants.h"
namespace {
GeminiService* GetGeminiService(content::BrowserContext* context) {
return GeminiServiceFactory::GetInstance()
->GetForProfile(Profile::FromBrowserContext(context));
}
} // namespace
namespace extensions {
namespace api {
ExtensionFunction::ResponseAction
GeminiGetClientUrlFunction::Run() {
auto* service = GetGeminiService(browser_context());
const std::string client_url = service->GetOAuthClientUrl();
return RespondNow(OneArgument(base::Value(client_url)));
}
ExtensionFunction::ResponseAction
GeminiGetAccessTokenFunction::Run() {
auto* service = GetGeminiService(browser_context());
bool token_request = service->GetAccessToken(base::BindOnce(
&GeminiGetAccessTokenFunction::OnCodeResult, this));
if (!token_request) {
return RespondNow(
Error("Could not make request for access tokens"));
}
return RespondLater();
}
void GeminiGetAccessTokenFunction::OnCodeResult(bool success) {
Respond(OneArgument(base::Value(success)));
}
ExtensionFunction::ResponseAction
GeminiRefreshAccessTokenFunction::Run() {
auto* service = GetGeminiService(browser_context());
bool token_request = service->RefreshAccessToken(base::BindOnce(
&GeminiRefreshAccessTokenFunction::OnRefreshResult, this));
if (!token_request) {
return RespondNow(
Error("Could not make request to refresh access tokens"));
}
return RespondLater();
}
void GeminiRefreshAccessTokenFunction::OnRefreshResult(bool success) {
Respond(OneArgument(base::Value(success)));
}
ExtensionFunction::ResponseAction
GeminiGetTickerPriceFunction::Run() {
std::unique_ptr<gemini::GetTickerPrice::Params> params(
gemini::GetTickerPrice::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
auto* service = GetGeminiService(browser_context());
bool price_request = service->GetTickerPrice(
params->asset,
base::BindOnce(
&GeminiGetTickerPriceFunction::OnPriceResult, this));
if (!price_request) {
return RespondNow(
Error("Could not make request for price"));
}
return RespondLater();
}
void GeminiGetTickerPriceFunction::OnPriceResult(
const std::string& price) {
Respond(OneArgument(base::Value(price)));
}
ExtensionFunction::ResponseAction
GeminiGetAccountBalancesFunction::Run() {
auto* service = GetGeminiService(browser_context());
bool balance_success = service->GetAccountBalances(
base::BindOnce(
&GeminiGetAccountBalancesFunction::OnGetAccountBalances,
this));
if (!balance_success) {
return RespondNow(Error("Could not send request to get balance"));
}
return RespondLater();
}
void GeminiGetAccountBalancesFunction::OnGetAccountBalances(
const GeminiAccountBalances& balances,
bool auth_invalid) {
base::Value result(base::Value::Type::DICTIONARY);
for (const auto& balance : balances) {
result.SetStringKey(balance.first, balance.second);
}
Respond(TwoArguments(std::move(result), base::Value(auth_invalid)));
}
ExtensionFunction::ResponseAction
GeminiGetDepositInfoFunction::Run() {
std::unique_ptr<gemini::GetDepositInfo::Params> params(
gemini::GetDepositInfo::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
auto* service = GetGeminiService(browser_context());
bool info_request = service->GetDepositInfo(params->asset,
base::BindOnce(
&GeminiGetDepositInfoFunction::OnGetDepositInfo, this));
if (!info_request) {
return RespondNow(
Error("Could not make request for deposit information."));
}
return RespondLater();
}
void GeminiGetDepositInfoFunction::OnGetDepositInfo(
const std::string& deposit_address) {
Respond(OneArgument(base::Value(deposit_address)));
}
ExtensionFunction::ResponseAction
GeminiRevokeTokenFunction::Run() {
auto* service = GetGeminiService(browser_context());
bool request = service->RevokeAccessToken(base::BindOnce(
&GeminiRevokeTokenFunction::OnRevokeToken, this));
if (!request) {
return RespondNow(
Error("Could not revoke gemini access tokens"));
}
return RespondLater();
}
void GeminiRevokeTokenFunction::OnRevokeToken(bool success) {
Respond(OneArgument(base::Value(success)));
}
ExtensionFunction::ResponseAction
GeminiGetOrderQuoteFunction::Run() {
std::unique_ptr<gemini::GetOrderQuote::Params> params(
gemini::GetOrderQuote::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
auto* service = GetGeminiService(browser_context());
bool quote_request = service->GetOrderQuote(
params->side, params->symbol, params->spend,
base::BindOnce(
&GeminiGetOrderQuoteFunction::OnOrderQuoteResult, this));
if (!quote_request) {
return RespondNow(
Error("Could not make request for quote"));
}
return RespondLater();
}
void GeminiGetOrderQuoteFunction::OnOrderQuoteResult(
const std::string& quote_id, const std::string& quantity,
const std::string& fee, const std::string& price,
const std::string& total_price, const std::string& error) {
base::Value quote(base::Value::Type::DICTIONARY);
quote.SetStringKey("id", quote_id);
quote.SetStringKey("quantity", quantity);
quote.SetStringKey("fee", fee);
quote.SetStringKey("price", price);
quote.SetStringKey("totalPrice", total_price);
Respond(TwoArguments(std::move(quote), base::Value(error)));
}
ExtensionFunction::ResponseAction
GeminiExecuteOrderFunction::Run() {
std::unique_ptr<gemini::ExecuteOrder::Params> params(
gemini::ExecuteOrder::Params::Create(args()));
EXTENSION_FUNCTION_VALIDATE(params.get());
auto* service = GetGeminiService(browser_context());
bool balance_success = service->ExecuteOrder(
params->symbol, params->side, params->quantity,
params->price, params->fee, params->quote_id,
base::BindOnce(
&GeminiExecuteOrderFunction::OnOrderExecuted,
this));
if (!balance_success) {
return RespondNow(Error("Could not send request to execute order"));
}
return RespondLater();
}
void GeminiExecuteOrderFunction::OnOrderExecuted(bool success) {
Respond(OneArgument(base::Value(success)));
}
ExtensionFunction::ResponseAction
GeminiIsSupportedFunction::Run() {
Profile* profile = Profile::FromBrowserContext(browser_context());
bool is_supported = ntp_widget_utils::IsRegionSupported(
profile->GetPrefs(), ::gemini::supported_regions, true);
return RespondNow(OneArgument(base::Value(is_supported)));
}
} // namespace api
} // namespace extensions