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