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 specific implementation of BrowserDistribution class for
6// Chrome Frame. It overrides the bare minimum of methods necessary to get a
7// Chrome Frame installer that does not interact with Google Chrome or
8// Chromium installations.
9
10#include "chrome/installer/util/chrome_frame_distribution.h"
11
12#include "base/strings/string_util.h"
13#include "chrome/common/net/test_server_locations.h"
14#include "chrome/installer/util/channel_info.h"
15#include "chrome/installer/util/google_update_constants.h"
16#include "chrome/installer/util/google_update_settings.h"
17#include "chrome/installer/util/helper.h"
18#include "chrome/installer/util/install_util.h"
19#include "chrome/installer/util/l10n_string_util.h"
20#include "chrome/installer/util/updating_app_registration_data.h"
21
22#include "installer_util_strings.h"  // NOLINT
23
24namespace {
25const wchar_t kChromeFrameGuid[] = L"{8BA986DA-5100-405E-AA35-86F34A02ACBF}";
26}
27
28ChromeFrameDistribution::ChromeFrameDistribution()
29    : BrowserDistribution(
30          CHROME_FRAME,
31          scoped_ptr<AppRegistrationData>(
32              new UpdatingAppRegistrationData(kChromeFrameGuid))) {
33}
34
35base::string16 ChromeFrameDistribution::GetBaseAppName() {
36  return L"Google Chrome Frame";
37}
38
39base::string16 ChromeFrameDistribution::GetBrowserProgIdPrefix() {
40  NOTREACHED();
41  return base::string16();
42}
43
44base::string16 ChromeFrameDistribution::GetBrowserProgIdDesc() {
45  NOTREACHED();
46  return base::string16();
47}
48
49base::string16 ChromeFrameDistribution::GetDisplayName() {
50#if defined(GOOGLE_CHROME_BUILD)
51  return L"Google Chrome Frame";
52#else
53  return L"Chromium Frame";
54#endif
55}
56
57base::string16 ChromeFrameDistribution::GetShortcutName(
58    ShortcutType shortcut_type) {
59  NOTREACHED();
60  return base::string16();
61}
62
63base::string16 ChromeFrameDistribution::GetInstallSubDir() {
64  return L"Google\\Chrome Frame";
65}
66
67base::string16 ChromeFrameDistribution::GetPublisherName() {
68  const base::string16& publisher_name =
69      installer::GetLocalizedString(IDS_ABOUT_VERSION_COMPANY_NAME_BASE);
70  return publisher_name;
71}
72
73base::string16 ChromeFrameDistribution::GetAppDescription() {
74  return L"Chrome in a Frame.";
75}
76
77base::string16 ChromeFrameDistribution::GetLongAppDescription() {
78  return L"Chrome in a Frame.";
79}
80
81std::string ChromeFrameDistribution::GetSafeBrowsingName() {
82  return "googlechromeframe";
83}
84
85std::string ChromeFrameDistribution::GetNetworkStatsServer() const {
86  return chrome_common_net::kEchoTestServerLocation;
87}
88
89base::string16 ChromeFrameDistribution::GetUninstallLinkName() {
90  return L"Uninstall Chrome Frame";
91}
92
93base::string16 ChromeFrameDistribution::GetUninstallRegPath() {
94  return L"Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\"
95         L"Google Chrome Frame";
96}
97
98base::string16 ChromeFrameDistribution::GetIconFilename() {
99  return installer::kChromeExe;
100}
101
102int ChromeFrameDistribution::GetIconIndex(ShortcutType shortcut_type) {
103  switch (shortcut_type) {
104    case SHORTCUT_CHROME:
105      return 0;
106    default:
107      NOTREACHED();
108      return 0;
109  }
110}
111
112BrowserDistribution::DefaultBrowserControlPolicy
113    ChromeFrameDistribution::GetDefaultBrowserControlPolicy() {
114  return DEFAULT_BROWSER_UNSUPPORTED;
115}
116
117bool ChromeFrameDistribution::CanCreateDesktopShortcuts() {
118  return false;
119}
120
121bool ChromeFrameDistribution::GetCommandExecuteImplClsid(
122    base::string16* handler_class_uuid) {
123  return false;
124}
125
126void ChromeFrameDistribution::UpdateInstallStatus(bool system_install,
127    installer::ArchiveType archive_type,
128    installer::InstallStatus install_status) {
129#if defined(GOOGLE_CHROME_BUILD)
130  GoogleUpdateSettings::UpdateInstallStatus(system_install,
131      archive_type, InstallUtil::GetInstallReturnCode(install_status),
132      kChromeFrameGuid);
133#endif
134}
135