blob: 9ee429c85620b883ac826f1f4c09f815e17dadf3 [file] [log] [blame]
// Copyright (c) 2012 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 "chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.h"
#include <string>
#include "base/memory/ptr_util.h"
#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
#include "chrome/common/extensions/api/cloud_print_private.h"
#include "google_apis/google_api_keys.h"
#include "net/base/network_interfaces.h"
namespace extensions {
namespace {
#if defined(ENABLE_PRINT_PREVIEW)
const char kErrorIncognito[] = "Cannot access in incognito mode";
#endif
CloudPrintTestsDelegate* g_instance = nullptr;
} // namespace
CloudPrintTestsDelegate* CloudPrintTestsDelegate::Get() {
return g_instance;
}
CloudPrintTestsDelegate::CloudPrintTestsDelegate() {
g_instance = this;
}
CloudPrintTestsDelegate::~CloudPrintTestsDelegate() {
g_instance = nullptr;
}
CloudPrintPrivateSetupConnectorFunction::
CloudPrintPrivateSetupConnectorFunction() {
}
CloudPrintPrivateSetupConnectorFunction::
~CloudPrintPrivateSetupConnectorFunction() {
}
bool CloudPrintPrivateSetupConnectorFunction::RunAsync() {
#if defined(ENABLE_PRINT_PREVIEW)
using api::cloud_print_private::SetupConnector::Params;
std::unique_ptr<Params> params(Params::Create(*args_));
if (CloudPrintTestsDelegate::Get()) {
CloudPrintTestsDelegate::Get()->SetupConnector(
params->user_email, params->robot_email, params->credentials,
params->user_settings);
} else {
std::unique_ptr<base::DictionaryValue> user_settings(
params->user_settings.ToValue());
CloudPrintProxyService* service =
CloudPrintProxyServiceFactory::GetForProfile(GetProfile());
if (!service) {
error_ = kErrorIncognito;
return false;
}
service->EnableForUserWithRobot(params->credentials, params->robot_email,
params->user_email, *user_settings);
}
SendResponse(true);
return true;
#else
return false;
#endif
}
CloudPrintPrivateGetHostNameFunction::CloudPrintPrivateGetHostNameFunction() {
}
CloudPrintPrivateGetHostNameFunction::~CloudPrintPrivateGetHostNameFunction() {
}
bool CloudPrintPrivateGetHostNameFunction::RunAsync() {
SetResult(base::MakeUnique<base::StringValue>(
CloudPrintTestsDelegate::Get()
? CloudPrintTestsDelegate::Get()->GetHostName()
: net::GetHostName()));
SendResponse(true);
return true;
}
CloudPrintPrivateGetPrintersFunction::CloudPrintPrivateGetPrintersFunction() {
}
CloudPrintPrivateGetPrintersFunction::~CloudPrintPrivateGetPrintersFunction() {
}
void CloudPrintPrivateGetPrintersFunction::SendResults(
const std::vector<std::string>& printers) {
results_ = api::cloud_print_private::GetPrinters::Results::Create(printers);
SendResponse(true);
}
bool CloudPrintPrivateGetPrintersFunction::RunAsync() {
#if defined(ENABLE_PRINT_PREVIEW)
if (CloudPrintTestsDelegate::Get()) {
SendResults(CloudPrintTestsDelegate::Get()->GetPrinters());
} else {
CloudPrintProxyService* service =
CloudPrintProxyServiceFactory::GetForProfile(GetProfile());
if (!service) {
error_ = kErrorIncognito;
return false;
}
service->GetPrinters(
base::Bind(&CloudPrintPrivateGetPrintersFunction::SendResults, this));
}
return true;
#else
return false;
#endif
}
CloudPrintPrivateGetClientIdFunction::CloudPrintPrivateGetClientIdFunction() {
}
CloudPrintPrivateGetClientIdFunction::~CloudPrintPrivateGetClientIdFunction() {
}
bool CloudPrintPrivateGetClientIdFunction::RunAsync() {
SetResult(base::MakeUnique<base::StringValue>(
CloudPrintTestsDelegate::Get()
? CloudPrintTestsDelegate::Get()->GetClientId()
: google_apis::GetOAuth2ClientID(google_apis::CLIENT_CLOUD_PRINT)));
SendResponse(true);
return true;
}
} // namespace extensions