1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_
6#define CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_
7#pragma once
8
9#include <string>
10
11#include "base/basictypes.h"
12#include "base/memory/ref_counted.h"
13#include "base/observer_list.h"
14#include "chrome/browser/printing/cloud_print/cloud_print_setup_handler.h"
15
16class Profile;
17
18// Layer between the browser user interface and the cloud print proxy code
19// running in the service process.
20class CloudPrintProxyService
21    : public CloudPrintSetupHandlerDelegate,
22      public base::RefCountedThreadSafe<CloudPrintProxyService> {
23 public:
24  explicit CloudPrintProxyService(Profile* profile);
25  virtual ~CloudPrintProxyService();
26
27  // Initializes the object. This should be called every time an object of this
28  // class is constructed.
29  void Initialize();
30
31  // Enables/disables cloud printing for the user
32  virtual void EnableForUser(const std::string& lsid, const std::string& email);
33  virtual void DisableForUser();
34
35  // Query the service process for the status of the cloud print proxy and
36  // update the browser prefs.
37  void RefreshStatusFromService();
38
39  bool ShowTokenExpiredNotification();
40
41  // CloudPrintSetupHandler::Delegate implementation.
42  virtual void OnCloudPrintSetupClosed();
43
44 private:
45  // NotificationDelegate implementation for the token expired notification.
46  class TokenExpiredNotificationDelegate;
47  friend class TokenExpiredNotificationDelegate;
48
49  Profile* profile_;
50  scoped_refptr<TokenExpiredNotificationDelegate> token_expired_delegate_;
51  scoped_ptr<CloudPrintSetupHandler> cloud_print_setup_handler_;
52
53  // Methods that send an IPC to the service.
54  void RefreshCloudPrintProxyStatus();
55  void EnableCloudPrintProxy(const std::string& lsid, const std::string& email);
56  void DisableCloudPrintProxy();
57
58  // Callback that gets the cloud print proxy status.
59  void StatusCallback(bool enabled, std::string email);
60  // Invoke a task that gets run after the service process successfully
61  // launches. The task typically involves sending an IPC to the service
62  // process.
63  bool InvokeServiceTask(Task* task);
64
65  void OnTokenExpiredNotificationError();
66  void OnTokenExpiredNotificationClosed(bool by_user);
67  void OnTokenExpiredNotificationClick();
68  void TokenExpiredNotificationDone(bool keep_alive);
69
70  DISALLOW_COPY_AND_ASSIGN(CloudPrintProxyService);
71};
72
73#endif  // CHROME_BROWSER_PRINTING_CLOUD_PRINT_CLOUD_PRINT_PROXY_SERVICE_H_
74