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"
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/common/chrome_icon_resources_win.h"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/env_vars.h"
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/installer/util/app_registration_data.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chrome_app_host_distribution.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chrome_frame_distribution.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/chromium_binaries_distribution.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_binaries_distribution.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_distribution.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/google_chrome_sxs_distribution.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/install_util.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/l10n_string_util.h"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/installer/util/master_preferences.h"
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/installer/util/non_updating_app_registration_data.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "installer_util_strings.h"  // NOLINT
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using installer::MasterPreferences;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const wchar_t kChromiumActiveSetupGuid[] =
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    L"{7D2B3E1D-D096-4594-9D8F-A6667F12E0AC}";
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const wchar_t kCommandExecuteImplUuid[] =
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    L"{A2DF06F9-A21A-44A8-8A99-8B9C84F29160}";
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The BrowserDistribution objects are never freed.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_browser_distribution = NULL;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_chrome_frame_distribution = NULL;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_binaries_distribution = NULL;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* g_chrome_app_host_distribution = NULL;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution::Type GetCurrentDistributionType() {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // TODO(erikwright): If the app host is installed, but not Chrome, perhaps
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // this should return CHROME_APP_HOST.
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return BrowserDistribution::CHROME_BROWSER;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // end namespace
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution::BrowserDistribution()
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : type_(CHROME_BROWSER),
61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      app_reg_data_(make_scoped_ptr(
62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)          new NonUpdatingAppRegistrationData(L"Software\\Chromium"))) {
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BrowserDistribution::BrowserDistribution(
66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Type type, scoped_ptr<AppRegistrationData> app_reg_data)
67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    : type_(type), app_reg_data_(app_reg_data.Pass()) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)BrowserDistribution::~BrowserDistribution() {}
71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template<class DistributionClass>
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetOrCreateBrowserDistribution(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserDistribution** dist) {
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!*dist) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    DistributionClass* temp = new DistributionClass();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (base::subtle::NoBarrier_CompareAndSwap(
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<base::subtle::AtomicWord*>(dist), NULL,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            reinterpret_cast<base::subtle::AtomicWord>(temp)) != NULL)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      delete temp;
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return *dist;
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetDistribution() {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSpecificDistribution(GetCurrentDistributionType());
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrowserDistribution* BrowserDistribution::GetSpecificDistribution(
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BrowserDistribution::Type type) {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  BrowserDistribution* dist = NULL;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_BROWSER:
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (InstallUtil::IsChromeSxSProcess()) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        dist = GetOrCreateBrowserDistribution<GoogleChromeSxSDistribution>(
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &g_browser_distribution);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      } else {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        dist = GetOrCreateBrowserDistribution<GoogleChromeDistribution>(
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            &g_browser_distribution);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      }
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<BrowserDistribution>(
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_browser_distribution);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_FRAME:
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromeFrameDistribution>(
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_chrome_frame_distribution);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    case CHROME_APP_HOST:
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromeAppHostDistribution>(
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_chrome_app_host_distribution);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      break;
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    default:
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      DCHECK_EQ(CHROME_BINARIES, type);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<GoogleChromeBinariesDistribution>(
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_binaries_distribution);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      dist = GetOrCreateBrowserDistribution<ChromiumBinariesDistribution>(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          &g_binaries_distribution);
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return dist;
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const AppRegistrationData& BrowserDistribution::GetAppRegistrationData() const {
136cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return *app_reg_data_;
137cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
138cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
139cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)base::string16 BrowserDistribution::GetAppGuid() const {
140cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return app_reg_data_->GetAppGuid();
141cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
142cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
143cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)base::string16 BrowserDistribution::GetStateKey() const {
144cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return app_reg_data_->GetStateKey();
145cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
146cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
147cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)base::string16 BrowserDistribution::GetStateMediumKey() const {
148cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return app_reg_data_->GetStateMediumKey();
149cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
150cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
151cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)base::string16 BrowserDistribution::GetVersionKey() const {
152cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return app_reg_data_->GetVersionKey();
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
154cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserDistribution::DoPostUninstallOperations(
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const Version& version, const base::FilePath& local_data_path,
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const base::string16& distribution_data) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetActiveSetupGuid() {
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return kChromiumActiveSetupGuid;
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetBaseAppName() {
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetDisplayName() {
1693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return GetShortcutName(SHORTCUT_CHROME);
1703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetShortcutName(
1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ShortcutType shortcut_type) {
1743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  switch (shortcut_type) {
1753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    case SHORTCUT_CHROME_ALTERNATE:
1763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      // TODO(calamity): Change IDS_OEM_MAIN_SHORTCUT_NAME in
1773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      // chromium_strings.grd to "The Internet" (so that it doesn't collide with
1783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      // the value in google_chrome_strings.grd) then change this to
1793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      // installer::GetLocalizedString(IDS_OEM_MAIN_SHORTCUT_NAME_BASE)
1803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return L"The Internet";
1813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    case SHORTCUT_APP_LAUNCHER:
1823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return installer::GetLocalizedString(IDS_APP_LIST_SHORTCUT_NAME_BASE);
1833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    default:
1843551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      DCHECK_EQ(shortcut_type, SHORTCUT_CHROME);
1853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      return GetBaseAppName();
1863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  }
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)int BrowserDistribution::GetIconIndex(ShortcutType shortcut_type) {
1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  if (shortcut_type == SHORTCUT_APP_LAUNCHER)
191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return icon_resources::kAppLauncherIndex;
1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  DCHECK(shortcut_type == SHORTCUT_CHROME ||
1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)         shortcut_type == SHORTCUT_CHROME_ALTERNATE) << shortcut_type;
194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  return icon_resources::kApplicationIndex;
1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
1975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetIconFilename() {
1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  return installer::kChromeExe;
1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetStartMenuShortcutSubfolder(
2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    Subfolder subfolder_type) {
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  switch (subfolder_type) {
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    case SUBFOLDER_APPS:
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return installer::GetLocalizedString(IDS_APP_SHORTCUTS_SUBDIR_NAME_BASE);
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    default:
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      DCHECK_EQ(subfolder_type, SUBFOLDER_CHROME);
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      return GetShortcutName(SHORTCUT_CHROME);
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  }
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetBaseAppId() {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetBrowserProgIdPrefix() {
217d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // This used to be "ChromiumHTML", but was forced to become "ChromiumHTM"
218d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // because of http://crbug.com/153349.  See the declaration of this function
219d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // in the header file for more details.
220d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return L"ChromiumHTM";
221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
222d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
2235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetBrowserProgIdDesc() {
224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  return L"Chromium HTML Document";
225d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}
226d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
227d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
2285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetInstallSubDir() {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetPublisherName() {
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Chromium";
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetAppDescription() {
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Browse the web";
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetLongAppDescription() {
2415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const base::string16& app_description =
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      installer::GetLocalizedString(IDS_PRODUCT_DESCRIPTION_BASE);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return app_description;
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserDistribution::GetSafeBrowsingName() {
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "chromium";
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string BrowserDistribution::GetNetworkStatsServer() const {
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return "";
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetDistributionData(HKEY root_key) {
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"";
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetUninstallLinkName() {
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Uninstall Chromium";
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)base::string16 BrowserDistribution::GetUninstallRegPath() {
2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Chromium";
2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)BrowserDistribution::DefaultBrowserControlPolicy
2671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)    BrowserDistribution::GetDefaultBrowserControlPolicy() {
2681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  return DEFAULT_BROWSER_FULL_CONTROL;
2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::CanCreateDesktopShortcuts() {
2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool BrowserDistribution::GetChromeChannel(base::string16* channel) {
2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrowserDistribution::GetCommandExecuteImplClsid(
2805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::string16* handler_class_uuid) {
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (handler_class_uuid)
2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *handler_class_uuid = kCommandExecuteImplUuid;
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::AppHostIsSupported() {
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrowserDistribution::UpdateInstallStatus(bool system_install,
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::ArchiveType archive_type,
2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    installer::InstallStatus install_status) {
2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::ShouldSetExperimentLabels() {
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool BrowserDistribution::HasUserExperiments() {
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return false;
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
302