| // Copyright 2015 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 IOS_CHROME_BROWSER_SIGNIN_GAIA_AUTH_FETCHER_IOS_H_ |
| #define IOS_CHROME_BROWSER_SIGNIN_GAIA_AUTH_FETCHER_IOS_H_ |
| |
| #include <memory> |
| #include <string> |
| |
| #include "base/macros.h" |
| #include "google_apis/gaia/gaia_auth_fetcher.h" |
| #include "net/traffic_annotation/network_traffic_annotation.h" |
| |
| class GaiaAuthFetcherIOSBridge; |
| class GURL; |
| |
| namespace net { |
| class URLRequestStatus; |
| } |
| |
| namespace network { |
| class SharedURLLoaderFactory; |
| } |
| |
| namespace web { |
| class BrowserState; |
| } |
| |
| // Specialization of GaiaAuthFetcher on iOS. |
| // |
| // Authenticate a user against the Google Accounts ClientLogin API |
| // with various capabilities and return results to a GaiaAuthConsumer. |
| // |
| // If necessary (cookies needed and WKWebView enabled), the queries will |
| // be fetched via a WKWebView instead of a net::URLFetcher. |
| class GaiaAuthFetcherIOS : public GaiaAuthFetcher { |
| public: |
| // Sets whether the iOS specialization of the GaiaAuthFetcher should be used. |
| // Mainly used for testing. |
| // Note that if |should_use| is true, it might still not be used if it is |
| // unnecessary or WKWebView isn't enabled. |
| static void SetShouldUseGaiaAuthFetcherIOSForTesting( |
| bool use_gaia_fetcher_ios); |
| |
| // Returns whether the iOS specialization of the GaiaAuthFetcher should be |
| // used. |
| static bool ShouldUseGaiaAuthFetcherIOS(); |
| |
| GaiaAuthFetcherIOS( |
| GaiaAuthConsumer* consumer, |
| const std::string& source, |
| scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, |
| web::BrowserState* browser_state); |
| ~GaiaAuthFetcherIOS() override; |
| |
| void CancelRequest() override; |
| |
| private: |
| friend class GaiaAuthFetcherIOSBridge; |
| friend class GaiaAuthFetcherIOSTest; |
| |
| void CreateAndStartGaiaFetcher( |
| const std::string& body, |
| const std::string& headers, |
| const GURL& gaia_gurl, |
| int load_flags, |
| const net::NetworkTrafficAnnotationTag& traffic_annotation) override; |
| void FetchComplete(const GURL& url, |
| const std::string& data, |
| const net::ResponseCookies& cookies, |
| const net::URLRequestStatus& status, |
| int response_code); |
| |
| std::unique_ptr<GaiaAuthFetcherIOSBridge> bridge_; |
| web::BrowserState* browser_state_; |
| |
| DISALLOW_COPY_AND_ASSIGN(GaiaAuthFetcherIOS); |
| }; |
| |
| #endif // IOS_CHROME_BROWSER_SIGNIN_GAIA_AUTH_FETCHER_IOS_H_ |