Home | History | Annotate | Download | only in extensions
      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 <vector>
      9 
     10 #include "base/macros.h"
     11 #include "base/strings/string16.h"
     12 
     13 namespace content {
     14 class BrowserContext;
     15 }
     16 
     17 namespace extensions {
     18 
     19 class ExtensionSet;
     20 
     21 // This class encapsulates the UI we want to show users when certain events
     22 // occur related to installed extensions.
     23 class ExtensionErrorUI {
     24  public:
     25   class Delegate {
     26    public:
     27     // Get the BrowserContext associated with this UI.
     28     virtual content::BrowserContext* GetContext() = 0;
     29 
     30     // Get the set of external extensions to warn the user about.
     31     virtual const ExtensionSet& GetExternalExtensions() = 0;
     32 
     33     // Get the set of blacklisted extensions to warn the user about.
     34     virtual const ExtensionSet& GetBlacklistedExtensions() = 0;
     35 
     36     // Handle the user clicking to get more details on the extension alert.
     37     virtual void OnAlertDetails() = 0;
     38 
     39     // Handle the user clicking "accept" on the extension alert.
     40     virtual void OnAlertAccept() = 0;
     41 
     42     // Handle the alert closing.
     43     virtual void OnAlertClosed() = 0;
     44   };
     45 
     46   static ExtensionErrorUI* Create(Delegate* delegate);
     47 
     48   virtual ~ExtensionErrorUI();
     49 
     50   // Shows the installation error in a bubble view. Should return true if a
     51   // bubble is shown, false if one could not be shown.
     52   virtual bool ShowErrorInBubbleView() = 0;
     53 
     54   // Shows the extension page. Called as a result of the user clicking more
     55   // info and should be only called from the context of a callback
     56   // (BubbleViewDidClose or BubbleViewAccept/CancelButtonPressed).
     57   // It should use the same browser as where the bubble was shown.
     58   virtual void ShowExtensions() = 0;
     59 
     60   // Closes the error UI. This will end up calling BubbleViewDidClose, possibly
     61   // synchronously.
     62   virtual void Close() = 0;
     63 
     64  protected:
     65   explicit ExtensionErrorUI(Delegate* delegate);
     66 
     67   // Model methods for the bubble view.
     68   base::string16 GetBubbleViewTitle();
     69   std::vector<base::string16> GetBubbleViewMessages();
     70   base::string16 GetBubbleViewAcceptButtonLabel();
     71   base::string16 GetBubbleViewCancelButtonLabel();
     72 
     73   // Sub-classes should call this methods based on the actions taken by the user
     74   // in the error bubble.
     75   void BubbleViewDidClose();  // destroys |this|
     76   void BubbleViewAcceptButtonPressed();
     77   void BubbleViewCancelButtonPressed();
     78 
     79  private:
     80   base::string16 GenerateMessage();
     81 
     82   Delegate* delegate_;
     83 
     84   base::string16 message_;  // Displayed in the body of the alert.
     85 
     86   DISALLOW_COPY_AND_ASSIGN(ExtensionErrorUI);
     87 };
     88 
     89 }  // namespace extensions
     90 
     91 #endif  // CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_UI_H_
     92