1 // Copyright 2018 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 5 #include "chrome/browser/chromeos/android_sms/android_sms_urls.h" 6 7 #include <string> 8 9 #include "base/command_line.h" 10 #include "base/strings/strcat.h" 11 #include "chrome/browser/chromeos/android_sms/android_sms_switches.h" 12 #include "chromeos/constants/chromeos_features.h" 13 #include "url/gurl.h" 14 15 namespace chromeos { 16 17 namespace android_sms { 18 19 namespace { 20 21 // Note: Install and app URLs are the same for the android.com domain. 22 const char kProdAndroidUrl[] = "https://messages.android.com/"; 23 24 const char kProdGoogleAppUrl[] = "https://messages.google.com/web/"; 25 const char kProdGoogleInstallUrl[] = 26 "https://messages.google.com/web/authentication"; 27 28 const char kStagingAppUrl[] = "https://messages-web.sandbox.google.com/web/"; 29 const char kStagingInstallUrl[] = 30 "https://messages-web.sandbox.google.com/web/authentication"; 31 GetCustomDomain(bool use_install_url)32GURL GetCustomDomain(bool use_install_url) { 33 std::string custom_domain = 34 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 35 switches::kCustomAndroidMessagesDomain); 36 if (custom_domain.empty()) { 37 return GURL::EmptyGURL(); 38 } 39 40 GURL url(custom_domain); 41 GURL::Replacements path; 42 if (use_install_url) { 43 path.SetPathStr("/web/authentication"); 44 } else { // App url. 45 path.SetPathStr("/web/"); 46 } 47 48 return url.ReplaceComponents(path); 49 } 50 51 } // namespace 52 operator <<(std::ostream & stream,const PwaDomain & pwa_domain)53std::ostream& operator<<(std::ostream& stream, const PwaDomain& pwa_domain) { 54 switch (pwa_domain) { 55 case PwaDomain::kProdAndroid: 56 stream << "[Production: messages.android.com]"; 57 break; 58 case PwaDomain::kProdGoogle: 59 stream << "[Production: messages.google.com]"; 60 break; 61 case PwaDomain::kStaging: 62 stream << "[Staging: messages-web.sandbox.google.com]"; 63 break; 64 } 65 return stream; 66 } 67 GetPreferredPwaDomain()68PwaDomain GetPreferredPwaDomain() { 69 if (base::FeatureList::IsEnabled(features::kUseMessagesStagingUrl)) 70 return PwaDomain::kStaging; 71 72 return PwaDomain::kProdGoogle; 73 } 74 GetAndroidMessagesURL(bool use_install_url,PwaDomain pwa_domain)75GURL GetAndroidMessagesURL(bool use_install_url, PwaDomain pwa_domain) { 76 // If present, use custom override for the preferred domain. 77 if (pwa_domain == GetPreferredPwaDomain()) { 78 GURL custom_url = GetCustomDomain(use_install_url); 79 if (!custom_url.is_empty()) 80 return custom_url; 81 } 82 83 switch (pwa_domain) { 84 case PwaDomain::kProdAndroid: 85 return GURL(kProdAndroidUrl); 86 case PwaDomain::kProdGoogle: 87 return use_install_url ? GURL(kProdGoogleInstallUrl) 88 : GURL(kProdGoogleAppUrl); 89 case PwaDomain::kStaging: 90 return use_install_url ? GURL(kStagingInstallUrl) : GURL(kStagingAppUrl); 91 } 92 } 93 94 } // namespace android_sms 95 96 } // namespace chromeos 97