1// Copyright 2013 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 REMOTING_HOST_SETUP_DAEMON_CONTROLLER_DELEGATE_MAC_H_
6#define REMOTING_HOST_SETUP_DAEMON_CONTROLLER_DELEGATE_MAC_H_
7
8#include "base/memory/ref_counted.h"
9#include "base/memory/scoped_ptr.h"
10#include "remoting/host/setup/daemon_controller.h"
11
12namespace remoting {
13
14class DaemonControllerDelegateMac : public DaemonController::Delegate {
15 public:
16  DaemonControllerDelegateMac();
17  virtual ~DaemonControllerDelegateMac();
18
19  // DaemonController::Delegate interface.
20  virtual DaemonController::State GetState() OVERRIDE;
21  virtual scoped_ptr<base::DictionaryValue> GetConfig() OVERRIDE;
22  virtual void SetConfigAndStart(
23      scoped_ptr<base::DictionaryValue> config,
24      bool consent,
25      const DaemonController::CompletionCallback& done) OVERRIDE;
26  virtual void UpdateConfig(
27      scoped_ptr<base::DictionaryValue> config,
28      const DaemonController::CompletionCallback& done) OVERRIDE;
29  virtual void Stop(const DaemonController::CompletionCallback& done) OVERRIDE;
30  virtual void SetWindow(void* window_handle) OVERRIDE;
31  virtual std::string GetVersion() OVERRIDE;
32  virtual DaemonController::UsageStatsConsent GetUsageStatsConsent() OVERRIDE;
33
34 private:
35  void ShowPreferencePane(const std::string& config_data,
36                          const DaemonController::CompletionCallback& done);
37  void RegisterForPreferencePaneNotifications(
38      const DaemonController::CompletionCallback &done);
39  void DeregisterForPreferencePaneNotifications();
40  void PreferencePaneCallbackDelegate(CFStringRef name);
41
42  static bool DoShowPreferencePane(const std::string& config_data);
43  static void PreferencePaneCallback(CFNotificationCenterRef center,
44                                     void* observer,
45                                     CFStringRef name,
46                                     const void* object,
47                                     CFDictionaryRef user_info);
48
49  DaemonController::CompletionCallback current_callback_;
50
51  DISALLOW_COPY_AND_ASSIGN(DaemonControllerDelegateMac);
52};
53
54}  // namespace remoting
55
56#endif  // REMOTING_HOST_SETUP_DAEMON_CONTROLLER_DELEGATE_MAC_H_
57