summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 09:28:53 +0000
committerhongbo.min@intel.com <hongbo.min@intel.com@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-08 09:28:53 +0000
commitbddca151d88995d3156c75f3aaa52f47d0883776 (patch)
treeae590b9ee6844537235fcd3f07335dde337acbec
parentf432619ba663ee4d8b276864234287a1e7e48d97 (diff)
downloadchromium_src-bddca151d88995d3156c75f3aaa52f47d0883776.zip
chromium_src-bddca151d88995d3156c75f3aaa52f47d0883776.tar.gz
chromium_src-bddca151d88995d3156c75f3aaa52f47d0883776.tar.bz2
[SystemInfo API] Use Profile-scoped object for systemInfo extension API
This fix is to implement a ProfileKeyedAPI for systemInfo API to remove the dependency of systemInfo event router from the extension core code. TBR=sky@chromium.org BUG=None Review URL: https://chromiumcodereview.appspot.com/12327006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186924 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/api/system_info/OWNERS1
-rw-r--r--chrome/browser/extensions/api/system_info/system_info_api.cc (renamed from chrome/browser/extensions/system_info_event_router.cc)113
-rw-r--r--chrome/browser/extensions/api/system_info/system_info_api.h47
-rw-r--r--chrome/browser/extensions/api/system_info/system_info_provider.h (renamed from chrome/browser/extensions/system_info_provider.h)9
-rw-r--r--chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc6
-rw-r--r--chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h3
-rw-r--r--chrome/browser/extensions/api/system_info_display/display_info_provider.h2
-rw-r--r--chrome/browser/extensions/api/system_info_memory/memory_info_provider.h2
-rw-r--r--chrome/browser/extensions/api/system_info_storage/storage_info_provider.h2
-rw-r--r--chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc1
-rw-r--r--chrome/browser/extensions/event_router.cc7
-rw-r--r--chrome/browser/extensions/system_info_event_router.h96
-rw-r--r--chrome/browser/profiles/profile_dependency_manager.cc2
-rw-r--r--chrome/chrome_browser_extensions.gypi6
14 files changed, 171 insertions, 126 deletions
diff --git a/chrome/browser/extensions/api/system_info/OWNERS b/chrome/browser/extensions/api/system_info/OWNERS
new file mode 100644
index 0000000..20685fc
--- /dev/null
+++ b/chrome/browser/extensions/api/system_info/OWNERS
@@ -0,0 +1 @@
+hongbo.min@intel.com
diff --git a/chrome/browser/extensions/system_info_event_router.cc b/chrome/browser/extensions/api/system_info/system_info_api.cc
index e91f7a1..f1c2b1b 100644
--- a/chrome/browser/extensions/system_info_event_router.cc
+++ b/chrome/browser/extensions/api/system_info/system_info_api.cc
@@ -1,19 +1,26 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 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/system_info_event_router.h"
+#include "chrome/browser/extensions/api/system_info/system_info_api.h"
+
+#include <set>
#include "base/bind.h"
+#include "base/files/file_path.h"
+#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "base/memory/singleton.h"
#include "base/string_util.h"
+#include "base/values.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/event_router_forwarder.h"
-#include "chrome/browser/extensions/event_names.h"
#include "chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h"
#include "chrome/browser/extensions/api/system_info_storage/storage_info_provider.h"
+#include "chrome/browser/extensions/event_names.h"
+#include "chrome/browser/extensions/event_router_forwarder.h"
#include "chrome/common/extensions/api/experimental_system_info_cpu.h"
#include "chrome/common/extensions/api/experimental_system_info_storage.h"
+#include "ui/gfx/display_observer.h"
#if defined(USE_ASH)
#include "ash/screen_ash.h"
@@ -50,7 +57,71 @@ static bool IsCpuEvent(const std::string& event_name) {
return StartsWithASCII(event_name, kCpuEventPrefix, true);
}
-} // namespace
+// Event router for systemInfo API. It is a singleton instance shared by
+// multiple profiles.
+// TODO(hongbo): It should derive from SystemMonitor::DevicesChangedObserver.
+// Since the system_monitor will be refactored along with media_gallery, once
+// http://crbug.com/145400 is fixed, we need to update SystemInfoEventRouter
+// accordingly.
+class SystemInfoEventRouter
+ : public gfx::DisplayObserver, public StorageInfoObserver {
+ public:
+ static SystemInfoEventRouter* GetInstance();
+
+ // Add/remove event listener for the |event_name| event from |profile|.
+ void AddEventListener(const std::string& event_name);
+ void RemoveEventListener(const std::string& event_name);
+
+ // Return true if the |event_name| is an event from systemInfo namespace.
+ static bool IsSystemInfoEvent(const std::string& event_name);
+
+ // StorageInfoObserver implementation:
+ virtual void OnStorageFreeSpaceChanged(const std::string& id,
+ double new_value,
+ double old_value) OVERRIDE;
+
+ // TODO(hongbo): The following methods should be likely overriden from
+ // SystemMonitor::DevicesChangedObserver once the http://crbug.com/145400
+ // is fixed.
+ void OnRemovableStorageAttached(const std::string& id,
+ const string16& name,
+ const base::FilePath::StringType& location);
+ void OnRemovableStorageDetached(const std::string& id);
+
+ // gfx::DisplayObserver implementation.
+ virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE;
+ virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
+ virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
+
+ private:
+ friend struct DefaultSingletonTraits<SystemInfoEventRouter>;
+ friend class base::RefCountedThreadSafe<SystemInfoEventRouter>;
+
+ SystemInfoEventRouter();
+ virtual ~SystemInfoEventRouter();
+
+ // Called from any thread to dispatch the systemInfo event to all extension
+ // processes cross multiple profiles.
+ void DispatchEvent(const std::string& event_name,
+ scoped_ptr<base::ListValue> args);
+
+ // The callbacks of querying storage info to start and stop watching the
+ // storages. Called from UI thread.
+ void StartWatchingStorages(const StorageInfo& info, bool success);
+ void StopWatchingStorages(const StorageInfo& info, bool success);
+
+ // The callback for CPU sampling cycle. Called from FILE thread.
+ void OnNextCpuSampling(
+ scoped_ptr<api::experimental_system_info_cpu::CpuUpdateInfo> info);
+
+ // Called to dispatch the systemInfo.display.onDisplayChanged event.
+ void OnDisplayChanged();
+
+ // Used to record the event names being watched.
+ std::multiset<std::string> watching_event_set_;
+
+ DISALLOW_COPY_AND_ASSIGN(SystemInfoEventRouter);
+};
// static
SystemInfoEventRouter* SystemInfoEventRouter::GetInstance() {
@@ -206,4 +277,36 @@ void SystemInfoEventRouter::OnNextCpuSampling(scoped_ptr<CpuUpdateInfo> info) {
DispatchEvent(event_names::kOnCpuUpdated, args.Pass());
}
+} // namespace
+
+static base::LazyInstance<ProfileKeyedAPIFactory<SystemInfoAPI> >
+ g_factory = LAZY_INSTANCE_INITIALIZER;
+
+// static
+ProfileKeyedAPIFactory<SystemInfoAPI>* SystemInfoAPI::GetFactoryInstance() {
+ return &g_factory.Get();
+}
+
+SystemInfoAPI::SystemInfoAPI(Profile* profile) : profile_(profile) {
+ ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
+ this, event_names::kOnCpuUpdated);
+ ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
+ this, event_names::kOnStorageAvailableCapacityChanged);
+}
+
+SystemInfoAPI::~SystemInfoAPI() {
+}
+
+void SystemInfoAPI::Shutdown() {
+ ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this);
+}
+
+void SystemInfoAPI::OnListenerAdded(const EventListenerInfo& details) {
+ SystemInfoEventRouter::GetInstance()->AddEventListener(details.event_name);
+}
+
+void SystemInfoAPI::OnListenerRemoved(const EventListenerInfo& details) {
+ SystemInfoEventRouter::GetInstance()->RemoveEventListener(details.event_name);
+}
+
} // namespace extensions
diff --git a/chrome/browser/extensions/api/system_info/system_info_api.h b/chrome/browser/extensions/api/system_info/system_info_api.h
new file mode 100644
index 0000000..eb96a4a
--- /dev/null
+++ b/chrome/browser/extensions/api/system_info/system_info_api.h
@@ -0,0 +1,47 @@
+// Copyright 2013 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_SYSTEM_INFO_SYSTEM_INFO_API_H_
+#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_SYSTEM_INFO_API_H_
+
+#include "chrome/browser/extensions/api/profile_keyed_api_factory.h"
+#include "chrome/browser/extensions/event_router.h"
+
+namespace extensions {
+
+// A Profile-scoped object which is registered as an observer of EventRouter
+// to observe the systemInfo event listener arrival/removal.
+class SystemInfoAPI : public ProfileKeyedAPI,
+ public EventRouter::Observer {
+ public:
+ // ProfileKeyedAPI implementation.
+ static ProfileKeyedAPIFactory<SystemInfoAPI>* GetFactoryInstance();
+
+ explicit SystemInfoAPI(Profile* profile);
+ virtual ~SystemInfoAPI();
+
+ // ProfileKeyedService implementation.
+ virtual void Shutdown() OVERRIDE;
+
+ // EventRouter::Observer implementation.
+ virtual void OnListenerAdded(const EventListenerInfo& details) OVERRIDE;
+ virtual void OnListenerRemoved(const EventListenerInfo& details) OVERRIDE;
+
+ private:
+ friend class ProfileKeyedAPIFactory<SystemInfoAPI>;
+
+ // ProfileKeyedAPI implementation.
+ static const char* service_name() {
+ return "SystemInfoAPI";
+ }
+ static const bool kServiceIsNULLWhileTesting = true;
+
+ Profile* profile_;
+
+ DISALLOW_COPY_AND_ASSIGN(SystemInfoAPI);
+};
+
+} // namespace extensions
+
+#endif // CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_SYSTEM_INFO_API_H_
diff --git a/chrome/browser/extensions/system_info_provider.h b/chrome/browser/extensions/api/system_info/system_info_provider.h
index fd650eb..849075d 100644
--- a/chrome/browser/extensions/system_info_provider.h
+++ b/chrome/browser/extensions/api/system_info/system_info_provider.h
@@ -1,8 +1,8 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Copyright 2013 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_SYSTEM_INFO_PROVIDER_H_
-#define CHROME_BROWSER_EXTENSIONS_SYSTEM_INFO_PROVIDER_H_
+#ifndef CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_SYSTEM_INFO_PROVIDER_H_
+#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_SYSTEM_INFO_PROVIDER_H_
#include <queue>
@@ -10,7 +10,6 @@
#include "base/callback.h"
#include "base/lazy_instance.h"
#include "base/memory/ref_counted.h"
-#include "base/memory/weak_ptr.h"
#include "base/threading/sequenced_worker_pool.h"
#include "content/public/browser/browser_thread.h"
@@ -147,4 +146,4 @@ typename base::LazyInstance<scoped_refptr<SystemInfoProvider<T> > >
} // namespace extensions
-#endif // CHROME_BROWSER_EXTENSIONS_SYSTEM_INFO_PROVIDER_H_
+#endif // CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_SYSTEM_INFO_PROVIDER_H_
diff --git a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc
index f2eaa1d..677a9bf 100644
--- a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc
+++ b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.cc
@@ -49,8 +49,7 @@ void CpuInfoProvider::StartSampling(const SamplingCallback& callback) {
BrowserThread::PostTask(
BrowserThread::FILE,
FROM_HERE,
- base::Bind(&CpuInfoProvider::StartSamplingOnFileThread,
- base::Unretained(this), callback));
+ base::Bind(&CpuInfoProvider::StartSamplingOnFileThread, this, callback));
}
void CpuInfoProvider::StopSampling() {
@@ -58,8 +57,7 @@ void CpuInfoProvider::StopSampling() {
BrowserThread::PostTask(
BrowserThread::FILE,
FROM_HERE,
- base::Bind(&CpuInfoProvider::StopSamplingOnFileThread,
- base::Unretained(this)));
+ base::Bind(&CpuInfoProvider::StopSamplingOnFileThread, this));
}
// static
diff --git a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h
index ae6d4a1..2291b02 100644
--- a/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h
+++ b/chrome/browser/extensions/api/system_info_cpu/cpu_info_provider.h
@@ -4,11 +4,10 @@
#ifndef CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_CPU_CPU_INFO_PROVIDER_H_
#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_CPU_CPU_INFO_PROVIDER_H_
-#include "chrome/browser/extensions/system_info_provider.h"
-
#include <vector>
#include "base/timer.h"
+#include "chrome/browser/extensions/api/system_info/system_info_provider.h"
#include "chrome/common/extensions/api/experimental_system_info_cpu.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
diff --git a/chrome/browser/extensions/api/system_info_display/display_info_provider.h b/chrome/browser/extensions/api/system_info_display/display_info_provider.h
index d99cf60..b934da8 100644
--- a/chrome/browser/extensions/api/system_info_display/display_info_provider.h
+++ b/chrome/browser/extensions/api/system_info_display/display_info_provider.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_DISPLAY_DISPLAY_INFO_PROVIDER_H_
#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_DISPLAY_DISPLAY_INFO_PROVIDER_H_
-#include "chrome/browser/extensions/system_info_provider.h"
+#include "chrome/browser/extensions/api/system_info/system_info_provider.h"
#include "chrome/common/extensions/api/system_info_display.h"
namespace extensions {
diff --git a/chrome/browser/extensions/api/system_info_memory/memory_info_provider.h b/chrome/browser/extensions/api/system_info_memory/memory_info_provider.h
index f52154b..45f33d5 100644
--- a/chrome/browser/extensions/api/system_info_memory/memory_info_provider.h
+++ b/chrome/browser/extensions/api/system_info_memory/memory_info_provider.h
@@ -5,7 +5,7 @@
#ifndef CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_MEMORY_MEMORY_INFO_PROVIDER_H_
#define CHROME_BROWSER_EXTENSIONS_API_SYSTEM_INFO_MEMORY_MEMORY_INFO_PROVIDER_H_
-#include "chrome/browser/extensions/system_info_provider.h"
+#include "chrome/browser/extensions/api/system_info/system_info_provider.h"
#include "chrome/common/extensions/api/experimental_system_info_memory.h"
namespace extensions {
diff --git a/chrome/browser/extensions/api/system_info_storage/storage_info_provider.h b/chrome/browser/extensions/api/system_info_storage/storage_info_provider.h
index 8a8c33e..3447aab 100644
--- a/chrome/browser/extensions/api/system_info_storage/storage_info_provider.h
+++ b/chrome/browser/extensions/api/system_info_storage/storage_info_provider.h
@@ -9,8 +9,8 @@
#include "base/memory/ref_counted.h"
#include "base/observer_list_threadsafe.h"
#include "base/timer.h"
+#include "chrome/browser/extensions/api/system_info/system_info_provider.h"
#include "chrome/browser/extensions/api/system_info_storage/storage_info_observer.h"
-#include "chrome/browser/extensions/system_info_provider.h"
#include "chrome/common/extensions/api/experimental_system_info_storage.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
diff --git a/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc b/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc
index 4732a47..408c806 100644
--- a/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc
+++ b/chrome/browser/extensions/api/system_info_storage/system_info_storage_apitest.cc
@@ -7,7 +7,6 @@
#include "chrome/browser/extensions/api/system_info_storage/storage_info_provider.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/extension_test_message_listener.h"
-#include "chrome/browser/extensions/system_info_event_router.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/ui_test_utils.h"
diff --git a/chrome/browser/extensions/event_router.cc b/chrome/browser/extensions/event_router.cc
index c24342b..ab6a160 100644
--- a/chrome/browser/extensions/event_router.cc
+++ b/chrome/browser/extensions/event_router.cc
@@ -24,7 +24,6 @@
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/lazy_background_task_queue.h"
#include "chrome/browser/extensions/process_map.h"
-#include "chrome/browser/extensions/system_info_event_router.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/chrome_notification_types.h"
@@ -237,9 +236,6 @@ void EventRouter::OnListenerAdded(const EventListener* listener) {
if (observer != observers_.end())
observer->second->OnListenerAdded(details);
- if (SystemInfoEventRouter::IsSystemInfoEvent(event_name))
- SystemInfoEventRouter::GetInstance()->AddEventListener(event_name);
-
const Extension* extension = extensions::ExtensionSystem::Get(profile_)->
extension_service()->GetExtensionById(listener->extension_id,
ExtensionService::INCLUDE_ENABLED);
@@ -266,9 +262,6 @@ void EventRouter::OnListenerRemoved(const EventListener* listener) {
base::Bind(&NotifyEventListenerRemovedOnIOThread,
profile_, listener->extension_id, event_name));
- if (SystemInfoEventRouter::IsSystemInfoEvent(event_name))
- SystemInfoEventRouter::GetInstance()->RemoveEventListener(event_name);
-
const Extension* extension = extensions::ExtensionSystem::Get(profile_)->
extension_service()->GetExtensionById(listener->extension_id,
ExtensionService::INCLUDE_ENABLED);
diff --git a/chrome/browser/extensions/system_info_event_router.h b/chrome/browser/extensions/system_info_event_router.h
deleted file mode 100644
index d1efd32..0000000
--- a/chrome/browser/extensions/system_info_event_router.h
+++ /dev/null
@@ -1,96 +0,0 @@
-// 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_SYSTEM_INFO_EVENT_ROUTER_H_
-#define CHROME_BROWSER_EXTENSIONS_SYSTEM_INFO_EVENT_ROUTER_H_
-
-#include <set>
-
-#include "base/files/file_path.h"
-#include "base/memory/singleton.h"
-#include "base/values.h"
-#include "chrome/browser/extensions/api/system_info_storage/storage_info_provider.h"
-#include "ui/gfx/display_observer.h"
-
-namespace extensions {
-
-namespace api {
-
-namespace experimental_system_info_cpu {
-
-struct CpuUpdateInfo;
-
-} // namespace experimental_system_info_cpu
-
-} // namespace api
-
-// Event router for systemInfo API. It is a singleton instance shared by
-// multiple profiles.
-// TODO(hongbo): It should derive from SystemMonitor::DevicesChangedObserver.
-// Since the system_monitor will be refactored along with media_galleries, once
-// http://crbug.com/145400 is fixed, we need to update SystemInfoEventRouter
-// accordingly.
-class SystemInfoEventRouter
- : public gfx::DisplayObserver,
- public StorageInfoObserver {
- public:
- static SystemInfoEventRouter* GetInstance();
-
- // Add/remove event listener for the |event_name| event from |profile|.
- void AddEventListener(const std::string& event_name);
- void RemoveEventListener(const std::string& event_name);
-
- // Return true if the |event_name| is an event from systemInfo namespace.
- static bool IsSystemInfoEvent(const std::string& event_name);
-
- // StorageInfoObserver implementation:
- virtual void OnStorageFreeSpaceChanged(const std::string& id,
- double new_value,
- double old_value) OVERRIDE;
-
- // TODO(hongbo): The following methods should be likely overriden from
- // SystemMonitor::DevicesChangedObserver once the http://crbug.com/145400
- // is fixed.
- void OnRemovableStorageAttached(const std::string& id,
- const string16& name,
- const base::FilePath::StringType& location);
- void OnRemovableStorageDetached(const std::string& id);
-
- // gfx::DisplayObserver implementation.
- virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE;
- virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
- virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
-
- private:
- friend struct DefaultSingletonTraits<SystemInfoEventRouter>;
-
- SystemInfoEventRouter();
- virtual ~SystemInfoEventRouter();
-
- // Called from any thread to dispatch the systemInfo event to all extension
- // processes cross multiple profiles.
- void DispatchEvent(const std::string& event_name,
- scoped_ptr<base::ListValue> args);
-
- // The callbacks of querying storage info to start and stop watching the
- // storages. Called from UI thread.
- void StartWatchingStorages(const StorageInfo& info, bool success);
- void StopWatchingStorages(const StorageInfo& info, bool success);
-
- // The callback for CPU sampling cycle. Called from FILE thread.
- void OnNextCpuSampling(
- scoped_ptr<api::experimental_system_info_cpu::CpuUpdateInfo> info);
-
- // Called to dispatch the systemInfo.display.onDisplayChanged event.
- void OnDisplayChanged();
-
- // Used to record the event names being watched.
- std::multiset<std::string> watching_event_set_;
-
- DISALLOW_COPY_AND_ASSIGN(SystemInfoEventRouter);
-};
-
-} // namespace extensions
-
-#endif // CHROME_BROWSER_EXTENSIONS_SYSTEM_INFO_EVENT_ROUTER_H_
diff --git a/chrome/browser/profiles/profile_dependency_manager.cc b/chrome/browser/profiles/profile_dependency_manager.cc
index 3c06ae9..ddf47e1 100644
--- a/chrome/browser/profiles/profile_dependency_manager.cc
+++ b/chrome/browser/profiles/profile_dependency_manager.cc
@@ -41,6 +41,7 @@
#include "chrome/browser/extensions/api/processes/processes_api.h"
#include "chrome/browser/extensions/api/push_messaging/push_messaging_api.h"
#include "chrome/browser/extensions/api/session_restore/session_restore_api.h"
+#include "chrome/browser/extensions/api/system_info/system_info_api.h"
#include "chrome/browser/extensions/api/tab_capture/tab_capture_registry_factory.h"
#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h"
#include "chrome/browser/extensions/api/themes/theme_api.h"
@@ -305,6 +306,7 @@ void ProfileDependencyManager::AssertFactoriesBuilt() {
#if defined(ENABLE_INPUT_SPEECH)
extensions::SpeechInputAPI::GetFactoryInstance();
#endif
+ extensions::SystemInfoAPI::GetFactoryInstance();
extensions::SuggestedLinksRegistryFactory::GetInstance();
extensions::TabCaptureRegistryFactory::GetInstance();
extensions::TabsWindowsAPI::GetFactoryInstance();
diff --git a/chrome/chrome_browser_extensions.gypi b/chrome/chrome_browser_extensions.gypi
index ae7ff19..0244822 100644
--- a/chrome/chrome_browser_extensions.gypi
+++ b/chrome/chrome_browser_extensions.gypi
@@ -695,11 +695,11 @@
'browser/extensions/state_store.h',
'browser/extensions/suggest_permission_util.h',
'browser/extensions/suggest_permission_util.cc',
+ 'browser/extensions/api/system_info/system_info_api.cc',
+ 'browser/extensions/api/system_info/system_info_api.h',
+ 'browser/extensions/api/system_info/system_info_provider.h',
'browser/extensions/api/system_private/system_private_api.cc',
'browser/extensions/api/system_private/system_private_api.h',
- 'browser/extensions/system_info_provider.h',
- 'browser/extensions/system_info_event_router.cc',
- 'browser/extensions/system_info_event_router.h',
'browser/extensions/tab_helper.cc',
'browser/extensions/tab_helper.h',
'browser/extensions/theme_installed_infobar_delegate.cc',