Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / signin / signin_header_helper.h
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     int child_id,
75     int route_id);
76
77 // Looks for the X-Chrome-Manage-Accounts response header, and if found,
78 // tries to show the avatar bubble in the browser identified by the
79 // child/route id. Must be called on IO thread.
80 void ProcessMirrorResponseHeaderIfExists(
81     net::URLRequest* request,
82     ProfileIOData* io_data,
83     int child_id,
84     int route_id);
85
86 };  // namespace signin
87
88 #endif  // CHROME_BROWSER_SIGNIN_SIGNIN_HEADER_HELPER_H_