1// Copyright (c) 2011 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 "chrome/browser/printing/cloud_print/cloud_print_url.h"
6
7#include "base/command_line.h"
8#include "base/logging.h"
9#include "chrome/browser/prefs/pref_service.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/common/chrome_switches.h"
12#include "chrome/common/pref_names.h"
13#include "googleurl/src/gurl.h"
14
15const char kDefaultCloudPrintServiceURL[] = "https://www.google.com/cloudprint";
16const char kLearnMoreURL[] =
17    "https://www.google.com/support/cloudprint";
18const char kTestPageURL[] =
19    "http://www.google.com/landing/cloudprint/enable.html?print=true";
20
21void CloudPrintURL::RegisterPreferences() {
22  DCHECK(profile_);
23  PrefService* pref_service = profile_->GetPrefs();
24  if (pref_service->FindPreference(prefs::kCloudPrintServiceURL))
25    return;
26  pref_service->RegisterStringPref(prefs::kCloudPrintServiceURL,
27                                   kDefaultCloudPrintServiceURL);
28}
29
30// Returns the root service URL for the cloud print service.  The default is to
31// point at the Google Cloud Print service.  This can be overridden by the
32// command line or by the user preferences.
33GURL CloudPrintURL::GetCloudPrintServiceURL() {
34  DCHECK(profile_);
35  RegisterPreferences();
36
37  const CommandLine& command_line = *CommandLine::ForCurrentProcess();
38  GURL cloud_print_service_url = GURL(command_line.GetSwitchValueASCII(
39      switches::kCloudPrintServiceURL));
40  if (cloud_print_service_url.is_empty()) {
41    cloud_print_service_url = GURL(
42        profile_->GetPrefs()->GetString(prefs::kCloudPrintServiceURL));
43  }
44  return cloud_print_service_url;
45}
46
47GURL CloudPrintURL::GetCloudPrintServiceDialogURL() {
48  GURL cloud_print_service_url = GetCloudPrintServiceURL();
49  std::string path(cloud_print_service_url.path() + "/client/dialog.html");
50  GURL::Replacements replacements;
51  replacements.SetPathStr(path);
52  GURL cloud_print_dialog_url = cloud_print_service_url.ReplaceComponents(
53      replacements);
54  return cloud_print_dialog_url;
55}
56
57GURL CloudPrintURL::GetCloudPrintServiceManageURL() {
58  GURL cloud_print_service_url = GetCloudPrintServiceURL();
59  std::string path(cloud_print_service_url.path() + "/manage.html");
60  GURL::Replacements replacements;
61  replacements.SetPathStr(path);
62  GURL cloud_print_manage_url = cloud_print_service_url.ReplaceComponents(
63      replacements);
64  return cloud_print_manage_url;
65}
66
67GURL CloudPrintURL::GetCloudPrintLearnMoreURL() {
68  GURL cloud_print_learn_more_url(kLearnMoreURL);
69  return cloud_print_learn_more_url;
70}
71
72GURL CloudPrintURL::GetCloudPrintTestPageURL() {
73  GURL cloud_print_learn_more_url(kTestPageURL);
74  return cloud_print_learn_more_url;
75}
76