diff options
Diffstat (limited to 'chrome/browser/automation/automation_tab_tracker.h')
-rw-r--r-- | chrome/browser/automation/automation_tab_tracker.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/chrome/browser/automation/automation_tab_tracker.h b/chrome/browser/automation/automation_tab_tracker.h index 5cda520..bb9ac24 100644 --- a/chrome/browser/automation/automation_tab_tracker.h +++ b/chrome/browser/automation/automation_tab_tracker.h @@ -28,6 +28,11 @@ public: NotificationService::current()->AddObserver( this, NOTIFY_EXTERNAL_TAB_CLOSED, Source<NavigationController>(resource)); + // We also want to know about navigations so we can keep track of the last + // navigation time. + NotificationService::current()->AddObserver( + this, NOTIFY_NAV_ENTRY_COMMITTED, + Source<NavigationController>(resource)); } virtual void RemoveObserver(NavigationController* resource) { @@ -36,7 +41,49 @@ public: NotificationService::current()->RemoveObserver( this, NOTIFY_EXTERNAL_TAB_CLOSED, Source<NavigationController>(resource)); + NotificationService::current()->RemoveObserver( + this, NOTIFY_NAV_ENTRY_COMMITTED, + Source<NavigationController>(resource)); + } + + virtual void Observe(NotificationType type, + const NotificationSource& source, + const NotificationDetails& details) { + switch (type) { + case NOTIFY_NAV_ENTRY_COMMITTED: + last_navigation_times_[Source<NavigationController>(source).ptr()] = + Time::Now(); + return; + case NOTIFY_EXTERNAL_TAB_CLOSED: + case NOTIFY_TAB_CLOSING: + std::map<NavigationController*, Time>::iterator iter = + last_navigation_times_.find( + Source<NavigationController>(source).ptr()); + if (iter != last_navigation_times_.end()) + last_navigation_times_.erase(iter); + break; + } + AutomationResourceTracker::Observe(type, source, details); + } + + Time GetLastNavigationTime(int handle) { + if (ContainsHandle(handle)) { + NavigationController* controller = GetResource(handle); + if (controller) { + std::map<NavigationController*, Time>::const_iterator iter = + last_navigation_times_.find(controller); + if (iter != last_navigation_times_.end()) + return iter->second; + } + } + return Time(); } + + private: + // Last time a navigation occurred. + std::map<NavigationController*, Time> last_navigation_times_; + + DISALLOW_COPY_AND_ASSIGN(AutomationTabTracker); }; #endif // CHROME_BROWSER_AUTOMATION_AUTOMATION_TAB_TRACKER_H__ |