Add new certificateProvider extension API.
[chromium-blink-merge.git] / chrome / browser / metrics / thread_watcher_android_unittest.cc
bloba80e7ef4f1222af8990878b97898bd724dba2352
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
6 #include "base/android/application_status_listener.h"
7 #include "base/run_loop.h"
8 #include "base/synchronization/waitable_event.h"
9 #include "chrome/browser/metrics/thread_watcher.h"
10 #include "chrome/browser/metrics/thread_watcher_android.h"
11 #include "content/public/test/test_browser_thread.h"
12 #include "testing/gtest/include/gtest/gtest.h"
14 using content::BrowserThread;
16 namespace {
17 void OnThreadWatcherTask(base::WaitableEvent* event) {
18 event->Signal();
21 void PostAndWaitForWatchdogThread(base::WaitableEvent* event) {
22 WatchDogThread::PostDelayedTask(
23 FROM_HERE,
24 base::Bind(&OnThreadWatcherTask, event),
25 base::TimeDelta::FromSeconds(0));
27 EXPECT_TRUE(event->TimedWait(base::TimeDelta::FromSeconds(1)));
30 void NotifyApplicationStateChange(base::android::ApplicationState state) {
31 base::WaitableEvent watchdog_thread_event(false, false);
33 base::android::ApplicationStatusListener::NotifyApplicationStateChange(state);
34 base::RunLoop().RunUntilIdle();
36 PostAndWaitForWatchdogThread(&watchdog_thread_event);
39 } // namespace
41 TEST(ThreadWatcherAndroidTest, ApplicationStatusNotification) {
42 // Do not delay the ThreadWatcherList initialization for this test.
43 ThreadWatcherList::g_initialize_delay_seconds = 0;
45 base::MessageLoopForUI message_loop_for_ui;
46 content::TestBrowserThread ui_thread(BrowserThread::UI, &message_loop_for_ui);
49 scoped_ptr<WatchDogThread> watchdog_thread_(new WatchDogThread());
50 watchdog_thread_->StartAndWaitForTesting();
52 EXPECT_FALSE(ThreadWatcherList::g_thread_watcher_list_);
55 // Register, and notify the application has just started,
56 // and ensure the thread watcher list is created.
57 ThreadWatcherAndroid::RegisterApplicationStatusListener();
58 ThreadWatcherList::StartWatchingAll(*base::CommandLine::ForCurrentProcess());
59 NotifyApplicationStateChange(
60 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES);
61 EXPECT_TRUE(ThreadWatcherList::g_thread_watcher_list_);
63 // Notify the application has been stopped, and ensure the thread watcher list
64 // has been destroyed.
65 NotifyApplicationStateChange(
66 base::android::APPLICATION_STATE_HAS_STOPPED_ACTIVITIES);
67 EXPECT_FALSE(ThreadWatcherList::g_thread_watcher_list_);
69 // And again the last transition, STOPPED -> STARTED.
70 NotifyApplicationStateChange(
71 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES);
72 EXPECT_TRUE(ThreadWatcherList::g_thread_watcher_list_);
74 // ThreadWatcherList::StartWatchingAll() creates g_thread_watcher_observer_.
75 // This should be released by ThreadWatcherList::StopWatchingAll() in the end
76 // of test to not affect other test cases.
77 ThreadWatcherList::StopWatchingAll();