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