172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// found in the LICENSE file.
472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/sync/profile_sync_test_util.h"
672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/task.h"
872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "base/threading/thread.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenProfileSyncServiceObserverMock::ProfileSyncServiceObserverMock() {}
1172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenProfileSyncServiceObserverMock::~ProfileSyncServiceObserverMock() {}
1372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenThreadNotificationService::ThreadNotificationService(
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    base::Thread* notification_thread)
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    : done_event_(false, false),
1772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      notification_thread_(notification_thread) {}
1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
1972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotificationService::Init() {
2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  notification_thread_->message_loop()->PostTask(
2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      FROM_HERE,
2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NewRunnableMethod(this, &ThreadNotificationService::InitTask));
2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Wait();
2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotificationService::TearDown() {
2872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  notification_thread_->message_loop()->PostTask(
3072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      FROM_HERE,
3172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NewRunnableMethod(this,
3272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        &ThreadNotificationService::TearDownTask));
3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Wait();
3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenThreadNotificationService::~ThreadNotificationService() {}
3772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
3872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotificationService::InitTask() {
3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  service_.reset(new NotificationService());
4072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Signal();
4172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotificationService::TearDownTask() {
4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  service_.reset(NULL);
4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Signal();
4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenThreadNotifier::ThreadNotifier(base::Thread* notify_thread)
4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    : done_event_(false, false),
5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      notify_thread_(notify_thread) {}
5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotifier::Notify(NotificationType type,
5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                            const NotificationDetails& details) {
5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  Notify(type, NotificationService::AllSources(), details);
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotifier::Notify(NotificationType type,
5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                            const NotificationSource& source,
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                            const NotificationDetails& details) {
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  notify_thread_->message_loop()->PostTask(
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      FROM_HERE,
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      NewRunnableMethod(this,
6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        &ThreadNotifier::NotifyTask,
6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        type,
6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        source,
6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                        details));
6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Wait();
6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenThreadNotifier::~ThreadNotifier() {}
7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid ThreadNotifier::NotifyTask(NotificationType type,
7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                const NotificationSource& source,
7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                                const NotificationDetails& details) {
7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  NotificationService::current()->Notify(type, source, details);
7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  done_event_.Signal();
7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen}
79