// Copyright 2015 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/browser/extensions/extension_install_prompt_test_helper.h"

#include "base/bind.h"
#include "base/callback_helpers.h"
#include "testing/gtest/include/gtest/gtest.h"

ExtensionInstallPromptTestHelper::ExtensionInstallPromptTestHelper() {}
ExtensionInstallPromptTestHelper::ExtensionInstallPromptTestHelper(
    const base::Closure& quit_closure) : quit_closure_(quit_closure) {}
ExtensionInstallPromptTestHelper::~ExtensionInstallPromptTestHelper() {}

ExtensionInstallPrompt::DoneCallback
ExtensionInstallPromptTestHelper::GetCallback() {
  return base::Bind(&ExtensionInstallPromptTestHelper::HandleResult,
                    base::Unretained(this));
}

ExtensionInstallPrompt::Result
ExtensionInstallPromptTestHelper::result() const {
  if (!result_.get()) {
    ADD_FAILURE() << "Result was never set!";
    return ExtensionInstallPrompt::Result::ACCEPTED;  // Avoid crashing.
  }
  return *result_;
}

void ExtensionInstallPromptTestHelper::HandleResult(
    ExtensionInstallPrompt::Result result) {
  if (result_.get())
    ADD_FAILURE() << "HandleResult() called twice!";
  if (!quit_closure_.is_null())
    base::ResetAndReturn(&quit_closure_).Run();
  result_.reset(new ExtensionInstallPrompt::Result(result));
}
