1 // Copyright 2014 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 "components/cloud_devices/common/cloud_devices_urls.h"
6
7 #include "base/command_line.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/stringprintf.h"
10 #include "components/cloud_devices/common/cloud_devices_switches.h"
11 #include "google_apis/gaia/gaia_urls.h"
12 #include "net/base/url_util.h"
13
14 namespace cloud_devices {
15
16 const char kCloudPrintAuthScope[] =
17 "https://www.googleapis.com/auth/cloudprint";
18
19 const char kCloudDevicesAuthScope[] =
20 "https://www.googleapis.com/auth/clouddevices";
21
22 const char kCloudPrintLearnMoreURL[] =
23 "https://www.google.com/support/cloudprint";
24
25 const char kCloudPrintTestPageURL[] =
26 "http://www.google.com/landing/cloudprint/enable.html?print=true";
27
28 namespace {
29
30 // Url must not be matched by "urls" section of
31 // cloud_print_app/manifest.json. If it's matched, print driver dialog will
32 // open sign-in page in separate window.
33 const char kCloudPrintURL[] = "https://www.google.com/cloudprint";
34
35 const char kCloudDevicesUrl[] = "https://www.googleapis.com/clouddevices/v1";
36
37 }
38
39 // Returns the root service URL for the cloud print service. The default is to
40 // point at the Google Cloud Print service. This can be overridden by the
41 // command line or by the user preferences.
GetCloudPrintURL()42 GURL GetCloudPrintURL() {
43 const CommandLine* command_line = CommandLine::ForCurrentProcess();
44 GURL cloud_print_url(
45 command_line->GetSwitchValueASCII(switches::kCloudPrintURL));
46 if (cloud_print_url.is_empty())
47 cloud_print_url = GURL(kCloudPrintURL);
48 return cloud_print_url;
49 }
50
GetCloudPrintRelativeURL(const std::string & relative_path)51 GURL GetCloudPrintRelativeURL(const std::string& relative_path) {
52 GURL url = GetCloudPrintURL();
53 std::string path;
54 static const char kURLPathSeparator[] = "/";
55 base::TrimString(url.path(), kURLPathSeparator, &path);
56 std::string trimmed_path;
57 base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
58 path += kURLPathSeparator;
59 path += trimmed_path;
60 GURL::Replacements replacements;
61 replacements.SetPathStr(path);
62 return url.ReplaceComponents(replacements);
63 }
64
GetCloudPrintSigninURL()65 GURL GetCloudPrintSigninURL() {
66 GURL url(GaiaUrls::GetInstance()->service_login_url());
67 url = net::AppendQueryParameter(url, "service", "cloudprint");
68 url = net::AppendQueryParameter(url, "sarp", "1");
69 std::string continue_str = GetCloudPrintURL().spec();
70 url = net::AppendQueryParameter(url, "continue", continue_str);
71 return url;
72 }
73
GetCloudPrintAddAccountURL()74 GURL GetCloudPrintAddAccountURL() {
75 GURL url(GaiaUrls::GetInstance()->add_account_url());
76 url = net::AppendQueryParameter(url, "service", "cloudprint");
77 url = net::AppendQueryParameter(url, "sarp", "1");
78 std::string continue_str = GetCloudPrintURL().spec();
79 url = net::AppendQueryParameter(url, "continue", continue_str);
80 return url;
81 }
82
GetCloudPrintEnableURL(const std::string & proxy_id)83 GURL GetCloudPrintEnableURL(const std::string& proxy_id) {
84 GURL url = GetCloudPrintRelativeURL("enable_chrome_connector/enable.html");
85 url = net::AppendQueryParameter(url, "proxy", proxy_id);
86 return url;
87 }
88
GetCloudPrintEnableWithSigninURL(const std::string & proxy_id)89 GURL GetCloudPrintEnableWithSigninURL(const std::string& proxy_id) {
90 GURL url(GaiaUrls::GetInstance()->service_login_url());
91 url = net::AppendQueryParameter(url, "service", "cloudprint");
92 url = net::AppendQueryParameter(url, "sarp", "1");
93 std::string continue_str = GetCloudPrintEnableURL(proxy_id).spec();
94 return net::AppendQueryParameter(url, "continue", continue_str);
95 }
96
GetCloudPrintManageDeviceURL(const std::string & device_id)97 GURL GetCloudPrintManageDeviceURL(const std::string& device_id) {
98 std::string ref = "printers/" + device_id;
99 GURL::Replacements replacements;
100 replacements.SetRefStr(ref);
101 return GetCloudPrintURL().ReplaceComponents(replacements);
102 }
103
GetCloudDevicesURL()104 GURL GetCloudDevicesURL() {
105 const CommandLine* command_line = CommandLine::ForCurrentProcess();
106 GURL cloud_print_url(
107 command_line->GetSwitchValueASCII(switches::kCloudDevicesURL));
108 if (cloud_print_url.is_empty())
109 cloud_print_url = GURL(kCloudDevicesUrl);
110 return cloud_print_url;
111 }
112
GetCloudDevicesRelativeURL(const std::string & relative_path)113 GURL GetCloudDevicesRelativeURL(const std::string& relative_path) {
114 GURL url = GetCloudDevicesURL();
115 std::string path;
116 const char kURLPathSeparator[] = "/";
117 base::TrimString(url.path(), kURLPathSeparator, &path);
118 std::string trimmed_path;
119 base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
120 path += kURLPathSeparator;
121 path += trimmed_path;
122 GURL::Replacements replacements;
123 replacements.SetPathStr(path);
124 return url.ReplaceComponents(replacements);
125 }
126
127 } // namespace cloud_devices
128