- add sources.
[platform/framework/web/crosswalk.git] / src / remoting / host / win / elevated_controller.h
1 // Copyright (c) 2012 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_WIN_ELEVATED_CONTROLLER_H_
6 #define REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_
7
8 #include <atlbase.h>
9 #include <atlcom.h>
10 #include <atlctl.h>
11
12 #include "remoting/base/scoped_sc_handle_win.h"
13
14 // chromoting_lib.h contains MIDL-generated declarations.
15 #include "remoting/host/chromoting_lib.h"
16
17 namespace remoting {
18
19 class __declspec(uuid(DAEMON_CONTROLLER_CLSID)) ElevatedController
20     : public ATL::CComObjectRootEx<ATL::CComSingleThreadModel>,
21       public ATL::CComCoClass<ElevatedController,
22                               &__uuidof(ElevatedController)>,
23       public ATL::IDispatchImpl<IDaemonControl2, &IID_IDaemonControl2,
24                                 &LIBID_ChromotingLib, 1, 0> {
25  public:
26   // Declare a class factory which must not lock the ATL module. This is the
27   // same as DECLARE_CLASSFACTORY() with the exception that
28   // ATL::CComObjectNoLock is used unconditionally.
29   //
30   // By default ATL generates locking class factories (by wrapping them in
31   // ATL::CComObjectCached) for classes hosted in a DLL. This class is compiled
32   // into a DLL but it is registered as an out-of-process class, so its class
33   // factory should not use locking.
34   typedef ATL::CComCreator<ATL::CComObjectNoLock<ATL::CComClassFactory> >
35       _ClassFactoryCreatorClass;
36
37   ElevatedController();
38
39   HRESULT FinalConstruct();
40   void FinalRelease();
41
42   // IDaemonControl implementation.
43   STDMETHOD(GetConfig)(BSTR* config_out);
44   STDMETHOD(GetVersion)(BSTR* version_out);
45   STDMETHOD(SetConfig)(BSTR config);
46   STDMETHOD(SetOwnerWindow)(LONG_PTR owner_window);
47   STDMETHOD(StartDaemon)();
48   STDMETHOD(StopDaemon)();
49   STDMETHOD(UpdateConfig)(BSTR config);
50
51   // IDaemonControl2 implementation.
52   STDMETHOD(GetUsageStatsConsent)(BOOL* allowed, BOOL* set_by_policy);
53   STDMETHOD(SetUsageStatsConsent)(BOOL allowed);
54
55   DECLARE_NO_REGISTRY()
56
57  private:
58   HRESULT OpenService(ScopedScHandle* service_out);
59
60   BEGIN_COM_MAP(ElevatedController)
61     COM_INTERFACE_ENTRY(IDaemonControl)
62     COM_INTERFACE_ENTRY(IDaemonControl2)
63     COM_INTERFACE_ENTRY(IDispatch)
64   END_COM_MAP()
65
66   // Handle of the owner window (if any) for any UI to be shown.
67   HWND owner_window_;
68
69   DECLARE_PROTECT_FINAL_CONSTRUCT()
70 };
71
72 } // namespace remoting
73
74 #endif  // REMOTING_HOST_WIN_ELEVATED_CONTROLLER_H_