// Copyright 2013 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 "content/utility/in_process_utility_thread.h"

#include "content/child/child_process.h"
#include "content/utility/utility_thread_impl.h"

namespace content {

// We want to ensure there's only one utility thread running at a time, as there
// are many globals used in the utility process.
static base::LazyInstance<base::Lock> g_one_utility_thread_lock;

InProcessUtilityThread::InProcessUtilityThread(const std::string& channel_id)
    : Thread("Chrome_InProcUtilityThread"), channel_id_(channel_id) {
}

InProcessUtilityThread::~InProcessUtilityThread() {
  // Wait till in-process utility thread finishes clean up.
  bool previous_value = base::ThreadRestrictions::SetIOAllowed(true);
  Stop();
  base::ThreadRestrictions::SetIOAllowed(previous_value);
}

void InProcessUtilityThread::Init() {
  // We need to return right away or else the main thread that started us will
  // hang.
  base::MessageLoop::current()->PostTask(
      FROM_HERE,
      base::Bind(&InProcessUtilityThread::InitInternal,
                 base::Unretained(this)));
}

void InProcessUtilityThread::CleanUp() {
  child_process_.reset();

  // See comment in RendererMainThread.
  SetThreadWasQuitProperly(true);
  g_one_utility_thread_lock.Get().Release();
}

void InProcessUtilityThread::InitInternal() {
  g_one_utility_thread_lock.Get().Acquire();
  child_process_.reset(new ChildProcess());
  child_process_->set_main_thread(new UtilityThreadImpl(channel_id_));
}

base::Thread* CreateInProcessUtilityThread(const std::string& channel_id) {
  return new InProcessUtilityThread(channel_id);
}

}  // namespace content
