browser_distribution.h revision b2df76ea8fec9e32f6f3718986dba0d95315b29c
1bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// Use of this source code is governed by a BSD-style license that can be
3bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// found in the LICENSE file.
4bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org//
5bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org// This file declares a class that contains various method related to branding.
6bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
7bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#ifndef CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_
8bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#define CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_
9bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
10bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <string>
11bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
12bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include "base/basictypes.h"
13bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include "base/files/file_path.h"
14bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include "base/string16.h"
15bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include "base/version.h"
16bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include "chrome/installer/util/util_constants.h"
17bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
18bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#if defined(OS_WIN)
19bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#include <windows.h>  // NOLINT
20bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org#endif
21bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
22bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.orgclass BrowserDistribution {
23bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org public:
24bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  enum Type {
25bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org    CHROME_BROWSER,
26bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org    CHROME_FRAME,
27bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org    CHROME_BINARIES,
28bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org    CHROME_APP_HOST,
29bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org    NUM_TYPES
30bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  };
31bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
32bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  virtual ~BrowserDistribution() {}
33bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
34bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  static BrowserDistribution* GetDistribution();
35bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
36bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  static BrowserDistribution* GetSpecificDistribution(Type type);
37bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
38bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  Type GetType() const { return type_; }
39bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
40bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  virtual void DoPostUninstallOperations(const Version& version,
41594006017e46d82ed7146611dc12c20e3c509c7ddanno@chromium.org                                         const base::FilePath& local_data_path,
42bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org                                         const string16& distribution_data);
43bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org
44bee51999422c0eeaae85ed99b5c0bd4126510ff1danno@chromium.org  // Returns the GUID to be used when registering for Active Setup.
45  virtual string16 GetActiveSetupGuid();
46
47  virtual string16 GetAppGuid();
48
49  // Returns the unsuffixed application name of this program.
50  // This is the base of the name registered with Default Programs on Windows.
51  // IMPORTANT: This should only be called by the installer which needs to make
52  // decisions on the suffixing of the upcoming install, not by external callers
53  // at run-time.
54  virtual string16 GetBaseAppName();
55
56  // Returns the localized name of the program.
57  virtual string16 GetAppShortCutName();
58
59  virtual string16 GetAlternateApplicationName();
60
61  // Returns the unsuffixed appid of this program.
62  // The AppUserModelId is a property of Windows programs.
63  // IMPORTANT: This should only be called by ShellUtil::GetAppId as the appid
64  // should be suffixed in all scenarios.
65  virtual string16 GetBaseAppId();
66
67  virtual string16 GetInstallSubDir();
68
69  virtual string16 GetPublisherName();
70
71  virtual string16 GetAppDescription();
72
73  virtual string16 GetLongAppDescription();
74
75  virtual std::string GetSafeBrowsingName();
76
77  virtual string16 GetStateKey();
78
79  virtual string16 GetStateMediumKey();
80
81  virtual std::string GetNetworkStatsServer() const;
82
83  virtual std::string GetHttpPipeliningTestServer() const;
84
85#if defined(OS_WIN)
86  virtual string16 GetDistributionData(HKEY root_key);
87#endif
88
89  virtual string16 GetUninstallLinkName();
90
91  virtual string16 GetUninstallRegPath();
92
93  virtual string16 GetVersionKey();
94
95  virtual bool CanSetAsDefault();
96
97  virtual bool CanCreateDesktopShortcuts();
98
99  // Returns the executable filename (not path) that contains the product icon.
100  virtual string16 GetIconFilename();
101
102  // Returns the index of the icon for the product, inside the file specified by
103  // GetIconFilename().
104  virtual int GetIconIndex();
105
106  virtual bool GetChromeChannel(string16* channel);
107
108  // Returns true if this distribution includes a DelegateExecute verb handler,
109  // and provides the CommandExecuteImpl class UUID if |handler_class_uuid| is
110  // non-NULL.
111  virtual bool GetCommandExecuteImplClsid(string16* handler_class_uuid);
112
113  // Returns true if this distribution uses app_host.exe to run platform apps.
114  virtual bool AppHostIsSupported();
115
116  virtual void UpdateInstallStatus(bool system_install,
117      installer::ArchiveType archive_type,
118      installer::InstallStatus install_status);
119
120  // Returns true if this distribution should set the Omaha experiment_labels
121  // registry value.
122  virtual bool ShouldSetExperimentLabels();
123
124  virtual bool HasUserExperiments();
125
126 protected:
127  explicit BrowserDistribution(Type type);
128
129  template<class DistributionClass>
130  static BrowserDistribution* GetOrCreateBrowserDistribution(
131      BrowserDistribution** dist);
132
133  const Type type_;
134
135 private:
136  BrowserDistribution();
137
138  DISALLOW_COPY_AND_ASSIGN(BrowserDistribution);
139};
140
141#endif  // CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_
142