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