Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(280)

Unified Diff: chrome/browser/extensions/api/system_info/system_info_api.cc

Issue 389633002: Move system.* family of APIs to extensions/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/system_info/system_info_api.cc
diff --git a/chrome/browser/extensions/api/system_info/system_info_api.cc b/chrome/browser/extensions/api/system_info/system_info_api.cc
deleted file mode 100644
index 7c02f35a34cc41ed3f85285f91387c81ada81c11..0000000000000000000000000000000000000000
--- a/chrome/browser/extensions/api/system_info/system_info_api.cc
+++ /dev/null
@@ -1,258 +0,0 @@
-// 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/api/system_info/system_info_api.h"
-
-#include <set>
-
-#include "base/bind.h"
-#include "base/lazy_instance.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/singleton.h"
-#include "base/strings/string_util.h"
-#include "base/values.h"
-#include "chrome/browser/browser_process.h"
-#include "chrome/browser/extensions/api/system_display/display_info_provider.h"
-#include "chrome/browser/extensions/api/system_storage/storage_info_provider.h"
-#include "chrome/browser/extensions/event_router_forwarder.h"
-#include "chrome/common/extensions/api/system_display.h"
-#include "chrome/common/extensions/api/system_storage.h"
-#include "components/storage_monitor/removable_storage_observer.h"
-#include "components/storage_monitor/storage_info.h"
-#include "components/storage_monitor/storage_monitor.h"
-#include "content/public/browser/browser_thread.h"
-#include "ui/gfx/display_observer.h"
-#include "ui/gfx/screen.h"
-
-namespace extensions {
-
-using api::system_storage::StorageUnitInfo;
-using content::BrowserThread;
-using storage_monitor::StorageMonitor;
-
-namespace system_display = api::system_display;
-namespace system_storage = api::system_storage;
-
-namespace {
-
-bool IsDisplayChangedEvent(const std::string& event_name) {
- return event_name == system_display::OnDisplayChanged::kEventName;
-}
-
-bool IsSystemStorageEvent(const std::string& event_name) {
- return (event_name == system_storage::OnAttached::kEventName ||
- event_name == system_storage::OnDetached::kEventName);
-}
-
-// Event router for systemInfo API. It is a singleton instance shared by
-// multiple profiles.
-class SystemInfoEventRouter : public gfx::DisplayObserver,
- public storage_monitor::RemovableStorageObserver {
- public:
- static SystemInfoEventRouter* GetInstance();
-
- SystemInfoEventRouter();
- virtual ~SystemInfoEventRouter();
-
- // Add/remove event listener for the |event_name| event.
- void AddEventListener(const std::string& event_name);
- void RemoveEventListener(const std::string& event_name);
-
- private:
- // gfx::DisplayObserver:
- virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE;
- virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE;
- virtual void OnDisplayMetricsChanged(const gfx::Display& display,
- uint32_t metrics) OVERRIDE;
-
- // RemovableStorageObserver implementation.
- virtual void OnRemovableStorageAttached(
- const storage_monitor::StorageInfo& info) OVERRIDE;
- virtual void OnRemovableStorageDetached(
- const storage_monitor::StorageInfo& info) OVERRIDE;
-
- // 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);
-
- // 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_;
-
- bool has_storage_monitor_observer_;
-
- DISALLOW_COPY_AND_ASSIGN(SystemInfoEventRouter);
-};
-
-static base::LazyInstance<SystemInfoEventRouter>::Leaky
- g_system_info_event_router = LAZY_INSTANCE_INITIALIZER;
-
-// static
-SystemInfoEventRouter* SystemInfoEventRouter::GetInstance() {
- return g_system_info_event_router.Pointer();
-}
-
-SystemInfoEventRouter::SystemInfoEventRouter()
- : has_storage_monitor_observer_(false) {
-}
-
-SystemInfoEventRouter::~SystemInfoEventRouter() {
- if (has_storage_monitor_observer_) {
- StorageMonitor* storage_monitor = StorageMonitor::GetInstance();
- if (storage_monitor)
- storage_monitor->RemoveObserver(this);
- }
-}
-
-void SystemInfoEventRouter::AddEventListener(const std::string& event_name) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- watching_event_set_.insert(event_name);
- if (watching_event_set_.count(event_name) > 1)
- return;
-
- if (IsDisplayChangedEvent(event_name)) {
- gfx::Screen* screen = DisplayInfoProvider::Get()->GetActiveScreen();
- if (screen)
- screen->AddObserver(this);
- }
-
- if (IsSystemStorageEvent(event_name)) {
- if (!has_storage_monitor_observer_) {
- has_storage_monitor_observer_ = true;
- DCHECK(StorageMonitor::GetInstance()->IsInitialized());
- StorageMonitor::GetInstance()->AddObserver(this);
- }
- }
-}
-
-void SystemInfoEventRouter::RemoveEventListener(const std::string& event_name) {
- DCHECK_CURRENTLY_ON(BrowserThread::UI);
-
- std::multiset<std::string>::iterator it =
- watching_event_set_.find(event_name);
- if (it != watching_event_set_.end()) {
- watching_event_set_.erase(it);
- if (watching_event_set_.count(event_name) > 0)
- return;
- }
-
- if (IsDisplayChangedEvent(event_name)) {
- gfx::Screen* screen = DisplayInfoProvider::Get()->GetActiveScreen();
- if (screen)
- screen->RemoveObserver(this);
- }
-
- if (IsSystemStorageEvent(event_name)) {
- const std::string& other_event_name =
- (event_name == system_storage::OnDetached::kEventName) ?
- system_storage::OnAttached::kEventName :
- system_storage::OnDetached::kEventName;
- if (watching_event_set_.count(other_event_name) == 0) {
- StorageMonitor::GetInstance()->RemoveObserver(this);
- has_storage_monitor_observer_ = false;
- }
- }
-}
-
-void SystemInfoEventRouter::OnRemovableStorageAttached(
- const storage_monitor::StorageInfo& info) {
- StorageUnitInfo unit;
- systeminfo::BuildStorageUnitInfo(info, &unit);
- scoped_ptr<base::ListValue> args(new base::ListValue);
- args->Append(unit.ToValue().release());
- DispatchEvent(system_storage::OnAttached::kEventName, args.Pass());
-}
-
-void SystemInfoEventRouter::OnRemovableStorageDetached(
- const storage_monitor::StorageInfo& info) {
- scoped_ptr<base::ListValue> args(new base::ListValue);
- std::string transient_id =
- StorageMonitor::GetInstance()->GetTransientIdForDeviceId(
- info.device_id());
- args->AppendString(transient_id);
-
- DispatchEvent(system_storage::OnDetached::kEventName, args.Pass());
-}
-
-void SystemInfoEventRouter::OnDisplayAdded(const gfx::Display& new_display) {
- OnDisplayChanged();
-}
-
-void SystemInfoEventRouter::OnDisplayRemoved(const gfx::Display& old_display) {
- OnDisplayChanged();
-}
-
-void SystemInfoEventRouter::OnDisplayMetricsChanged(const gfx::Display& display,
- uint32_t metrics) {
- OnDisplayChanged();
-}
-
-void SystemInfoEventRouter::OnDisplayChanged() {
- scoped_ptr<base::ListValue> args(new base::ListValue());
- DispatchEvent(system_display::OnDisplayChanged::kEventName, args.Pass());
-}
-
-void SystemInfoEventRouter::DispatchEvent(const std::string& event_name,
- scoped_ptr<base::ListValue> args) {
- g_browser_process->extension_event_router_forwarder()->
- BroadcastEventToRenderers(event_name, args.Pass(), GURL());
-}
-
-void AddEventListener(const std::string& event_name) {
- SystemInfoEventRouter::GetInstance()->AddEventListener(event_name);
-}
-
-void RemoveEventListener(const std::string& event_name) {
- SystemInfoEventRouter::GetInstance()->RemoveEventListener(event_name);
-}
-
-} // namespace
-
-static base::LazyInstance<BrowserContextKeyedAPIFactory<SystemInfoAPI> >
- g_factory = LAZY_INSTANCE_INITIALIZER;
-
-// static
-BrowserContextKeyedAPIFactory<SystemInfoAPI>*
-SystemInfoAPI::GetFactoryInstance() {
- return g_factory.Pointer();
-}
-
-SystemInfoAPI::SystemInfoAPI(content::BrowserContext* context)
- : browser_context_(context) {
- EventRouter* router = EventRouter::Get(browser_context_);
- router->RegisterObserver(this, system_storage::OnAttached::kEventName);
- router->RegisterObserver(this, system_storage::OnDetached::kEventName);
- router->RegisterObserver(this, system_display::OnDisplayChanged::kEventName);
-}
-
-SystemInfoAPI::~SystemInfoAPI() {
-}
-
-void SystemInfoAPI::Shutdown() {
- EventRouter::Get(browser_context_)->UnregisterObserver(this);
-}
-
-void SystemInfoAPI::OnListenerAdded(const EventListenerInfo& details) {
- if (IsSystemStorageEvent(details.event_name)) {
- StorageMonitor::GetInstance()->EnsureInitialized(
- base::Bind(&AddEventListener, details.event_name));
- } else {
- AddEventListener(details.event_name);
- }
-}
-
-void SystemInfoAPI::OnListenerRemoved(const EventListenerInfo& details) {
- if (IsSystemStorageEvent(details.event_name)) {
- StorageMonitor::GetInstance()->EnsureInitialized(
- base::Bind(&RemoveEventListener, details.event_name));
- } else {
- RemoveEventListener(details.event_name);
- }
-}
-
-} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698