extension_install_ui.h revision 513209b27ff55e2841eac0e4120199c23acce758
1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_ 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string> 10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector> 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/string16.h" 13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/extensions/image_loading_tracker.h" 143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/extensions/url_pattern.h" 15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "gfx/native_widget_types.h" 16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "third_party/skia/include/core/SkBitmap.h" 17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Extension; 19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MessageLoop; 20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Profile; 21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass InfoBarDelegate; 22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass TabContents; 23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Displays all the UI around extension installation and uninstallation. 25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ExtensionInstallUI : public ImageLoadingTracker::Observer { 26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch enum PromptType { 28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch INSTALL_PROMPT = 0, 29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch UNINSTALL_PROMPT, 30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch NUM_PROMPT_TYPES 31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // A mapping from PromptType to message ID for various dialog content. 34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const int kTitleIds[NUM_PROMPT_TYPES]; 35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const int kHeadingIds[NUM_PROMPT_TYPES]; 36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static const int kButtonIds[NUM_PROMPT_TYPES]; 37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch class Delegate { 39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public: 40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We call this method after ConfirmInstall()/ConfirmUninstall() to signal 41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that the installation/uninstallation should continue. 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void InstallUIProceed() = 0; 43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We call this method after ConfirmInstall()/ConfirmUninstall() to signal 45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // that the installation/uninstallation should stop. 46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void InstallUIAbort() = 0; 473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick protected: 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~Delegate() {} 50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch }; 51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch explicit ExtensionInstallUI(Profile* profile); 53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual ~ExtensionInstallUI(); 55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is called by the installer to verify whether the installation should 57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // proceed. This is declared virtual for testing. 58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We *MUST* eventually call either Proceed() or Abort() 60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // on |delegate|. 61513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ConfirmInstall(Delegate* delegate, const Extension* extension); 62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // This is called by the extensions management page to verify whether the 64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // uninstallation should proceed. This is declared virtual for testing. 65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // We *MUST* eventually call either Proceed() or Abort() 67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // on |delegate|. 68513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void ConfirmUninstall(Delegate* delegate, const Extension* extension); 69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Installation was successful. This is declared virtual for testing. 71513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch virtual void OnInstallSuccess(const Extension* extension); 72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Installation failed. This is declared virtual for testing. 74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnInstallFailure(const std::string& error); 75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // ImageLoadingTracker::Observer overrides. 77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch virtual void OnImageLoaded( 78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap* image, ExtensionResource resource, int index); 79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Show an infobar for a newly-installed theme. previous_theme_id 81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // should be empty if the previous theme was the system/default 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // theme. 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // TODO(akalin): Find a better home for this (and 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // GetNewThemeInstalledInfoBarDelegate()). 86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void ShowThemeInfoBar( 87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& previous_theme_id, bool previous_use_system_theme, 88513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* new_theme, Profile* profile); 89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private: 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Starts the process of showing a confirmation UI, which is split into two. 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 1) Set off a 'load icon' task. 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // 2) Handle the load icon response and show the UI (OnImageLoaded). 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void ShowConfirmation(PromptType prompt_type); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(OS_MACOSX) 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // When an extension is installed on Mac with neither browser action nor 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // page action icons, show an infobar instead of a popup bubble. 99513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch void ShowGenericExtensionInstalledInfoBar(const Extension* new_extension); 100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif 101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Returns the delegate to control the browser's info bar. This is 103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // within its own function due to its platform-specific nature. 104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static InfoBarDelegate* GetNewThemeInstalledInfoBarDelegate( 105513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch TabContents* tab_contents, const Extension* new_theme, 106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const std::string& previous_theme_id, bool previous_use_system_theme); 107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implements the showing of the install/uninstall dialog prompt. 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // NOTE: The implementations of this function is platform-specific. 110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void ShowExtensionInstallUIPromptImpl( 111513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Profile* profile, Delegate* delegate, const Extension* extension, 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SkBitmap* icon, PromptType type); 113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Implements the showing of the new install dialog. The implementations of 115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // this function are platform-specific. 116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch static void ShowExtensionInstallUIPrompt2Impl( 117513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch Profile* profile, Delegate* delegate, const Extension* extension, 118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap* icon, const std::vector<string16>& permissions); 119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Profile* profile_; 121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch MessageLoop* ui_loop_; 122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Used to undo theme installation. 124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch std::string previous_theme_id_; 125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool previous_use_system_theme_; 126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch SkBitmap icon_; // The extensions installation icon. 128513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch const Extension* extension_; // The extension we are showing the UI for. 129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch Delegate* delegate_; // The delegate we will call Proceed/Abort on after 130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // confirmation UI. 131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch PromptType prompt_type_; // The type of prompt we are going to show. 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Keeps track of extension images being loaded on the File thread for the 134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // purpose of showing the install UI. 135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch ImageLoadingTracker tracker_; 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}; 137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_INSTALL_UI_H_ 139