1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_service_url.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string>
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h"
104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/format_macros.h"
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/metrics/field_trial.h"
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/strings/string_number_conversions.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/string_util.h"
144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/strings/stringprintf.h"
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "components/autofill/core/common/autofill_switches.h"
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/common/content_switches.h"
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/common/url_constants.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/url_util.h"
217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kProdWalletServiceUrl[] = "https://wallet.google.com/";
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSandboxWalletServiceUrl[] =
294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    "https://wallet-web.sandbox.google.com/";
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kSandboxWalletSecureServiceUrl[] =
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    "https://wallet-web.sandbox.google.com/";
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool IsWalletProductionEnabled() {
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // If the command line flag exists, it takes precedence.
364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  const CommandLine* command_line = CommandLine::ForCurrentProcess();
374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string sandbox_enabled(
384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      command_line->GetSwitchValueASCII(switches::kWalletServiceUseSandbox));
394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  if (!sandbox_enabled.empty())
404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    return sandbox_enabled != "1";
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Default to sandbox when --reduce-security-for-testing is passed to allow
435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // rAc on http:// pages.
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (command_line->HasSwitch(::switches::kReduceSecurityForTesting))
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return false;
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#if defined(ENABLE_PROD_WALLET_SERVICE)
484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return true;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#else
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return false;
515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetWalletHostUrl() {
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string wallet_service_hostname =
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      command_line.GetSwitchValueASCII(switches::kWalletServiceUrl);
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!wallet_service_hostname.empty())
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GURL(wallet_service_hostname);
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (IsWalletProductionEnabled())
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GURL(kProdWalletServiceUrl);
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return GURL(kSandboxWalletServiceUrl);
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetBaseWalletUrl(size_t user_index) {
664e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string path = base::StringPrintf("online/v2/u/%" PRIuS "/", user_index);
674e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetWalletHostUrl().Resolve(path);
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetBaseAutocheckoutUrl(size_t user_index) {
714e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseWalletUrl(user_index).Resolve("wallet/autocheckout/v1/");
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetBaseSecureUrl() {
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string wallet_secure_url =
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      command_line.GetSwitchValueASCII(switches::kWalletSecureServiceUrl);
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!wallet_secure_url.empty())
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GURL(wallet_secure_url);
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  if (IsWalletProductionEnabled())
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return GURL(kProdWalletServiceUrl);
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return GURL(kSandboxWalletSecureServiceUrl);
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
854e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetBaseEncryptedFrontendUrl(size_t user_index) {
86ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  GURL base_url = IsWalletProductionEnabled() ||
88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      command_line.HasSwitch(switches::kWalletServiceUrl) ?
89ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch          GetWalletHostUrl() : GetBaseSecureUrl();
904e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string path =
914e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::StringPrintf("online-secure/v2/u/%" PRIuS "/autocheckout/v1/",
924e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)                         user_index);
934e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return base_url.Resolve(path);
94ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch}
95ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace wallet {
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetGetWalletItemsUrl(size_t user_index) {
1014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseAutocheckoutUrl(user_index).Resolve("getWalletItemsJwtless");
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetGetFullWalletUrl(size_t user_index) {
1054e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseEncryptedFrontendUrl(user_index)
1064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      .Resolve("getFullWalletJwtless?s7e=otp");
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetManageInstrumentsUrl(size_t user_index) {
1104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string path =
1114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::StringPrintf("manage/w/%" PRIuS "/paymentMethods", user_index);
1124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseSecureUrl().Resolve(path);
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetManageAddressesUrl(size_t user_index) {
1164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  std::string path =
1174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)      base::StringPrintf("manage/w/%" PRIuS "/settings/addresses", user_index);
1184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseSecureUrl().Resolve(path);
11990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetAcceptLegalDocumentsUrl(size_t user_index) {
1224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseAutocheckoutUrl(user_index).Resolve("acceptLegalDocument");
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetAuthenticateInstrumentUrl(size_t user_index) {
1264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseEncryptedFrontendUrl(user_index)
127ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      .Resolve("authenticateInstrument?s7e=cvn");
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetSaveToWalletNoEscrowUrl(size_t user_index) {
1314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseAutocheckoutUrl(user_index).Resolve("saveToWallet");
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)GURL GetSaveToWalletUrl(size_t user_index) {
1354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  return GetBaseEncryptedFrontendUrl(user_index)
136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch      .Resolve("saveToWallet?s7e=card_number%3Bcvn");
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)GURL GetPassiveAuthUrl(size_t user_index) {
140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return GetBaseWalletUrl(user_index)
141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      .Resolve("passiveauth?isChromePayments=true");
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetSignInUrl() {
145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  GURL url(GaiaUrls::GetInstance()->add_account_url());
146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  url = net::AppendQueryParameter(url, "nui", "1");
147d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Prevents promos from showing (see http://crbug.com/235227).
148d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  url = net::AppendQueryParameter(url, "sarp", "1");
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  url = net::AppendQueryParameter(url,
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  "continue",
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                  GetSignInContinueUrl().spec());
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return url;
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// The continue url portion of the sign-in URL. This URL is used as a milestone
156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// to determine that the sign-in process is finished. It has to be a Google
157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// domain, use https://, and do almost nothing, but otherwise it's not too
158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// important what the URL actually is: it's not important that this URL has the
159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// ability to generate a gdToken.
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)GURL GetSignInContinueUrl() {
161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return GetPassiveAuthUrl(0);
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool IsSignInContinueUrl(const GURL& url, size_t* user_index) {
1655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  GURL final_url = GetSignInContinueUrl();
1665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (url.scheme() != final_url.scheme() ||
167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      url.host() != final_url.host() ||
168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      url.path() != final_url.path()) {
169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    return false;
170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  *user_index = 0;
173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  std::string query_str = url.query();
174010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  url::Component query(0, query_str.length());
175010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  url::Component key, value;
176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  const char kUserIndexKey[] = "authuser";
177010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  while (url::ExtractQueryKeyValue(query_str.c_str(), &query, &key, &value)) {
178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    if (key.is_nonempty() &&
179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        query_str.substr(key.begin, key.len) == kUserIndexKey) {
180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      base::StringToSizeT(query_str.substr(value.begin, value.len), user_index);
181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      break;
182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  }
184f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
185f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  return true;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool IsSignInRelatedUrl(const GURL& url) {
1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  size_t unused;
1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return url.GetOrigin() == GetSignInUrl().GetOrigin() ||
1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      StartsWith(base::UTF8ToUTF16(url.GetOrigin().host()),
1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 base::ASCIIToUTF16("accounts."),
1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                 false) ||
1945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      IsSignInContinueUrl(url, &unused);
1955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
1965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
197868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)bool IsUsingProd() {
198868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return GetWalletHostUrl() == GURL(kProdWalletServiceUrl);
199868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
200868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace wallet
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace autofill
203