// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_
#define EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_

#include <memory>
#include <string>

#include "base/memory/weak_ptr.h"
#include "extensions/browser/preload_check.h"

namespace base {
class RunLoop;
}

namespace extensions {

// Provides a callback method for a PreloadCheck that stores its results.
class PreloadCheckRunner {
 public:
  PreloadCheckRunner();

  PreloadCheckRunner(const PreloadCheckRunner&) = delete;
  PreloadCheckRunner& operator=(const PreloadCheckRunner&) = delete;

  virtual ~PreloadCheckRunner();

  // Starts the check, providing OnCheckComplete as the callback.
  void Run(PreloadCheck* check);

  // Starts the check and waits for its callback to execute.
  void RunUntilComplete(PreloadCheck* check);

  // Runs the message loop until OnCheckComplete is called.
  void WaitForComplete();

  // Runs the message loop until idle. Useful to see whether OnCheckComplete is
  // called without waiting indefinitely.
  void WaitForIdle();

  PreloadCheck::ResultCallback GetCallback();

  const PreloadCheck::Errors& errors() const { return errors_; }
  bool called() const { return called_; }

 private:
  void OnCheckComplete(const PreloadCheck::Errors& errors);

  PreloadCheck::Errors errors_;
  bool called_;

  // Using a RunLoop data member would trigger tricky timing troubles.
  std::unique_ptr<base::RunLoop> run_loop_;
};

// Stub for a PreloadCheck that calls the callback with the given error(s).
class PreloadCheckStub : public PreloadCheck {
 public:
  explicit PreloadCheckStub(const Errors& errors);

  PreloadCheckStub(const PreloadCheckStub&) = delete;
  PreloadCheckStub& operator=(const PreloadCheckStub&) = delete;

  ~PreloadCheckStub() override;

  void set_is_async(bool is_async) { is_async_ = is_async; }
  bool started() const { return started_; }

  // PreloadCheck:
  void Start(ResultCallback callback) override;

 private:
  void RunCallback(ResultCallback callback);

  bool is_async_ = false;
  bool started_ = false;
  Errors errors_;

  base::WeakPtrFactory<PreloadCheckStub> weak_ptr_factory_{this};
};

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_
