OLD | NEW |
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_backend.h" | 5 #include "chrome/service/cloud_print/cloud_print_proxy_backend.h" |
6 | 6 |
7 #include "base/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/md5.h" | 8 #include "base/md5.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
11 #include "base/values.h" | 11 #include "base/values.h" |
12 #include "chrome/service/cloud_print/cloud_print_consts.h" | 12 #include "chrome/service/cloud_print/cloud_print_consts.h" |
13 #include "chrome/service/cloud_print/cloud_print_helpers.h" | 13 #include "chrome/service/cloud_print/cloud_print_helpers.h" |
14 #include "chrome/service/cloud_print/printer_job_handler.h" | 14 #include "chrome/service/cloud_print/printer_job_handler.h" |
15 #include "chrome/common/net/notifier/listener/talk_mediator_impl.h" | 15 #include "chrome/common/net/notifier/listener/talk_mediator_impl.h" |
16 #include "chrome/service/gaia/service_gaia_authenticator.h" | 16 #include "chrome/service/gaia/service_gaia_authenticator.h" |
17 #include "chrome/service/net/service_network_change_notifier_thread.h" | 17 #include "chrome/service/net/service_network_change_notifier_thread.h" |
18 #include "chrome/service/service_process.h" | 18 #include "chrome/service/service_process.h" |
19 | 19 |
20 #include "googleurl/src/gurl.h" | 20 #include "googleurl/src/gurl.h" |
21 #include "net/url_request/url_request_status.h" | 21 #include "net/url_request/url_request_status.h" |
22 | 22 |
23 // The real guts of SyncBackendHost, to keep the public client API clean. | 23 // The real guts of SyncBackendHost, to keep the public client API clean. |
24 class CloudPrintProxyBackend::Core | 24 class CloudPrintProxyBackend::Core |
25 : public base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>, | 25 : public base::RefCountedThreadSafe<CloudPrintProxyBackend::Core>, |
26 public URLFetcherDelegate, | 26 public URLFetcherDelegate, |
27 public cloud_print::PrinterChangeNotifierDelegate, | 27 public cloud_print::PrintServerWatcherDelegate, |
28 public PrinterJobHandlerDelegate, | 28 public PrinterJobHandlerDelegate, |
29 public notifier::TalkMediator::Delegate { | 29 public notifier::TalkMediator::Delegate { |
30 public: | 30 public: |
31 explicit Core(CloudPrintProxyBackend* backend, | 31 explicit Core(CloudPrintProxyBackend* backend, |
32 const GURL& cloud_print_server_url); | 32 const GURL& cloud_print_server_url); |
| 33 |
33 // Note: | 34 // Note: |
34 // | 35 // |
35 // The Do* methods are the various entry points from CloudPrintProxyBackend | 36 // The Do* methods are the various entry points from CloudPrintProxyBackend |
36 // It calls us on a dedicated thread to actually perform synchronous | 37 // It calls us on a dedicated thread to actually perform synchronous |
37 // (and potentially blocking) syncapi operations. | 38 // (and potentially blocking) syncapi operations. |
38 // | 39 // |
39 // Called on the CloudPrintProxyBackend core_thread_ to perform | 40 // Called on the CloudPrintProxyBackend core_thread_ to perform |
40 // initialization. When we are passed in an LSID we authenticate using that | 41 // initialization. When we are passed in an LSID we authenticate using that |
41 // and retrieve new auth tokens. | 42 // and retrieve new auth tokens. |
42 void DoInitializeWithLsid(const std::string& lsid, | 43 void DoInitializeWithLsid(const std::string& lsid, |
43 const std::string& proxy_id); | 44 const std::string& proxy_id); |
44 void DoInitializeWithToken(const std::string cloud_print_token, | 45 void DoInitializeWithToken(const std::string cloud_print_token, |
45 const std::string cloud_print_xmpp_token, | 46 const std::string cloud_print_xmpp_token, |
46 const std::string email, | 47 const std::string email, |
47 const std::string& proxy_id); | 48 const std::string& proxy_id); |
48 | 49 |
49 // Called on the CloudPrintProxyBackend core_thread_ to perform | 50 // Called on the CloudPrintProxyBackend core_thread_ to perform |
50 // shutdown. | 51 // shutdown. |
51 void DoShutdown(); | 52 void DoShutdown(); |
52 void DoRegisterSelectedPrinters( | 53 void DoRegisterSelectedPrinters( |
53 const cloud_print::PrinterList& printer_list); | 54 const cloud_print::PrinterList& printer_list); |
54 void DoHandlePrinterNotification(const std::string& printer_id); | 55 void DoHandlePrinterNotification(const std::string& printer_id); |
55 | 56 |
56 // URLFetcher::Delegate implementation. | 57 // URLFetcher::Delegate implementation. |
57 virtual void OnURLFetchComplete(const URLFetcher* source, const GURL& url, | 58 virtual void OnURLFetchComplete(const URLFetcher* source, const GURL& url, |
58 const URLRequestStatus& status, | 59 const URLRequestStatus& status, |
59 int response_code, | 60 int response_code, |
60 const ResponseCookies& cookies, | 61 const ResponseCookies& cookies, |
61 const std::string& data); | 62 const std::string& data); |
62 // cloud_print::PrinterChangeNotifier::Delegate implementation | 63 // cloud_print::PrintServerWatcherDelegate implementation |
63 virtual void OnPrinterAdded(); | 64 virtual void OnPrinterAdded(); |
64 virtual void OnPrinterDeleted() { | |
65 } | |
66 virtual void OnPrinterChanged() { | |
67 } | |
68 virtual void OnJobChanged() { | |
69 } | |
70 // PrinterJobHandler::Delegate implementation | 65 // PrinterJobHandler::Delegate implementation |
71 void OnPrinterJobHandlerShutdown(PrinterJobHandler* job_handler, | 66 void OnPrinterJobHandlerShutdown(PrinterJobHandler* job_handler, |
72 const std::string& printer_id); | 67 const std::string& printer_id); |
73 | 68 |
74 // notifier::TalkMediator::Delegate implementation. | 69 // notifier::TalkMediator::Delegate implementation. |
75 virtual void OnNotificationStateChange( | 70 virtual void OnNotificationStateChange( |
76 bool notifications_enabled); | 71 bool notifications_enabled); |
77 | 72 |
78 virtual void OnIncomingNotification( | 73 virtual void OnIncomingNotification( |
79 const IncomingNotificationData& notification_data); | 74 const IncomingNotificationData& notification_data); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
124 bool RemovePrinterFromList(const std::string& printer_name); | 119 bool RemovePrinterFromList(const std::string& printer_name); |
125 // Initializes a job handler object for the specified printer. The job | 120 // Initializes a job handler object for the specified printer. The job |
126 // handler is responsible for checking for pending print jobs for this | 121 // handler is responsible for checking for pending print jobs for this |
127 // printer and print them. | 122 // printer and print them. |
128 void InitJobHandlerForPrinter(DictionaryValue* printer_data); | 123 void InitJobHandlerForPrinter(DictionaryValue* printer_data); |
129 | 124 |
130 // Our parent CloudPrintProxyBackend | 125 // Our parent CloudPrintProxyBackend |
131 CloudPrintProxyBackend* backend_; | 126 CloudPrintProxyBackend* backend_; |
132 | 127 |
133 GURL cloud_print_server_url_; | 128 GURL cloud_print_server_url_; |
| 129 // Pointer to current print system. |
| 130 scoped_refptr<cloud_print::PrintSystem> print_system_; |
134 // The list of printers to be registered with the cloud print server. | 131 // The list of printers to be registered with the cloud print server. |
135 // To begin with,this list is initialized with the list of local and network | 132 // To begin with,this list is initialized with the list of local and network |
136 // printers available. Then we query the server for the list of printers | 133 // printers available. Then we query the server for the list of printers |
137 // already registered. We trim this list to remove the printers already | 134 // already registered. We trim this list to remove the printers already |
138 // registered. We then pass a copy of this list to the frontend to give the | 135 // registered. We then pass a copy of this list to the frontend to give the |
139 // user a chance to further trim the list. When the frontend gives us the | 136 // user a chance to further trim the list. When the frontend gives us the |
140 // final list we make a copy into this so that we can start registering. | 137 // final list we make a copy into this so that we can start registering. |
141 cloud_print::PrinterList printer_list_; | 138 cloud_print::PrinterList printer_list_; |
142 // The URLFetcher instance for the current request | 139 // The URLFetcher instance for the current request |
143 scoped_ptr<URLFetcher> request_; | 140 scoped_ptr<URLFetcher> request_; |
144 // The index of the nex printer to be uploaded. | 141 // The index of the nex printer to be uploaded. |
145 size_t next_upload_index_; | 142 size_t next_upload_index_; |
146 // The unique id for this proxy | 143 // The unique id for this proxy |
147 std::string proxy_id_; | 144 std::string proxy_id_; |
148 // The GAIA auth token | 145 // The GAIA auth token |
149 std::string auth_token_; | 146 std::string auth_token_; |
150 // The number of consecutive times that connecting to the server failed. | 147 // The number of consecutive times that connecting to the server failed. |
151 int server_error_count_; | 148 int server_error_count_; |
152 // Cached info about the last printer that we tried to upload. We cache this | 149 // Cached info about the last printer that we tried to upload. We cache this |
153 // so we won't have to requery the printer if the upload fails and we need | 150 // so we won't have to requery the printer if the upload fails and we need |
154 // to retry. | 151 // to retry. |
155 std::string last_uploaded_printer_name_; | 152 std::string last_uploaded_printer_name_; |
156 cloud_print::PrinterCapsAndDefaults last_uploaded_printer_info_; | 153 cloud_print::PrinterCapsAndDefaults last_uploaded_printer_info_; |
157 // A map of printer id to job handler. | 154 // A map of printer id to job handler. |
158 typedef std::map<std::string, scoped_refptr<PrinterJobHandler> > | 155 typedef std::map<std::string, scoped_refptr<PrinterJobHandler> > |
159 JobHandlerMap; | 156 JobHandlerMap; |
160 JobHandlerMap job_handler_map_; | 157 JobHandlerMap job_handler_map_; |
161 ResponseHandler next_response_handler_; | 158 ResponseHandler next_response_handler_; |
162 cloud_print::PrinterChangeNotifier printer_change_notifier_; | 159 scoped_refptr<cloud_print::PrintSystem::PrintServerWatcher> |
| 160 print_server_watcher_; |
163 bool new_printers_available_; | 161 bool new_printers_available_; |
164 // Notification (xmpp) handler. | 162 // Notification (xmpp) handler. |
165 scoped_ptr<notifier::TalkMediator> talk_mediator_; | 163 scoped_ptr<notifier::TalkMediator> talk_mediator_; |
166 | 164 |
167 DISALLOW_COPY_AND_ASSIGN(Core); | 165 DISALLOW_COPY_AND_ASSIGN(Core); |
168 }; | 166 }; |
169 | 167 |
170 CloudPrintProxyBackend::CloudPrintProxyBackend( | 168 CloudPrintProxyBackend::CloudPrintProxyBackend( |
171 CloudPrintProxyFrontend* frontend, const GURL& cloud_print_server_url) | 169 CloudPrintProxyFrontend* frontend, const GURL& cloud_print_server_url) |
172 : core_thread_("Chrome_CloudPrintProxyCoreThread"), | 170 : core_thread_("Chrome_CloudPrintProxyCoreThread"), |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 NewRunnableMethod( | 226 NewRunnableMethod( |
229 core_.get(), | 227 core_.get(), |
230 &CloudPrintProxyBackend::Core::DoHandlePrinterNotification, | 228 &CloudPrintProxyBackend::Core::DoHandlePrinterNotification, |
231 printer_id)); | 229 printer_id)); |
232 } | 230 } |
233 | 231 |
234 CloudPrintProxyBackend::Core::Core(CloudPrintProxyBackend* backend, | 232 CloudPrintProxyBackend::Core::Core(CloudPrintProxyBackend* backend, |
235 const GURL& cloud_print_server_url) | 233 const GURL& cloud_print_server_url) |
236 : backend_(backend), cloud_print_server_url_(cloud_print_server_url), | 234 : backend_(backend), cloud_print_server_url_(cloud_print_server_url), |
237 next_upload_index_(0), server_error_count_(0), | 235 next_upload_index_(0), server_error_count_(0), |
238 next_response_handler_(NULL), new_printers_available_(false) { | 236 next_response_handler_(NULL), new_printers_available_(false) { |
239 } | 237 } |
240 | 238 |
241 void CloudPrintProxyBackend::Core::DoInitializeWithLsid( | 239 void CloudPrintProxyBackend::Core::DoInitializeWithLsid( |
242 const std::string& lsid, const std::string& proxy_id) { | 240 const std::string& lsid, const std::string& proxy_id) { |
243 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 241 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
244 // Since Talk does not accept a Cloud Print token, for now, we make 2 auth | 242 // Since Talk does not accept a Cloud Print token, for now, we make 2 auth |
245 // requests, one for the chromiumsync service and another for print. This is | 243 // requests, one for the chromiumsync service and another for print. This is |
246 // temporary and should be removed once Talk supports our token. | 244 // temporary and should be removed once Talk supports our token. |
247 // Note: The GAIA login is synchronous but that should be OK because we are in | 245 // Note: The GAIA login is synchronous but that should be OK because we are in |
248 // the CloudPrintProxyCoreThread and we cannot really do anything else until | 246 // the CloudPrintProxyCoreThread and we cannot really do anything else until |
(...skipping 23 matching lines...) Expand all Loading... |
272 proxy_id); | 270 proxy_id); |
273 } | 271 } |
274 } | 272 } |
275 } | 273 } |
276 | 274 |
277 void CloudPrintProxyBackend::Core::DoInitializeWithToken( | 275 void CloudPrintProxyBackend::Core::DoInitializeWithToken( |
278 const std::string cloud_print_token, | 276 const std::string cloud_print_token, |
279 const std::string cloud_print_xmpp_token, | 277 const std::string cloud_print_xmpp_token, |
280 const std::string email, const std::string& proxy_id) { | 278 const std::string email, const std::string& proxy_id) { |
281 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 279 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
| 280 |
| 281 print_system_ = cloud_print::PrintSystem::CreateInstance(); |
| 282 if (!print_system_.get()) { |
| 283 NOTREACHED(); |
| 284 return; // No print system available, fail initalization. |
| 285 } |
| 286 |
282 // TODO(sanjeevr): Validate the tokens. | 287 // TODO(sanjeevr): Validate the tokens. |
283 auth_token_ = cloud_print_token; | 288 auth_token_ = cloud_print_token; |
284 talk_mediator_.reset(new notifier::TalkMediatorImpl( | 289 talk_mediator_.reset(new notifier::TalkMediatorImpl( |
285 g_service_process->network_change_notifier_thread(), false)); | 290 g_service_process->network_change_notifier_thread(), false)); |
286 talk_mediator_->AddSubscribedServiceUrl(kCloudPrintTalkServiceUrl); | 291 talk_mediator_->AddSubscribedServiceUrl(kCloudPrintTalkServiceUrl); |
287 talk_mediator_->SetDelegate(this); | 292 talk_mediator_->SetDelegate(this); |
288 talk_mediator_->SetAuthToken(email, cloud_print_xmpp_token, | 293 talk_mediator_->SetAuthToken(email, cloud_print_xmpp_token, |
289 kSyncGaiaServiceId); | 294 kSyncGaiaServiceId); |
290 talk_mediator_->Login(); | 295 talk_mediator_->Login(); |
291 printer_change_notifier_.StartWatching(std::string(), this); | 296 |
| 297 print_server_watcher_ = print_system_->CreatePrintServerWatcher(); |
| 298 print_server_watcher_->StartWatching(this); |
| 299 |
292 proxy_id_ = proxy_id; | 300 proxy_id_ = proxy_id; |
293 StartRegistration(); | 301 StartRegistration(); |
294 } | 302 } |
295 | 303 |
296 void CloudPrintProxyBackend::Core::StartRegistration() { | 304 void CloudPrintProxyBackend::Core::StartRegistration() { |
297 printer_list_.clear(); | 305 printer_list_.clear(); |
298 cloud_print::EnumeratePrinters(&printer_list_); | 306 print_system_->EnumeratePrinters(&printer_list_); |
299 server_error_count_ = 0; | 307 server_error_count_ = 0; |
300 // Now we need to ask the server about printers that were registered on the | 308 // Now we need to ask the server about printers that were registered on the |
301 // server so that we can trim this list. | 309 // server so that we can trim this list. |
302 GetRegisteredPrinters(); | 310 GetRegisteredPrinters(); |
303 } | 311 } |
304 | 312 |
305 void CloudPrintProxyBackend::Core::EndRegistration() { | 313 void CloudPrintProxyBackend::Core::EndRegistration() { |
306 request_.reset(); | 314 request_.reset(); |
307 if (new_printers_available_) { | 315 if (new_printers_available_) { |
308 new_printers_available_ = false; | 316 new_printers_available_ = false; |
309 StartRegistration(); | 317 StartRegistration(); |
310 } | 318 } |
311 } | 319 } |
312 | 320 |
313 void CloudPrintProxyBackend::Core::DoShutdown() { | 321 void CloudPrintProxyBackend::Core::DoShutdown() { |
| 322 if (print_server_watcher_ != NULL) |
| 323 print_server_watcher_->StopWatching(); |
| 324 |
314 // Need to kill all running jobs. | 325 // Need to kill all running jobs. |
315 while (!job_handler_map_.empty()) { | 326 while (!job_handler_map_.empty()) { |
316 JobHandlerMap::iterator index = job_handler_map_.begin(); | 327 JobHandlerMap::iterator index = job_handler_map_.begin(); |
317 // Shutdown will call our OnPrinterJobHandlerShutdown method which will | 328 // Shutdown will call our OnPrinterJobHandlerShutdown method which will |
318 // remove this from the map. | 329 // remove this from the map. |
319 index->second->Shutdown(); | 330 index->second->Shutdown(); |
320 } | 331 } |
321 } | 332 } |
322 | 333 |
323 void CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters( | 334 void CloudPrintProxyBackend::Core::DoRegisterSelectedPrinters( |
324 const cloud_print::PrinterList& printer_list) { | 335 const cloud_print::PrinterList& printer_list) { |
| 336 if (!print_system_.get()) |
| 337 return; // No print system available. |
325 server_error_count_ = 0; | 338 server_error_count_ = 0; |
326 printer_list_.assign(printer_list.begin(), printer_list.end()); | 339 printer_list_.assign(printer_list.begin(), printer_list.end()); |
327 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); | 340 DCHECK(MessageLoop::current() == backend_->core_thread_.message_loop()); |
328 next_upload_index_ = 0; | 341 next_upload_index_ = 0; |
329 RegisterNextPrinter(); | 342 RegisterNextPrinter(); |
330 } | 343 } |
331 | 344 |
332 void CloudPrintProxyBackend::Core::DoHandlePrinterNotification( | 345 void CloudPrintProxyBackend::Core::DoHandlePrinterNotification( |
333 const std::string& printer_id) { | 346 const std::string& printer_id) { |
334 JobHandlerMap::iterator index = job_handler_map_.find(printer_id); | 347 JobHandlerMap::iterator index = job_handler_map_.find(printer_id); |
(...skipping 16 matching lines...) Expand all Loading... |
351 void CloudPrintProxyBackend::Core::RegisterNextPrinter() { | 364 void CloudPrintProxyBackend::Core::RegisterNextPrinter() { |
352 // For the next printer to be uploaded, create a multi-part post request to | 365 // For the next printer to be uploaded, create a multi-part post request to |
353 // upload the printer capabilities and the printer defaults. | 366 // upload the printer capabilities and the printer defaults. |
354 if (next_upload_index_ < printer_list_.size()) { | 367 if (next_upload_index_ < printer_list_.size()) { |
355 const cloud_print::PrinterBasicInfo& info = | 368 const cloud_print::PrinterBasicInfo& info = |
356 printer_list_.at(next_upload_index_); | 369 printer_list_.at(next_upload_index_); |
357 bool have_printer_info = true; | 370 bool have_printer_info = true; |
358 // If we are retrying a previous upload, we don't need to fetch the caps | 371 // If we are retrying a previous upload, we don't need to fetch the caps |
359 // and defaults again. | 372 // and defaults again. |
360 if (info.printer_name != last_uploaded_printer_name_) { | 373 if (info.printer_name != last_uploaded_printer_name_) { |
361 have_printer_info = cloud_print::GetPrinterCapsAndDefaults( | 374 have_printer_info = print_system_->GetPrinterCapsAndDefaults( |
362 info.printer_name.c_str(), &last_uploaded_printer_info_); | 375 info.printer_name.c_str(), &last_uploaded_printer_info_); |
363 } | 376 } |
364 if (have_printer_info) { | 377 if (have_printer_info) { |
365 last_uploaded_printer_name_ = info.printer_name; | 378 last_uploaded_printer_name_ = info.printer_name; |
366 std::string mime_boundary; | 379 std::string mime_boundary; |
367 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); | 380 CloudPrintHelpers::CreateMimeBoundaryForUpload(&mime_boundary); |
368 std::string post_data; | 381 std::string post_data; |
369 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_, | 382 CloudPrintHelpers::AddMultipartValueForUpload(kProxyIdValue, proxy_id_, |
370 mime_boundary, | 383 mime_boundary, |
371 std::string(), &post_data); | 384 std::string(), &post_data); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
416 new URLFetcher( | 429 new URLFetcher( |
417 CloudPrintHelpers::GetUrlForPrinterRegistration( | 430 CloudPrintHelpers::GetUrlForPrinterRegistration( |
418 cloud_print_server_url_), | 431 cloud_print_server_url_), |
419 URLFetcher::POST, this)); | 432 URLFetcher::POST, this)); |
420 CloudPrintHelpers::PrepCloudPrintRequest(request_.get(), auth_token_); | 433 CloudPrintHelpers::PrepCloudPrintRequest(request_.get(), auth_token_); |
421 request_->set_upload_data(mime_type, post_data); | 434 request_->set_upload_data(mime_type, post_data); |
422 next_response_handler_ = | 435 next_response_handler_ = |
423 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse; | 436 &CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse; |
424 request_->Start(); | 437 request_->Start(); |
425 } else { | 438 } else { |
426 NOTREACHED(); | 439 LOG(ERROR) << "CP: Failed to get printer info for: " << info.printer_name; |
| 440 next_upload_index_++; |
| 441 MessageLoop::current()->PostTask(FROM_HERE, NewRunnableMethod(this, |
| 442 &CloudPrintProxyBackend::Core::RegisterNextPrinter)); |
427 } | 443 } |
428 } else { | 444 } else { |
429 EndRegistration(); | 445 EndRegistration(); |
430 } | 446 } |
431 } | 447 } |
432 | 448 |
433 // URLFetcher::Delegate implementation. | 449 // URLFetcher::Delegate implementation. |
434 void CloudPrintProxyBackend::Core::OnURLFetchComplete( | 450 void CloudPrintProxyBackend::Core::OnURLFetchComplete( |
435 const URLFetcher* source, const GURL& url, const URLRequestStatus& status, | 451 const URLFetcher* source, const GURL& url, const URLRequestStatus& status, |
436 int response_code, const ResponseCookies& cookies, | 452 int response_code, const ResponseCookies& cookies, |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
518 DCHECK(!printer_info.printer_name.empty()); | 534 DCHECK(!printer_info.printer_name.empty()); |
519 printer_data->GetString(UTF8ToWide(kPrinterDescValue), | 535 printer_data->GetString(UTF8ToWide(kPrinterDescValue), |
520 &printer_info.printer_description); | 536 &printer_info.printer_description); |
521 printer_data->GetInteger(UTF8ToWide(kPrinterStatusValue), | 537 printer_data->GetInteger(UTF8ToWide(kPrinterStatusValue), |
522 &printer_info.printer_status); | 538 &printer_info.printer_status); |
523 std::string caps_hash; | 539 std::string caps_hash; |
524 printer_data->GetString(kPrinterCapsHashValue, &caps_hash); | 540 printer_data->GetString(kPrinterCapsHashValue, &caps_hash); |
525 scoped_refptr<PrinterJobHandler> job_handler; | 541 scoped_refptr<PrinterJobHandler> job_handler; |
526 job_handler = new PrinterJobHandler(printer_info, printer_id, caps_hash, | 542 job_handler = new PrinterJobHandler(printer_info, printer_id, caps_hash, |
527 auth_token_, cloud_print_server_url_, | 543 auth_token_, cloud_print_server_url_, |
528 this); | 544 print_system_.get(), this); |
529 job_handler_map_[printer_id] = job_handler; | 545 job_handler_map_[printer_id] = job_handler; |
530 job_handler->Initialize(); | 546 job_handler->Initialize(); |
531 } | 547 } |
532 } | 548 } |
533 | 549 |
534 void CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse( | 550 void CloudPrintProxyBackend::Core::HandleRegisterPrinterResponse( |
535 const URLFetcher* source, const GURL& url, const URLRequestStatus& status, | 551 const URLFetcher* source, const GURL& url, const URLRequestStatus& status, |
536 int response_code, const ResponseCookies& cookies, | 552 int response_code, const ResponseCookies& cookies, |
537 const std::string& data) { | 553 const std::string& data) { |
538 Task* next_task = | 554 Task* next_task = |
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
609 StartRegistration(); | 625 StartRegistration(); |
610 } | 626 } |
611 } | 627 } |
612 | 628 |
613 // PrinterJobHandler::Delegate implementation | 629 // PrinterJobHandler::Delegate implementation |
614 void CloudPrintProxyBackend::Core::OnPrinterJobHandlerShutdown( | 630 void CloudPrintProxyBackend::Core::OnPrinterJobHandlerShutdown( |
615 PrinterJobHandler* job_handler, const std::string& printer_id) { | 631 PrinterJobHandler* job_handler, const std::string& printer_id) { |
616 job_handler_map_.erase(printer_id); | 632 job_handler_map_.erase(printer_id); |
617 } | 633 } |
618 | 634 |
OLD | NEW |