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

Side by Side Diff: components/signin/core/browser/signin_header_helper.cc

Issue 2353923003: Fix Mirror header on Drive domains. (Closed)
Patch Set: Extract hard-coded string Created 4 years, 2 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
« no previous file with comments | « components/signin/core/browser/signin_header_helper.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "components/signin/core/browser/signin_header_helper.h" 5 #include "components/signin/core/browser/signin_header_helper.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
11 #include "base/strings/string_split.h" 11 #include "base/strings/string_split.h"
12 #include "base/strings/string_util.h" 12 #include "base/strings/string_util.h"
13 #include "base/strings/stringprintf.h" 13 #include "base/strings/stringprintf.h"
14 #include "build/build_config.h" 14 #include "build/build_config.h"
15 #include "components/content_settings/core/browser/cookie_settings.h" 15 #include "components/content_settings/core/browser/cookie_settings.h"
16 #include "components/google/core/browser/google_util.h" 16 #include "components/google/core/browser/google_util.h"
17 #include "components/signin/core/common/profile_management_switches.h" 17 #include "components/signin/core/common/profile_management_switches.h"
18 #include "google_apis/gaia/gaia_auth_util.h" 18 #include "google_apis/gaia/gaia_auth_util.h"
19 #include "google_apis/gaia/gaia_urls.h" 19 #include "google_apis/gaia/gaia_urls.h"
20 #include "net/base/escape.h" 20 #include "net/base/escape.h"
21 #include "net/base/registry_controlled_domains/registry_controlled_domain.h"
21 #include "net/http/http_response_headers.h" 22 #include "net/http/http_response_headers.h"
22 #include "net/url_request/url_request.h" 23 #include "net/url_request/url_request.h"
23 #include "url/gurl.h" 24 #include "url/gurl.h"
24 25
25 namespace { 26 namespace {
26 27
27 // Dictionary of fields in a mirror response header. 28 // Dictionary of fields in a mirror response header.
28 typedef std::map<std::string, std::string> MirrorResponseHeaderDictionary; 29 typedef std::map<std::string, std::string> MirrorResponseHeaderDictionary;
29 30
30 const char kChromeManageAccountsHeader[] = "X-Chrome-Manage-Accounts"; 31 const char kChromeManageAccountsHeader[] = "X-Chrome-Manage-Accounts";
(...skipping 11 matching lines...) Expand all
42 return false; 43 return false;
43 44
44 const GURL kGoogleDriveURL("https://drive.google.com"); 45 const GURL kGoogleDriveURL("https://drive.google.com");
45 const GURL kGoogleDocsURL("https://docs.google.com"); 46 const GURL kGoogleDocsURL("https://docs.google.com");
46 return url == kGoogleDriveURL || url == kGoogleDocsURL; 47 return url == kGoogleDriveURL || url == kGoogleDocsURL;
47 } 48 }
48 49
49 bool IsUrlEligibleToIncludeGaiaId(const GURL& url, bool is_header_request) { 50 bool IsUrlEligibleToIncludeGaiaId(const GURL& url, bool is_header_request) {
50 if (is_header_request) { 51 if (is_header_request) {
51 // GAIA Id is only necessary for Drive. Don't set it otherwise. 52 // GAIA Id is only necessary for Drive. Don't set it otherwise.
52 return IsDriveOrigin(url); 53 return IsDriveOrigin(url.GetOrigin());
53 } 54 }
54 55
55 // Cookie requests don't have the granularity to only include the GAIA Id for 56 // Cookie requests don't have the granularity to only include the GAIA Id for
56 // Drive origin. Set it on all google.com instead. 57 // Drive origin. Set it on all google.com instead.
57 if (!url.SchemeIsCryptographic()) 58 if (!url.SchemeIsCryptographic())
58 return false; 59 return false;
59 60
60 const GURL kGoogleDotComURL("https://google.com"); 61 const std::string kGoogleDomain = "google.com";
61 return url == kGoogleDotComURL; 62 std::string domain = net::registry_controlled_domains::GetDomainAndRegistry(
63 url, net::registry_controlled_domains::EXCLUDE_PRIVATE_REGISTRIES);
64 return domain == kGoogleDomain;
62 } 65 }
63 66
64 // Determines the service type that has been passed from GAIA in the header. 67 // Determines the service type that has been passed from GAIA in the header.
65 signin::GAIAServiceType GetGAIAServiceTypeFromHeader( 68 signin::GAIAServiceType GetGAIAServiceTypeFromHeader(
66 const std::string& header_value) { 69 const std::string& header_value) {
67 if (header_value == "SIGNOUT") 70 if (header_value == "SIGNOUT")
68 return signin::GAIA_SERVICE_TYPE_SIGNOUT; 71 return signin::GAIA_SERVICE_TYPE_SIGNOUT;
69 else if (header_value == "INCOGNITO") 72 else if (header_value == "INCOGNITO")
70 return signin::GAIA_SERVICE_TYPE_INCOGNITO; 73 return signin::GAIA_SERVICE_TYPE_INCOGNITO;
71 else if (header_value == "ADDSESSION") 74 else if (header_value == "ADDSESSION")
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 if (!signin::SettingsAllowSigninCookies(cookie_settings)) { 117 if (!signin::SettingsAllowSigninCookies(cookie_settings)) {
115 return std::string(); 118 return std::string();
116 } 119 }
117 120
118 // Check if url is elligible for the header. 121 // Check if url is elligible for the header.
119 if (!signin::IsUrlEligibleForXChromeConnectedHeader(url)) 122 if (!signin::IsUrlEligibleForXChromeConnectedHeader(url))
120 return std::string(); 123 return std::string();
121 124
122 std::vector<std::string> parts; 125 std::vector<std::string> parts;
123 if (IsUrlEligibleToIncludeGaiaId(url, is_header_request)) { 126 if (IsUrlEligibleToIncludeGaiaId(url, is_header_request)) {
124 // Only google.com requires the GAIA ID, don't send it to other domains. 127 // Only set the GAIA Id on domains that actually requires it.
125 parts.push_back( 128 parts.push_back(
126 base::StringPrintf("%s=%s", kGaiaIdAttrName, account_id.c_str())); 129 base::StringPrintf("%s=%s", kGaiaIdAttrName, account_id.c_str()));
127 } 130 }
128 parts.push_back( 131 parts.push_back(
129 base::StringPrintf("%s=%s", kProfileModeAttrName, 132 base::StringPrintf("%s=%s", kProfileModeAttrName,
130 base::IntToString(profile_mode_mask).c_str())); 133 base::IntToString(profile_mode_mask).c_str()));
131 parts.push_back(base::StringPrintf( 134 parts.push_back(base::StringPrintf(
132 "%s=%s", kEnableAccountConsistencyAttrName, 135 "%s=%s", kEnableAccountConsistencyAttrName,
133 switches::IsEnableAccountConsistency() ? "true" : "false")); 136 switches::IsEnableAccountConsistency() ? "true" : "false"));
134 137
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 !response_headers->GetNormalizedHeader( 245 !response_headers->GetNormalizedHeader(
243 kChromeManageAccountsHeader, &header_value)) { 246 kChromeManageAccountsHeader, &header_value)) {
244 return empty_params; 247 return empty_params;
245 } 248 }
246 249
247 DCHECK(switches::IsEnableAccountConsistency() && !is_off_the_record); 250 DCHECK(switches::IsEnableAccountConsistency() && !is_off_the_record);
248 return BuildManageAccountsParams(header_value); 251 return BuildManageAccountsParams(header_value);
249 } 252 }
250 253
251 // Checks if the url has the required properties to have an 254 // Checks if the url has the required properties to have an
252 // X-CHROME-CONNECTED header. 255 // X-Chrome-Connected header.
253 bool IsUrlEligibleForXChromeConnectedHeader(const GURL& url) { 256 bool IsUrlEligibleForXChromeConnectedHeader(const GURL& url) {
254 // Only set the header for Drive and Gaia always, and other Google properties 257 // Only set the header for Drive and Gaia always, and other Google properties
255 // if account consistency is enabled. 258 // if account consistency is enabled.
256 // Vasquette, which is integrated with most Google properties, needs the 259 // Vasquette, which is integrated with most Google properties, needs the
257 // header to redirect certain user actions to Chrome native UI. Drive and Gaia 260 // header to redirect certain user actions to Chrome native UI. Drive and Gaia
258 // need the header to tell if the current user is connected. The drive path is 261 // need the header to tell if the current user is connected. The drive path is
259 // a temporary workaround until the more generic chrome.principals API is 262 // a temporary workaround until the more generic chrome.principals API is
260 // available. 263 // available.
261 264
262 // Consider the account id sensitive and limit it to secure domains. 265 // Consider the account id sensitive and limit it to secure domains.
263 if (!url.SchemeIsCryptographic()) 266 if (!url.SchemeIsCryptographic())
264 return false; 267 return false;
265 268
266 GURL origin(url.GetOrigin()); 269 GURL origin(url.GetOrigin());
267 bool is_enable_account_consistency = switches::IsEnableAccountConsistency(); 270 bool is_enable_account_consistency = switches::IsEnableAccountConsistency();
268 bool is_google_url = is_enable_account_consistency && 271 bool is_google_url = is_enable_account_consistency &&
269 (google_util::IsGoogleDomainUrl( 272 (google_util::IsGoogleDomainUrl(
270 url, google_util::ALLOW_SUBDOMAIN, 273 url, google_util::ALLOW_SUBDOMAIN,
271 google_util::DISALLOW_NON_STANDARD_PORTS) || 274 google_util::DISALLOW_NON_STANDARD_PORTS) ||
272 google_util::IsYoutubeDomainUrl( 275 google_util::IsYoutubeDomainUrl(
273 url, google_util::ALLOW_SUBDOMAIN, 276 url, google_util::ALLOW_SUBDOMAIN,
274 google_util::DISALLOW_NON_STANDARD_PORTS)); 277 google_util::DISALLOW_NON_STANDARD_PORTS));
275 return is_google_url || IsDriveOrigin(origin) || 278 return is_google_url || IsDriveOrigin(origin) ||
276 gaia::IsGaiaSignonRealm(origin); 279 gaia::IsGaiaSignonRealm(origin);
277 } 280 }
278 281
279 } // namespace signin 282 } // namespace signin
OLDNEW
« no previous file with comments | « components/signin/core/browser/signin_header_helper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698