blob: aa51a732dd200e7cba242fef1b364c0e3e2a6a3a [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.
#ifndef EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_
#define EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_
#include <vector>
#include "base/callback.h"
#include "base/scoped_observation.h"
#include "base/values.h"
#include "extensions/browser/api/test/test_api_observer.h"
#include "extensions/browser/api/test/test_api_observer_registry.h"
namespace extensions {
// Intercepts results sent via chrome.test.sendScriptResult().
// TODO(devlin): Add details of this class and sendScriptResult() to
// //extensions/docs/extension_tests.md.
class ScriptResultQueue : public TestApiObserver {
public:
ScriptResultQueue();
~ScriptResultQueue() override;
// TestApiObserver:
void OnScriptResult(const base::Value& script_result) override;
// Returns the next result, optionally waiting for it to come in.
base::Value GetNextResult();
const std::vector<base::Value>& results() const { return results_; }
private:
// The index of the next result to return.
size_t next_result_index_ = 0u;
// The collection of all script results this queue has seen.
std::vector<base::Value> results_;
// Quit closure to call when waiting for a result.
base::OnceClosure quit_closure_;
base::ScopedObservation<TestApiObserverRegistry, TestApiObserver>
test_api_observation_{this};
};
} // namespace extensions
#endif // EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_