diff options
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/extensions/api/tabs/tabs_windows_api.cc | 49 | ||||
-rw-r--r-- | chrome/browser/extensions/api/tabs/tabs_windows_api.h | 41 | ||||
-rw-r--r-- | chrome/browser/extensions/api/tabs/tabs_windows_api_factory.cc | 46 | ||||
-rw-r--r-- | chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h | 35 | ||||
-rw-r--r-- | chrome/browser/extensions/api/tabs/windows_event_router.cc (renamed from chrome/browser/extensions/window_event_router.cc) | 20 | ||||
-rw-r--r-- | chrome/browser/extensions/api/tabs/windows_event_router.h (renamed from chrome/browser/extensions/window_event_router.h) | 16 | ||||
-rw-r--r-- | chrome/browser/extensions/browser_event_router.cc | 10 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_service.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extension_service.h | 7 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_dependency_manager.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel.cc | 11 | ||||
-rw-r--r-- | chrome/chrome_browser_extensions.gypi | 8 |
12 files changed, 208 insertions, 39 deletions
diff --git a/chrome/browser/extensions/api/tabs/tabs_windows_api.cc b/chrome/browser/extensions/api/tabs/tabs_windows_api.cc new file mode 100644 index 0000000..0efe883 --- /dev/null +++ b/chrome/browser/extensions/api/tabs/tabs_windows_api.cc @@ -0,0 +1,49 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" + +#include "chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h" +#include "chrome/browser/extensions/api/tabs/windows_event_router.h" +#include "chrome/browser/extensions/event_names.h" +#include "chrome/browser/extensions/event_router.h" +#include "chrome/browser/extensions/extension_system.h" + +namespace extensions { + +TabsWindowsAPI::TabsWindowsAPI(Profile* profile) + : profile_(profile) { + ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( + this, event_names::kOnWindowCreated); + ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( + this, event_names::kOnWindowRemoved); + ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( + this, event_names::kOnWindowFocusedChanged); +} + +TabsWindowsAPI::~TabsWindowsAPI() { +} + +// static +TabsWindowsAPI* TabsWindowsAPI::Get(Profile* profile) { + return TabsWindowsAPIFactory::GetForProfile(profile); +} + +WindowsEventRouter* TabsWindowsAPI::windows_event_router() { + if (!windows_event_router_) + windows_event_router_.reset(new WindowsEventRouter(profile_)); + return windows_event_router_.get(); +} + +void TabsWindowsAPI::Shutdown() { + ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); +} + +void TabsWindowsAPI::OnListenerAdded( + const extensions::EventListenerInfo& details) { + windows_event_router(); + ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); +} + +} // namespace extensions diff --git a/chrome/browser/extensions/api/tabs/tabs_windows_api.h b/chrome/browser/extensions/api/tabs/tabs_windows_api.h new file mode 100644 index 0000000..ae24d5c --- /dev/null +++ b/chrome/browser/extensions/api/tabs/tabs_windows_api.h @@ -0,0 +1,41 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_H_ +#define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_H_ + +#include "base/memory/scoped_ptr.h" +#include "chrome/browser/extensions/event_router.h" +#include "chrome/browser/profiles/profile_keyed_service.h" + +namespace extensions { +class WindowsEventRouter; + +class TabsWindowsAPI : public ProfileKeyedService, + public extensions::EventRouter::Observer { + public: + explicit TabsWindowsAPI(Profile* profile); + virtual ~TabsWindowsAPI(); + + // Convenience method to get the TabsWindowsAPI for a profile. + static TabsWindowsAPI* Get(Profile* profile); + + WindowsEventRouter* windows_event_router(); + + // ProfileKeyedService implementation. + virtual void Shutdown() OVERRIDE; + + // EventRouter::Observer implementation. + virtual void OnListenerAdded(const extensions::EventListenerInfo& details) + OVERRIDE; + + private: + Profile* profile_; + + scoped_ptr<WindowsEventRouter> windows_event_router_; +}; + +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_H_ diff --git a/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.cc b/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.cc new file mode 100644 index 0000000..ef57965 --- /dev/null +++ b/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.cc @@ -0,0 +1,46 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h" + +#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" +#include "chrome/browser/extensions/extension_system_factory.h" +#include "chrome/browser/profiles/profile_dependency_manager.h" + +namespace extensions { + +// static +TabsWindowsAPI* TabsWindowsAPIFactory::GetForProfile(Profile* profile) { + return static_cast<TabsWindowsAPI*>( + GetInstance()->GetServiceForProfile(profile, true)); +} + +// static +TabsWindowsAPIFactory* TabsWindowsAPIFactory::GetInstance() { + return Singleton<TabsWindowsAPIFactory>::get(); +} + +TabsWindowsAPIFactory::TabsWindowsAPIFactory() + : ProfileKeyedServiceFactory("TabsWindowsAPI", + ProfileDependencyManager::GetInstance()) { + DependsOn(extensions::ExtensionSystemFactory::GetInstance()); +} + +TabsWindowsAPIFactory::~TabsWindowsAPIFactory() { +} + +ProfileKeyedService* TabsWindowsAPIFactory::BuildServiceInstanceFor( + Profile* profile) const { + return new TabsWindowsAPI(profile); +} + +bool TabsWindowsAPIFactory::ServiceIsCreatedWithProfile() const { + return true; +} + +bool TabsWindowsAPIFactory::ServiceIsNULLWhileTesting() const { + return true; +} + +} // namespace extensions diff --git a/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h b/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h new file mode 100644 index 0000000..35eafd9 --- /dev/null +++ b/chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h @@ -0,0 +1,35 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_FACTORY_H_ +#define CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_FACTORY_H_ + +#include "base/memory/singleton.h" +#include "chrome/browser/profiles/profile_keyed_service_factory.h" + +namespace extensions { +class TabsWindowsAPI; + +class TabsWindowsAPIFactory : public ProfileKeyedServiceFactory { + public: + static TabsWindowsAPI* GetForProfile(Profile* profile); + + static TabsWindowsAPIFactory* GetInstance(); + + private: + friend struct DefaultSingletonTraits<TabsWindowsAPIFactory>; + + TabsWindowsAPIFactory(); + virtual ~TabsWindowsAPIFactory(); + + // ProfileKeyedServiceFactory implementation. + virtual ProfileKeyedService* BuildServiceInstanceFor( + Profile* profile) const OVERRIDE; + virtual bool ServiceIsCreatedWithProfile() const OVERRIDE; + virtual bool ServiceIsNULLWhileTesting() const OVERRIDE; +}; + +} // namespace extensions + +#endif // CHROME_BROWSER_EXTENSIONS_API_TABS_TABS_WINDOWS_API_FACTORY_H_ diff --git a/chrome/browser/extensions/window_event_router.cc b/chrome/browser/extensions/api/tabs/windows_event_router.cc index 0e3dfac..2880c3af 100644 --- a/chrome/browser/extensions/window_event_router.cc +++ b/chrome/browser/extensions/api/tabs/windows_event_router.cc @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/extensions/window_event_router.h" +#include "chrome/browser/extensions/api/tabs/windows_event_router.h" #include "base/values.h" #include "chrome/browser/extensions/event_names.h" @@ -24,7 +24,7 @@ namespace event_names = extensions::event_names; namespace extensions { -WindowEventRouter::WindowEventRouter(Profile* profile) +WindowsEventRouter::WindowsEventRouter(Profile* profile) : profile_(profile), focused_profile_(NULL), focused_window_id_(extension_misc::kUnknownWindowId) { @@ -43,7 +43,7 @@ WindowEventRouter::WindowEventRouter(Profile* profile) #endif } -WindowEventRouter::~WindowEventRouter() { +WindowsEventRouter::~WindowsEventRouter() { WindowControllerList::GetInstance()->RemoveObserver(this); #if defined(TOOLKIT_VIEWS) views::WidgetFocusManager::GetInstance()->RemoveFocusChangeListener(this); @@ -52,7 +52,7 @@ WindowEventRouter::~WindowEventRouter() { #endif } -void WindowEventRouter::OnWindowControllerAdded( +void WindowsEventRouter::OnWindowControllerAdded( WindowController* window_controller) { if (!profile_->IsSameProfile(window_controller->profile())) return; @@ -64,7 +64,7 @@ void WindowEventRouter::OnWindowControllerAdded( args.Pass()); } -void WindowEventRouter::OnWindowControllerRemoved( +void WindowsEventRouter::OnWindowControllerRemoved( WindowController* window_controller) { if (!profile_->IsSameProfile(window_controller->profile())) return; @@ -77,21 +77,21 @@ void WindowEventRouter::OnWindowControllerRemoved( } #if defined(TOOLKIT_VIEWS) -void WindowEventRouter::OnNativeFocusChange( +void WindowsEventRouter::OnNativeFocusChange( gfx::NativeView focused_before, gfx::NativeView focused_now) { if (!focused_now) OnActiveWindowChanged(NULL); } #elif defined(TOOLKIT_GTK) -void WindowEventRouter::ActiveWindowChanged( +void WindowsEventRouter::ActiveWindowChanged( GdkWindow* active_window) { if (!active_window) OnActiveWindowChanged(NULL); } #endif -void WindowEventRouter::Observe( +void WindowsEventRouter::Observe( int type, const content::NotificationSource& source, const content::NotificationDetails& details) { @@ -124,7 +124,7 @@ static void WillDispatchWindowFocusedEvent(Profile* new_active_profile, } } -void WindowEventRouter::OnActiveWindowChanged( +void WindowsEventRouter::OnActiveWindowChanged( WindowController* window_controller) { Profile* window_profile = NULL; int window_id = extension_misc::kUnknownWindowId; @@ -149,7 +149,7 @@ void WindowEventRouter::OnActiveWindowChanged( ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass()); } -void WindowEventRouter::DispatchEvent(const char* event_name, +void WindowsEventRouter::DispatchEvent(const char* event_name, Profile* profile, scoped_ptr<base::ListValue> args) { scoped_ptr<Event> event(new Event(event_name, args.Pass())); diff --git a/chrome/browser/extensions/window_event_router.h b/chrome/browser/extensions/api/tabs/windows_event_router.h index 933dfe0..b48d1c1 100644 --- a/chrome/browser/extensions/window_event_router.h +++ b/chrome/browser/extensions/api/tabs/windows_event_router.h @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_EXTENSIONS_WINDOW_EVENT_ROUTER_H_ -#define CHROME_BROWSER_EXTENSIONS_WINDOW_EVENT_ROUTER_H_ +#ifndef CHROME_BROWSER_EXTENSIONS_API_TABS_WINDOWS_EVENT_ROUTER_H_ +#define CHROME_BROWSER_EXTENSIONS_API_TABS_WINDOWS_EVENT_ROUTER_H_ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" @@ -24,11 +24,11 @@ class ListValue; namespace extensions { -// The WindowEventRouter sends chrome.windows.* events to listeners +// The WindowsEventRouter sends chrome.windows.* events to listeners // inside extension process renderers. The router listens to *all* events, // but will only route eventes within a profile to extension processes in the // same profile. -class WindowEventRouter : public WindowControllerListObserver, +class WindowsEventRouter : public WindowControllerListObserver, #if defined(TOOLKIT_VIEWS) public views::WidgetFocusChangeListener, #elif defined(TOOLKIT_GTK) @@ -36,8 +36,8 @@ class WindowEventRouter : public WindowControllerListObserver, #endif public content::NotificationObserver { public: - explicit WindowEventRouter(Profile* profile); - virtual ~WindowEventRouter(); + explicit WindowsEventRouter(Profile* profile); + virtual ~WindowsEventRouter(); // WindowControllerListObserver methods: virtual void OnWindowControllerAdded( @@ -79,9 +79,9 @@ class WindowEventRouter : public WindowControllerListObserver, // windows.onFocusChanged events with the same windowId. int focused_window_id_; - DISALLOW_COPY_AND_ASSIGN(WindowEventRouter); + DISALLOW_COPY_AND_ASSIGN(WindowsEventRouter); }; } // namespace extensions -#endif // CHROME_BROWSER_EXTENSIONS_WINDOW_EVENT_ROUTER_H_ +#endif // CHROME_BROWSER_EXTENSIONS_API_TABS_WINDOWS_EVENT_ROUTER_H_ diff --git a/chrome/browser/extensions/browser_event_router.cc b/chrome/browser/extensions/browser_event_router.cc index 0668523..c302ba9 100644 --- a/chrome/browser/extensions/browser_event_router.cc +++ b/chrome/browser/extensions/browser_event_router.cc @@ -8,13 +8,14 @@ #include "base/values.h" #include "chrome/browser/extensions/api/extension_action/extension_page_actions_api_constants.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" +#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" +#include "chrome/browser/extensions/api/tabs/windows_event_router.h" #include "chrome/browser/extensions/event_names.h" #include "chrome/browser/extensions/extension_action.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/window_controller.h" -#include "chrome/browser/extensions/window_event_router.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" @@ -145,10 +146,9 @@ void BrowserEventRouter::OnBrowserRemoved(Browser* browser) { } void BrowserEventRouter::OnBrowserSetLastActive(Browser* browser) { - ExtensionService* service = - extensions::ExtensionSystem::Get(profile_)->extension_service(); - if (service) { - service->window_event_router()->OnActiveWindowChanged( + TabsWindowsAPI* tabs_window_api = TabsWindowsAPI::Get(profile_); + if (tabs_window_api) { + tabs_window_api->windows_event_router()->OnActiveWindowChanged( browser ? browser->extension_window_controller() : NULL); } } diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index 58af9f0..c596c68 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -69,7 +69,6 @@ #include "chrome/browser/extensions/shell_window_registry.h" #include "chrome/browser/extensions/unpacked_installer.h" #include "chrome/browser/extensions/updater/extension_updater.h" -#include "chrome/browser/extensions/window_event_router.h" #include "chrome/browser/history/history_extension_api.h" #include "chrome/browser/net/chrome_url_request_context.h" #include "chrome/browser/prefs/pref_service.h" @@ -545,7 +544,6 @@ void ExtensionService::InitEventRouters() { #if defined(ENABLE_EXTENSIONS) history_event_router_.reset(new HistoryExtensionEventRouter(profile_)); browser_event_router_.reset(new extensions::BrowserEventRouter(profile_)); - window_event_router_.reset(new extensions::WindowEventRouter(profile_)); preference_event_router_.reset( new extensions::PreferenceEventRouter(profile_)); bookmark_event_router_.reset(new BookmarkExtensionEventRouter( diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 56bd1ac..00bca27 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -75,7 +75,6 @@ class PendingExtensionManager; class PreferenceEventRouter; class PushMessagingEventRouter; class SettingsFrontend; -class WindowEventRouter; } namespace syncer { @@ -572,10 +571,6 @@ class ExtensionService return browser_event_router_.get(); } - extensions::WindowEventRouter* window_event_router() { - return window_event_router_.get(); - } - #if defined(OS_CHROMEOS) chromeos::ExtensionInputMethodEventRouter* input_method_event_router() { return input_method_event_router_.get(); @@ -985,8 +980,6 @@ class ExtensionService scoped_ptr<extensions::BrowserEventRouter> browser_event_router_; - scoped_ptr<extensions::WindowEventRouter> window_event_router_; - scoped_ptr<extensions::PreferenceEventRouter> preference_event_router_; scoped_ptr<BookmarkExtensionEventRouter> bookmark_event_router_; diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc index e9ac2b1..0a92c82 100644 --- a/chrome/browser/profiles/profile_dependency_manager.cc +++ b/chrome/browser/profiles/profile_dependency_manager.cc @@ -25,6 +25,7 @@ #include "chrome/browser/extensions/api/management/management_api_factory.h" #include "chrome/browser/extensions/api/processes/processes_api_factory.h" #include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h" +#include "chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h" #include "chrome/browser/extensions/api/web_navigation/web_navigation_api_factory.h" #include "chrome/browser/extensions/app_restore_service_factory.h" #include "chrome/browser/extensions/extension_system_factory.h" @@ -237,6 +238,7 @@ void ProfileDependencyManager::AssertFactoriesBuilt() { extensions::ProcessesAPIFactory::GetInstance(); extensions::SuggestedLinksRegistryFactory::GetInstance(); extensions::TabCaptureRegistryFactory::GetInstance(); + extensions::TabsWindowsAPIFactory::GetInstance(); extensions::WebNavigationAPIFactory::GetInstance(); ExtensionManagementAPIFactory::GetInstance(); #endif diff --git a/chrome/browser/ui/panels/panel.cc b/chrome/browser/ui/panels/panel.cc index d0afc29..5780b16 100644 --- a/chrome/browser/ui/panels/panel.cc +++ b/chrome/browser/ui/panels/panel.cc @@ -10,12 +10,13 @@ #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/debugger/devtools_window.h" #include "chrome/browser/extensions/api/tabs/tabs_constants.h" +#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" +#include "chrome/browser/extensions/api/tabs/windows_event_router.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" #include "chrome/browser/extensions/extension_tab_util.h" #include "chrome/browser/extensions/window_controller.h" #include "chrome/browser/extensions/window_controller_list.h" -#include "chrome/browser/extensions/window_event_router.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/themes/theme_service.h" @@ -681,10 +682,10 @@ void Panel::OnActiveStateChanged(bool active) { collection_->OnPanelActiveStateChanged(this); // Send extension event about window changing active state. - ExtensionService* service = - extensions::ExtensionSystem::Get(profile())->extension_service(); - if (service) { - service->window_event_router()->OnActiveWindowChanged( + extensions::TabsWindowsAPI* tabs_windows_api = + extensions::TabsWindowsAPI::Get(profile()); + if (tabs_windows_api) { + tabs_windows_api->windows_event_router()->OnActiveWindowChanged( active ? extension_window_controller_.get() : NULL); } diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi index b046785..5a0a23f 100644 --- a/chrome/chrome_browser_extensions.gypi +++ b/chrome/chrome_browser_extensions.gypi @@ -349,8 +349,14 @@ 'browser/extensions/api/tabs/execute_code_in_tab_function.h', 'browser/extensions/api/tabs/tabs.cc', 'browser/extensions/api/tabs/tabs.h', + 'browser/extensions/api/tabs/tabs_windows_api.cc', + 'browser/extensions/api/tabs/tabs_windows_api.h', + 'browser/extensions/api/tabs/tabs_windows_api_factory.cc', + 'browser/extensions/api/tabs/tabs_windows_api_factory.h', 'browser/extensions/api/tabs/tabs_constants.cc', 'browser/extensions/api/tabs/tabs_constants.h', + 'browser/extensions/api/tabs/windows_event_router.cc', + 'browser/extensions/api/tabs/windows_event_router.h', 'browser/extensions/api/terminal/terminal_extension_helper.cc', 'browser/extensions/api/terminal/terminal_extension_helper.h', 'browser/extensions/api/terminal/terminal_private_api.cc', @@ -692,8 +698,6 @@ 'browser/extensions/window_controller_list.cc', 'browser/extensions/window_controller_list.h', 'browser/extensions/window_controller_list_observer.h', - 'browser/extensions/window_event_router.cc', - 'browser/extensions/window_event_router.h', ], 'conditions': [ ['chromeos==0', { |