| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/installer/mini_installer/configuration.h" |
| |
| #include <windows.h> |
| #include <shellapi.h> // NOLINT |
| |
| #include "chrome/installer/mini_installer/appid.h" |
| |
| namespace mini_installer { |
| |
| Configuration::Configuration() : args_(NULL) { |
| Clear(); |
| } |
| |
| Configuration::~Configuration() { |
| Clear(); |
| } |
| |
| const wchar_t* Configuration::program() const { |
| return args_ == NULL || argument_count_ < 1 ? NULL : args_[0]; |
| } |
| |
| void Configuration::Clear() { |
| if (args_ != NULL) { |
| ::LocalFree(args_); |
| args_ = NULL; |
| } |
| chrome_app_guid_ = google_update::kAppGuid; |
| command_line_ = NULL; |
| operation_ = INSTALL_PRODUCT; |
| argument_count_ = 0; |
| has_chrome_ = false; |
| has_chrome_frame_ = false; |
| has_app_host_ = false; |
| is_multi_install_ = false; |
| is_system_level_ = false; |
| query_component_build_ = false; |
| } |
| |
| bool Configuration::Initialize() { |
| return InitializeFromCommandLine(::GetCommandLine()); |
| } |
| |
| // This is its own function so that unit tests can provide their own command |
| // lines. |command_line| is shared with this instance in the sense that this |
| // instance may refer to it at will throughout its lifetime, yet it will |
| // not release it. |
| bool Configuration::InitializeFromCommandLine(const wchar_t* command_line) { |
| Clear(); |
| |
| command_line_ = command_line; |
| args_ = ::CommandLineToArgvW(command_line_, &argument_count_); |
| if (args_ != NULL) { |
| for (int i = 1; i < argument_count_; ++i) { |
| if (0 == ::lstrcmpi(args_[i], L"--chrome-sxs")) |
| chrome_app_guid_ = google_update::kSxSAppGuid; |
| else if (0 == ::lstrcmpi(args_[i], L"--chrome")) |
| has_chrome_ = true; |
| else if (0 == ::lstrcmpi(args_[i], L"--chrome-frame")) |
| has_chrome_frame_ = true; |
| else if ((0 == ::lstrcmpi(args_[i], L"--app-host")) || |
| (0 == ::lstrcmpi(args_[i], L"--app-launcher"))) |
| has_app_host_ = true; |
| else if (0 == ::lstrcmpi(args_[i], L"--multi-install")) |
| is_multi_install_ = true; |
| else if (0 == ::lstrcmpi(args_[i], L"--system-level")) |
| is_system_level_ = true; |
| else if (0 == ::lstrcmpi(args_[i], L"--cleanup")) |
| operation_ = CLEANUP; |
| else if (0 == ::lstrcmpi(args_[i], L"--query-component-build")) |
| query_component_build_ = true; |
| } |
| |
| // Single-install defaults to Chrome. |
| if (!is_multi_install_) |
| has_chrome_ = !(has_chrome_frame_ || has_app_host_); |
| } |
| return args_ != NULL; |
| } |
| |
| } // namespace mini_installer |