blob: d849ef770bb40c34f53427a321daf9234f535bc9 [file] [log] [blame]
// Copyright 2017 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.
#ifndef EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_
#define EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/strings/string16.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();
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(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_;
DISALLOW_COPY_AND_ASSIGN(PreloadCheckRunner);
};
// Stub for a PreloadCheck that calls the callback with the given error(s).
class PreloadCheckStub : public PreloadCheck {
public:
explicit PreloadCheckStub(const Errors& errors);
~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_;
DISALLOW_COPY_AND_ASSIGN(PreloadCheckStub);
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_PRELOAD_CHECK_TEST_UTIL_H_