blob: 70fc6e2fa4b884d65b7bbfda4c4bde6a30fc67cd [file] [log] [blame]
// Copyright 2019 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_URL_LOADER_FACTORY_PARAMS_HELPER_H_
#define CONTENT_BROWSER_URL_LOADER_FACTORY_PARAMS_HELPER_H_
#include <string_view>
#include "content/common/content_export.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "services/network/public/mojom/cross_origin_embedder_policy.mojom-forward.h"
#include "services/network/public/mojom/early_hints.mojom-forward.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_loader.mojom-shared.h"
#include "url/origin.h"
namespace net {
class IsolationInfo;
} // namespace net
namespace network {
namespace mojom {
class SharedDictionaryAccessObserver;
} // namespace mojom
} // namespace network
namespace content {
class NavigationRequest;
class RenderFrameHostImpl;
class RenderProcessHost;
// URLLoaderFactoryParamsHelper encapsulates details of how to create
// network::mojom::URLLoaderFactoryParams (taking //content-focused parameters,
// calling into ContentBrowserClient's OverrideURLLoaderFactoryParams method,
// etc.)
class URLLoaderFactoryParamsHelper {
public:
// Creates URLLoaderFactoryParams for a factory to be used from |process|,
// with parameters controlled by |frame| and |origin|.
//
// This overload is used to create a factory for:
// - fetching subresources from the |frame|
// - fetching subresources from a dedicated worker associated with the |frame|
// - fetching main worker script (when the worker is created by the |frame|)
//
// |origin| is exposed as a separate parameter, to accommodate calls during
// ready-to-commit time (when |frame|'s GetLastCommittedOrigin has not been
// updated yet).
//
// |process| is exposed as a separate parameter, to accommodate creating
// factories for dedicated workers (where the |process| hosting the worker
// might be different from the process hosting the |frame|).
CONTENT_EXPORT static network::mojom::URLLoaderFactoryParamsPtr
CreateForFrame(
RenderFrameHostImpl* frame,
const url::Origin& origin,
const net::IsolationInfo& isolation_info,
network::mojom::ClientSecurityStatePtr client_security_state,
mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter>
coep_reporter,
mojo::PendingRemote<network::mojom::DocumentIsolationPolicyReporter>
dip_reporter,
RenderProcessHost* process,
network::mojom::TrustTokenOperationPolicyVerdict
trust_token_issuance_policy,
network::mojom::TrustTokenOperationPolicyVerdict
trust_token_redemption_policy,
net::CookieSettingOverrides cookie_setting_overrides,
std::string_view debug_tag);
// Creates URLLoaderFactoryParams to be used by |isolated_world_origin| hosted
// within the |frame|.
//
// TODO(crbug.com/40137011): Remove the CreateForIsolatedWorld method
// once Chrome Platform Apps are gone.
static network::mojom::URLLoaderFactoryParamsPtr CreateForIsolatedWorld(
RenderFrameHostImpl* frame,
const url::Origin& isolated_world_origin,
const url::Origin& main_world_origin,
const net::IsolationInfo& isolation_info,
network::mojom::ClientSecurityStatePtr client_security_state,
network::mojom::TrustTokenOperationPolicyVerdict
trust_token_issuance_policy,
network::mojom::TrustTokenOperationPolicyVerdict
trust_token_redemption_policy,
net::CookieSettingOverrides cookie_setting_overrides);
static network::mojom::URLLoaderFactoryParamsPtr CreateForPrefetch(
RenderFrameHostImpl* frame,
network::mojom::ClientSecurityStatePtr client_security_state,
net::CookieSettingOverrides cookie_setting_overrides);
// Creates URLLoaderFactoryParams for either fetching the worker script or for
// fetches initiated from a worker.
static network::mojom::URLLoaderFactoryParamsPtr CreateForWorker(
RenderProcessHost* process,
const url::Origin& request_initiator,
const net::IsolationInfo& isolation_info,
mojo::PendingRemote<network::mojom::CrossOriginEmbedderPolicyReporter>
coep_reporter,
mojo::PendingRemote<network::mojom::DocumentIsolationPolicyReporter>
dip_reporter,
mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
url_loader_network_observer,
mojo::PendingRemote<network::mojom::DevToolsObserver> devtools_observer,
network::mojom::ClientSecurityStatePtr client_security_state,
std::string_view debug_tag,
bool require_cross_site_request_for_cookies,
bool is_for_service_worker);
// Creates URLLoaderFactoryParams for Early Hints preload.
// When a redirect happens, a URLLoaderFactory created from the
// URLLoaderFactoryParams must be destroyed since some parameters are
// calculated from speculative state of `navigation_request`.
static network::mojom::URLLoaderFactoryParamsPtr CreateForEarlyHintsPreload(
RenderProcessHost* process,
const url::Origin& tentative_origin,
NavigationRequest& navigation_request,
const network::mojom::EarlyHints& early_hints,
mojo::PendingRemote<network::mojom::CookieAccessObserver> cookie_observer,
mojo::PendingRemote<network::mojom::TrustTokenAccessObserver>
trust_token_observer,
mojo::PendingRemote<network::mojom::SharedDictionaryAccessObserver>
shared_dictionary_observer,
mojo::PendingRemote<network::mojom::DeviceBoundSessionAccessObserver>
device_bound_session_observer);
private:
// Only static methods.
URLLoaderFactoryParamsHelper() = delete;
};
} // namespace content
#endif // CONTENT_BROWSER_URL_LOADER_FACTORY_PARAMS_HELPER_H_