blob: 0a3afca30d35b6159480791bb4a91b332f2b3deb [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALL_UI_H_
#define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALL_UI_H_
#include <memory>
#include "base/auto_reset.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/scoped_refptr.h"
namespace content {
class BrowserContext;
}
namespace extensions {
class CrxInstallError;
class Extension;
} // namespace extensions
class Profile;
class SkBitmap;
// Manages the extension install UI bubble.
class ExtensionInstallUI {
public:
// Creates an ExtensionInstallUI subclass for the current OS platform.
static std::unique_ptr<ExtensionInstallUI> Create(
content::BrowserContext* context);
ExtensionInstallUI(const ExtensionInstallUI&) = delete;
ExtensionInstallUI& operator=(const ExtensionInstallUI&) = delete;
virtual ~ExtensionInstallUI();
// Called when an extension was installed.
virtual void OnInstallSuccess(
scoped_refptr<const extensions::Extension> extension,
const SkBitmap* icon) = 0;
// Called when an extension failed to install.
virtual void OnInstallFailure(const extensions::CrxInstallError& error) = 0;
// TODO(asargent) Normally we navigate to the new tab page when an app is
// installed, but we're experimenting with instead showing a bubble when
// an app is installed which points to the new tab button. This may become
// the default behavior in the future.
void SetUseAppInstalledBubble(bool use_bubble);
// Sets whether to show the default UI after completing the installation.
void SetSkipPostInstallUI(bool skip_ui);
// For testing:
static base::AutoReset<bool> disable_ui_for_tests(bool disable);
protected:
explicit ExtensionInstallUI(content::BrowserContext* context);
Profile* profile() { return profile_; }
bool skip_post_install_ui() const { return skip_post_install_ui_; }
bool use_app_installed_bubble() const { return use_app_installed_bubble_; }
// Whether the UI is disabled for testing. The method cannot have ForTest() in
// the name, otherwise the presubmits get confused when it is called from
// production code.
static bool IsUiDisabled();
private:
raw_ptr<Profile, DanglingUntriaged> profile_;
// Whether or not to show the default UI after completing the installation.
bool skip_post_install_ui_ = false;
// Whether to show an installed bubble on app install, or use the default
// action of opening a new tab page.
bool use_app_installed_bubble_ = false;
};
#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_INSTALL_UI_H_