// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef SERVICES_NETWORK_RESOURCE_SCHEDULER_RESOURCE_SCHEDULER_H_ #define SERVICES_NETWORK_RESOURCE_SCHEDULER_RESOURCE_SCHEDULER_H_ #include <stddef.h> #include <stdint.h> #include <map> #include <memory> #include <optional> #include <set> #include <utility> #include <vector> #include "base/compiler_specific.h" #include "base/component_export.h" #include "base/feature_list.h" #include "base/functional/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/scoped_refptr.h" #include "base/sequence_checker.h" #include "base/time/time.h" #include "base/timer/timer.h" #include "base/unguessable_token.h" #include "net/base/priority_queue.h" #include "net/base/request_priority.h" #include "net/nqe/effective_connection_type.h" #include "services/network/is_browser_initiated.h" #include "services/network/resource_scheduler/resource_scheduler_params_manager.h" namespace base { class SequencedTaskRunner; class TickClock; } // namespace base namespace net { class URLRequest; class NetworkQualityEstimator; } // namespace net namespace network { // There is one ResourceScheduler. All renderer-initiated HTTP requests are // expected to pass through it. // // There are two types of input to the scheduler: // 1. Requests to start, cancel, or finish fetching a resource. // 2. Notifications for renderer events, such as new tabs, navigation and // painting. // // These input come from different threads, so they may not be in sync. The UI // thread is considered the authority on renderer lifetime, which means some // IPCs may be meaningless if they arrive after the UI thread signals a renderer // has been deleted. // // The ResourceScheduler tracks many Clients, which should correlate with tabs. // A client is uniquely identified by an opaque identifier. // // Each Client may have many Requests in flight. Requests are uniquely // identified within a Client by its ScheduledResourceRequest. // // Users should call ScheduleRequest() to notify this ResourceScheduler of a new // request. The returned ResourceThrottle should be destroyed when the load // finishes or is canceled, before the net::URLRequest. // // The scheduler may defer issuing the request via the ResourceThrottle // interface or it may alter the request's priority by calling set_priority() on // the URLRequest. class COMPONENT_EXPORT(NETWORK_SERVICE) ResourceScheduler final { … }; } // namespace network #endif // SERVICES_NETWORK_RESOURCE_SCHEDULER_RESOURCE_SCHEDULER_H_