15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_INSTALLER_UTIL_FAKE_INSTALLATION_STATE_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_INSTALLER_UTIL_FAKE_INSTALLATION_STATE_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/version.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/fake_product_state.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/helper.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/installation_state.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/util_constants.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace installer {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An InstallationState helper for use by unit tests.
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeInstallationState : public InstallationState {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Takes ownership of |version|.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void AddChrome(bool system_install, bool multi_install, Version* version) {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FakeProductState chrome_state;
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome_state.set_version(version);
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome_state.set_multi_install(multi_install);
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath setup_exe(
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        GetChromeInstallPath(system_install,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             BrowserDistribution::GetSpecificDistribution(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                 BrowserDistribution::CHROME_BROWSER)));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    setup_exe = setup_exe
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .AppendASCII(version->GetString())
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .Append(kInstallerDir)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .Append(kSetupExe);
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome_state.SetUninstallProgram(setup_exe);
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    chrome_state.AddUninstallSwitch(switches::kUninstall);
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (multi_install) {
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_state.AddUninstallSwitch(switches::kMultiInstall);
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      chrome_state.AddUninstallSwitch(switches::kChrome);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetProductState(system_install, BrowserDistribution::CHROME_BROWSER,
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    chrome_state);
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void SetProductState(bool system_install,
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       BrowserDistribution::Type type,
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                       const ProductState& product_state) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ProductState& target = GetProducts(system_install)[IndexFromDistType(type)];
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    target.CopyFrom(product_state);
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProductState* GetProducts(bool system_install) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return system_install ? system_products_ : user_products_;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace installer
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_INSTALLER_UTIL_FAKE_INSTALLATION_STATE_H_
59