Home | History | Annotate | Download | only in util
      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_FAKE_INSTALLATION_STATE_H_
      6 #define CHROME_INSTALLER_UTIL_FAKE_INSTALLATION_STATE_H_
      7 
      8 #include "base/files/file_path.h"
      9 #include "base/version.h"
     10 #include "chrome/installer/util/fake_product_state.h"
     11 #include "chrome/installer/util/helper.h"
     12 #include "chrome/installer/util/installation_state.h"
     13 #include "chrome/installer/util/util_constants.h"
     14 
     15 namespace installer {
     16 
     17 // An InstallationState helper for use by unit tests.
     18 class FakeInstallationState : public InstallationState {
     19  public:
     20   // Takes ownership of |version|.
     21   void AddChrome(bool system_install, bool multi_install, Version* version) {
     22     FakeProductState chrome_state;
     23     chrome_state.set_version(version);
     24     chrome_state.set_multi_install(multi_install);
     25     base::FilePath setup_exe(
     26         GetChromeInstallPath(system_install,
     27                              BrowserDistribution::GetSpecificDistribution(
     28                                  BrowserDistribution::CHROME_BROWSER)));
     29     setup_exe = setup_exe
     30         .AppendASCII(version->GetString())
     31         .Append(kInstallerDir)
     32         .Append(kSetupExe);
     33     chrome_state.SetUninstallProgram(setup_exe);
     34     chrome_state.AddUninstallSwitch(switches::kUninstall);
     35     if (multi_install) {
     36       chrome_state.AddUninstallSwitch(switches::kMultiInstall);
     37       chrome_state.AddUninstallSwitch(switches::kChrome);
     38     }
     39     SetProductState(system_install, BrowserDistribution::CHROME_BROWSER,
     40                     chrome_state);
     41   }
     42 
     43   void SetProductState(bool system_install,
     44                        BrowserDistribution::Type type,
     45                        const ProductState& product_state) {
     46     ProductState& target = GetProducts(system_install)[IndexFromDistType(type)];
     47     target.CopyFrom(product_state);
     48   }
     49 
     50  protected:
     51   ProductState* GetProducts(bool system_install) {
     52     return system_install ? system_products_ : user_products_;
     53   }
     54 };
     55 
     56 }  // namespace installer
     57 
     58 #endif  // CHROME_INSTALLER_UTIL_FAKE_INSTALLATION_STATE_H_
     59