// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_INSTRUMENTATION_H_ #define CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_INSTRUMENTATION_H_ /* The functions in this file are for routing instrumentation signals to the relevant set of devtools protocol handlers. */ #include #include "base/optional.h" #include "content/common/navigation_params.mojom.h" #include "content/public/browser/certificate_request_result_type.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "services/network/public/mojom/network_service.mojom.h" #include "services/network/public/mojom/url_loader_factory.mojom.h" #include "services/network/public/mojom/url_response_head.mojom-forward.h" class GURL; namespace base { class UnguessableToken; } namespace net { class SSLInfo; class X509Certificate; struct CookieWithStatus; } // namespace net namespace download { struct DownloadCreateInfo; class DownloadItem; } // namespace download namespace content { class SignedExchangeEnvelope; class FrameTreeNode; class NavigationHandle; class NavigationRequest; class NavigationThrottle; class RenderFrameHostImpl; class RenderProcessHost; class WebContents; struct SignedExchangeError; namespace devtools_instrumentation { void ApplyNetworkRequestOverrides(FrameTreeNode* frame_tree_node, mojom::BeginNavigationParams* begin_params, bool* report_raw_headers); bool WillCreateURLLoaderFactory( RenderFrameHostImpl* rfh, bool is_navigation, bool is_download, mojo::PendingReceiver* loader_factory_receiver, network::mojom::URLLoaderFactoryOverridePtr* factory_override); bool WillCreateURLLoaderFactoryForServiceWorker( RenderProcessHost* rph, int routing_id, network::mojom::URLLoaderFactoryOverridePtr* factory_override); bool WillCreateURLLoaderFactory( RenderFrameHostImpl* rfh, bool is_navigation, bool is_download, std::unique_ptr* factory); void OnResetNavigationRequest(NavigationRequest* navigation_request); void OnNavigationRequestWillBeSent(const NavigationRequest& navigation_request); void OnNavigationResponseReceived( const NavigationRequest& nav_request, const network::mojom::URLResponseHead& response); void OnNavigationRequestFailed( const NavigationRequest& nav_request, const network::URLLoaderCompletionStatus& status); void WillBeginDownload(download::DownloadCreateInfo* info, download::DownloadItem* item); void OnSignedExchangeReceived( FrameTreeNode* frame_tree_node, base::Optional devtools_navigation_token, const GURL& outer_request_url, const network::mojom::URLResponseHead& outer_response, const base::Optional& header, const scoped_refptr& certificate, const base::Optional& ssl_info, const std::vector& errors); void OnSignedExchangeCertificateRequestSent( FrameTreeNode* frame_tree_node, const base::UnguessableToken& request_id, const base::UnguessableToken& loader_id, const network::ResourceRequest& request, const GURL& signed_exchange_url); void OnSignedExchangeCertificateResponseReceived( FrameTreeNode* frame_tree_node, const base::UnguessableToken& request_id, const base::UnguessableToken& loader_id, const GURL& url, const network::mojom::URLResponseHead& head); void OnSignedExchangeCertificateRequestCompleted( FrameTreeNode* frame_tree_node, const base::UnguessableToken& request_id, const network::URLLoaderCompletionStatus& status); void OnRequestWillBeSentExtraInfo( int process_id, int routing_id, const std::string& devtools_request_id, const net::CookieStatusList& request_cookie_list, const std::vector& request_headers); void OnResponseReceivedExtraInfo( int process_id, int routing_id, const std::string& devtools_request_id, const net::CookieAndLineStatusList& response_cookie_list, const std::vector& response_headers, const base::Optional& response_headers_text); void OnCorsPreflightRequest(int32_t process_id, int32_t render_frame_id, const base::UnguessableToken& devtools_request_id, const network::ResourceRequest& request, const GURL& signed_exchange_url); void OnCorsPreflightResponse(int32_t process_id, int32_t render_frame_id, const base::UnguessableToken& devtools_request_id, const GURL& url, network::mojom::URLResponseHeadPtr head); void OnCorsPreflightRequestCompleted( int32_t process_id, int32_t render_frame_id, const base::UnguessableToken& devtools_request_id, const network::URLLoaderCompletionStatus& status); std::vector> CreateNavigationThrottles( NavigationHandle* navigation_handle); bool ShouldWaitForDebuggerInWindowOpen(); // Asks any interested agents to handle the given certificate error. Returns // |true| if the error was handled, |false| otherwise. using CertErrorCallback = base::RepeatingCallback; bool HandleCertificateError(WebContents* web_contents, int cert_error, const GURL& request_url, CertErrorCallback callback); void PortalAttached(RenderFrameHostImpl* render_frame_host_impl); void PortalDetached(RenderFrameHostImpl* render_frame_host_impl); void PortalActivated(RenderFrameHostImpl* render_frame_host_impl); void ReportSameSiteCookieIssue(RenderFrameHostImpl* render_frame_host_impl, const net::CookieWithStatus& excluded_cookie, const GURL& url, const GURL& site_for_cookies); } // namespace devtools_instrumentation } // namespace content #endif // CONTENT_BROWSER_DEVTOOLS_DEVTOOLS_INSTRUMENTATION_H_