// 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_GROUP_H_ #define EXTENSIONS_BROWSER_PRELOAD_CHECK_GROUP_H_ #include #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "base/threading/thread_checker.h" #include "extensions/browser/preload_check.h" namespace extensions { // PreloadCheckGroup runs a collection of other PreloadChecks and reports their // collective status once they have all finished. To stop the remaining checks // upon hitting the first error, use set_stop_on_first_error(). class PreloadCheckGroup : public PreloadCheck { public: PreloadCheckGroup(); ~PreloadCheckGroup() override; // Adds a check to run. Not owned. Must be called before Start(). void AddCheck(PreloadCheck* check); // PreloadCheck: void Start(ResultCallback callback) override; void set_stop_on_first_error(bool value) { stop_on_first_error_ = value; } private: // Saves any errors and may invoke the callback. virtual void OnCheckComplete(const Errors& errors); // Invokes the callback if the checks are considered finished. void MaybeInvokeCallback(); base::ThreadChecker thread_checker_; // If true, the callback is invoked early when the first check fails, // stopping the remaining checks. bool stop_on_first_error_ = false; // Checks to run. Not owned. std::vector checks_; ResultCallback callback_; int running_checks_ = 0; Errors errors_; base::WeakPtrFactory weak_ptr_factory_; DISALLOW_COPY_AND_ASSIGN(PreloadCheckGroup); }; } // namespace extensions #endif // EXTENSIONS_BROWSER_PRELOAD_CHECK_GROUP_H_