network_service_network_delegate.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef SERVICES_NETWORK_NETWORK_SERVICE_NETWORK_DELEGATE_H_
  5. #define SERVICES_NETWORK_NETWORK_SERVICE_NETWORK_DELEGATE_H_
  6. #include "base/component_export.h"
  7. #include "base/memory/raw_ptr.h"
  8. #include "mojo/public/cpp/bindings/pending_remote.h"
  9. #include "mojo/public/cpp/bindings/remote.h"
  10. #include "net/base/completion_once_callback.h"
  11. #include "net/base/network_delegate_impl.h"
  12. #include "net/cookies/same_party_context.h"
  13. #include "services/network/cookie_settings.h"
  14. #include "services/network/network_context.h"
  15. #include "third_party/abseil-cpp/absl/types/optional.h"
  16. namespace net {
  17. class SiteForCookies;
  18. } // namespace net
  19. namespace network {
  20. // TODO(mmenke): Look into merging this with URLLoader, and removing the
  21. // NetworkDelegate interface.
  22. class COMPONENT_EXPORT(NETWORK_SERVICE) NetworkServiceNetworkDelegate
  23. : public net::NetworkDelegateImpl {
  24. public:
  25. // |network_context| is guaranteed to outlive this class.
  26. NetworkServiceNetworkDelegate(
  27. bool enable_referrers,
  28. bool validate_referrer_policy_on_initial_request,
  29. mojo::PendingRemote<mojom::ProxyErrorClient> proxy_error_client_remote,
  30. NetworkContext* network_context);
  31. NetworkServiceNetworkDelegate(const NetworkServiceNetworkDelegate&) = delete;
  32. NetworkServiceNetworkDelegate& operator=(
  33. const NetworkServiceNetworkDelegate&) = delete;
  34. ~NetworkServiceNetworkDelegate() override;
  35. void set_enable_referrers(bool enable_referrers) {
  36. enable_referrers_ = enable_referrers;
  37. }
  38. private:
  39. using QueryReason = CookieSettings::QueryReason;
  40. // net::NetworkDelegateImpl implementation.
  41. int OnBeforeURLRequest(net::URLRequest* request,
  42. net::CompletionOnceCallback callback,
  43. GURL* new_url) override;
  44. int OnBeforeStartTransaction(
  45. net::URLRequest* request,
  46. const net::HttpRequestHeaders& headers,
  47. OnBeforeStartTransactionCallback callback) override;
  48. int OnHeadersReceived(
  49. net::URLRequest* request,
  50. net::CompletionOnceCallback callback,
  51. const net::HttpResponseHeaders* original_response_headers,
  52. scoped_refptr<net::HttpResponseHeaders>* override_response_headers,
  53. const net::IPEndPoint& endpoint,
  54. absl::optional<GURL>* preserve_fragment_on_redirect_url) override;
  55. void OnBeforeRedirect(net::URLRequest* request,
  56. const GURL& new_location) override;
  57. void OnResponseStarted(net::URLRequest* request, int net_error) override;
  58. void OnCompleted(net::URLRequest* request,
  59. bool started,
  60. int net_error) override;
  61. void OnPACScriptError(int line_number, const std::u16string& error) override;
  62. bool OnAnnotateAndMoveUserBlockedCookies(
  63. const net::URLRequest& request,
  64. net::CookieAccessResultList& maybe_included_cookies,
  65. net::CookieAccessResultList& excluded_cookies) override;
  66. bool OnCanSetCookie(const net::URLRequest& request,
  67. const net::CanonicalCookie& cookie,
  68. net::CookieOptions* options) override;
  69. net::NetworkDelegate::PrivacySetting OnForcePrivacyMode(
  70. const GURL& url,
  71. const net::SiteForCookies& site_for_cookies,
  72. const absl::optional<url::Origin>& top_frame_origin,
  73. net::SamePartyContext::Type same_party_context_type) const override;
  74. bool OnCancelURLRequestWithPolicyViolatingReferrerHeader(
  75. const net::URLRequest& request,
  76. const GURL& target_url,
  77. const GURL& referrer_url) const override;
  78. bool OnCanQueueReportingReport(const url::Origin& origin) const override;
  79. void OnCanSendReportingReports(std::set<url::Origin> origins,
  80. base::OnceCallback<void(std::set<url::Origin>)>
  81. result_callback) const override;
  82. bool OnCanSetReportingClient(const url::Origin& origin,
  83. const GURL& endpoint) const override;
  84. bool OnCanUseReportingClient(const url::Origin& origin,
  85. const GURL& endpoint) const override;
  86. int HandleClearSiteDataHeader(
  87. net::URLRequest* request,
  88. net::CompletionOnceCallback callback,
  89. const net::HttpResponseHeaders* original_response_headers);
  90. void FinishedClearSiteData(base::WeakPtr<net::URLRequest> request,
  91. net::CompletionOnceCallback callback);
  92. void FinishedCanSendReportingReports(
  93. base::OnceCallback<void(std::set<url::Origin>)> result_callback,
  94. const std::vector<url::Origin>& origins);
  95. void ForwardProxyErrors(int net_error);
  96. // Truncates the given request's referrer if required by
  97. // related configuration (for instance, the enable_referrers_
  98. // attribute or pertinent features/flags)
  99. void MaybeTruncateReferrer(net::URLRequest* request,
  100. const GURL& effective_url);
  101. bool enable_referrers_;
  102. bool validate_referrer_policy_on_initial_request_;
  103. mojo::Remote<mojom::ProxyErrorClient> proxy_error_client_;
  104. raw_ptr<NetworkContext> network_context_;
  105. mutable base::WeakPtrFactory<NetworkServiceNetworkDelegate> weak_ptr_factory_{
  106. this};
  107. };
  108. } // namespace network
  109. #endif // SERVICES_NETWORK_NETWORK_SERVICE_NETWORK_DELEGATE_H_