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_LOCATION_BAR_CONTROLLER_H_
      6 #define CHROME_BROWSER_EXTENSIONS_LOCATION_BAR_CONTROLLER_H_
      7 
      8 #include <map>
      9 #include <vector>
     10 
     11 #include "base/macros.h"
     12 #include "base/memory/linked_ptr.h"
     13 #include "base/scoped_observer.h"
     14 #include "extensions/browser/extension_registry_observer.h"
     15 
     16 class ExtensionAction;
     17 
     18 namespace content {
     19 class WebContents;
     20 class BrowserContext;
     21 }
     22 
     23 namespace extensions {
     24 class Extension;
     25 class ExtensionActionManager;
     26 class ExtensionRegistry;
     27 
     28 // Provides the UI with the current page actions for extensions. The execution
     29 // of these actions is handled in the ExtensionActionAPI.
     30 class LocationBarController : public ExtensionRegistryObserver {
     31  public:
     32   explicit LocationBarController(content::WebContents* web_contents);
     33   virtual ~LocationBarController();
     34 
     35   // Returns the actions which should be displayed in the location bar.
     36   std::vector<ExtensionAction*> GetCurrentActions();
     37 
     38  private:
     39   // ExtensionRegistryObserver implementation.
     40   virtual void OnExtensionLoaded(
     41       content::BrowserContext* browser_context,
     42       const Extension* extension) OVERRIDE;
     43   virtual void OnExtensionUnloaded(
     44       content::BrowserContext* browser_context,
     45       const Extension* extension,
     46       UnloadedExtensionInfo::Reason reason) OVERRIDE;
     47 
     48   // The associated WebContents.
     49   content::WebContents* web_contents_;
     50 
     51   // The associated BrowserContext.
     52   content::BrowserContext* browser_context_;
     53 
     54   // The ExtensionActionManager to provide page actions.
     55   ExtensionActionManager* action_manager_;
     56 
     57   // Whether or not to show page actions in the location bar at all. (This is
     58   // false with the toolbar redesign enabled.)
     59   bool should_show_page_actions_;
     60 
     61   // Manufactured page actions that have been generated for extensions that want
     62   // to run a script, but were blocked.
     63   typedef std::map<std::string, linked_ptr<ExtensionAction> >
     64       ExtensionActionMap;
     65   ExtensionActionMap active_script_actions_;
     66 
     67   ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
     68       extension_registry_observer_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(LocationBarController);
     71 };
     72 
     73 }  // namespace extensions
     74 
     75 #endif  // CHROME_BROWSER_EXTENSIONS_LOCATION_BAR_CONTROLLER_H_
     76