// Copyright 2022 The Chromium Authors // 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