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