Home | History | Annotate | Download | only in signin
      1 // Copyright 2013 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 
      5 #ifndef CHROME_BROWSER_SIGNIN_SIGNIN_HEADER_HELPER_H_
      6 #define CHROME_BROWSER_SIGNIN_SIGNIN_HEADER_HELPER_H_
      7 
      8 #include <string>
      9 
     10 namespace net {
     11 class URLRequest;
     12 }
     13 class GURL;
     14 class ProfileIOData;
     15 
     16 // Utility functions for handling Chrome/Gaia headers during signin process.
     17 // In the Mirror world, Chrome identity should always stay in sync with Gaia
     18 // identity. Therefore Chrome needs to send Gaia special header for requests
     19 // from a connected profile, so that Gaia can modify its response accordingly
     20 // and let Chrome handles signin with native UI.
     21 namespace signin {
     22 
     23 // Profile mode flags.
     24 enum ProfileMode {
     25   PROFILE_MODE_DEFAULT = 0,
     26   // Incognito mode disabled by enterprise policy or by parental controls.
     27   PROFILE_MODE_INCOGNITO_DISABLED = 1 << 0,
     28   // Adding account disabled in the Android-for-EDU mode.
     29   PROFILE_MODE_ADD_ACCOUNT_DISABLED = 1 << 1
     30 };
     31 
     32 // The ServiceType specified by GAIA in the response header accompanying the 204
     33 // response. This indicates the action Chrome is supposed to lead the user to
     34 // perform.
     35 enum GAIAServiceType {
     36   GAIA_SERVICE_TYPE_NONE = 0,                 // No GAIA response header.
     37   GAIA_SERVICE_TYPE_SIGNOUT,                  // Logout all existing sessions.
     38   GAIA_SERVICE_TYPE_INCOGNITO,                // Open an incognito tab.
     39   GAIA_SERVICE_TYPE_ADDSESSION,               // Add a secondary account.
     40   GAIA_SERVICE_TYPE_REAUTH,                   // Re-authenticate an account.
     41   GAIA_SERVICE_TYPE_SIGNUP,                   // Create a new account.
     42   GAIA_SERVICE_TYPE_DEFAULT,                  // All other cases.
     43 };
     44 
     45 // Struct describing the paramters received in the manage account header.
     46 struct ManageAccountsParams {
     47   // The requested service type such as "ADDSESSION".
     48   GAIAServiceType service_type;
     49   // The prefilled email.
     50   std::string email;
     51   // Whether |email| is a saml account.
     52   bool is_saml;
     53   // The continue URL after the requested service is completed successfully.
     54   // Defaults to the current URL if empty.
     55   std::string continue_url;
     56   // Whether the continue URL should be loaded in the same tab.
     57   bool is_same_tab;
     58   // The child id associated with the web content of the request.
     59   int child_id;
     60   // The route id associated with the web content of the request.
     61   int route_id;
     62 
     63   ManageAccountsParams();
     64 };
     65 
     66 // Adds X-Chrome-Connected header to all Gaia requests from a connected profile,
     67 // with the exception of requests from gaia webview. Must be called on IO
     68 // thread.
     69 // Returns true if the account management header was added to the request.
     70 bool AppendMirrorRequestHeaderIfPossible(
     71     net::URLRequest* request,
     72     const GURL& redirect_url,
     73     ProfileIOData* io_data);
     74 
     75 // Looks for the X-Chrome-Manage-Accounts response header, and if found,
     76 // tries to show the avatar bubble in the browser identified by the
     77 // child/route id. Must be called on IO thread.
     78 void ProcessMirrorResponseHeaderIfExists(
     79     net::URLRequest* request,
     80     ProfileIOData* io_data,
     81     int child_id,
     82     int route_id);
     83 
     84 };  // namespace signin
     85 
     86 #endif  // CHROME_BROWSER_SIGNIN_SIGNIN_HEADER_HELPER_H_
     87