// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// This file declares a class that contains various method related to branding.
#ifndef CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_
#define CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_
#include <string>
#include "base/basictypes.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/string16.h"
#include "base/version.h"
#include "chrome/installer/util/util_constants.h"
#if defined(OS_WIN)
#include <windows.h> // NOLINT
#endif
class AppRegistrationData;
class BrowserDistribution {
public:
enum Type {
CHROME_BROWSER,
CHROME_FRAME,
CHROME_BINARIES,
CHROME_APP_HOST,
NUM_TYPES
};
enum ShortcutType {
SHORTCUT_CHROME,
SHORTCUT_CHROME_ALTERNATE,
SHORTCUT_APP_LAUNCHER
};
enum Subfolder {
SUBFOLDER_CHROME,
SUBFOLDER_APPS,
};
enum DefaultBrowserControlPolicy {
DEFAULT_BROWSER_UNSUPPORTED,
DEFAULT_BROWSER_OS_CONTROL_ONLY,
DEFAULT_BROWSER_FULL_CONTROL
};
virtual ~BrowserDistribution();
static BrowserDistribution* GetDistribution();
static BrowserDistribution* GetSpecificDistribution(Type type);
Type GetType() const { return type_; }
// Getter and adaptors for the underlying |app_reg_data_|.
const AppRegistrationData& GetAppRegistrationData() const;
base::string16 GetAppGuid() const;
base::string16 GetStateKey() const;
base::string16 GetStateMediumKey() const;
base::string16 GetVersionKey() const;
virtual void DoPostUninstallOperations(
const Version& version,
const base::FilePath& local_data_path,
const base::string16& distribution_data);
// Returns the GUID to be used when registering for Active Setup.
virtual base::string16 GetActiveSetupGuid();
// Returns the unsuffixed application name of this program.
// This is the base of the name registered with Default Programs on Windows.
// IMPORTANT: This should only be called by the installer which needs to make
// decisions on the suffixing of the upcoming install, not by external callers
// at run-time.
virtual base::string16 GetBaseAppName();
// Returns the localized display name of this distribution.
virtual base::string16 GetDisplayName();
// Returns the localized name of the shortcut identified by |shortcut_type|
// for this distribution.
virtual base::string16 GetShortcutName(ShortcutType shortcut_type);
// Returns the index of the icon for the product identified by
// |shortcut_type|, inside the file specified by GetIconFilename().
virtual int GetIconIndex(ShortcutType shortcut_type);
// Returns the executable filename (not path) that contains the product icon.
virtual base::string16 GetIconFilename();
// Returns the localized name of the subfolder in the Start Menu identified by
// |subfolder_type| that this distribution should create shortcuts in. For
// SUBFOLDER_CHROME this returns GetShortcutName(SHORTCUT_CHROME).
virtual base::string16 GetStartMenuShortcutSubfolder(
Subfolder subfolder_type);
// Returns the unsuffixed appid of this program.
// The AppUserModelId is a property of Windows programs.
// IMPORTANT: This should only be called by ShellUtil::GetAppId as the appid
// should be suffixed in all scenarios.
virtual base::string16 GetBaseAppId();
// Returns the Browser ProgId prefix (e.g. ChromeHTML, ChromiumHTM, etc...).
// The full id is of the form |prefix|.|suffix| and is limited to a maximum
// length of 39 characters including null-terminator. See
// http://msdn.microsoft.com/library/aa911706.aspx for details. We define
// |suffix| as a fixed-length 26-character alphanumeric identifier, therefore
// the return value of this function must have a maximum length of
// 39 - 1(null-term) - 26(|suffix|) - 1(dot separator) = 11 characters.
virtual base::string16 GetBrowserProgIdPrefix();
// Returns the Browser ProgId description.
virtual base::string16 GetBrowserProgIdDesc();
virtual base::string16 GetInstallSubDir();
virtual base::string16 GetPublisherName();
virtual base::string16 GetAppDescription();
virtual base::string16 GetLongAppDescription();
virtual std::string GetSafeBrowsingName();
virtual std::string GetNetworkStatsServer() const;
#if defined(OS_WIN)
virtual base::string16 GetDistributionData(HKEY root_key);
#endif
virtual base::string16 GetUninstallLinkName();
virtual base::string16 GetUninstallRegPath();
// Returns an enum specifying the different ways in which this distribution
// is allowed to be set as default.
virtual DefaultBrowserControlPolicy GetDefaultBrowserControlPolicy();
virtual bool CanCreateDesktopShortcuts();
virtual bool GetChromeChannel(base::string16* channel);
// Returns true if this distribution includes a DelegateExecute verb handler,
// and provides the CommandExecuteImpl class UUID if |handler_class_uuid| is
// non-NULL.
virtual bool GetCommandExecuteImplClsid(base::string16* handler_class_uuid);
// Returns true if this distribution uses app_host.exe to run platform apps.
virtual bool AppHostIsSupported();
virtual void UpdateInstallStatus(bool system_install,
installer::ArchiveType archive_type,
installer::InstallStatus install_status);
// Returns true if this distribution should set the Omaha experiment_labels
// registry value.
virtual bool ShouldSetExperimentLabels();
virtual bool HasUserExperiments();
protected:
BrowserDistribution(Type type, scoped_ptr<AppRegistrationData> app_reg_data);
template<class DistributionClass>
static BrowserDistribution* GetOrCreateBrowserDistribution(
BrowserDistribution** dist);
const Type type_;
scoped_ptr<AppRegistrationData> app_reg_data_;
private:
BrowserDistribution();
DISALLOW_COPY_AND_ASSIGN(BrowserDistribution);
};
#endif // CHROME_INSTALLER_UTIL_BROWSER_DISTRIBUTION_H_