- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / extension_error_ui.h
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 "chrome/common/extensions/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   string16 GetBubbleViewTitle();
60   std::vector<string16> GetBubbleViewMessages();
61   string16 GetBubbleViewAcceptButtonLabel();
62   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   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   string16 GenerateMessageSection(const extensions::ExtensionIdSet* extensions,
80                                   int extension_template_message_id,
81                                   int app_template_message_id);
82
83   // Generates the message displayed in the body of the alert.
84   string16 GenerateMessage();
85
86   DISALLOW_COPY_AND_ASSIGN(ExtensionErrorUI);
87 };
88
89 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_UI_H_