1 // Copyright (c) 2012 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.
5 #include "chrome/service/cloud_print/connector_settings.h"
7 #include "base/metrics/histogram.h"
8 #include "base/values.h"
9 #include "chrome/common/cloud_print/cloud_print_constants.h"
10 #include "chrome/common/pref_names.h"
11 #include "chrome/service/cloud_print/print_system.h"
12 #include "chrome/service/service_process_prefs.h"
13 #include "components/cloud_devices/common/cloud_devices_urls.h"
17 const char kDeleteOnEnumFail
[] = "delete_on_enum_fail";
18 const char kName
[] = "name";
19 const char kConnect
[] = "connect";
23 namespace cloud_print
{
25 ConnectorSettings::ConnectorSettings()
26 : delete_on_enum_fail_(false),
27 connect_new_printers_(true),
28 xmpp_ping_enabled_(false),
29 xmpp_ping_timeout_sec_(kDefaultXmppPingTimeoutSecs
) {
32 ConnectorSettings::~ConnectorSettings() {
35 void ConnectorSettings::InitFrom(ServiceProcessPrefs
* prefs
) {
36 CopyFrom(ConnectorSettings());
38 proxy_id_
= prefs
->GetString(prefs::kCloudPrintProxyId
, std::string());
39 if (proxy_id_
.empty()) {
40 proxy_id_
= PrintSystem::GenerateProxyId();
41 prefs
->SetString(prefs::kCloudPrintProxyId
, proxy_id_
);
45 // Getting print system specific settings from the preferences.
46 const base::DictionaryValue
* print_system_settings
=
47 prefs
->GetDictionary(prefs::kCloudPrintPrintSystemSettings
);
48 if (print_system_settings
) {
49 print_system_settings_
.reset(print_system_settings
->DeepCopy());
50 // TODO(vitalybuka) : Consider to rename and move out option from
51 // print_system_settings.
52 print_system_settings_
->GetBoolean(kDeleteOnEnumFail
,
53 &delete_on_enum_fail_
);
56 // Check if there is an override for the cloud print server URL.
57 server_url_
= cloud_devices::GetCloudPrintURL();
58 DCHECK(server_url_
.is_valid());
60 connect_new_printers_
= prefs
->GetBoolean(
61 prefs::kCloudPrintConnectNewPrinters
, true);
63 xmpp_ping_enabled_
= prefs
->GetBoolean(
64 prefs::kCloudPrintXmppPingEnabled
, false);
65 int timeout
= prefs
->GetInt(
66 prefs::kCloudPrintXmppPingTimeout
, kDefaultXmppPingTimeoutSecs
);
67 SetXmppPingTimeoutSec(timeout
);
68 UMA_HISTOGRAM_LONG_TIMES(
69 "CloudPrint.XmppTimeout",
70 base::TimeDelta::FromSeconds(xmpp_ping_timeout_sec_
));
72 const base::ListValue
* printers
= prefs
->GetList(prefs::kCloudPrintPrinters
);
74 for (size_t i
= 0; i
< printers
->GetSize(); ++i
) {
75 const base::DictionaryValue
* dictionary
= NULL
;
76 if (printers
->GetDictionary(i
, &dictionary
) && dictionary
) {
78 dictionary
->GetString(kName
, &name
);
80 bool connect
= connect_new_printers_
;
81 dictionary
->GetBoolean(kConnect
, &connect
);
82 if (connect
!= connect_new_printers_
)
83 printers_
.insert(name
);
88 if (connect_new_printers_
) {
89 UMA_HISTOGRAM_COUNTS_10000("CloudPrint.PrinterBlacklistSize",
92 UMA_HISTOGRAM_COUNTS_10000("CloudPrint.PrinterWhitelistSize",
97 bool ConnectorSettings::ShouldConnect(const std::string
& printer_name
) const {
98 Printers::const_iterator printer
= printers_
.find(printer_name
);
99 if (printer
!= printers_
.end())
100 return !connect_new_printers_
;
101 return connect_new_printers_
;
104 void ConnectorSettings::CopyFrom(const ConnectorSettings
& source
) {
105 server_url_
= source
.server_url();
106 proxy_id_
= source
.proxy_id();
107 delete_on_enum_fail_
= source
.delete_on_enum_fail();
108 connect_new_printers_
= source
.connect_new_printers_
;
109 xmpp_ping_enabled_
= source
.xmpp_ping_enabled();
110 xmpp_ping_timeout_sec_
= source
.xmpp_ping_timeout_sec();
111 printers_
= source
.printers_
;
112 if (source
.print_system_settings())
113 print_system_settings_
.reset(source
.print_system_settings()->DeepCopy());
116 void ConnectorSettings::SetXmppPingTimeoutSec(int timeout
) {
117 xmpp_ping_timeout_sec_
= timeout
;
118 if (xmpp_ping_timeout_sec_
< kMinXmppPingTimeoutSecs
) {
120 "CP_CONNECTOR: XMPP ping timeout is less then minimal value";
121 xmpp_ping_timeout_sec_
= kMinXmppPingTimeoutSecs
;
125 } // namespace cloud_print