| // Copyright (c) 2011 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. |
| |
| #ifndef CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_ |
| #define CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/threading/thread.h" |
| #include "printing/backend/print_backend.h" |
| |
| class CloudPrintProxyService; |
| class GURL; |
| |
| namespace base { |
| class DictionaryValue; |
| } |
| |
| namespace gaia { |
| struct OAuthClientInfo; |
| } |
| |
| // CloudPrintProxyFrontend is the interface used by CloudPrintProxyBackend to |
| // communicate with the entity that created it and, presumably, is interested in |
| // cloud print proxy related activity. |
| // NOTE: All methods will be invoked by a CloudPrintProxyBackend on the same |
| // thread used to create that CloudPrintProxyBackend. |
| class CloudPrintProxyFrontend { |
| public: |
| CloudPrintProxyFrontend() {} |
| |
| // There is a list of printers available that can be registered. |
| virtual void OnPrinterListAvailable( |
| const printing::PrinterList& printer_list) = 0; |
| // We successfully authenticated with the cloud print server. This callback |
| // allows the frontend to persist the tokens. |
| virtual void OnAuthenticated(const std::string& robot_oauth_refresh_token, |
| const std::string& robot_email, |
| const std::string& user_email) = 0; |
| // We have invalid/expired credentials. |
| virtual void OnAuthenticationFailed() = 0; |
| // The print system could not be initialized. |
| virtual void OnPrintSystemUnavailable() = 0; |
| |
| protected: |
| // Don't delete through SyncFrontend interface. |
| virtual ~CloudPrintProxyFrontend() { |
| } |
| private: |
| DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyFrontend); |
| }; |
| |
| class CloudPrintProxyBackend { |
| public: |
| // It is OK for print_system_settings to be NULL. In this case system should |
| // use system default settings. |
| CloudPrintProxyBackend( |
| CloudPrintProxyFrontend* frontend, |
| const GURL& cloud_print_server_url, |
| const base::DictionaryValue* print_sys_settings, |
| const gaia::OAuthClientInfo& oauth_client_info, |
| bool enable_job_poll); |
| ~CloudPrintProxyBackend(); |
| |
| // Called when the user enables Google Cloud Print. |
| // |last_robot_refresh_token|, |last_robot_email| and |last_user_email| are |
| // the previously persisted credentials if any. We will use this is the passed |
| // in LSID belongs to the same user as |last_user_email|. |
| bool InitializeWithLsid(const std::string& lsid, |
| const std::string& proxy_id, |
| const std::string& last_robot_refresh_token, |
| const std::string& last_robot_email, |
| const std::string& last_user_email); |
| // Legacy mechanism when we have saved user credentials but no saved robot |
| // credentials. |
| bool InitializeWithToken(const std::string& cloud_print_token, |
| const std::string& proxy_id); |
| // Called when we have saved robot credentials. |
| bool InitializeWithRobotToken(const std::string& robot_oauth_refresh_token, |
| const std::string& robot_email, |
| const std::string& proxy_id); |
| // Called when an external entity passed in the auth code for the robot. |
| bool InitializeWithRobotAuthCode(const std::string& robot_oauth_auth_code, |
| const std::string& robot_email, |
| const std::string& proxy_id); |
| void Shutdown(); |
| void RegisterPrinters(const printing::PrinterList& printer_list); |
| |
| private: |
| // The real guts of SyncBackendHost, to keep the public client API clean. |
| class Core; |
| // A thread we dedicate for use to perform initialization and |
| // authentication. |
| base::Thread core_thread_; |
| // Our core, which communicates with AuthWatcher for GAIA authentication and |
| // which contains printer registration code. |
| scoped_refptr<Core> core_; |
| // A reference to the MessageLoop used to construct |this|, so we know how |
| // to safely talk back to the SyncFrontend. |
| MessageLoop* const frontend_loop_; |
| // The frontend which is responsible for displaying UI and updating Prefs |
| CloudPrintProxyFrontend* frontend_; |
| |
| friend class base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>; |
| |
| DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyBackend); |
| }; |
| |
| #endif // CHROME_SERVICE_CLOUD_PRINT_CLOUD_PRINT_PROXY_BACKEND_H_ |