15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)// This file defines a class that contains various method related to branding.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It provides only default implementations of these methods. Usually to add
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specific branding, we will need to extend this class with a custom
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// implementation.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/browser_distribution.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/atomicops.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/registry.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/windows_version.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/env_vars.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chrome_app_host_distribution.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chrome_frame_distribution.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chromium_binaries_distribution.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_binaries_distribution.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_distribution.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_sxs_distribution.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/install_util.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/l10n_string_util.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "installer_util_strings.h"  // NOLINT
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using installer::MasterPreferences;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const wchar_t kChromiumActiveSetupGuid[] =
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    L"{7D2B3E1D-D096-4594-9D8F-A6667F12E0AC}";
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCommandExecuteImplUuid[] =
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    L"{A2DF06F9-A21A-44A8-8A99-8B9C84F29160}";
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The BrowserDistribution objects are never freed.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_browser_distribution = NULL;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_chrome_frame_distribution = NULL;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_binaries_distribution = NULL;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_chrome_app_host_distribution = NULL;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns true if currently running in npchrome_frame.dll
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool IsChromeFrameModule() {
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath module_path;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PathService::Get(base::FILE_MODULE, &module_path);
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return base::FilePath::CompareEqualIgnoreCase(module_path.BaseName().value(),
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          installer::kChromeFrameDll);
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution::Type GetCurrentDistributionType() {
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(erikwright): If the app host is installed, but not Chrome, perhaps
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this should return CHROME_APP_HOST.
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static BrowserDistribution::Type type =
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      (MasterPreferences::ForCurrentProcess().install_chrome_frame() ||
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)       IsChromeFrameModule()) ?
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserDistribution::CHROME_FRAME :
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          BrowserDistribution::CHROME_BROWSER;
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return type;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // end namespace
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution::BrowserDistribution()
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : type_(CHROME_BROWSER) {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution::BrowserDistribution(Type type)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : type_(type) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<class DistributionClass>
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetOrCreateBrowserDistribution(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserDistribution** dist) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!*dist) {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DistributionClass* temp = new DistributionClass();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::subtle::NoBarrier_CompareAndSwap(
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<base::subtle::AtomicWord*>(dist), NULL,
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<base::subtle::AtomicWord>(temp)) != NULL)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete temp;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return *dist;
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetDistribution() {
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSpecificDistribution(GetCurrentDistributionType());
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetSpecificDistribution(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserDistribution::Type type) {
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserDistribution* dist = NULL;
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_BROWSER:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (InstallUtil::IsChromeSxSProcess()) {
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        dist = GetOrCreateBrowserDistribution<GoogleChromeSxSDistribution>(
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &g_browser_distribution);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        dist = GetOrCreateBrowserDistribution<GoogleChromeDistribution>(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &g_browser_distribution);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<BrowserDistribution>(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_browser_distribution);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_FRAME:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromeFrameDistribution>(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_chrome_frame_distribution);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_APP_HOST:
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromeAppHostDistribution>(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_chrome_app_host_distribution);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK_EQ(CHROME_BINARIES, type);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<GoogleChromeBinariesDistribution>(
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_binaries_distribution);
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromiumBinariesDistribution>(
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_binaries_distribution);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return dist;
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserDistribution::DoPostUninstallOperations(
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const Version& version, const base::FilePath& local_data_path,
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const string16& distribution_data) {
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)string16 BrowserDistribution::GetActiveSetupGuid() {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return kChromiumActiveSetupGuid;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetAppGuid() {
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"";
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetBaseAppName() {
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetAppShortCutName() {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetBaseAppName();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetAlternateApplicationName() {
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"The Internet";
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetBaseAppId() {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetInstallSubDir() {
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetPublisherName() {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetAppDescription() {
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Browse the web";
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetLongAppDescription() {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const string16& app_description =
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::GetLocalizedString(IDS_PRODUCT_DESCRIPTION_BASE);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return app_description;
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserDistribution::GetSafeBrowsingName() {
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "chromium";
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetStateKey() {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Software\\Chromium";
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetStateMediumKey() {
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Software\\Chromium";
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserDistribution::GetNetworkStatsServer() const {
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserDistribution::GetHttpPipeliningTestServer() const {
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetDistributionData(HKEY root_key) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"";
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetUninstallLinkName() {
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Uninstall Chromium";
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetUninstallRegPath() {
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Chromium";
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)string16 BrowserDistribution::GetVersionKey() {
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Software\\Chromium";
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::CanSetAsDefault() {
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::CanCreateDesktopShortcuts() {
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)string16 BrowserDistribution::GetIconFilename() {
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return string16();
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int BrowserDistribution::GetIconIndex() {
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Assuming that main icon appears first alphabetically in the resource file
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // for GetIconFilename().
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return 0;
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::GetChromeChannel(string16* channel) {
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::GetCommandExecuteImplClsid(
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    string16* handler_class_uuid) {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (handler_class_uuid)
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *handler_class_uuid = kCommandExecuteImplUuid;
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::AppHostIsSupported() {
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserDistribution::UpdateInstallStatus(bool system_install,
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::ArchiveType archive_type,
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::InstallStatus install_status) {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::ShouldSetExperimentLabels() {
2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::HasUserExperiments() {
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
268