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)#ifndef CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <list> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/non_thread_safe.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/service/cloud_print/cloud_print_proxy_backend.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/service/cloud_print/cloud_print_wipeout.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServiceProcessPrefs; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace cloud_print { 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct CloudPrintProxyInfo; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// CloudPrintProxy is the layer between the service process UI thread 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// and the cloud print proxy backend. 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPrintProxy : public CloudPrintProxyFrontend, 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public CloudPrintWipeout::Client, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::NonThreadSafe { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Client { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Client() {} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCloudPrintProxyEnabled(bool persist_state) {} 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCloudPrintProxyDisabled(bool persist_state) {} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintProxy(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~CloudPrintProxy(); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Initializes the object. This should be called every time an object of this 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // class is constructed. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Initialize(ServiceProcessPrefs* service_prefs, Client* client); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enables/disables cloud printing for the user 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void EnableForUser(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void EnableForUserWithRobot( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& robot_auth_code, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& robot_email, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user_email, 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::DictionaryValue& user_settings); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void UnregisterPrintersAndDisableForUser(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DisableForUser(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the proxy info. 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void GetProxyInfo(CloudPrintProxyInfo* info); 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Return accessible printers. 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void GetPrinters(std::vector<std::string>* printers); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launches a browser to see if the proxy policy has been set. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckCloudPrintProxyPolicy(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user_email() const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return user_email_; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CloudPrintProxyFrontend implementation. Called on UI thread. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAuthenticated(const std::string& robot_oauth_refresh_token, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& robot_email, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& user_email) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnAuthenticationFailed() OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnPrintSystemUnavailable() OVERRIDE; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnUnregisterPrinters( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& auth_token, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::list<std::string>& printer_ids) OVERRIDE; 7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) virtual void OnXmppPingUpdated(int ping_timeout) OVERRIDE; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CloudPrintWipeout::Client implementation. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnUnregisterPrintersComplete() OVERRIDE; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ShutdownBackend(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool CreateBackend(); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Our asynchronous backend to communicate with sync components living on 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // other threads. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CloudPrintProxyBackend> backend_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This class does not own this. It is guaranteed to remain valid for the 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // lifetime of this class. 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ServiceProcessPrefs* service_prefs_; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This class does not own this. If non-NULL, It is guaranteed to remain 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // valid for the lifetime of this class. 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Client* client_; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The email address of the account used to authenticate to the Cloud Print 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // service. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string user_email_; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is set to true when the Cloud Print proxy is enabled and after 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // successful authentication with the Cloud Print service. 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool enabled_; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is a cleanup class for unregistering printers on proxy disable. 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<CloudPrintWipeout> wipeout_; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CloudPrintProxy); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cloud_print 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_H_ 106