app_command.h revision 7d4cd473f85ac64c3747c96c277f9e506a0d2246
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_INSTALLER_UTIL_APP_COMMAND_H_
6#define CHROME_INSTALLER_UTIL_APP_COMMAND_H_
7
8#include <windows.h>
9
10#include "base/strings/string16.h"
11
12class WorkItemList;
13
14namespace base {
15namespace win {
16class RegKey;
17}
18}
19
20namespace installer {
21
22// A description of a command registered by setup.exe that can be invoked by
23// Google Update.  This class is CopyConstructible and Assignable for use in
24// STL containers.
25class AppCommand {
26 public:
27  AppCommand();
28  // Constructs a new command that will execute the given |command_line|.
29  // All other properties default to false.
30  explicit AppCommand(const string16& command_line);
31  // The implicit dtor, copy ctor and assignment operator are desired.
32
33  // Initializes an instance from the command in |key|.
34  bool Initialize(const base::win::RegKey& key);
35
36  // Adds to |item_list| work items to write this object to the key named
37  // |command_path| under |predefined_root|.
38  void AddWorkItems(HKEY predefined_root,
39                    const string16& command_path,
40                    WorkItemList* item_list) const;
41
42  // Returns the command-line for the app command as it is represented in the
43  // registry.  Use CommandLine::FromString() on this value to check arguments
44  // or to launch the command.
45  const string16& command_line() const { return command_line_; }
46  void set_command_line(const string16& command_line) {
47    command_line_ = command_line;
48  }
49
50  bool sends_pings() const { return sends_pings_; }
51  void set_sends_pings(bool sends_pings) { sends_pings_ = sends_pings; }
52
53  bool is_web_accessible() const { return is_web_accessible_; }
54  void set_is_web_accessible(bool is_web_accessible) {
55    is_web_accessible_ = is_web_accessible;
56  }
57
58  bool is_auto_run_on_os_upgrade() const { return is_auto_run_on_os_upgrade_; }
59  void set_is_auto_run_on_os_upgrade(bool is_auto_run_on_os_upgrade) {
60    is_auto_run_on_os_upgrade_ = is_auto_run_on_os_upgrade;
61  }
62
63  bool is_run_as_user() const { return is_run_as_user_; }
64  void set_is_run_as_user(bool is_run_as_user) {
65    is_run_as_user_ = is_run_as_user;
66  }
67
68 protected:
69  string16 command_line_;
70  bool sends_pings_;
71  bool is_web_accessible_;
72  bool is_auto_run_on_os_upgrade_;
73  bool is_run_as_user_;
74
75 private:
76  struct NamedBoolVar {
77    bool AppCommand::* data;
78    const wchar_t* name;
79  };
80
81  static const NamedBoolVar kNameBoolVars[];
82};
83
84}  // namespace installer
85
86#endif  // CHROME_INSTALLER_UTIL_APP_COMMAND_H_
87