Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(107)

Side by Side Diff: chrome/browser/signin/signin_header_helper.cc

Issue 345533005: Parse extra parameters on x-chrome-manage-accounts header (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/signin/signin_header_helper.h" 5 #include "chrome/browser/signin/signin_header_helper.h"
6 6
7 #include "base/strings/string_number_conversions.h" 7 #include "base/strings/string_number_conversions.h"
8 #include "base/strings/string_util.h" 8 #include "base/strings/string_util.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "chrome/browser/google/google_util.h" 10 #include "chrome/browser/google/google_util.h"
(...skipping 20 matching lines...) Expand all
31 31
32 // Dictionary of fields in a mirror response header. 32 // Dictionary of fields in a mirror response header.
33 typedef std::map<std::string, std::string> MirrorResponseHeaderDictionary; 33 typedef std::map<std::string, std::string> MirrorResponseHeaderDictionary;
34 34
35 const char kChromeConnectedHeader[] = "X-Chrome-Connected"; 35 const char kChromeConnectedHeader[] = "X-Chrome-Connected";
36 const char kChromeManageAccountsHeader[] = "X-Chrome-Manage-Accounts"; 36 const char kChromeManageAccountsHeader[] = "X-Chrome-Manage-Accounts";
37 const char kGaiaIdAttrName[] = "id"; 37 const char kGaiaIdAttrName[] = "id";
38 const char kProfileModeAttrName[] = "mode"; 38 const char kProfileModeAttrName[] = "mode";
39 const char kEnableAccountConsistencyAttrName[] = "enable_account_consistency"; 39 const char kEnableAccountConsistencyAttrName[] = "enable_account_consistency";
40 40
41 const char kServiceTypeAttrName[] = "action";
42 const char kEmailAttrName[] = "email";
43 const char kIsSamlAttrName[] = "is_saml";
44 const char kContinueUrlAttrName[] = "continue_url";
45 const char kIsSameTabAttrName[] = "is_same_tab";
46
41 // Determines the service type that has been passed from GAIA in the header. 47 // Determines the service type that has been passed from GAIA in the header.
42 signin::GAIAServiceType GetGAIAServiceTypeFromHeader( 48 signin::GAIAServiceType GetGAIAServiceTypeFromHeader(
43 const std::string& header_value) { 49 const std::string& header_value) {
44 if (header_value == "SIGNOUT") 50 if (header_value == "SIGNOUT")
45 return signin::GAIA_SERVICE_TYPE_SIGNOUT; 51 return signin::GAIA_SERVICE_TYPE_SIGNOUT;
46 else if (header_value == "INCOGNITO") 52 else if (header_value == "INCOGNITO")
47 return signin::GAIA_SERVICE_TYPE_INCOGNITO; 53 return signin::GAIA_SERVICE_TYPE_INCOGNITO;
48 else if (header_value == "ADDSESSION") 54 else if (header_value == "ADDSESSION")
49 return signin::GAIA_SERVICE_TYPE_ADDSESSION; 55 return signin::GAIA_SERVICE_TYPE_ADDSESSION;
50 else if (header_value == "REAUTH") 56 else if (header_value == "REAUTH")
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 return; 101 return;
96 102
97 #if !defined(OS_ANDROID) 103 #if !defined(OS_ANDROID)
98 Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 104 Browser* browser = chrome::FindBrowserWithWebContents(web_contents);
99 if (browser) { 105 if (browser) {
100 if (service_type == signin::GAIA_SERVICE_TYPE_INCOGNITO) { 106 if (service_type == signin::GAIA_SERVICE_TYPE_INCOGNITO) {
101 chrome::NewIncognitoWindow(browser); 107 chrome::NewIncognitoWindow(browser);
102 } else { 108 } else {
103 browser->window()->ShowAvatarBubbleFromAvatarButton( 109 browser->window()->ShowAvatarBubbleFromAvatarButton(
104 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT, 110 BrowserWindow::AVATAR_BUBBLE_MODE_ACCOUNT_MANAGEMENT,
105 service_type); 111 manage_accounts_params);
106 } 112 }
107 } 113 }
108 #else // defined(OS_ANDROID) 114 #else // defined(OS_ANDROID)
109 if (service_type == signin::GAIA_SERVICE_TYPE_INCOGNITO) { 115 if (service_type == signin::GAIA_SERVICE_TYPE_INCOGNITO) {
110 web_contents->OpenURL(content::OpenURLParams( 116 web_contents->OpenURL(content::OpenURLParams(
111 GURL(chrome::kChromeUINativeNewTabURL), content::Referrer(), 117 GURL(chrome::kChromeUINativeNewTabURL), content::Referrer(),
112 OFF_THE_RECORD, content::PAGE_TRANSITION_AUTO_TOPLEVEL, false)); 118 OFF_THE_RECORD, content::PAGE_TRANSITION_AUTO_TOPLEVEL, false));
113 } else { 119 } else {
114 AccountManagementScreenHelper::OpenAccountManagementScreen( 120 AccountManagementScreenHelper::OpenAccountManagementScreen(
115 Profile::FromBrowserContext(web_contents->GetBrowserContext()), 121 Profile::FromBrowserContext(web_contents->GetBrowserContext()),
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 std::string header_value; 202 std::string header_value;
197 if (!request->response_headers()->GetNormalizedHeader( 203 if (!request->response_headers()->GetNormalizedHeader(
198 kChromeManageAccountsHeader, &header_value)) { 204 kChromeManageAccountsHeader, &header_value)) {
199 return params; 205 return params;
200 } 206 }
201 207
202 DCHECK(switches::IsNewProfileManagement() && !io_data->IsOffTheRecord()); 208 DCHECK(switches::IsNewProfileManagement() && !io_data->IsOffTheRecord());
203 209
204 MirrorResponseHeaderDictionary header_dictionary = 210 MirrorResponseHeaderDictionary header_dictionary =
205 ParseMirrorResponseHeader(header_value); 211 ParseMirrorResponseHeader(header_value);
206 if (header_dictionary.count("action")) { 212 MirrorResponseHeaderDictionary::const_iterator it = header_dictionary.begin();
207 params.service_type = 213 for (; it != header_dictionary.end(); ++it) {
208 GetGAIAServiceTypeFromHeader(header_dictionary["action"]); 214 const std::string key_name(it->first);
215 if (key_name == kServiceTypeAttrName) {
216 params.service_type =
217 GetGAIAServiceTypeFromHeader(header_dictionary[kServiceTypeAttrName]);
218 } else if (key_name == kEmailAttrName) {
219 params.email = header_dictionary[kEmailAttrName];
220 } else if (key_name == kIsSamlAttrName) {
221 params.is_saml = header_dictionary[kIsSamlAttrName] == "true";
222 } else if (key_name == kContinueUrlAttrName) {
223 params.continue_url = header_dictionary[kContinueUrlAttrName];
224 } else if (key_name == kIsSameTabAttrName) {
225 params.is_same_tab = header_dictionary[kIsSameTabAttrName] == "true";
226 }
209 } 227 }
210 return params; 228 return params;
211 } 229 }
212 230
213 void ProcessMirrorResponseHeaderIfExists( 231 void ProcessMirrorResponseHeaderIfExists(
214 net::URLRequest* request, 232 net::URLRequest* request,
215 ProfileIOData* io_data, 233 ProfileIOData* io_data,
216 int child_id, 234 int child_id,
217 int route_id) { 235 int route_id) {
218 #if defined(OS_IOS) 236 #if defined(OS_IOS)
219 NOTREACHED(); 237 NOTREACHED();
220 #else 238 #else
221 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 239 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
222 ManageAccountsParams params = GetManageAccountsParams(request, io_data); 240 ManageAccountsParams params = GetManageAccountsParams(request, io_data);
241 params.child_id = child_id;
242 params.route_id = route_id;
223 if (params.service_type == GAIA_SERVICE_TYPE_NONE) 243 if (params.service_type == GAIA_SERVICE_TYPE_NONE)
224 return; 244 return;
225 245
226 content::BrowserThread::PostTask( 246 content::BrowserThread::PostTask(
227 content::BrowserThread::UI, FROM_HERE, 247 content::BrowserThread::UI, FROM_HERE,
228 base::Bind(ProcessMirrorHeaderUIThread, child_id, route_id, params)); 248 base::Bind(ProcessMirrorHeaderUIThread, child_id, route_id, params));
229 #endif // defined(OS_IOS) 249 #endif // defined(OS_IOS)
230 } 250 }
231 251
232 } // namespace signin 252 } // namespace signin
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698