#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;
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();
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;
}
}
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