// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_RESOURCE_COORDINATOR_TAB_LOAD_TRACKER_H_ #define CHROME_BROWSER_RESOURCE_COORDINATOR_TAB_LOAD_TRACKER_H_ #include "base/containers/flat_map.h" #include "base/functional/callback.h" #include "base/gtest_prod_util.h" #include "base/observer_list.h" #include "base/process/kill.h" #include "base/sequence_checker.h" #include "chrome/browser/resource_coordinator/lifecycle_unit_state.mojom-shared.h" namespace content { class WebContents; } // namespace content namespace resource_coordinator { class ResourceCoordinatorParts; class ResourceCoordinatorTabHelper; // DEPRECATED. New users must observe PageNode::IsLoading() with a // PageNodeObserver. For guidance: //components/performance_manager/OWNERS // // This class has the sole purpose of tracking the state of all tab-related // WebContents, and whether or not they are in an unloaded, currently loading, // or loaded state. // // This class must be bound to a given Sequence and all access to it must occur // on that Sequence. In practice, this is intended to be on the UI thread as the // notifications of interest occur natively on that thread. All calculations are // very short and quick, so it is suitable for use on that thread. // // This class is intended to be created in early startup and persists as a // singleton in the browser process. It is deliberately leaked at shutdown. // // This class isn't directly an observer of anything. An external source must // invoke the callbacks in the protected section of the class. In the case of // the TabManager this is done by a combination of the // ResourceCoordinatorTabHelper and the // TabManagerResourceCoordinatorSignalObserver. class TabLoadTracker { … }; // A class for observing loading state changes of WebContents under observation // by a given TabLoadTracker. All of the callbacks will be invoked on the // sequence to which the TabLoadTracker is bound. class TabLoadTracker::Observer { … }; } // namespace resource_coordinator #endif // CHROME_BROWSER_RESOURCE_COORDINATOR_TAB_LOAD_TRACKER_H_