| // Copyright 2013 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_HELPER_H_ |
| #define CHROME_BROWSER_SIGNIN_CHROME_SIGNIN_HELPER_H_ |
| |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "components/signin/core/browser/signin_header_helper.h" |
| #include "content/public/browser/resource_request_info.h" |
| |
| namespace net { |
| class HttpResponseHeaders; |
| class URLRequest; |
| } |
| |
| class GURL; |
| class ProfileIOData; |
| |
| // Utility functions for handling Chrome/Gaia headers during signin process. |
| // Chrome identity should always stay in sync with Gaia identity. Therefore |
| // Chrome needs to send Gaia special header for requests from a connected |
| // profile, so that Gaia can modify its response accordingly and let Chrome |
| // handle signin accordingly. |
| namespace signin { |
| |
| class ChromeRequestAdapter : public RequestAdapter { |
| public: |
| explicit ChromeRequestAdapter(net::URLRequest* request); |
| ~ChromeRequestAdapter() override; |
| |
| virtual bool IsMainRequestContext(ProfileIOData* io_data); |
| virtual content::ResourceRequestInfo::WebContentsGetter GetWebContentsGetter() |
| const; |
| virtual content::ResourceType GetResourceType() const; |
| virtual GURL GetReferrerOrigin() const; |
| |
| // Associate a callback with this request which will be executed when the |
| // request is complete (including any redirects). If a callback was already |
| // registered this function does nothing. |
| virtual void SetDestructionCallback(base::OnceClosure closure); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(ChromeRequestAdapter); |
| }; |
| |
| class ResponseAdapter { |
| public: |
| explicit ResponseAdapter(const net::URLRequest* request); |
| virtual ~ResponseAdapter(); |
| |
| virtual content::ResourceRequestInfo::WebContentsGetter GetWebContentsGetter() |
| const; |
| virtual bool IsMainFrame() const; |
| virtual GURL GetOrigin() const; |
| virtual const net::HttpResponseHeaders* GetHeaders() const; |
| virtual void RemoveHeader(const std::string& name); |
| |
| private: |
| const net::URLRequest* const request_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ResponseAdapter); |
| }; |
| |
| // When Dice is enabled, the AccountReconcilor is blocked for a short delay |
| // after sending requests to Gaia. Exposed for testing. |
| void SetDiceAccountReconcilorBlockDelayForTesting(int delay_ms); |
| |
| // Adds an account consistency header to Gaia requests from a connected profile, |
| // with the exception of requests from gaia webview. Must be called on IO |
| // thread. |
| // Returns true if the account consistency header was added to the request. |
| // Removes the header if it is already in the headers but should not be there. |
| void FixAccountConsistencyRequestHeader(ChromeRequestAdapter* request, |
| const GURL& redirect_url, |
| ProfileIOData* io_data); |
| |
| // Processes account consistency response headers (X-Chrome-Manage-Accounts and |
| // Dice). |redirect_url| is empty if the request is not a redirect. |
| void ProcessAccountConsistencyResponseHeaders(ResponseAdapter* response, |
| const GURL& redirect_url, |
| bool is_off_the_record); |
| |
| } // namespace signin |
| |
| #endif // CHROME_BROWSER_SIGNIN_CHROME_SIGNIN_HELPER_H_ |