15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/cloud_print/cloud_print_url.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/google/google_util.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h" 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "net/base/url_util.h" 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Url must not be matched by "urls" section of 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// cloud_print_app/manifest.json. If it's matched, print driver dialog will 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// open sign-in page in separate window. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kDefaultCloudPrintServiceURL[] = "https://www.google.com/cloudprint"; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kLearnMoreURL[] = 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "https://www.google.com/support/cloudprint"; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kTestPageURL[] = 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.google.com/landing/cloudprint/enable.html?print=true"; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid CloudPrintURL::RegisterProfilePrefs( 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const CommandLine* command_line = CommandLine::ForCurrentProcess(); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL cloud_print_url( 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) command_line->GetSwitchValueASCII(switches::kCloudPrintServiceURL)); 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) if (cloud_print_url.is_empty()) 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) cloud_print_url = GURL(kDefaultCloudPrintServiceURL); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCloudPrintServiceURL, 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) cloud_print_url.spec(), 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL gaia_url(GaiaUrls::GetInstance()->service_login_url()); 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gaia_url = net::AppendQueryParameter(gaia_url, "service", "cloudprint"); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gaia_url = net::AppendQueryParameter(gaia_url, "sarp", "1"); 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gaia_url = net::AppendQueryParameter(gaia_url, "continue", 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) cloud_print_url.spec()); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterStringPref( 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kCloudPrintSigninURL, 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) gaia_url.spec(), 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Returns the root service URL for the cloud print service. The default is to 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// point at the Google Cloud Print service. This can be overridden by the 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// command line or by the user preferences. 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintServiceURL() { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile_); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return GURL(profile_->GetPrefs()->GetString(prefs::kCloudPrintServiceURL)); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintSigninURL() { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(profile_); 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) GURL cloud_print_signin_url( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_->GetPrefs()->GetString(prefs::kCloudPrintSigninURL)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return google_util::AppendGoogleLocaleParam(cloud_print_signin_url); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintServiceDialogURL() { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_service_url = GetCloudPrintServiceURL(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path(cloud_print_service_url.path() + "/client/dialog.html"); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replacements; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetPathStr(path); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_dialog_url = cloud_print_service_url.ReplaceComponents( 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return google_util::AppendGoogleLocaleParam(cloud_print_dialog_url); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintServiceManageURL() { 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_service_url = GetCloudPrintServiceURL(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path(cloud_print_service_url.path() + "/manage.html"); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replacements; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetPathStr(path); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_manage_url = cloud_print_service_url.ReplaceComponents( 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cloud_print_manage_url; 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintServiceEnableURL( 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& proxy_id) { 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_service_url = GetCloudPrintServiceURL(); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string path(cloud_print_service_url.path() + 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "/enable_chrome_connector/enable.html"); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replacements; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetPathStr(path); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string query = base::StringPrintf("proxy=%s", proxy_id.c_str()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements.SetQueryStr(query); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_enable_url = cloud_print_service_url.ReplaceComponents( 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replacements); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cloud_print_enable_url; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintLearnMoreURL() { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_learn_more_url(kLearnMoreURL); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cloud_print_learn_more_url; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GURL CloudPrintURL::GetCloudPrintTestPageURL() { 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL cloud_print_learn_more_url(kTestPageURL); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cloud_print_learn_more_url; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 111