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