gaia_urls.cc 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. // Copyright (c) 2012 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. #include "google_apis/gaia/gaia_urls.h"
  5. #include "base/command_line.h"
  6. #include "base/logging.h"
  7. #include "base/strings/strcat.h"
  8. #include "base/strings/string_piece.h"
  9. #include "base/strings/stringprintf.h"
  10. #include "build/build_config.h"
  11. #include "build/chromeos_buildflags.h"
  12. #include "google_apis/gaia/gaia_config.h"
  13. #include "google_apis/gaia/gaia_switches.h"
  14. #include "google_apis/google_api_keys.h"
  15. #include "url/url_canon.h"
  16. #include "url/url_constants.h"
  17. #define CONCAT_HIDDEN(a, b) a##b
  18. #define CONCAT(a, b) CONCAT_HIDDEN(a, b)
  19. #define URL_KEY_AND_PTR(name) #name, &CONCAT(name, _)
  20. namespace {
  21. // Gaia service constants
  22. const char kDefaultGoogleUrl[] = "http://google.com";
  23. const char kDefaultGaiaUrl[] = "https://accounts.google.com";
  24. const char kDefaultGoogleApisBaseUrl[] = "https://www.googleapis.com";
  25. const char kDefaultOAuthAccountManagerBaseUrl[] =
  26. "https://oauthaccountmanager.googleapis.com";
  27. const char kDefaultAccountCapabilitiesBaseUrl[] =
  28. "https://accountcapabilities-pa.googleapis.com";
  29. // API calls from accounts.google.com
  30. const char kClientLoginUrlSuffix[] = "ClientLogin";
  31. const char kServiceLoginUrlSuffix[] = "ServiceLogin";
  32. const char kEmbeddedSetupChromeOsUrlSuffixV2[] = "embedded/setup/v2/chromeos";
  33. const char kEmbeddedReauthChromeOsUrlSuffix[] = "embedded/reauth/chromeos";
  34. const char kEmbeddedSetupChromeOsKidSignupUrlSuffix[] =
  35. "embedded/setup/kidsignup/chromeos";
  36. const char kEmbeddedSetupChromeOsKidSigninUrlSuffix[] =
  37. "embedded/setup/kidsignin/chromeos";
  38. const char kEmbeddedSetupWindowsUrlSuffix[] = "embedded/setup/windows";
  39. // Parameter "ssp=1" is used to skip showing the password bubble when a user
  40. // signs in to Chrome. Note that Gaia will pass this client specified parameter
  41. // to all URLs that are loaded as part of thi sign-in flow.
  42. const char kSigninChromeSyncDice[] = "signin/chrome/sync?ssp=1";
  43. #if BUILDFLAG(IS_ANDROID)
  44. const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/android";
  45. #elif BUILDFLAG(IS_IOS)
  46. const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/ios";
  47. #elif BUILDFLAG(IS_CHROMEOS_ASH)
  48. const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/chromeos";
  49. #else
  50. const char kSigninChromeSyncKeysRetrievalUrl[] = "encryption/unlock/desktop";
  51. #endif
  52. // Parameter "kdi" is used to distinguish recoverability management from
  53. // retrieval. The value is a base64-encoded serialized protobuf, referred to
  54. // internally as ClientDecryptableKeyDataInputs.
  55. const char kSigninChromeSyncKeysRecoverabilityUrlSuffix[] =
  56. "?kdi=CAIaDgoKY2hyb21lc3luYxAB";
  57. const char kServiceLoginAuthUrlSuffix[] = "ServiceLoginAuth";
  58. const char kServiceLogoutUrlSuffix[] = "Logout";
  59. const char kContinueUrlForLogoutSuffix[] = "chrome/blank.html";
  60. const char kTokenAuthUrlSuffix[] = "TokenAuth";
  61. const char kMergeSessionUrlSuffix[] = "MergeSession";
  62. const char kOAuthGetAccessTokenUrlSuffix[] = "OAuthGetAccessToken";
  63. const char kOAuthWrapBridgeUrlSuffix[] = "OAuthWrapBridge";
  64. const char kOAuth1LoginUrlSuffix[] = "OAuthLogin";
  65. const char kOAuthMultiloginSuffix[] = "oauth/multilogin";
  66. const char kOAuthRevokeTokenUrlSuffix[] = "AuthSubRevokeToken";
  67. const char kListAccountsSuffix[] = "ListAccounts?json=standard";
  68. const char kEmbeddedSigninSuffix[] = "embedded/setup/chrome/usermenu";
  69. const char kAddAccountSuffix[] = "AddSession";
  70. const char kReauthSuffix[] = "embedded/xreauth/chrome";
  71. const char kGetCheckConnectionInfoSuffix[] = "GetCheckConnectionInfo";
  72. // API calls from accounts.google.com (LSO)
  73. const char kGetOAuthTokenUrlSuffix[] = "o/oauth/GetOAuthToken/";
  74. const char kOAuth2AuthUrlSuffix[] = "o/oauth2/auth";
  75. const char kOAuth2RevokeUrlSuffix[] = "o/oauth2/revoke";
  76. // API calls from www.googleapis.com
  77. const char kOAuth2TokenUrlSuffix[] = "oauth2/v4/token";
  78. const char kOAuth2TokenInfoUrlSuffix[] = "oauth2/v2/tokeninfo";
  79. const char kOAuthUserInfoUrlSuffix[] = "oauth2/v1/userinfo";
  80. const char kReAuthApiUrlSuffix[] = "reauth/v1beta/users/";
  81. // API calls from oauthaccountmanager.googleapis.com
  82. const char kOAuth2IssueTokenUrlSuffix[] = "v1/issuetoken";
  83. // API calls from accountcapabilities-pa.googleapis.com
  84. const char kAccountCapabilitiesBatchGetUrlSuffix[] =
  85. "v1/accountcapabilities:batchGet";
  86. void GetSwitchValueWithDefault(base::StringPiece switch_value,
  87. base::StringPiece default_value,
  88. std::string* output_value) {
  89. base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
  90. if (command_line->HasSwitch(switch_value)) {
  91. *output_value = command_line->GetSwitchValueASCII(switch_value);
  92. } else {
  93. *output_value = std::string(default_value);
  94. }
  95. }
  96. GURL GetURLSwitchValueWithDefault(base::StringPiece switch_value,
  97. base::StringPiece default_value) {
  98. std::string string_value;
  99. GetSwitchValueWithDefault(switch_value, default_value, &string_value);
  100. const GURL result(string_value);
  101. if (result.is_valid()) {
  102. return result;
  103. }
  104. LOG(ERROR) << "Ignoring invalid URL \"" << string_value << "\" for switch \""
  105. << switch_value << "\"";
  106. return GURL(default_value);
  107. }
  108. url::Origin GetOriginSwitchValueWithDefault(base::StringPiece switch_value,
  109. base::StringPiece default_value) {
  110. std::string string_value;
  111. GetSwitchValueWithDefault(switch_value, default_value, &string_value);
  112. const url::Origin result = url::Origin::Create(GURL(string_value));
  113. if (result.GetURL().SchemeIsHTTPOrHTTPS() &&
  114. result.GetURL() == GURL(string_value)) {
  115. return result;
  116. }
  117. LOG(ERROR) << "Ignoring invalid origin \"" << string_value
  118. << "\" for switch \"" << switch_value << "\"";
  119. return url::Origin::Create(GURL(default_value));
  120. }
  121. void SetDefaultURLIfInvalid(GURL* url_to_set,
  122. base::StringPiece switch_value,
  123. base::StringPiece default_value) {
  124. if (!url_to_set->is_valid()) {
  125. *url_to_set = GetURLSwitchValueWithDefault(switch_value, default_value);
  126. }
  127. }
  128. void SetDefaultOriginIfOpaqueOrInvalidScheme(url::Origin* origin_to_set,
  129. base::StringPiece switch_value,
  130. base::StringPiece default_value) {
  131. if (origin_to_set->opaque() ||
  132. !origin_to_set->GetURL().SchemeIsHTTPOrHTTPS()) {
  133. *origin_to_set =
  134. GetOriginSwitchValueWithDefault(switch_value, default_value);
  135. }
  136. }
  137. void ResolveURLIfInvalid(GURL* url_to_set,
  138. const GURL& base_url,
  139. base::StringPiece suffix) {
  140. if (!url_to_set->is_valid()) {
  141. *url_to_set = base_url.Resolve(suffix);
  142. }
  143. }
  144. } // namespace
  145. GaiaUrls* GaiaUrls::GetInstance() {
  146. return base::Singleton<GaiaUrls>::get();
  147. }
  148. GaiaUrls::GaiaUrls() {
  149. // Initialize all urls from a config first.
  150. InitializeFromConfig();
  151. // Set a default value for all urls not set by the config.
  152. InitializeDefault();
  153. }
  154. GaiaUrls::~GaiaUrls() = default;
  155. const GURL& GaiaUrls::google_url() const {
  156. return google_url_;
  157. }
  158. const GURL& GaiaUrls::secure_google_url() const {
  159. return secure_google_url_;
  160. }
  161. const url::Origin& GaiaUrls::gaia_origin() const {
  162. return gaia_origin_;
  163. }
  164. GURL GaiaUrls::gaia_url() const {
  165. return gaia_origin_.GetURL();
  166. }
  167. const GURL& GaiaUrls::client_login_url() const {
  168. return client_login_url_;
  169. }
  170. const GURL& GaiaUrls::service_login_url() const {
  171. return service_login_url_;
  172. }
  173. const GURL& GaiaUrls::embedded_setup_chromeos_url(unsigned version) const {
  174. DCHECK_EQ(version, 2U);
  175. return embedded_setup_chromeos_url_v2_;
  176. }
  177. const GURL& GaiaUrls::embedded_setup_chromeos_kid_signup_url() const {
  178. return embedded_setup_chromeos_kid_signup_url_;
  179. }
  180. const GURL& GaiaUrls::embedded_setup_chromeos_kid_signin_url() const {
  181. return embedded_setup_chromeos_kid_signin_url_;
  182. }
  183. const GURL& GaiaUrls::embedded_setup_windows_url() const {
  184. return embedded_setup_windows_url_;
  185. }
  186. const GURL& GaiaUrls::embedded_reauth_chromeos_url() const {
  187. return embedded_reauth_chromeos_url_;
  188. }
  189. const GURL& GaiaUrls::signin_chrome_sync_dice() const {
  190. return signin_chrome_sync_dice_;
  191. }
  192. const GURL& GaiaUrls::signin_chrome_sync_keys_retrieval_url() const {
  193. return signin_chrome_sync_keys_retrieval_url_;
  194. }
  195. const GURL& GaiaUrls::signin_chrome_sync_keys_recoverability_degraded_url()
  196. const {
  197. return signin_chrome_sync_keys_recoverability_degraded_url_;
  198. }
  199. const GURL& GaiaUrls::service_login_auth_url() const {
  200. return service_login_auth_url_;
  201. }
  202. const GURL& GaiaUrls::service_logout_url() const {
  203. return service_logout_url_;
  204. }
  205. const GURL& GaiaUrls::token_auth_url() const {
  206. return token_auth_url_;
  207. }
  208. const GURL& GaiaUrls::merge_session_url() const {
  209. return merge_session_url_;
  210. }
  211. const GURL& GaiaUrls::get_oauth_token_url() const {
  212. return get_oauth_token_url_;
  213. }
  214. const GURL& GaiaUrls::oauth_multilogin_url() const {
  215. return oauth_multilogin_url_;
  216. }
  217. const GURL& GaiaUrls::oauth_get_access_token_url() const {
  218. return oauth_get_access_token_url_;
  219. }
  220. const GURL& GaiaUrls::oauth_wrap_bridge_url() const {
  221. return oauth_wrap_bridge_url_;
  222. }
  223. const GURL& GaiaUrls::oauth_user_info_url() const {
  224. return oauth_user_info_url_;
  225. }
  226. const GURL& GaiaUrls::oauth_revoke_token_url() const {
  227. return oauth_revoke_token_url_;
  228. }
  229. const GURL& GaiaUrls::oauth1_login_url() const {
  230. return oauth1_login_url_;
  231. }
  232. const GURL& GaiaUrls::embedded_signin_url() const {
  233. return embedded_signin_url_;
  234. }
  235. const GURL& GaiaUrls::add_account_url() const {
  236. return add_account_url_;
  237. }
  238. const GURL& GaiaUrls::reauth_url() const {
  239. return reauth_url_;
  240. }
  241. const GURL& GaiaUrls::account_capabilities_url() const {
  242. return account_capabilities_url_;
  243. }
  244. const std::string& GaiaUrls::oauth2_chrome_client_id() const {
  245. return oauth2_chrome_client_id_;
  246. }
  247. const std::string& GaiaUrls::oauth2_chrome_client_secret() const {
  248. return oauth2_chrome_client_secret_;
  249. }
  250. const GURL& GaiaUrls::oauth2_auth_url() const {
  251. return oauth2_auth_url_;
  252. }
  253. const GURL& GaiaUrls::oauth2_token_url() const {
  254. return oauth2_token_url_;
  255. }
  256. const GURL& GaiaUrls::oauth2_issue_token_url() const {
  257. return oauth2_issue_token_url_;
  258. }
  259. const GURL& GaiaUrls::oauth2_token_info_url() const {
  260. return oauth2_token_info_url_;
  261. }
  262. const GURL& GaiaUrls::oauth2_revoke_url() const {
  263. return oauth2_revoke_url_;
  264. }
  265. const GURL& GaiaUrls::reauth_api_url() const {
  266. return reauth_api_url_;
  267. }
  268. const GURL& GaiaUrls::google_apis_origin_url() const {
  269. return google_apis_origin_url_;
  270. }
  271. GURL GaiaUrls::ListAccountsURLWithSource(const std::string& source) {
  272. if (source.empty()) {
  273. return list_accounts_url_;
  274. } else {
  275. std::string query = list_accounts_url_.query();
  276. return list_accounts_url_.Resolve(base::StringPrintf(
  277. "?gpsia=1&source=%s&%s", source.c_str(), query.c_str()));
  278. }
  279. }
  280. GURL GaiaUrls::LogOutURLWithSource(const std::string& source) {
  281. std::string params =
  282. source.empty()
  283. ? base::StringPrintf("?continue=%s",
  284. continue_url_for_logout_.spec().c_str())
  285. : base::StringPrintf("?source=%s&continue=%s", source.c_str(),
  286. continue_url_for_logout_.spec().c_str());
  287. return service_logout_url_.Resolve(params);
  288. }
  289. GURL GaiaUrls::GetCheckConnectionInfoURLWithSource(const std::string& source) {
  290. return source.empty() ? get_check_connection_info_url_
  291. : get_check_connection_info_url_.Resolve(
  292. base::StringPrintf("?source=%s", source.c_str()));
  293. }
  294. void GaiaUrls::InitializeDefault() {
  295. SetDefaultURLIfInvalid(&google_url_, switches::kGoogleUrl, kDefaultGoogleUrl);
  296. SetDefaultOriginIfOpaqueOrInvalidScheme(&gaia_origin_, switches::kGaiaUrl,
  297. kDefaultGaiaUrl);
  298. SetDefaultURLIfInvalid(&lso_origin_url_, switches::kLsoUrl, kDefaultGaiaUrl);
  299. SetDefaultURLIfInvalid(&google_apis_origin_url_, switches::kGoogleApisUrl,
  300. kDefaultGoogleApisBaseUrl);
  301. SetDefaultURLIfInvalid(&oauth_account_manager_origin_url_,
  302. switches::kOAuthAccountManagerUrl,
  303. kDefaultOAuthAccountManagerBaseUrl);
  304. if (!account_capabilities_origin_url_.is_valid()) {
  305. account_capabilities_origin_url_ = GURL(kDefaultAccountCapabilitiesBaseUrl);
  306. }
  307. if (!secure_google_url_.is_valid()) {
  308. GURL::Replacements scheme_replacement;
  309. scheme_replacement.SetSchemeStr(url::kHttpsScheme);
  310. secure_google_url_ = google_url_.ReplaceComponents(scheme_replacement);
  311. }
  312. oauth2_chrome_client_id_ =
  313. google_apis::GetOAuth2ClientID(google_apis::CLIENT_MAIN);
  314. oauth2_chrome_client_secret_ =
  315. google_apis::GetOAuth2ClientSecret(google_apis::CLIENT_MAIN);
  316. CHECK(!gaia_origin_.opaque());
  317. const GURL gaia_url = gaia_origin_.GetURL();
  318. CHECK(gaia_url.SchemeIsHTTPOrHTTPS());
  319. // URLs from |gaia_origin_|.
  320. ResolveURLIfInvalid(&client_login_url_, gaia_url, kClientLoginUrlSuffix);
  321. ResolveURLIfInvalid(&service_login_url_, gaia_url, kServiceLoginUrlSuffix);
  322. ResolveURLIfInvalid(&embedded_setup_chromeos_url_v2_, gaia_url,
  323. kEmbeddedSetupChromeOsUrlSuffixV2);
  324. ResolveURLIfInvalid(&embedded_setup_chromeos_kid_signup_url_, gaia_url,
  325. kEmbeddedSetupChromeOsKidSignupUrlSuffix);
  326. ResolveURLIfInvalid(&embedded_setup_chromeos_kid_signin_url_, gaia_url,
  327. kEmbeddedSetupChromeOsKidSigninUrlSuffix);
  328. ResolveURLIfInvalid(&embedded_setup_windows_url_, gaia_url,
  329. kEmbeddedSetupWindowsUrlSuffix);
  330. ResolveURLIfInvalid(&embedded_reauth_chromeos_url_, gaia_url,
  331. kEmbeddedReauthChromeOsUrlSuffix);
  332. ResolveURLIfInvalid(&signin_chrome_sync_dice_, gaia_url,
  333. kSigninChromeSyncDice);
  334. ResolveURLIfInvalid(&signin_chrome_sync_keys_retrieval_url_, gaia_url,
  335. kSigninChromeSyncKeysRetrievalUrl);
  336. ResolveURLIfInvalid(
  337. &signin_chrome_sync_keys_recoverability_degraded_url_, gaia_url,
  338. base::StrCat({kSigninChromeSyncKeysRetrievalUrl,
  339. kSigninChromeSyncKeysRecoverabilityUrlSuffix}));
  340. ResolveURLIfInvalid(&service_login_auth_url_, gaia_url,
  341. kServiceLoginAuthUrlSuffix);
  342. ResolveURLIfInvalid(&service_logout_url_, gaia_url, kServiceLogoutUrlSuffix);
  343. ResolveURLIfInvalid(&continue_url_for_logout_, gaia_url,
  344. kContinueUrlForLogoutSuffix);
  345. ResolveURLIfInvalid(&token_auth_url_, gaia_url, kTokenAuthUrlSuffix);
  346. ResolveURLIfInvalid(&merge_session_url_, gaia_url, kMergeSessionUrlSuffix);
  347. ResolveURLIfInvalid(&oauth_multilogin_url_, gaia_url, kOAuthMultiloginSuffix);
  348. ResolveURLIfInvalid(&oauth_get_access_token_url_, gaia_url,
  349. kOAuthGetAccessTokenUrlSuffix);
  350. ResolveURLIfInvalid(&oauth_wrap_bridge_url_, gaia_url,
  351. kOAuthWrapBridgeUrlSuffix);
  352. ResolveURLIfInvalid(&oauth_revoke_token_url_, gaia_url,
  353. kOAuthRevokeTokenUrlSuffix);
  354. ResolveURLIfInvalid(&oauth1_login_url_, gaia_url, kOAuth1LoginUrlSuffix);
  355. ResolveURLIfInvalid(&list_accounts_url_, gaia_url, kListAccountsSuffix);
  356. ResolveURLIfInvalid(&embedded_signin_url_, gaia_url, kEmbeddedSigninSuffix);
  357. ResolveURLIfInvalid(&add_account_url_, gaia_url, kAddAccountSuffix);
  358. ResolveURLIfInvalid(&reauth_url_, gaia_url, kReauthSuffix);
  359. ResolveURLIfInvalid(&get_check_connection_info_url_, gaia_url,
  360. kGetCheckConnectionInfoSuffix);
  361. // URLs from |lso_origin_url_|.
  362. ResolveURLIfInvalid(&get_oauth_token_url_, lso_origin_url_,
  363. kGetOAuthTokenUrlSuffix);
  364. ResolveURLIfInvalid(&oauth2_auth_url_, lso_origin_url_, kOAuth2AuthUrlSuffix);
  365. ResolveURLIfInvalid(&oauth2_revoke_url_, lso_origin_url_,
  366. kOAuth2RevokeUrlSuffix);
  367. // URLs from |google_apis_origin_url_|.
  368. ResolveURLIfInvalid(&oauth2_token_url_, google_apis_origin_url_,
  369. kOAuth2TokenUrlSuffix);
  370. ResolveURLIfInvalid(&oauth2_token_info_url_, google_apis_origin_url_,
  371. kOAuth2TokenInfoUrlSuffix);
  372. ResolveURLIfInvalid(&oauth_user_info_url_, google_apis_origin_url_,
  373. kOAuthUserInfoUrlSuffix);
  374. ResolveURLIfInvalid(&reauth_api_url_, google_apis_origin_url_,
  375. kReAuthApiUrlSuffix);
  376. // URLs from |oauth_account_manager_origin_url_|.
  377. ResolveURLIfInvalid(&oauth2_issue_token_url_,
  378. oauth_account_manager_origin_url_,
  379. kOAuth2IssueTokenUrlSuffix);
  380. // URLs from |account_capabilities_origin_url_|.
  381. ResolveURLIfInvalid(&account_capabilities_url_,
  382. account_capabilities_origin_url_,
  383. kAccountCapabilitiesBatchGetUrlSuffix);
  384. }
  385. void GaiaUrls::InitializeFromConfig() {
  386. GaiaConfig* config = GaiaConfig::GetInstance();
  387. if (!config)
  388. return;
  389. config->GetURLIfExists(URL_KEY_AND_PTR(google_url));
  390. config->GetURLIfExists(URL_KEY_AND_PTR(secure_google_url));
  391. GURL gaia_origin_url;
  392. config->GetURLIfExists("gaia_url", &gaia_origin_url);
  393. gaia_origin_ = url::Origin::Create(gaia_origin_url);
  394. config->GetURLIfExists(URL_KEY_AND_PTR(lso_origin_url));
  395. config->GetURLIfExists(URL_KEY_AND_PTR(google_apis_origin_url));
  396. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_account_manager_origin_url));
  397. config->GetURLIfExists(URL_KEY_AND_PTR(account_capabilities_origin_url));
  398. config->GetURLIfExists(URL_KEY_AND_PTR(client_login_url));
  399. config->GetURLIfExists(URL_KEY_AND_PTR(service_login_url));
  400. config->GetURLIfExists(URL_KEY_AND_PTR(embedded_setup_chromeos_url_v2));
  401. config->GetURLIfExists(
  402. URL_KEY_AND_PTR(embedded_setup_chromeos_kid_signup_url));
  403. config->GetURLIfExists(
  404. URL_KEY_AND_PTR(embedded_setup_chromeos_kid_signin_url));
  405. config->GetURLIfExists(URL_KEY_AND_PTR(embedded_setup_windows_url));
  406. config->GetURLIfExists(URL_KEY_AND_PTR(embedded_reauth_chromeos_url));
  407. config->GetURLIfExists(URL_KEY_AND_PTR(signin_chrome_sync_dice));
  408. config->GetURLIfExists(
  409. URL_KEY_AND_PTR(signin_chrome_sync_keys_retrieval_url));
  410. config->GetURLIfExists(
  411. URL_KEY_AND_PTR(signin_chrome_sync_keys_recoverability_degraded_url));
  412. config->GetURLIfExists(URL_KEY_AND_PTR(service_login_auth_url));
  413. config->GetURLIfExists(URL_KEY_AND_PTR(service_logout_url));
  414. config->GetURLIfExists(URL_KEY_AND_PTR(continue_url_for_logout));
  415. config->GetURLIfExists(URL_KEY_AND_PTR(token_auth_url));
  416. config->GetURLIfExists(URL_KEY_AND_PTR(merge_session_url));
  417. config->GetURLIfExists(URL_KEY_AND_PTR(get_oauth_token_url));
  418. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_get_access_token_url));
  419. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_wrap_bridge_url));
  420. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_multilogin_url));
  421. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_user_info_url));
  422. config->GetURLIfExists(URL_KEY_AND_PTR(oauth_revoke_token_url));
  423. config->GetURLIfExists(URL_KEY_AND_PTR(oauth1_login_url));
  424. config->GetURLIfExists(URL_KEY_AND_PTR(list_accounts_url));
  425. config->GetURLIfExists(URL_KEY_AND_PTR(embedded_signin_url));
  426. config->GetURLIfExists(URL_KEY_AND_PTR(add_account_url));
  427. config->GetURLIfExists(URL_KEY_AND_PTR(reauth_url));
  428. config->GetURLIfExists(URL_KEY_AND_PTR(account_capabilities_url));
  429. config->GetURLIfExists(URL_KEY_AND_PTR(get_check_connection_info_url));
  430. config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_auth_url));
  431. config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_token_url));
  432. config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_issue_token_url));
  433. config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_token_info_url));
  434. config->GetURLIfExists(URL_KEY_AND_PTR(oauth2_revoke_url));
  435. config->GetURLIfExists(URL_KEY_AND_PTR(reauth_api_url));
  436. }