15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_LOCATION_BAR_CONTROLLER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_LOCATION_BAR_CONTROLLER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <map>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector>
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/macros.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/linked_ptr.h"
1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/scoped_observer.h"
1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "extensions/browser/extension_registry_observer.h"
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionAction;
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace content {
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class WebContents;
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass BrowserContext;
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions {
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class Extension;
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ExtensionActionManager;
2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class ExtensionRegistry;
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Provides the UI with the current page actions for extensions. The execution
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// of these actions is handled in the ExtensionActionAPI.
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass LocationBarController : public ExtensionRegistryObserver {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  explicit LocationBarController(content::WebContents* web_contents);
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual ~LocationBarController();
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // Returns the actions which should be displayed in the location bar.
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  std::vector<ExtensionAction*> GetCurrentActions();
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) private:
3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // ExtensionRegistryObserver implementation.
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void OnExtensionLoaded(
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      content::BrowserContext* browser_context,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const Extension* extension) OVERRIDE;
4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void OnExtensionUnloaded(
4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      content::BrowserContext* browser_context,
4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      const Extension* extension,
4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      UnloadedExtensionInfo::Reason reason) OVERRIDE;
4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  // The associated WebContents.
49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  content::WebContents* web_contents_;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The associated BrowserContext.
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  content::BrowserContext* browser_context_;
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The ExtensionActionManager to provide page actions.
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ExtensionActionManager* action_manager_;
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether or not to show page actions in the location bar at all. (This is
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // false with the toolbar redesign enabled.)
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool should_show_page_actions_;
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Manufactured page actions that have been generated for extensions that want
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // to run a script, but were blocked.
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  typedef std::map<std::string, linked_ptr<ExtensionAction> >
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      ExtensionActionMap;
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ExtensionActionMap active_script_actions_;
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      extension_registry_observer_;
6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(LocationBarController);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_LOCATION_BAR_CONTROLLER_H_
76