Disable view source for Developer Tools.
[chromium-blink-merge.git] / chrome / installer / util / app_command.cc
blob8f54e728741d821c63ebdab5583bc15c88f55ae6
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.
5 #include "chrome/installer/util/app_command.h"
7 #include "base/logging.h"
8 #include "base/win/registry.h"
9 #include "chrome/installer/util/google_update_constants.h"
10 #include "chrome/installer/util/work_item_list.h"
12 namespace installer {
14 // static
15 // Associate bool member variables with registry entries.
16 const AppCommand::NamedBoolVar AppCommand::kNameBoolVars[] = {
17 {&AppCommand::sends_pings_,
18 google_update::kRegSendsPingsField},
19 {&AppCommand::is_web_accessible_,
20 google_update::kRegWebAccessibleField},
21 {&AppCommand::is_auto_run_on_os_upgrade_,
22 google_update::kRegAutoRunOnOSUpgradeField},
23 {&AppCommand::is_run_as_user_,
24 google_update::kRegRunAsUserField},
27 AppCommand::AppCommand()
28 : sends_pings_(false),
29 is_web_accessible_(false),
30 is_auto_run_on_os_upgrade_(false),
31 is_run_as_user_(false) {
34 AppCommand::AppCommand(const base::string16& command_line)
35 : command_line_(command_line),
36 sends_pings_(false),
37 is_web_accessible_(false),
38 is_auto_run_on_os_upgrade_(false),
39 is_run_as_user_(false) {
42 bool AppCommand::Initialize(const base::win::RegKey& key) {
43 if (!key.Valid()) {
44 LOG(DFATAL) << "Cannot initialize an AppCommand from an invalid key.";
45 return false;
48 LONG result = ERROR_SUCCESS;
49 base::string16 cmd_line;
51 result = key.ReadValue(google_update::kRegCommandLineField, &cmd_line);
52 if (result != ERROR_SUCCESS) {
53 LOG(WARNING) << "Error reading " << google_update::kRegCommandLineField
54 << " value from registry: " << result;
55 return false;
58 command_line_.swap(cmd_line);
60 for (int i = 0; i < arraysize(kNameBoolVars); ++i) {
61 DWORD value = 0; // Set default to false.
62 // Note: ReadValueDW only modifies out param on success.
63 key.ReadValueDW(kNameBoolVars[i].name, &value);
64 this->*(kNameBoolVars[i].data) = (value != 0);
67 return true;
70 void AppCommand::AddWorkItems(HKEY predefined_root,
71 const base::string16& command_path,
72 WorkItemList* item_list) const {
73 item_list->AddCreateRegKeyWorkItem(predefined_root, command_path)
74 ->set_log_message("creating AppCommand registry key");
75 item_list->AddSetRegValueWorkItem(predefined_root, command_path,
76 google_update::kRegCommandLineField,
77 command_line_, true)
78 ->set_log_message("setting AppCommand CommandLine registry value");
80 for (int i = 0; i < arraysize(kNameBoolVars); ++i) {
81 const wchar_t* var_name = kNameBoolVars[i].name;
82 bool var_data = this->*(kNameBoolVars[i].data);
84 // Adds a work item to set |var_name| to DWORD 1 if |var_data| is true;
85 // adds a work item to remove |var_name| otherwise.
86 if (var_data) {
87 item_list->AddSetRegValueWorkItem(predefined_root,
88 command_path,
89 var_name,
90 static_cast<DWORD>(1),
91 true);
92 } else {
93 item_list->AddDeleteRegValueWorkItem(predefined_root,
94 command_path,
95 var_name);
100 } // namespace installer