// Copyright (c) 2010 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/service/service_process.h" #include "base/stl_util-inl.h" #include "chrome/service/cloud_print/cloud_print_proxy.h" #include "chrome/service/net/service_network_change_notifier_thread.h" ServiceProcess* g_service_process = NULL; ServiceProcess::ServiceProcess() { DCHECK(!g_service_process); g_service_process = this; } bool ServiceProcess::Initialize() { base::Thread::Options options; options.message_loop_type = MessageLoop::TYPE_IO; io_thread_.reset(new base::Thread("ServiceProcess_IO")); file_thread_.reset(new base::Thread("ServiceProcess_File")); if (!io_thread_->StartWithOptions(options) || !file_thread_->StartWithOptions(options)) { NOTREACHED(); Teardown(); return false; } network_change_notifier_thread_ = new ServiceNetworkChangeNotifierThread(io_thread_->message_loop()); network_change_notifier_thread_->Initialize(); return true; } bool ServiceProcess::Teardown() { network_change_notifier_thread_ = NULL; io_thread_.reset(); file_thread_.reset(); STLDeleteElements(&cloud_print_proxy_list_); return true; } CloudPrintProxy* ServiceProcess::CreateCloudPrintProxy( JsonPrefStore* service_prefs) { CloudPrintProxy* cloud_print_proxy = new CloudPrintProxy(); cloud_print_proxy->Initialize(service_prefs); cloud_print_proxy_list_.push_back(cloud_print_proxy); return cloud_print_proxy; } ServiceProcess::~ServiceProcess() { Teardown(); DCHECK(cloud_print_proxy_list_.size() == 0); g_service_process = NULL; }