10529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
20529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Use of this source code is governed by a BSD-style license that can be
30529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// found in the LICENSE file.
40529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
50529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/cloud_devices/common/cloud_devices_urls.h"
60529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
70529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/command_line.h"
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/strings/string_util.h"
90529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/strings/stringprintf.h"
100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/cloud_devices/common/cloud_devices_switches.h"
110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "google_apis/gaia/gaia_urls.h"
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "net/base/url_util.h"
130529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace cloud_devices {
150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudPrintAuthScope[] =
170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    "https://www.googleapis.com/auth/cloudprint";
180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudDevicesAuthScope[] =
200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    "https://www.googleapis.com/auth/clouddevices";
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudPrintLearnMoreURL[] =
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    "https://www.google.com/support/cloudprint";
240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudPrintTestPageURL[] =
260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    "http://www.google.com/landing/cloudprint/enable.html?print=true";
270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochnamespace {
290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Url must not be matched by "urls" section of
310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// cloud_print_app/manifest.json. If it's matched, print driver dialog will
320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// open sign-in page in separate window.
330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudPrintURL[] = "https://www.google.com/cloudprint";
340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochconst char kCloudDevicesUrl[] = "https://www.googleapis.com/clouddevices/v1";
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
370529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Returns the root service URL for the cloud print service.  The default is to
400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// point at the Google Cloud Print service.  This can be overridden by the
410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// command line or by the user preferences.
420529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudPrintURL() {
430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  const CommandLine* command_line = CommandLine::ForCurrentProcess();
440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL cloud_print_url(
450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      command_line->GetSwitchValueASCII(switches::kCloudPrintURL));
460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (cloud_print_url.is_empty())
470529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    cloud_print_url = GURL(kCloudPrintURL);
480529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return cloud_print_url;
490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
510529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudPrintRelativeURL(const std::string& relative_path) {
520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url = GetCloudPrintURL();
530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string path;
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  static const char kURLPathSeparator[] = "/";
550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::TrimString(url.path(), kURLPathSeparator, &path);
560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string trimmed_path;
570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
580529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  path += kURLPathSeparator;
590529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  path += trimmed_path;
600529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL::Replacements replacements;
610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  replacements.SetPathStr(path);
620529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return url.ReplaceComponents(replacements);
630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
650529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudPrintSigninURL() {
660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url(GaiaUrls::GetInstance()->service_login_url());
670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "service", "cloudprint");
680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "sarp", "1");
690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string continue_str = GetCloudPrintURL().spec();
700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "continue", continue_str);
710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return url;
720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
740529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudPrintAddAccountURL() {
750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url(GaiaUrls::GetInstance()->add_account_url());
760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "service", "cloudprint");
770529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "sarp", "1");
780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string continue_str = GetCloudPrintURL().spec();
790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "continue", continue_str);
800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return url;
810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
830529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudPrintEnableURL(const std::string& proxy_id) {
840529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url = GetCloudPrintRelativeURL("enable_chrome_connector/enable.html");
850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "proxy", proxy_id);
860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return url;
870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
895c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuGURL GetCloudPrintEnableWithSigninURL(const std::string& proxy_id) {
900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url(GaiaUrls::GetInstance()->service_login_url());
910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "service", "cloudprint");
920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  url = net::AppendQueryParameter(url, "sarp", "1");
930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string continue_str = GetCloudPrintEnableURL(proxy_id).spec();
940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return net::AppendQueryParameter(url, "continue", continue_str);
950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
975c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuGURL GetCloudPrintManageDeviceURL(const std::string& device_id) {
985c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  std::string ref = "printers/" + device_id;
995c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  GURL::Replacements replacements;
1005c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  replacements.SetRefStr(ref);
1015c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  return GetCloudPrintURL().ReplaceComponents(replacements);
1025c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}
1035c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu
1040529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudDevicesURL() {
1050529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  const CommandLine* command_line = CommandLine::ForCurrentProcess();
1060529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL cloud_print_url(
1070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch      command_line->GetSwitchValueASCII(switches::kCloudDevicesURL));
1080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  if (cloud_print_url.is_empty())
1090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch    cloud_print_url = GURL(kCloudDevicesUrl);
1100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return cloud_print_url;
1110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
1120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1130529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochGURL GetCloudDevicesRelativeURL(const std::string& relative_path) {
1140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL url = GetCloudDevicesURL();
1150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string path;
1160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  const char kURLPathSeparator[] = "/";
1170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::TrimString(url.path(), kURLPathSeparator, &path);
1180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  std::string trimmed_path;
1190529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  base::TrimString(relative_path, kURLPathSeparator, &trimmed_path);
1200529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  path += kURLPathSeparator;
1210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  path += trimmed_path;
1220529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  GURL::Replacements replacements;
1230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  replacements.SetPathStr(path);
1240529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  return url.ReplaceComponents(replacements);
1250529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}
1260529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
1270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch}  // namespace cloud_devices
128