summaryrefslogtreecommitdiff
path: root/chromium/chrome/browser/signin/chrome_signin_url_loader_throttle.h
diff options
context:
space:
mode:
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.h72
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_