// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_LOADER_RECONNECTABLE_URL_LOADER_FACTORY_H_ #define CONTENT_BROWSER_LOADER_RECONNECTABLE_URL_LOADER_FACTORY_H_ #include "base/memory/ref_counted.h" #include "content/common/content_export.h" #include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/remote.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" namespace content { // SharedURLLoaderFactory that caches and reuses a URLLoaderFactory remote // created by its `CreateCallback`, and re-create and reconnect if the cached // remote is disconnected. // All methods (including the `CreateCallback` and the destructor) must be/are // called on the original sequence. // TODO(crbug.com/40947547): Merge `ReconnectableURLLoaderFactoryForIOThread` // and rename the file. class CONTENT_EXPORT ReconnectableURLLoaderFactory final : public network::SharedURLLoaderFactory { … }; // Similar to `ReconnectableURLLoaderFactory`, but this IO-thread-only version // caches a URLLoaderFactory on IO thread at // `ReconnectableURLLoaderFactoryForIOThread::url_loader_factory_` and // re-creates and reconnects it if needed. // // `ReconnectableURLLoaderFactoryForIOThread` must live on UI thread (just // because it is hard-coded using `GetUIThreadTaskRunner`). class CONTENT_EXPORT ReconnectableURLLoaderFactoryForIOThread final : public base::RefCountedThreadSafe< ReconnectableURLLoaderFactoryForIOThread, BrowserThread::DeleteOnIOThread> { … }; // Bundles `ReconnectableURLLoaderFactoryForIOThread` and // `ReconnectableURLLoaderFactory`. The two classes are held separately by this // wrapper instead of e.g. being merged into a single object, so that // `scoped_refptr` for one of them doesn't affect the lifetime of the other. class CONTENT_EXPORT ReconnectableURLLoaderFactoryForIOThreadWrapper final { … }; } // namespace content #endif // CONTENT_BROWSER_LOADER_RECONNECTABLE_URL_LOADER_FACTORY_H_