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