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_DAEMON_INSTALLER_WIN_H_
6#define REMOTING_HOST_DAEMON_INSTALLER_WIN_H_
7
8#include <objbase.h>
9
10#include "base/basictypes.h"
11#include "base/callback.h"
12#include "base/memory/scoped_ptr.h"
13
14namespace remoting {
15
16class DaemonInstallerWin {
17 public:
18  typedef base::Callback<void (HRESULT result)> CompletionCallback;
19
20  virtual ~DaemonInstallerWin();
21
22  // Initiates download and installation of the Chromoting Host.
23  virtual void Install() = 0;
24
25  // Creates an instance of the Chromoting Host installer passing the completion
26  // callback to be called when the installation finishes. In case of an error
27  // returns NULL and passed the error code to |done|.
28  static scoped_ptr<DaemonInstallerWin> Create(HWND window_handle,
29                                               CompletionCallback done);
30
31 protected:
32  DaemonInstallerWin(const CompletionCallback& done);
33
34  // Invokes the completion callback to report the installation result.
35  void Done(HRESULT result);
36
37 private:
38  // The completion callback that should be called to report the installation
39  // result.
40  CompletionCallback done_;
41
42  DISALLOW_COPY_AND_ASSIGN(DaemonInstallerWin);
43};
44
45// Returns the first top-level (i.e. WS_OVERLAPPED or WS_POPUP) window in
46// the chain of parents of |window|. Returns |window| if it represents
47// a top-level window. Returns NULL when |window| is NULL.
48HWND GetTopLevelWindow(HWND window);
49
50}  // namespace remoting
51
52#endif  // REMOTING_HOST_DAEMON_INSTALLER_WIN_H_
53