diff options
Diffstat (limited to 'chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h')
-rw-r--r-- | chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h b/chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h new file mode 100644 index 00000000000..352a84291d7 --- /dev/null +++ b/chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h @@ -0,0 +1,72 @@ +// 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 CHROME_BROWSER_SIGNIN_CHROME_SIGNIN_URL_LOADER_THROTTLE_H_ +#define CHROME_BROWSER_SIGNIN_CHROME_SIGNIN_URL_LOADER_THROTTLE_H_ + +#include "base/supports_user_data.h" +#include "content/public/browser/web_contents.h" +#include "net/http/http_request_headers.h" +#include "services/network/public/mojom/fetch_api.mojom-shared.h" +#include "third_party/blink/public/common/loader/url_loader_throttle.h" + +namespace signin { + +class HeaderModificationDelegate; + +// This class is used to modify the main frame request made when loading the +// GAIA signin realm. +class URLLoaderThrottle : public blink::URLLoaderThrottle, + public base::SupportsUserData { + public: + // Creates a new throttle if |delegate| says that this request should be + // intercepted. + static std::unique_ptr<URLLoaderThrottle> MaybeCreate( + std::unique_ptr<HeaderModificationDelegate> delegate, + content::WebContents::Getter web_contents_getter); + + URLLoaderThrottle(const URLLoaderThrottle&) = delete; + URLLoaderThrottle& operator=(const URLLoaderThrottle&) = delete; + + ~URLLoaderThrottle() override; + + // blink::URLLoaderThrottle + void WillStartRequest(network::ResourceRequest* request, + bool* defer) override; + void WillRedirectRequest( + net::RedirectInfo* redirect_info, + const network::mojom::URLResponseHead& response_head, + bool* defer, + std::vector<std::string>* headers_to_remove, + net::HttpRequestHeaders* modified_headers, + net::HttpRequestHeaders* modified_cors_exempt_headers) override; + void WillProcessResponse(const GURL& response_url, + network::mojom::URLResponseHead* response_head, + bool* defer) override; + + private: + class ThrottleRequestAdapter; + class ThrottleResponseAdapter; + + URLLoaderThrottle(std::unique_ptr<HeaderModificationDelegate> delegate, + content::WebContents::Getter web_contents_getter); + + const std::unique_ptr<HeaderModificationDelegate> delegate_; + const content::WebContents::Getter web_contents_getter_; + + // Information about the current request. + GURL request_url_; + GURL request_referrer_; + net::HttpRequestHeaders request_headers_; + net::HttpRequestHeaders request_cors_exempt_headers_; + network::mojom::RequestDestination request_destination_ = + network::mojom::RequestDestination::kEmpty; + bool request_is_fetch_like_api_ = false; + + base::OnceClosure destruction_callback_; +}; + +} // namespace signin + +#endif // CHROME_BROWSER_SIGNIN_CHROME_SIGNIN_URL_LOADER_THROTTLE_H_ |