Index: chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_browsertest.cc |
diff --git a/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_browsertest.cc b/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_browsertest.cc |
index 405d6de24494cd88b429ad357e8b63254747f228..6bbbd3061e0ff77d294609cf01c3123564e4dd4d 100644 |
--- a/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_browsertest.cc |
+++ b/chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer_browsertest.cc |
@@ -5,6 +5,7 @@ |
#include "chrome/browser/metrics/desktop_session_duration/chrome_visibility_observer.h" |
#include "base/memory/singleton.h" |
+#include "base/run_loop.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_list.h" |
@@ -16,17 +17,38 @@ |
// Mock class for |ChromeVisibilityObserver| for testing. |
class MockChromeVisibilityObserver : public metrics::ChromeVisibilityObserver { |
public: |
- MockChromeVisibilityObserver() : is_active_(false) {} |
+ MockChromeVisibilityObserver() : is_active_(false) { |
+ ResetRunLoop(); |
+ } |
+ |
+ void Wait() { |
+ run_loop_->Run(); |
+ } |
+ |
+ void ResetRunLoop() { |
+ run_loop_.reset(new base::RunLoop()); |
+ } |
bool is_active() const { return is_active_; } |
+ void set_is_active(bool is_active) { is_active_ = is_active; } |
private: |
void SendVisibilityChangeEvent(bool active, |
base::TimeDelta time_ago) override { |
is_active_ = active; |
+ // In this test browser became inactive after browser is removed, thus |
+ // in this case quit runloop in OnBrowserRemoved(). |
+ if (is_active_) |
+ run_loop_->Quit(); |
+ } |
+ |
+ void OnBrowserRemoved(Browser* browser) override { |
+ metrics::ChromeVisibilityObserver::OnBrowserRemoved(browser); |
+ run_loop_->Quit(); |
} |
bool is_active_; |
+ std::unique_ptr<base::RunLoop> run_loop_; |
DISALLOW_COPY_AND_ASSIGN(MockChromeVisibilityObserver); |
}; |
@@ -38,15 +60,27 @@ IN_PROC_BROWSER_TEST_F(ChromeVisibilityObserverBrowserTest, VisibilityTest) { |
EXPECT_FALSE(observer.is_active()); |
Browser* new_browser = CreateBrowser(browser()->profile()); |
+ observer.Wait(); |
EXPECT_TRUE(observer.is_active()); |
+ observer.ResetRunLoop(); |
+ observer.set_is_active(false); |
Browser* incognito_browser = CreateIncognitoBrowser(); |
+ observer.Wait(); |
EXPECT_TRUE(observer.is_active()); |
+ observer.ResetRunLoop(); |
CloseBrowserSynchronously(incognito_browser); |
+ observer.Wait(); |
EXPECT_TRUE(observer.is_active()); |
+ observer.ResetRunLoop(); |
CloseBrowserSynchronously(new_browser); |
+ observer.Wait(); |
+ EXPECT_TRUE(observer.is_active()); |
+ |
+ observer.ResetRunLoop(); |
CloseBrowserSynchronously(browser()); |
+ observer.Wait(); |
EXPECT_FALSE(observer.is_active()); |
} |