Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / api / idle / idle_manager.cc
index 450270d..6e97ec0 100644 (file)
@@ -15,7 +15,6 @@
 #include "content/public/browser/notification_details.h"
 #include "content/public/browser/notification_source.h"
 #include "extensions/browser/event_router.h"
-#include "extensions/browser/extension_system.h"
 #include "extensions/common/extension.h"
 
 namespace keys = extensions::idle_api_constants;
@@ -56,21 +55,20 @@ void DefaultEventDelegate::OnStateChanged(const std::string& extension_id,
   scoped_ptr<Event> event(new Event(idle::OnStateChanged::kEventName,
                                     args.Pass()));
   event->restrict_to_browser_context = profile_;
-  ExtensionSystem::Get(profile_)->event_router()->DispatchEventToExtension(
-      extension_id, event.Pass());
+  EventRouter::Get(profile_)
+      ->DispatchEventToExtension(extension_id, event.Pass());
 }
 
 void DefaultEventDelegate::RegisterObserver(
     EventRouter::Observer* observer) {
-  ExtensionSystem::Get(profile_)->event_router()->RegisterObserver(
-      observer, idle::OnStateChanged::kEventName);
+  EventRouter::Get(profile_)
+      ->RegisterObserver(observer, idle::OnStateChanged::kEventName);
 }
 
 void DefaultEventDelegate::UnregisterObserver(EventRouter::Observer* observer) {
-  ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(observer);
+  EventRouter::Get(profile_)->UnregisterObserver(observer);
 }
 
-
 class DefaultIdleProvider : public IdleManager::IdleTimeProvider {
  public:
   DefaultIdleProvider();
@@ -173,6 +171,9 @@ void IdleManager::OnListenerRemoved(const EventListenerInfo& details) {
   MonitorMap::iterator it = monitors_.find(details.extension_id);
   if (it != monitors_.end()) {
     DCHECK_GT(it->second.listeners, 0);
+    // Note: Deliberately leave the listener count as 0 rather than erase()ing
+    // this record so that the threshold doesn't get reset when all listeners
+    // are removed.
     --it->second.listeners;
   }
 }
@@ -261,24 +262,18 @@ void IdleManager::UpdateIdleStateCallback(int idle_time) {
 
   for (MonitorMap::iterator it = monitors_.begin();
        it != monitors_.end(); ++it) {
-    if (it->second.listeners < 1)
-      continue;
-
-    ++listener_count;
-
-    IdleState new_state = IdleTimeToIdleState(locked,
-                                              idle_time,
-                                              it->second.threshold);
-
-    if (new_state != it->second.last_state) {
-      it->second.last_state = new_state;
+    IdleMonitor& monitor = it->second;
+    IdleState new_state =
+        IdleTimeToIdleState(locked, idle_time, monitor.threshold);
+    // TODO(kalman): Use EventRouter::HasListeners for these sorts of checks.
+    if (monitor.listeners > 0 && monitor.last_state != new_state)
       event_delegate_->OnStateChanged(it->first, new_state);
-    }
+    monitor.last_state = new_state;
+    listener_count += monitor.listeners;
   }
 
-  if (listener_count == 0) {
+  if (listener_count == 0)
     StopPolling();
-  }
 }
 
 }  // namespace extensions