// Copyright (c) 2014 The Chromium OS 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 "login_manager/fake_browser_job.h"

#include "login_manager/fake_child_process.h"

namespace login_manager {

FakeBrowserJob::FakeBrowserJob(const std::string& name)
    : name_(name),
      running_(false),
      schedule_exit_(true),
      should_run_(true) {
}

FakeBrowserJob::FakeBrowserJob(const std::string& name, bool schedule_exit)
    : name_(name),
      running_(false),
      schedule_exit_(schedule_exit),
      should_run_(true) {
}

FakeBrowserJob::~FakeBrowserJob() {}

bool FakeBrowserJob::ShouldRunBrowser() {
  return should_run_;
}

bool FakeBrowserJob::RunInBackground() {
  if (schedule_exit_) {
    DCHECK(fake_process_.get());
    fake_process_->ScheduleExit();
  }
  return running_ = true;
}

const std::string FakeBrowserJob::GetName() const {
  return name_;
}

pid_t FakeBrowserJob::CurrentPid() const {
  DCHECK(fake_process_.get());
  return (running_ ? fake_process_->pid() : -1);
}

void FakeBrowserJob::ClearPid() {
  running_ = false;
}

}  // namespace login_manager
