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_ERROR_UI_H_ 6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_UI_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "chrome/browser/ui/global_error/global_error.h" 11 #include "extensions/common/extension.h" 12 13 class Browser; 14 class ExtensionService; 15 16 // This class encapsulates the UI we want to show users when certain events 17 // occur related to installed extensions. 18 class ExtensionErrorUI { 19 public: 20 static ExtensionErrorUI* Create(ExtensionService* extension_service); 21 22 virtual ~ExtensionErrorUI(); 23 24 // Inform us that a given extension is of a certain type that the user 25 // hasn't yet acknowledged. 26 void AddExternalExtension(const std::string& id); 27 void AddBlacklistedExtension(const std::string& id); 28 29 // Returns sets replaying the IDs that have been added with the 30 // Add[...]Extension methods. 31 const extensions::ExtensionIdSet* get_external_extension_ids() const { 32 return external_extension_ids_.get(); 33 } 34 35 const extensions::ExtensionIdSet* get_blacklisted_extension_ids() const { 36 return blacklisted_extension_ids_.get(); 37 } 38 39 // Shows the installation error in a bubble view. Should return true if a 40 // bubble is shown, false if one could not be shown. 41 virtual bool ShowErrorInBubbleView() = 0; 42 43 // Shows the extension page. Called as a result of the user clicking more 44 // info and should be only called from the context of a callback 45 // (BubbleViewDidClose or BubbleViewAccept/CancelButtonPressed). 46 // It should use the same browser as where the bubble was shown. 47 virtual void ShowExtensions() = 0; 48 49 // Closes the error UI. This will end up calling BubbleViewDidClose, possibly 50 // synchronously. 51 virtual void Close() = 0; 52 53 protected: 54 explicit ExtensionErrorUI(ExtensionService* extension_service); 55 56 ExtensionService* extension_service() const { return extension_service_; } 57 58 // Model methods for the bubble view. 59 base::string16 GetBubbleViewTitle(); 60 std::vector<base::string16> GetBubbleViewMessages(); 61 base::string16 GetBubbleViewAcceptButtonLabel(); 62 base::string16 GetBubbleViewCancelButtonLabel(); 63 64 // Sub-classes should call this methods based on the actions taken by the user 65 // in the error bubble. 66 void BubbleViewDidClose(); // destroys |this| 67 void BubbleViewAcceptButtonPressed(); 68 void BubbleViewCancelButtonPressed(); 69 70 private: 71 bool should_delete_self_on_close_; 72 ExtensionService* extension_service_; 73 scoped_ptr<extensions::ExtensionIdSet> external_extension_ids_; 74 scoped_ptr<extensions::ExtensionIdSet> blacklisted_extension_ids_; 75 base::string16 message_; // Displayed in the body of the alert. 76 77 // For a given set of extension IDs, generates appropriate text 78 // describing what the user needs to know about them. 79 base::string16 GenerateMessageSection( 80 const extensions::ExtensionIdSet* extensions, 81 int extension_template_message_id, 82 int app_template_message_id); 83 84 // Generates the message displayed in the body of the alert. 85 base::string16 GenerateMessage(); 86 87 DISALLOW_COPY_AND_ASSIGN(ExtensionErrorUI); 88 }; 89 90 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_UI_H_ 91