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