15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/sequenced_worker_pool.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_proxy_service_factory.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/extensions/api/cloud_print_private.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/google_api_keys.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPrintTestsDelegate* CloudPrintTestsDelegate::instance_ = NULL;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPrintTestsDelegate* CloudPrintTestsDelegate::instance() {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return instance_;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPrintTestsDelegate::CloudPrintTestsDelegate() {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  instance_ = this;
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CloudPrintTestsDelegate::~CloudPrintTestsDelegate() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  instance_ = NULL;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateSetupConnectorFunction::
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CloudPrintPrivateSetupConnectorFunction() {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateSetupConnectorFunction::
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ~CloudPrintPrivateSetupConnectorFunction() {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CloudPrintPrivateSetupConnectorFunction::RunImpl() {
42c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  using api::cloud_print_private::SetupConnector::Params;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_ptr<Params> params(Params::Create(*args_));
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (CloudPrintTestsDelegate::instance()) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    CloudPrintTestsDelegate::instance()->SetupConnector(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        params->user_email,
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        params->robot_email,
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        params->credentials,
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        params->user_settings);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
521e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    if (!CloudPrintProxyServiceFactory::GetForProfile(GetProfile()))
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return false;
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    scoped_ptr<base::DictionaryValue> user_setings(
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        params->user_settings.ToValue());
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    CloudPrintProxyServiceFactory::GetForProfile(GetProfile())
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)        ->EnableForUserWithRobot(params->credentials,
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                 params->robot_email,
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                 params->user_email,
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)                                 *user_setings);
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SendResponse(true);
63c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetHostNameFunction::CloudPrintPrivateGetHostNameFunction() {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetHostNameFunction::~CloudPrintPrivateGetHostNameFunction() {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CloudPrintPrivateGetHostNameFunction::RunImpl() {
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SetResult(new base::StringValue(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CloudPrintTestsDelegate::instance() ?
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CloudPrintTestsDelegate::instance()->GetHostName() :
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net::GetHostName()));
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SendResponse(true);
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetPrintersFunction::CloudPrintPrivateGetPrintersFunction() {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetPrintersFunction::~CloudPrintPrivateGetPrintersFunction() {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void CloudPrintPrivateGetPrintersFunction::CollectPrinters() {
89c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#if defined(ENABLE_FULL_PRINTING)
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::vector<std::string> result;
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (CloudPrintTestsDelegate::instance()) {
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    result = CloudPrintTestsDelegate::instance()->GetPrinters();
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    CloudPrintProxyService::GetPrintersAvalibleForRegistration(&result);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  results_ = api::cloud_print_private::GetPrinters::Results::Create(result);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&CloudPrintPrivateGetPrintersFunction::SendResponse,
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                 this, true));
100c2db58bd994c04d98e4ee2cd7565b71548655fe3Ben Murdoch#endif
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CloudPrintPrivateGetPrintersFunction::RunImpl() {
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  content::BrowserThread::GetBlockingPool()->PostTask(FROM_HERE,
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::Bind(&CloudPrintPrivateGetPrintersFunction::CollectPrinters, this));
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return true;
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetClientIdFunction::CloudPrintPrivateGetClientIdFunction() {
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)CloudPrintPrivateGetClientIdFunction::~CloudPrintPrivateGetClientIdFunction() {
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool CloudPrintPrivateGetClientIdFunction::RunImpl() {
1183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  SetResult(new base::StringValue(
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CloudPrintTestsDelegate::instance() ?
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      CloudPrintTestsDelegate::instance()->GetClientId() :
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      google_apis::GetOAuth2ClientID(google_apis::CLIENT_CLOUD_PRINT)));
1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SendResponse(true);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
127