browser_distribution.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 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// This file defines a class that contains various method related to branding. 6// It provides only default implementations of these methods. Usually to add 7// specific branding, we will need to extend this class with a custom 8// implementation. 9 10#include "chrome/installer/util/browser_distribution.h" 11 12#include "base/atomicops.h" 13#include "base/command_line.h" 14#include "base/file_path.h" 15#include "base/path_service.h" 16#include "base/logging.h" 17#include "base/win/registry.h" 18#include "base/win/windows_version.h" 19#include "chrome/common/env_vars.h" 20#include "chrome/installer/util/chrome_app_host_distribution.h" 21#include "chrome/installer/util/chrome_frame_distribution.h" 22#include "chrome/installer/util/chromium_binaries_distribution.h" 23#include "chrome/installer/util/google_chrome_binaries_distribution.h" 24#include "chrome/installer/util/google_chrome_distribution.h" 25#include "chrome/installer/util/google_chrome_sxs_distribution.h" 26#include "chrome/installer/util/install_util.h" 27#include "chrome/installer/util/l10n_string_util.h" 28#include "chrome/installer/util/master_preferences.h" 29 30#include "installer_util_strings.h" // NOLINT 31 32using installer::MasterPreferences; 33 34namespace { 35 36const wchar_t kCommandExecuteImplUuid[] = 37 L"{A2DF06F9-A21A-44A8-8A99-8B9C84F29160}"; 38 39// The BrowserDistribution objects are never freed. 40BrowserDistribution* g_browser_distribution = NULL; 41BrowserDistribution* g_chrome_frame_distribution = NULL; 42BrowserDistribution* g_binaries_distribution = NULL; 43BrowserDistribution* g_chrome_app_host_distribution = NULL; 44 45// Returns true if currently running in npchrome_frame.dll 46bool IsChromeFrameModule() { 47 FilePath module_path; 48 PathService::Get(base::FILE_MODULE, &module_path); 49 return FilePath::CompareEqualIgnoreCase(module_path.BaseName().value(), 50 installer::kChromeFrameDll); 51} 52 53BrowserDistribution::Type GetCurrentDistributionType() { 54 // TODO(erikwright): If the app host is installed, but not Chrome, perhaps 55 // this should return CHROME_APP_HOST. 56 static BrowserDistribution::Type type = 57 (MasterPreferences::ForCurrentProcess().install_chrome_frame() || 58 IsChromeFrameModule()) ? 59 BrowserDistribution::CHROME_FRAME : 60 BrowserDistribution::CHROME_BROWSER; 61 return type; 62} 63 64} // end namespace 65 66BrowserDistribution::BrowserDistribution() 67 : type_(CHROME_BROWSER) { 68} 69 70BrowserDistribution::BrowserDistribution(Type type) 71 : type_(type) { 72} 73 74template<class DistributionClass> 75BrowserDistribution* BrowserDistribution::GetOrCreateBrowserDistribution( 76 BrowserDistribution** dist) { 77 if (!*dist) { 78 DistributionClass* temp = new DistributionClass(); 79 if (base::subtle::NoBarrier_CompareAndSwap( 80 reinterpret_cast<base::subtle::AtomicWord*>(dist), NULL, 81 reinterpret_cast<base::subtle::AtomicWord>(temp)) != NULL) 82 delete temp; 83 } 84 85 return *dist; 86} 87 88BrowserDistribution* BrowserDistribution::GetDistribution() { 89 return GetSpecificDistribution(GetCurrentDistributionType()); 90} 91 92// static 93BrowserDistribution* BrowserDistribution::GetSpecificDistribution( 94 BrowserDistribution::Type type) { 95 BrowserDistribution* dist = NULL; 96 97 switch (type) { 98 case CHROME_BROWSER: 99#if defined(GOOGLE_CHROME_BUILD) 100 if (InstallUtil::IsChromeSxSProcess()) { 101 dist = GetOrCreateBrowserDistribution<GoogleChromeSxSDistribution>( 102 &g_browser_distribution); 103 } else { 104 dist = GetOrCreateBrowserDistribution<GoogleChromeDistribution>( 105 &g_browser_distribution); 106 } 107#else 108 dist = GetOrCreateBrowserDistribution<BrowserDistribution>( 109 &g_browser_distribution); 110#endif 111 break; 112 113 case CHROME_FRAME: 114 dist = GetOrCreateBrowserDistribution<ChromeFrameDistribution>( 115 &g_chrome_frame_distribution); 116 break; 117 118 case CHROME_APP_HOST: 119 dist = GetOrCreateBrowserDistribution<ChromeAppHostDistribution>( 120 &g_chrome_app_host_distribution); 121 break; 122 123 default: 124 DCHECK_EQ(CHROME_BINARIES, type); 125#if defined(GOOGLE_CHROME_BUILD) 126 dist = GetOrCreateBrowserDistribution<GoogleChromeBinariesDistribution>( 127 &g_binaries_distribution); 128#else 129 dist = GetOrCreateBrowserDistribution<ChromiumBinariesDistribution>( 130 &g_binaries_distribution); 131#endif 132 } 133 134 return dist; 135} 136 137void BrowserDistribution::DoPostUninstallOperations( 138 const Version& version, const FilePath& local_data_path, 139 const string16& distribution_data) { 140} 141 142string16 BrowserDistribution::GetAppGuid() { 143 return L""; 144} 145 146string16 BrowserDistribution::GetBaseAppName() { 147 return L"Chromium"; 148} 149 150string16 BrowserDistribution::GetAppShortCutName() { 151 return GetBaseAppName(); 152} 153 154string16 BrowserDistribution::GetAlternateApplicationName() { 155 return L"The Internet"; 156} 157 158string16 BrowserDistribution::GetBaseAppId() { 159 return L"Chromium"; 160} 161 162string16 BrowserDistribution::GetInstallSubDir() { 163 return L"Chromium"; 164} 165 166string16 BrowserDistribution::GetPublisherName() { 167 return L"Chromium"; 168} 169 170string16 BrowserDistribution::GetAppDescription() { 171 return L"Browse the web"; 172} 173 174string16 BrowserDistribution::GetLongAppDescription() { 175 const string16& app_description = 176 installer::GetLocalizedString(IDS_PRODUCT_DESCRIPTION_BASE); 177 return app_description; 178} 179 180std::string BrowserDistribution::GetSafeBrowsingName() { 181 return "chromium"; 182} 183 184string16 BrowserDistribution::GetStateKey() { 185 return L"Software\\Chromium"; 186} 187 188string16 BrowserDistribution::GetStateMediumKey() { 189 return L"Software\\Chromium"; 190} 191 192string16 BrowserDistribution::GetStatsServerURL() { 193 return L""; 194} 195 196std::string BrowserDistribution::GetNetworkStatsServer() const { 197 return ""; 198} 199 200std::string BrowserDistribution::GetHttpPipeliningTestServer() const { 201 return ""; 202} 203 204string16 BrowserDistribution::GetDistributionData(HKEY root_key) { 205 return L""; 206} 207 208string16 BrowserDistribution::GetUninstallLinkName() { 209 return L"Uninstall Chromium"; 210} 211 212string16 BrowserDistribution::GetUninstallRegPath() { 213 return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Chromium"; 214} 215 216string16 BrowserDistribution::GetVersionKey() { 217 return L"Software\\Chromium"; 218} 219 220bool BrowserDistribution::CanSetAsDefault() { 221 return true; 222} 223 224bool BrowserDistribution::CanCreateDesktopShortcuts() { 225 return true; 226} 227 228int BrowserDistribution::GetIconIndex() { 229 return 0; 230} 231 232bool BrowserDistribution::GetChromeChannel(string16* channel) { 233 return false; 234} 235 236bool BrowserDistribution::GetCommandExecuteImplClsid( 237 string16* handler_class_uuid) { 238 if (handler_class_uuid) 239 *handler_class_uuid = kCommandExecuteImplUuid; 240 return true; 241} 242 243void BrowserDistribution::UpdateInstallStatus(bool system_install, 244 installer::ArchiveType archive_type, 245 installer::InstallStatus install_status) { 246} 247 248bool BrowserDistribution::GetExperimentDetails( 249 UserExperiment* experiment, int flavor) { 250 return false; 251} 252 253void BrowserDistribution::LaunchUserExperiment( 254 const FilePath& setup_path, installer::InstallStatus status, 255 const Version& version, const installer::Product& product, 256 bool system_level) { 257} 258 259 260void BrowserDistribution::InactiveUserToastExperiment(int flavor, 261 const string16& experiment_group, 262 const installer::Product& installation, 263 const FilePath& application_path) { 264} 265