1// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ 6#define CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ 7 8#include "base/basictypes.h" 9#include "base/compiler_specific.h" 10#include "base/memory/weak_ptr.h" 11#include "ui/gfx/image/image_skia.h" 12#include "ui/gfx/native_widget_types.h" 13 14class Profile; 15 16namespace base { 17class MessageLoop; 18} 19 20namespace gfx { 21class Image; 22} 23 24namespace extensions { 25class Extension; 26 27class ExtensionUninstallDialog 28 : public base::SupportsWeakPtr<ExtensionUninstallDialog> { 29 public: 30 class Delegate { 31 public: 32 // We call this method to signal that the uninstallation should continue. 33 virtual void ExtensionUninstallAccepted() = 0; 34 35 // We call this method to signal that the uninstallation should stop. 36 virtual void ExtensionUninstallCanceled() = 0; 37 38 protected: 39 virtual ~Delegate() {} 40 }; 41 42 // Creates a platform specific implementation of ExtensionUninstallDialog. The 43 // dialog will be modal to |parent|, or a non-modal dialog if |parent| is 44 // NULL. 45 static ExtensionUninstallDialog* Create(Profile* profile, 46 gfx::NativeWindow parent, 47 Delegate* delegate); 48 49 virtual ~ExtensionUninstallDialog(); 50 51 // This is called to verify whether the uninstallation should proceed. 52 // Starts the process of showing a confirmation UI, which is split into two. 53 // 1) Set off a 'load icon' task. 54 // 2) Handle the load icon response and show the UI (OnImageLoaded). 55 void ConfirmUninstall(const Extension* extension); 56 57 // This shows the same dialog as above, except it also shows which extension 58 // triggered the dialog by calling chrome.management.uninstall API. 59 void ConfirmProgrammaticUninstall(const Extension* extension, 60 const Extension* triggering_extension); 61 62 std::string GetHeadingText(); 63 64 protected: 65 // Constructor used by the derived classes. 66 ExtensionUninstallDialog(Profile* profile, Delegate* delegate); 67 68 // TODO(sashab): Remove protected members: crbug.com/397395 69 Profile* const profile_; 70 71 // The delegate we will call Accepted/Canceled on after confirmation dialog. 72 Delegate* delegate_; 73 74 // The extension we are showing the dialog for. 75 const Extension* extension_; 76 77 // The extension triggering the dialog if the dialog was shown by 78 // chrome.management.uninstall. 79 const Extension* triggering_extension_; 80 81 // The extensions icon. 82 gfx::ImageSkia icon_; 83 84 private: 85 // Sets the icon that will be used in the dialog. If |icon| contains an empty 86 // image, then we use a default icon instead. 87 void SetIcon(const gfx::Image& image); 88 89 void OnImageLoaded(const std::string& extension_id, const gfx::Image& image); 90 91 // Displays the prompt. This should only be called after loading the icon. 92 // The implementations of this method are platform-specific. 93 virtual void Show() = 0; 94 95 base::MessageLoop* ui_loop_; 96 97 DISALLOW_COPY_AND_ASSIGN(ExtensionUninstallDialog); 98}; 99 100} // namespace extensions 101 102#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_UNINSTALL_DIALOG_H_ 103