#ifndef IOS_WEB_PUBLIC_BROWSER_STATE_H_
#define IOS_WEB_PUBLIC_BROWSER_STATE_H_
#include <memory>
#include "base/memory/raw_ptr.h"
#include "base/supports_user_data.h"
#include "base/uuid.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "services/network/public/mojom/cookie_manager.mojom.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/network_service.mojom.h"
#include "services/network/public/mojom/proxy_resolving_socket.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
namespace base {
class FilePath;
}
namespace net {
class URLRequestContextGetter;
}
namespace network {
class SharedURLLoaderFactory;
class WeakWrapperSharedURLLoaderFactory;
}
namespace leveldb_proto {
class ProtoDatabaseProvider;
}
namespace web {
class CertificatePolicyCache;
class NetworkContextOwner;
class URLDataManagerIOS;
class URLDataManagerIOSBackend;
class URLRequestChromeJob;
class BrowserState : public base::SupportsUserData {
public:
~BrowserState() override;
static scoped_refptr<CertificatePolicyCache> GetCertificatePolicyCache(
BrowserState* browser_state);
virtual bool IsOffTheRecord() const = 0;
virtual base::FilePath GetStatePath() const = 0;
virtual net::URLRequestContextGetter* GetRequestContext() = 0;
network::mojom::URLLoaderFactory* GetURLLoaderFactory();
network::mojom::CookieManager* GetCookieManager();
network::mojom::NetworkContext* GetNetworkContext();
leveldb_proto::ProtoDatabaseProvider* GetProtoDatabaseProvider();
void GetProxyResolvingSocketFactory(
mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory>
receiver);
virtual scoped_refptr<network::SharedURLLoaderFactory>
GetSharedURLLoaderFactory();
static BrowserState* FromSupportsUserData(
base::SupportsUserData* supports_user_data);
virtual void UpdateCorsExemptHeader(
network::mojom::NetworkContextParams* params) {}
virtual const base::Uuid& GetWebKitStorageID() const;
protected:
BrowserState();
private:
friend class URLDataManagerIOS;
friend class URLRequestChromeJob;
URLDataManagerIOSBackend* GetURLDataManagerIOSBackendOnIOThread();
void CreateNetworkContextIfNecessary();
mojo::Remote<network::mojom::URLLoaderFactory> url_loader_factory_;
mojo::Remote<network::mojom::CookieManager> cookie_manager_;
std::unique_ptr<leveldb_proto::ProtoDatabaseProvider>
proto_database_provider_;
scoped_refptr<network::WeakWrapperSharedURLLoaderFactory>
shared_url_loader_factory_;
mojo::Remote<network::mojom::NetworkContext> network_context_;
std::unique_ptr<NetworkContextOwner> network_context_owner_;
raw_ptr<URLDataManagerIOSBackend> url_data_manager_ios_backend_;
};
}
#endif