summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_windows_api.cc49
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_windows_api.h41
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_windows_api_factory.cc46
-rw-r--r--chrome/browser/extensions/api/tabs/tabs_windows_api_factory.h35
-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.cc10
-rw-r--r--chrome/browser/extensions/extension_service.cc2
-rw-r--r--chrome/browser/extensions/extension_service.h7
-rw-r--r--chrome/browser/profiles/profile_dependency_manager.cc2
-rw-r--r--chrome/browser/ui/panels/panel.cc11
-rw-r--r--chrome/chrome_browser_extensions.gypi8
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', {