script_result_queue.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // Copyright 2022 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_
  5. #define EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_
  6. #include <vector>
  7. #include "base/callback.h"
  8. #include "base/scoped_observation.h"
  9. #include "base/values.h"
  10. #include "extensions/browser/api/test/test_api_observer.h"
  11. #include "extensions/browser/api/test/test_api_observer_registry.h"
  12. namespace extensions {
  13. // Intercepts results sent via chrome.test.sendScriptResult().
  14. // TODO(devlin): Add details of this class and sendScriptResult() to
  15. // //extensions/docs/extension_tests.md.
  16. class ScriptResultQueue : public TestApiObserver {
  17. public:
  18. ScriptResultQueue();
  19. ~ScriptResultQueue() override;
  20. // TestApiObserver:
  21. void OnScriptResult(const base::Value& script_result) override;
  22. // Returns the next result, optionally waiting for it to come in.
  23. base::Value GetNextResult();
  24. const std::vector<base::Value>& results() const { return results_; }
  25. private:
  26. // The index of the next result to return.
  27. size_t next_result_index_ = 0u;
  28. // The collection of all script results this queue has seen.
  29. std::vector<base::Value> results_;
  30. // Quit closure to call when waiting for a result.
  31. base::OnceClosure quit_closure_;
  32. base::ScopedObservation<TestApiObserverRegistry, TestApiObserver>
  33. test_api_observation_{this};
  34. };
  35. } // namespace extensions
  36. #endif // EXTENSIONS_BROWSER_SCRIPT_RESULT_QUEUE_H_