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)32 GURL 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)53 std::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()68 PwaDomain 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)75 GURL 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