blob: 80ba3605dfe37a87f793ff4b389a4ca097dbc44f [file] [log] [blame]
// Copyright 2022 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 "extensions/browser/script_result_queue.h"
#include "base/run_loop.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace extensions {
ScriptResultQueue::ScriptResultQueue() {
test_api_observation_.Observe(
extensions::TestApiObserverRegistry::GetInstance());
}
ScriptResultQueue::~ScriptResultQueue() = default;
void ScriptResultQueue::OnScriptResult(const base::Value& script_result) {
results_.push_back(script_result.Clone());
if (quit_closure_)
std::move(quit_closure_).Run();
}
base::Value ScriptResultQueue::GetNextResult() {
if (next_result_index_ >= results_.size()) {
base::RunLoop run_loop;
quit_closure_ = run_loop.QuitClosure();
run_loop.Run();
}
if (next_result_index_ >= results_.size()) {
// This can happen if the run loop times out. Handle it gracefully to avoid
// crashing the test runner.
ADD_FAILURE() << "Could not get next result at index "
<< next_result_index_;
return base::Value();
}
return results_[next_result_index_++].Clone();
}
} // namespace extensions