Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(224)

Unified Diff: chrome/browser/extensions/extension_install_ui.h

Issue 10388252: Refactoring ExtenionInstallUI to abstract the Browser references. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Synced + mac fix Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_install_ui.h
diff --git a/chrome/browser/extensions/extension_install_ui.h b/chrome/browser/extensions/extension_install_ui.h
index 1f46eec4627fceb99a061357cc7e7ad006e4078e..b9082598a3febd9fbe35e8e429bedad03df01cff 100644
--- a/chrome/browser/extensions/extension_install_ui.h
+++ b/chrome/browser/extensions/extension_install_ui.h
@@ -7,302 +7,51 @@
#pragma once
#include <string>
-#include <vector>
#include "base/compiler_specific.h"
#include "base/string16.h"
-#include "chrome/browser/extensions/image_loading_tracker.h"
-#include "chrome/common/extensions/url_pattern.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "ui/gfx/image/image.h"
-#include "ui/gfx/image/image_skia.h"
-#include "ui/gfx/native_widget_types.h"
class Browser;
-class ExtensionPermissionSet;
-class MessageLoop;
class Profile;
-class InfoBarDelegate;
-class TabContents;
-typedef TabContents TabContentsWrapper;
-
-namespace base {
-class DictionaryValue;
-}
+class SkBitmap;
namespace extensions {
-class BundleInstaller;
class Extension;
class ExtensionWebstorePrivateApiTest;
} // namespace extensions
-// Displays all the UI around extension installation.
-class ExtensionInstallUI : public ImageLoadingTracker::Observer {
+// Interface that should be implemented for each platform to display all the UI
+// around extension installation.
+class ExtensionInstallUI {
public:
- enum PromptType {
- UNSET_PROMPT_TYPE = -1,
- INSTALL_PROMPT = 0,
- INLINE_INSTALL_PROMPT,
- BUNDLE_INSTALL_PROMPT,
- RE_ENABLE_PROMPT,
- PERMISSIONS_PROMPT,
- NUM_PROMPT_TYPES
- };
-
- // Extra information needed to display an installation or uninstallation
- // prompt. Gets populated with raw data and exposes getters for formatted
- // strings so that the GTK/views/Cocoa install dialogs don't have to repeat
- // that logic.
- class Prompt {
- public:
- explicit Prompt(PromptType type);
- ~Prompt();
-
- void SetPermissions(const std::vector<string16>& permissions);
- void SetInlineInstallWebstoreData(const std::string& localized_user_count,
- double average_rating,
- int rating_count);
-
- PromptType type() const { return type_; }
- void set_type(PromptType type) { type_ = type; }
-
- // Getters for UI element labels.
- string16 GetDialogTitle() const;
- string16 GetHeading() const;
- string16 GetAcceptButtonLabel() const;
- bool HasAbortButtonLabel() const;
- string16 GetAbortButtonLabel() const;
- string16 GetPermissionsHeading() const;
-
- // Getters for webstore metadata. Only populated when the type is
- // INLINE_INSTALL_PROMPT.
-
- // The star display logic replicates the one used by the webstore (from
- // components.ratingutils.setFractionalYellowStars). Callers pass in an
- // "appender", which will be repeatedly called back with the star images
- // that they append to the star display area.
- typedef void(*StarAppender)(const gfx::ImageSkia*, void*);
- void AppendRatingStars(StarAppender appender, void* data) const;
- string16 GetRatingCount() const;
- string16 GetUserCount() const;
- size_t GetPermissionCount() const;
- string16 GetPermission(size_t index) const;
-
- // Populated for BUNDLE_INSTALL_PROMPT.
- const extensions::BundleInstaller* bundle() const { return bundle_; }
- void set_bundle(const extensions::BundleInstaller* bundle) {
- bundle_ = bundle;
- }
-
- // Populated for all other types.
- const extensions::Extension* extension() const { return extension_; }
- void set_extension(const extensions::Extension* extension) {
- extension_ = extension;
- }
-
- const gfx::Image& icon() const { return icon_; }
- void set_icon(const gfx::Image& icon) { icon_ = icon; }
-
- private:
- PromptType type_;
- // Permissions that are being requested (may not be all of an extension's
- // permissions if only additional ones are being requested)
- std::vector<string16> permissions_;
-
- // The extension or bundle being installed.
- const extensions::Extension* extension_;
- const extensions::BundleInstaller* bundle_;
-
- // The icon to be displayed.
- gfx::Image icon_;
-
- // These fields are populated only when the prompt type is
- // INLINE_INSTALL_PROMPT
- // Already formatted to be locale-specific.
- std::string localized_user_count_;
- // Range is kMinExtensionRating to kMaxExtensionRating
- double average_rating_;
- int rating_count_;
- };
+ static ExtensionInstallUI* Create(Profile* profile);
- static const int kMinExtensionRating = 0;
- static const int kMaxExtensionRating = 5;
-
- class Delegate {
- public:
- // We call this method to signal that the installation should continue.
- virtual void InstallUIProceed() = 0;
-
- // We call this method to signal that the installation should stop, with
- // |user_initiated| true if the installation was stopped by the user.
- virtual void InstallUIAbort(bool user_initiated) = 0;
-
- protected:
- virtual ~Delegate() {}
- };
+ virtual ~ExtensionInstallUI();
- // Creates a dummy extension from the |manifest|, replacing the name and
- // description with the localizations if provided.
- static scoped_refptr<extensions::Extension> GetLocalizedExtensionForDisplay(
- const base::DictionaryValue* manifest,
- const std::string& id,
- const std::string& localized_name,
- const std::string& localized_description,
- std::string* error);
+ // Called when an extension was installed.
+ virtual void OnInstallSuccess(const extensions::Extension* extension,
+ SkBitmap* icon) = 0;
+ // Called when an extension failed to install.
+ virtual void OnInstallFailure(const string16& error) = 0;
- explicit ExtensionInstallUI(Profile* profile);
- virtual ~ExtensionInstallUI();
+ // Whether or not to show the default UI after completing the installation.
+ virtual void SetSkipPostInstallUI(bool skip_ui) = 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 set_use_app_installed_bubble(bool use_bubble) {
- use_app_installed_bubble_ = use_bubble;
- }
-
- // Whether or not to show the default UI after completing the installation.
- void set_skip_post_install_ui(bool skip_ui) {
- skip_post_install_ui_ = skip_ui;
- }
-
- // This is called by the bundle installer to verify whether the bundle
- // should be installed.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmBundleInstall(extensions::BundleInstaller* bundle,
- const ExtensionPermissionSet* permissions);
-
- // This is called by the inline installer to verify whether the inline
- // install from the webstore should proceed.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmInlineInstall(Delegate* delegate,
- const extensions::Extension* extension,
- SkBitmap* icon,
- const Prompt& prompt);
-
- // This is called by the installer to verify whether the installation from
- // the webstore should proceed.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmWebstoreInstall(Delegate* delegate,
- const extensions::Extension* extension,
- const SkBitmap* icon);
-
- // This is called by the installer to verify whether the installation should
- // proceed. This is declared virtual for testing.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmInstall(Delegate* delegate,
- const extensions::Extension* extension);
-
- // This is called by the app handler launcher to verify whether the app
- // should be re-enabled. This is declared virtual for testing.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmReEnable(Delegate* delegate,
- const extensions::Extension* extension);
-
- // This is called by the extension permissions API to verify whether an
- // extension may be granted additional permissions.
- //
- // We *MUST* eventually call either Proceed() or Abort() on |delegate|.
- virtual void ConfirmPermissions(Delegate* delegate,
- const extensions::Extension* extension,
- const ExtensionPermissionSet* permissions);
-
- // Installation was successful. This is declared virtual for testing.
- virtual void OnInstallSuccess(const extensions::Extension* extension,
- SkBitmap* icon);
-
- // Installation failed. This is declared virtual for testing.
- virtual void OnInstallFailure(const string16& error);
-
- // ImageLoadingTracker::Observer:
- virtual void OnImageLoaded(const gfx::Image& image,
- const std::string& extension_id,
- int index) OVERRIDE;
+ virtual void SetUseAppInstalledBubble(bool use_bubble) = 0;
// Opens apps UI and animates the app icon for the app with id |app_id|.
static void OpenAppInstalledUI(Browser* browser, const std::string& app_id);
- protected:
- friend class extensions::ExtensionWebstorePrivateApiTest;
- friend class WebstoreInlineInstallUnpackFailureTest;
-
// Disables showing UI (ErrorBox, etc.) for install failures. To be used only
// in tests.
static void DisableFailureUIForTests();
- private:
- friend class GalleryInstallApiTestObserver;
-
- // Show an infobar for a newly-installed theme. previous_theme_id
- // should be empty if the previous theme was the system/default
- // theme.
- static void ShowThemeInfoBar(
- const std::string& previous_theme_id, bool previous_using_native_theme,
- const extensions::Extension* new_theme, Profile* profile);
-
- // Sets the icon that will be used in any UI. If |icon| is NULL, or contains
- // an empty bitmap, then a default icon will be used instead.
- void SetIcon(const SkBitmap* icon);
-
- // Starts the process of showing a confirmation UI, which is split into two.
- // 1) Set off a 'load icon' task.
- // 2) Handle the load icon response and show the UI (OnImageLoaded).
- void LoadImageIfNeeded();
-
- // Shows the actual UI (the icon should already be loaded).
- void ShowConfirmation();
-
- // Returns the delegate to control the browser's info bar. This is
- // within its own function due to its platform-specific nature.
- static InfoBarDelegate* GetNewThemeInstalledInfoBarDelegate(
- TabContentsWrapper* tab_contents,
- const extensions::Extension* new_theme,
- const std::string& previous_theme_id,
- bool previous_using_native_theme);
-
- Profile* profile_;
- MessageLoop* ui_loop_;
-
- // Used to undo theme installation.
- std::string previous_theme_id_;
- bool previous_using_native_theme_;
-
- // The extensions installation icon.
- SkBitmap icon_;
-
- // The extension we are showing the UI for.
- const extensions::Extension* extension_;
-
- // The bundle we are showing the UI for, if type BUNDLE_INSTALL_PROMPT.
- const extensions::BundleInstaller* bundle_;
-
- // The permissions being prompted for.
- scoped_refptr<const ExtensionPermissionSet> permissions_;
-
- // The delegate we will call Proceed/Abort on after confirmation UI.
- Delegate* delegate_;
-
- // A pre-filled prompt.
- Prompt prompt_;
-
- // The type of prompt we are going to show.
- PromptType prompt_type_;
-
- // Keeps track of extension images being loaded on the File thread for the
- // purpose of showing the install UI.
- ImageLoadingTracker tracker_;
-
- // 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_;
-
- // Whether or not to show the default UI after completing the installation.
- bool skip_post_install_ui_;
+ protected:
+ ExtensionInstallUI();
};
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_
« no previous file with comments | « chrome/browser/extensions/extension_install_prompt.cc ('k') | chrome/browser/extensions/extension_install_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698