Chromium Code Reviews

Side by Side Diff: chrome/service/cloud_print/cloud_print_proxy.cc

Issue 5646003: Sanitize PrefStore interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix PrefService mock construction in PrefServiceTest to include command line store. Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | | Annotate | Revision Log
« no previous file with comments | « chrome/service/cloud_print/cloud_print_proxy.h ('k') | chrome/service/service_process.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/service/cloud_print/cloud_print_proxy.h" 5 #include "chrome/service/cloud_print/cloud_print_proxy.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/process_util.h" 9 #include "base/process_util.h"
10 #include "base/values.h" 10 #include "base/values.h"
11 #include "chrome/common/chrome_switches.h" 11 #include "chrome/common/chrome_switches.h"
12 #include "chrome/common/pref_names.h" 12 #include "chrome/common/pref_names.h"
13 #include "chrome/common/json_pref_store.h"
14 #include "chrome/service/cloud_print/cloud_print_consts.h" 13 #include "chrome/service/cloud_print/cloud_print_consts.h"
15 #include "chrome/service/cloud_print/print_system.h" 14 #include "chrome/service/cloud_print/print_system.h"
16 #include "chrome/service/service_process.h" 15 #include "chrome/service/service_process.h"
16 #include "chrome/service/service_process_prefs.h"
17 17
18 // This method is invoked on the IO thread to launch the browser process to 18 // This method is invoked on the IO thread to launch the browser process to
19 // display a desktop notification that the Cloud Print token is invalid and 19 // display a desktop notification that the Cloud Print token is invalid and
20 // needs re-authentication. 20 // needs re-authentication.
21 static void ShowTokenExpiredNotificationInBrowser() { 21 static void ShowTokenExpiredNotificationInBrowser() {
22 DCHECK(g_service_process->io_thread()->message_loop_proxy()-> 22 DCHECK(g_service_process->io_thread()->message_loop_proxy()->
23 BelongsToCurrentThread()); 23 BelongsToCurrentThread());
24 FilePath exe_path; 24 FilePath exe_path;
25 PathService::Get(base::FILE_EXE, &exe_path); 25 PathService::Get(base::FILE_EXE, &exe_path);
26 if (exe_path.empty()) { 26 if (exe_path.empty()) {
(...skipping 14 matching lines...)
41 CloudPrintProxy::CloudPrintProxy() 41 CloudPrintProxy::CloudPrintProxy()
42 : service_prefs_(NULL), 42 : service_prefs_(NULL),
43 client_(NULL) { 43 client_(NULL) {
44 } 44 }
45 45
46 CloudPrintProxy::~CloudPrintProxy() { 46 CloudPrintProxy::~CloudPrintProxy() {
47 DCHECK(CalledOnValidThread()); 47 DCHECK(CalledOnValidThread());
48 Shutdown(); 48 Shutdown();
49 } 49 }
50 50
51 void CloudPrintProxy::Initialize(JsonPrefStore* service_prefs, Client* client) { 51 void CloudPrintProxy::Initialize(ServiceProcessPrefs* service_prefs,
52 Client* client) {
52 DCHECK(CalledOnValidThread()); 53 DCHECK(CalledOnValidThread());
53 service_prefs_ = service_prefs; 54 service_prefs_ = service_prefs;
54 client_ = client; 55 client_ = client;
55 } 56 }
56 57
57 void CloudPrintProxy::EnableForUser(const std::string& lsid) { 58 void CloudPrintProxy::EnableForUser(const std::string& lsid) {
58 DCHECK(CalledOnValidThread()); 59 DCHECK(CalledOnValidThread());
59 if (backend_.get()) 60 if (backend_.get())
60 return; 61 return;
61 62
62 std::string proxy_id; 63 std::string proxy_id;
63 service_prefs_->prefs()->GetString(prefs::kCloudPrintProxyId, &proxy_id); 64 service_prefs_->GetString(prefs::kCloudPrintProxyId, &proxy_id);
64 if (proxy_id.empty()) { 65 if (proxy_id.empty()) {
65 proxy_id = cloud_print::PrintSystem::GenerateProxyId(); 66 proxy_id = cloud_print::PrintSystem::GenerateProxyId();
66 service_prefs_->prefs()->SetString(prefs::kCloudPrintProxyId, proxy_id); 67 service_prefs_->SetString(prefs::kCloudPrintProxyId, proxy_id);
67 service_prefs_->WritePrefs(); 68 service_prefs_->WritePrefs();
68 } 69 }
69 70
70 // Getting print system specific settings from the preferences. 71 // Getting print system specific settings from the preferences.
71 DictionaryValue* print_system_settings = NULL; 72 DictionaryValue* print_system_settings = NULL;
72 service_prefs_->prefs()->GetDictionary(prefs::kCloudPrintPrintSystemSettings, 73 service_prefs_->GetDictionary(prefs::kCloudPrintPrintSystemSettings,
73 &print_system_settings); 74 &print_system_settings);
74 75
75 // Check if there is an override for the cloud print server URL. 76 // Check if there is an override for the cloud print server URL.
76 std::string cloud_print_server_url_str; 77 std::string cloud_print_server_url_str;
77 service_prefs_->prefs()->GetString(prefs::kCloudPrintServiceURL, 78 service_prefs_->GetString(prefs::kCloudPrintServiceURL,
78 &cloud_print_server_url_str); 79 &cloud_print_server_url_str);
79 if (cloud_print_server_url_str.empty()) { 80 if (cloud_print_server_url_str.empty()) {
80 cloud_print_server_url_str = kDefaultCloudPrintServerUrl; 81 cloud_print_server_url_str = kDefaultCloudPrintServerUrl;
81 } 82 }
82 83
83 GURL cloud_print_server_url(cloud_print_server_url_str.c_str()); 84 GURL cloud_print_server_url(cloud_print_server_url_str.c_str());
84 DCHECK(cloud_print_server_url.is_valid()); 85 DCHECK(cloud_print_server_url.is_valid());
85 backend_.reset(new CloudPrintProxyBackend(this, cloud_print_server_url, 86 backend_.reset(new CloudPrintProxyBackend(this, cloud_print_server_url,
86 print_system_settings)); 87 print_system_settings));
87 // If we have been passed in an LSID, we want to use this to authenticate. 88 // If we have been passed in an LSID, we want to use this to authenticate.
88 // Else we will try and retrieve the last used auth tokens from prefs. 89 // Else we will try and retrieve the last used auth tokens from prefs.
89 if (!lsid.empty()) { 90 if (!lsid.empty()) {
90 backend_->InitializeWithLsid(lsid, proxy_id); 91 backend_->InitializeWithLsid(lsid, proxy_id);
91 } else { 92 } else {
92 std::string cloud_print_token; 93 std::string cloud_print_token;
93 service_prefs_->prefs()->GetString(prefs::kCloudPrintAuthToken, 94 service_prefs_->GetString(prefs::kCloudPrintAuthToken,
94 &cloud_print_token); 95 &cloud_print_token);
95 DCHECK(!cloud_print_token.empty()); 96 DCHECK(!cloud_print_token.empty());
96 std::string cloud_print_xmpp_token; 97 std::string cloud_print_xmpp_token;
97 service_prefs_->prefs()->GetString(prefs::kCloudPrintXMPPAuthToken, 98 service_prefs_->GetString(prefs::kCloudPrintXMPPAuthToken,
98 &cloud_print_xmpp_token); 99 &cloud_print_xmpp_token);
99 DCHECK(!cloud_print_xmpp_token.empty()); 100 DCHECK(!cloud_print_xmpp_token.empty());
100 service_prefs_->prefs()->GetString(prefs::kCloudPrintEmail, 101 service_prefs_->GetString(prefs::kCloudPrintEmail,
101 &cloud_print_email_); 102 &cloud_print_email_);
102 DCHECK(!cloud_print_email_.empty()); 103 DCHECK(!cloud_print_email_.empty());
103 backend_->InitializeWithToken(cloud_print_token, cloud_print_xmpp_token, 104 backend_->InitializeWithToken(cloud_print_token, cloud_print_xmpp_token,
104 cloud_print_email_, proxy_id); 105 cloud_print_email_, proxy_id);
105 } 106 }
106 if (client_) { 107 if (client_) {
107 client_->OnCloudPrintProxyEnabled(); 108 client_->OnCloudPrintProxyEnabled();
108 } 109 }
109 } 110 }
110 111
111 void CloudPrintProxy::DisableForUser() { 112 void CloudPrintProxy::DisableForUser() {
112 DCHECK(CalledOnValidThread()); 113 DCHECK(CalledOnValidThread());
113 cloud_print_email_.clear(); 114 cloud_print_email_.clear();
114 Shutdown(); 115 Shutdown();
115 if (client_) { 116 if (client_) {
116 client_->OnCloudPrintProxyDisabled(); 117 client_->OnCloudPrintProxyDisabled();
117 } 118 }
118 } 119 }
119 120
120 bool CloudPrintProxy::IsEnabled(std::string* email) const { 121 bool CloudPrintProxy::IsEnabled(std::string* email) const {
121 bool enabled = !cloud_print_email().empty(); 122 bool enabled = !cloud_print_email().empty();
122 if (enabled && email) { 123 if (enabled && email) {
123 *email = cloud_print_email(); 124 *email = cloud_print_email();
124 } 125 }
125 return enabled; 126 return enabled;
126 } 127 }
127 128
128 void CloudPrintProxy::Shutdown() {
129 DCHECK(CalledOnValidThread());
130 if (backend_.get())
131 backend_->Shutdown();
132 backend_.reset();
133 }
134
135 // Notification methods from the backend. Called on UI thread. 129 // Notification methods from the backend. Called on UI thread.
136 void CloudPrintProxy::OnPrinterListAvailable( 130 void CloudPrintProxy::OnPrinterListAvailable(
137 const printing::PrinterList& printer_list) { 131 const printing::PrinterList& printer_list) {
138 DCHECK(CalledOnValidThread()); 132 DCHECK(CalledOnValidThread());
139 // We could potentially show UI here allowing the user to select which 133 // We could potentially show UI here allowing the user to select which
140 // printers to register. For now, we just register all. 134 // printers to register. For now, we just register all.
141 backend_->RegisterPrinters(printer_list); 135 backend_->RegisterPrinters(printer_list);
142 } 136 }
143 137
144 void CloudPrintProxy::OnAuthenticated( 138 void CloudPrintProxy::OnAuthenticated(
145 const std::string& cloud_print_token, 139 const std::string& cloud_print_token,
146 const std::string& cloud_print_xmpp_token, 140 const std::string& cloud_print_xmpp_token,
147 const std::string& email) { 141 const std::string& email) {
148 DCHECK(CalledOnValidThread()); 142 DCHECK(CalledOnValidThread());
149 cloud_print_email_ = email; 143 cloud_print_email_ = email;
150 service_prefs_->prefs()->SetString(prefs::kCloudPrintAuthToken, 144 service_prefs_->SetString(prefs::kCloudPrintAuthToken,
151 cloud_print_token); 145 cloud_print_token);
152 service_prefs_->prefs()->SetString(prefs::kCloudPrintXMPPAuthToken, 146 service_prefs_->SetString(prefs::kCloudPrintXMPPAuthToken,
153 cloud_print_xmpp_token); 147 cloud_print_xmpp_token);
154 service_prefs_->prefs()->SetString(prefs::kCloudPrintEmail, email); 148 service_prefs_->SetString(prefs::kCloudPrintEmail,
149 email);
155 service_prefs_->WritePrefs(); 150 service_prefs_->WritePrefs();
156 } 151 }
157 152
158 void CloudPrintProxy::OnAuthenticationFailed() { 153 void CloudPrintProxy::OnAuthenticationFailed() {
159 DCHECK(CalledOnValidThread()); 154 DCHECK(CalledOnValidThread());
160 // If authenticated failed, we will disable the cloud print proxy. 155 // If authenticated failed, we will disable the cloud print proxy.
161 DisableForUser(); 156 DisableForUser();
162 // Launch the browser to display a notification that the credentials have 157 // Launch the browser to display a notification that the credentials have
163 // expired. 158 // expired.
164 g_service_process->io_thread()->message_loop_proxy()->PostTask( 159 g_service_process->io_thread()->message_loop_proxy()->PostTask(
165 FROM_HERE, NewRunnableFunction(&ShowTokenExpiredNotificationInBrowser)); 160 FROM_HERE, NewRunnableFunction(&ShowTokenExpiredNotificationInBrowser));
166 } 161 }
162
163 void CloudPrintProxy::Shutdown() {
164 DCHECK(CalledOnValidThread());
165 if (backend_.get())
166 backend_->Shutdown();
167 backend_.reset();
168 }
OLDNEW
« no previous file with comments | « chrome/service/cloud_print/cloud_print_proxy.h ('k') | chrome/service/service_process.h » ('j') | no next file with comments »

Powered by Google App Engine