OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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/service_utility_process_host.h" | 5 #include "chrome/service/service_utility_process_host.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/files/file_util.h" | 9 #include "base/files/file_util.h" |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 base::FilePath exposed_dir_; | 61 base::FilePath exposed_dir_; |
62 }; | 62 }; |
63 | 63 |
64 } // namespace | 64 } // namespace |
65 | 65 |
66 #endif // OS_WIN | 66 #endif // OS_WIN |
67 | 67 |
68 using content::ChildProcessHost; | 68 using content::ChildProcessHost; |
69 | 69 |
70 namespace { | 70 namespace { |
| 71 |
71 enum ServiceUtilityProcessHostEvent { | 72 enum ServiceUtilityProcessHostEvent { |
72 SERVICE_UTILITY_STARTED, | 73 SERVICE_UTILITY_STARTED, |
73 SERVICE_UTILITY_DISCONNECTED, | 74 SERVICE_UTILITY_DISCONNECTED, |
74 SERVICE_UTILITY_METAFILE_REQUEST, | 75 SERVICE_UTILITY_METAFILE_REQUEST, |
75 SERVICE_UTILITY_METAFILE_SUCCEEDED, | 76 SERVICE_UTILITY_METAFILE_SUCCEEDED, |
76 SERVICE_UTILITY_METAFILE_FAILED, | 77 SERVICE_UTILITY_METAFILE_FAILED, |
77 SERVICE_UTILITY_CAPS_REQUEST, | 78 SERVICE_UTILITY_CAPS_REQUEST, |
78 SERVICE_UTILITY_CAPS_SUCCEEDED, | 79 SERVICE_UTILITY_CAPS_SUCCEEDED, |
79 SERVICE_UTILITY_CAPS_FAILED, | 80 SERVICE_UTILITY_CAPS_FAILED, |
80 SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST, | 81 SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST, |
81 SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED, | 82 SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED, |
82 SERVICE_UTILITY_SEMANTIC_CAPS_FAILED, | 83 SERVICE_UTILITY_SEMANTIC_CAPS_FAILED, |
83 SERVICE_UTILITY_FAILED_TO_START, | 84 SERVICE_UTILITY_FAILED_TO_START, |
84 SERVICE_UTILITY_EVENT_MAX, | 85 SERVICE_UTILITY_EVENT_MAX, |
85 }; | 86 }; |
| 87 |
| 88 void ReportUmaEvent(ServiceUtilityProcessHostEvent id) { |
| 89 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", |
| 90 id, |
| 91 SERVICE_UTILITY_EVENT_MAX); |
| 92 } |
| 93 |
86 } // namespace | 94 } // namespace |
87 | 95 |
88 ServiceUtilityProcessHost::ServiceUtilityProcessHost( | 96 ServiceUtilityProcessHost::ServiceUtilityProcessHost( |
89 Client* client, base::MessageLoopProxy* client_message_loop_proxy) | 97 Client* client, base::MessageLoopProxy* client_message_loop_proxy) |
90 : handle_(base::kNullProcessHandle), | 98 : handle_(base::kNullProcessHandle), |
91 client_(client), | 99 client_(client), |
92 client_message_loop_proxy_(client_message_loop_proxy), | 100 client_message_loop_proxy_(client_message_loop_proxy), |
93 waiting_for_reply_(false) { | 101 waiting_for_reply_(false) { |
94 child_process_host_.reset(ChildProcessHost::Create(this)); | 102 child_process_host_.reset(ChildProcessHost::Create(this)); |
95 } | 103 } |
96 | 104 |
97 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() { | 105 ServiceUtilityProcessHost::~ServiceUtilityProcessHost() { |
98 // We need to kill the child process when the host dies. | 106 // We need to kill the child process when the host dies. |
99 base::KillProcess(handle_, content::RESULT_CODE_NORMAL_EXIT, false); | 107 base::KillProcess(handle_, content::RESULT_CODE_NORMAL_EXIT, false); |
100 } | 108 } |
101 | 109 |
102 bool ServiceUtilityProcessHost::StartRenderPDFPagesToMetafile( | 110 bool ServiceUtilityProcessHost::StartRenderPDFPagesToMetafile( |
103 const base::FilePath& pdf_path, | 111 const base::FilePath& pdf_path, |
104 const printing::PdfRenderSettings& render_settings, | 112 const printing::PdfRenderSettings& render_settings, |
105 const std::vector<printing::PageRange>& page_ranges) { | 113 const std::vector<printing::PageRange>& page_ranges) { |
106 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 114 ReportUmaEvent(SERVICE_UTILITY_METAFILE_REQUEST); |
107 SERVICE_UTILITY_METAFILE_REQUEST, | |
108 SERVICE_UTILITY_EVENT_MAX); | |
109 start_time_ = base::Time::Now(); | 115 start_time_ = base::Time::Now(); |
110 #if !defined(OS_WIN) | 116 #if !defined(OS_WIN) |
111 // This is only implemented on Windows (because currently it is only needed | 117 // This is only implemented on Windows (because currently it is only needed |
112 // on Windows). Will add implementations on other platforms when needed. | 118 // on Windows). Will add implementations on other platforms when needed. |
113 NOTIMPLEMENTED(); | 119 NOTIMPLEMENTED(); |
114 return false; | 120 return false; |
115 #else // !defined(OS_WIN) | 121 #else // !defined(OS_WIN) |
116 scratch_metafile_dir_.reset(new base::ScopedTempDir); | 122 scratch_metafile_dir_.reset(new base::ScopedTempDir); |
117 if (!scratch_metafile_dir_->CreateUniqueTempDir()) | 123 if (!scratch_metafile_dir_->CreateUniqueTempDir()) |
118 return false; | 124 return false; |
(...skipping 10 matching lines...) Expand all Loading... |
129 new ChromeUtilityMsg_RenderPDFPagesToMetafiles( | 135 new ChromeUtilityMsg_RenderPDFPagesToMetafiles( |
130 IPC::TakeFileHandleForProcess(pdf_file.Pass(), handle()), | 136 IPC::TakeFileHandleForProcess(pdf_file.Pass(), handle()), |
131 metafile_path_, | 137 metafile_path_, |
132 render_settings, | 138 render_settings, |
133 page_ranges)); | 139 page_ranges)); |
134 #endif // !defined(OS_WIN) | 140 #endif // !defined(OS_WIN) |
135 } | 141 } |
136 | 142 |
137 bool ServiceUtilityProcessHost::StartGetPrinterCapsAndDefaults( | 143 bool ServiceUtilityProcessHost::StartGetPrinterCapsAndDefaults( |
138 const std::string& printer_name) { | 144 const std::string& printer_name) { |
139 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 145 ReportUmaEvent(SERVICE_UTILITY_CAPS_REQUEST); |
140 SERVICE_UTILITY_CAPS_REQUEST, | |
141 SERVICE_UTILITY_EVENT_MAX); | |
142 start_time_ = base::Time::Now(); | 146 start_time_ = base::Time::Now(); |
143 base::FilePath exposed_path; | 147 base::FilePath exposed_path; |
144 if (!StartProcess(true, exposed_path)) | 148 if (!StartProcess(true, exposed_path)) |
145 return false; | 149 return false; |
146 DCHECK(!waiting_for_reply_); | 150 DCHECK(!waiting_for_reply_); |
147 waiting_for_reply_ = true; | 151 waiting_for_reply_ = true; |
148 return child_process_host_->Send( | 152 return child_process_host_->Send( |
149 new ChromeUtilityMsg_GetPrinterCapsAndDefaults(printer_name)); | 153 new ChromeUtilityMsg_GetPrinterCapsAndDefaults(printer_name)); |
150 } | 154 } |
151 | 155 |
152 bool ServiceUtilityProcessHost::StartGetPrinterSemanticCapsAndDefaults( | 156 bool ServiceUtilityProcessHost::StartGetPrinterSemanticCapsAndDefaults( |
153 const std::string& printer_name) { | 157 const std::string& printer_name) { |
154 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 158 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST); |
155 SERVICE_UTILITY_SEMANTIC_CAPS_REQUEST, | |
156 SERVICE_UTILITY_EVENT_MAX); | |
157 start_time_ = base::Time::Now(); | 159 start_time_ = base::Time::Now(); |
158 base::FilePath exposed_path; | 160 base::FilePath exposed_path; |
159 if (!StartProcess(true, exposed_path)) | 161 if (!StartProcess(true, exposed_path)) |
160 return false; | 162 return false; |
161 DCHECK(!waiting_for_reply_); | 163 DCHECK(!waiting_for_reply_); |
162 waiting_for_reply_ = true; | 164 waiting_for_reply_ = true; |
163 return child_process_host_->Send( | 165 return child_process_host_->Send( |
164 new ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults(printer_name)); | 166 new ChromeUtilityMsg_GetPrinterSemanticCapsAndDefaults(printer_name)); |
165 } | 167 } |
166 | 168 |
167 bool ServiceUtilityProcessHost::StartProcess( | 169 bool ServiceUtilityProcessHost::StartProcess( |
168 bool no_sandbox, | 170 bool no_sandbox, |
169 const base::FilePath& exposed_dir) { | 171 const base::FilePath& exposed_dir) { |
170 std::string channel_id = child_process_host_->CreateChannel(); | 172 std::string channel_id = child_process_host_->CreateChannel(); |
171 if (channel_id.empty()) | 173 if (channel_id.empty()) |
172 return false; | 174 return false; |
173 | 175 |
174 base::FilePath exe_path = GetUtilityProcessCmd(); | 176 base::FilePath exe_path = GetUtilityProcessCmd(); |
175 if (exe_path.empty()) { | 177 if (exe_path.empty()) { |
176 NOTREACHED() << "Unable to get utility process binary name."; | 178 NOTREACHED() << "Unable to get utility process binary name."; |
177 return false; | 179 return false; |
178 } | 180 } |
179 | 181 |
180 CommandLine cmd_line(exe_path); | 182 CommandLine cmd_line(exe_path); |
181 cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kUtilityProcess); | 183 cmd_line.AppendSwitchASCII(switches::kProcessType, switches::kUtilityProcess); |
182 cmd_line.AppendSwitchASCII(switches::kProcessChannelID, channel_id); | 184 cmd_line.AppendSwitchASCII(switches::kProcessChannelID, channel_id); |
183 cmd_line.AppendSwitch(switches::kLang); | 185 cmd_line.AppendSwitch(switches::kLang); |
184 | 186 |
185 if (Launch(&cmd_line, no_sandbox, exposed_dir)) { | 187 if (Launch(&cmd_line, no_sandbox, exposed_dir)) { |
186 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 188 ReportUmaEvent(SERVICE_UTILITY_STARTED); |
187 SERVICE_UTILITY_STARTED, | |
188 SERVICE_UTILITY_EVENT_MAX); | |
189 return true; | 189 return true; |
190 } | 190 } |
191 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 191 ReportUmaEvent(SERVICE_UTILITY_FAILED_TO_START); |
192 SERVICE_UTILITY_FAILED_TO_START, | |
193 SERVICE_UTILITY_EVENT_MAX); | |
194 return false; | 192 return false; |
195 } | 193 } |
196 | 194 |
197 bool ServiceUtilityProcessHost::Launch(CommandLine* cmd_line, | 195 bool ServiceUtilityProcessHost::Launch(CommandLine* cmd_line, |
198 bool no_sandbox, | 196 bool no_sandbox, |
199 const base::FilePath& exposed_dir) { | 197 const base::FilePath& exposed_dir) { |
200 #if !defined(OS_WIN) | 198 #if !defined(OS_WIN) |
201 // TODO(sanjeevr): Implement for non-Windows OSes. | 199 // TODO(sanjeevr): Implement for non-Windows OSes. |
202 NOTIMPLEMENTED(); | 200 NOTIMPLEMENTED(); |
203 return false; | 201 return false; |
(...skipping 19 matching lines...) Expand all Loading... |
223 #endif | 221 #endif |
224 return ChildProcessHost::GetChildPath(flags); | 222 return ChildProcessHost::GetChildPath(flags); |
225 } | 223 } |
226 | 224 |
227 void ServiceUtilityProcessHost::OnChildDisconnected() { | 225 void ServiceUtilityProcessHost::OnChildDisconnected() { |
228 if (waiting_for_reply_) { | 226 if (waiting_for_reply_) { |
229 // If we are yet to receive a reply then notify the client that the | 227 // If we are yet to receive a reply then notify the client that the |
230 // child died. | 228 // child died. |
231 client_message_loop_proxy_->PostTask( | 229 client_message_loop_proxy_->PostTask( |
232 FROM_HERE, base::Bind(&Client::OnChildDied, client_.get())); | 230 FROM_HERE, base::Bind(&Client::OnChildDied, client_.get())); |
233 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 231 ReportUmaEvent(SERVICE_UTILITY_DISCONNECTED); |
234 SERVICE_UTILITY_DISCONNECTED, | |
235 SERVICE_UTILITY_EVENT_MAX); | |
236 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityDisconnectTime", | 232 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityDisconnectTime", |
237 base::Time::Now() - start_time_); | 233 base::Time::Now() - start_time_); |
238 } | 234 } |
239 delete this; | 235 delete this; |
240 } | 236 } |
241 | 237 |
242 bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) { | 238 bool ServiceUtilityProcessHost::OnMessageReceived(const IPC::Message& message) { |
243 bool handled = true; | 239 bool handled = true; |
244 IPC_BEGIN_MESSAGE_MAP(ServiceUtilityProcessHost, message) | 240 IPC_BEGIN_MESSAGE_MAP(ServiceUtilityProcessHost, message) |
245 #if defined(OS_WIN) | 241 #if defined(OS_WIN) |
(...skipping 20 matching lines...) Expand all Loading... |
266 } | 262 } |
267 | 263 |
268 base::ProcessHandle ServiceUtilityProcessHost::GetHandle() const { | 264 base::ProcessHandle ServiceUtilityProcessHost::GetHandle() const { |
269 return handle_; | 265 return handle_; |
270 } | 266 } |
271 | 267 |
272 #if defined(OS_WIN) | 268 #if defined(OS_WIN) |
273 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesSucceeded( | 269 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafilesSucceeded( |
274 const std::vector<printing::PageRange>& page_ranges, | 270 const std::vector<printing::PageRange>& page_ranges, |
275 double scale_factor) { | 271 double scale_factor) { |
276 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 272 ReportUmaEvent(SERVICE_UTILITY_METAFILE_SUCCEEDED); |
277 SERVICE_UTILITY_METAFILE_SUCCEEDED, | |
278 SERVICE_UTILITY_EVENT_MAX); | |
279 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileTime", | 273 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileTime", |
280 base::Time::Now() - start_time_); | 274 base::Time::Now() - start_time_); |
281 DCHECK(waiting_for_reply_); | 275 DCHECK(waiting_for_reply_); |
282 waiting_for_reply_ = false; | 276 waiting_for_reply_ = false; |
283 // If the metafile was successfully created, we need to take our hands off the | 277 // If the metafile was successfully created, we need to take our hands off the |
284 // scratch metafile directory. The client will delete it when it is done with | 278 // scratch metafile directory. The client will delete it when it is done with |
285 // metafile. | 279 // metafile. |
286 scratch_metafile_dir_->Take(); | 280 scratch_metafile_dir_->Take(); |
287 | 281 |
288 // TODO(vitalybuka|scottmg): http://crbug.com/170859: Currently, only one | 282 // TODO(vitalybuka|scottmg): http://crbug.com/170859: Currently, only one |
289 // page is printed at a time. This would need to be refactored to change | 283 // page is printed at a time. This would need to be refactored to change |
290 // this. | 284 // this. |
291 CHECK_EQ(1u, page_ranges.size()); | 285 CHECK_EQ(1u, page_ranges.size()); |
292 CHECK_EQ(page_ranges[0].from, page_ranges[0].to); | 286 CHECK_EQ(page_ranges[0].from, page_ranges[0].to); |
293 int page_number = page_ranges[0].from; | 287 int page_number = page_ranges[0].from; |
294 client_message_loop_proxy_->PostTask( | 288 client_message_loop_proxy_->PostTask( |
295 FROM_HERE, | 289 FROM_HERE, |
296 base::Bind(&Client::MetafileAvailable, | 290 base::Bind(&Client::MetafileAvailable, |
297 client_.get(), | 291 client_.get(), |
298 metafile_path_.InsertBeforeExtensionASCII( | 292 metafile_path_.InsertBeforeExtensionASCII( |
299 base::StringPrintf(".%d", page_number)), | 293 base::StringPrintf(".%d", page_number)), |
300 page_number, | 294 page_number, |
301 scale_factor)); | 295 scale_factor)); |
302 } | 296 } |
303 | 297 |
304 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafileFailed() { | 298 void ServiceUtilityProcessHost::OnRenderPDFPagesToMetafileFailed() { |
305 DCHECK(waiting_for_reply_); | 299 DCHECK(waiting_for_reply_); |
306 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 300 ReportUmaEvent(SERVICE_UTILITY_METAFILE_FAILED); |
307 SERVICE_UTILITY_METAFILE_FAILED, | |
308 SERVICE_UTILITY_EVENT_MAX); | |
309 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileFailTime", | 301 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityMetafileFailTime", |
310 base::Time::Now() - start_time_); | 302 base::Time::Now() - start_time_); |
311 waiting_for_reply_ = false; | 303 waiting_for_reply_ = false; |
312 client_message_loop_proxy_->PostTask( | 304 client_message_loop_proxy_->PostTask( |
313 FROM_HERE, | 305 FROM_HERE, |
314 base::Bind(&Client::OnRenderPDFPagesToMetafileFailed, client_.get())); | 306 base::Bind(&Client::OnRenderPDFPagesToMetafileFailed, client_.get())); |
315 } | 307 } |
316 #endif // defined(OS_WIN) | 308 #endif // defined(OS_WIN) |
317 | 309 |
318 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsSucceeded( | 310 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsSucceeded( |
319 const std::string& printer_name, | 311 const std::string& printer_name, |
320 const printing::PrinterCapsAndDefaults& caps_and_defaults) { | 312 const printing::PrinterCapsAndDefaults& caps_and_defaults) { |
321 DCHECK(waiting_for_reply_); | 313 DCHECK(waiting_for_reply_); |
322 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 314 ReportUmaEvent(SERVICE_UTILITY_CAPS_SUCCEEDED); |
323 SERVICE_UTILITY_CAPS_SUCCEEDED, | |
324 SERVICE_UTILITY_EVENT_MAX); | |
325 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsTime", | 315 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsTime", |
326 base::Time::Now() - start_time_); | 316 base::Time::Now() - start_time_); |
327 waiting_for_reply_ = false; | 317 waiting_for_reply_ = false; |
328 client_message_loop_proxy_->PostTask( | 318 client_message_loop_proxy_->PostTask( |
329 FROM_HERE, | 319 FROM_HERE, |
330 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), true, | 320 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), true, |
331 printer_name, caps_and_defaults)); | 321 printer_name, caps_and_defaults)); |
332 } | 322 } |
333 | 323 |
334 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsSucceeded( | 324 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsSucceeded( |
335 const std::string& printer_name, | 325 const std::string& printer_name, |
336 const printing::PrinterSemanticCapsAndDefaults& caps_and_defaults) { | 326 const printing::PrinterSemanticCapsAndDefaults& caps_and_defaults) { |
337 DCHECK(waiting_for_reply_); | 327 DCHECK(waiting_for_reply_); |
338 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 328 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED); |
339 SERVICE_UTILITY_SEMANTIC_CAPS_SUCCEEDED, | |
340 SERVICE_UTILITY_EVENT_MAX); | |
341 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsTime", | 329 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsTime", |
342 base::Time::Now() - start_time_); | 330 base::Time::Now() - start_time_); |
343 waiting_for_reply_ = false; | 331 waiting_for_reply_ = false; |
344 client_message_loop_proxy_->PostTask( | 332 client_message_loop_proxy_->PostTask( |
345 FROM_HERE, | 333 FROM_HERE, |
346 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, client_.get(), | 334 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, client_.get(), |
347 true, printer_name, caps_and_defaults)); | 335 true, printer_name, caps_and_defaults)); |
348 } | 336 } |
349 | 337 |
350 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsFailed( | 338 void ServiceUtilityProcessHost::OnGetPrinterCapsAndDefaultsFailed( |
351 const std::string& printer_name) { | 339 const std::string& printer_name) { |
352 DCHECK(waiting_for_reply_); | 340 DCHECK(waiting_for_reply_); |
353 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 341 ReportUmaEvent(SERVICE_UTILITY_CAPS_FAILED); |
354 SERVICE_UTILITY_CAPS_FAILED, | |
355 SERVICE_UTILITY_EVENT_MAX); | |
356 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsFailTime", | 342 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilityCapsFailTime", |
357 base::Time::Now() - start_time_); | 343 base::Time::Now() - start_time_); |
358 waiting_for_reply_ = false; | 344 waiting_for_reply_ = false; |
359 client_message_loop_proxy_->PostTask( | 345 client_message_loop_proxy_->PostTask( |
360 FROM_HERE, | 346 FROM_HERE, |
361 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), false, | 347 base::Bind(&Client::OnGetPrinterCapsAndDefaults, client_.get(), false, |
362 printer_name, printing::PrinterCapsAndDefaults())); | 348 printer_name, printing::PrinterCapsAndDefaults())); |
363 } | 349 } |
364 | 350 |
365 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsFailed( | 351 void ServiceUtilityProcessHost::OnGetPrinterSemanticCapsAndDefaultsFailed( |
366 const std::string& printer_name) { | 352 const std::string& printer_name) { |
367 DCHECK(waiting_for_reply_); | 353 DCHECK(waiting_for_reply_); |
368 UMA_HISTOGRAM_ENUMERATION("CloudPrint.ServiceUtilityProcessHostEvent", | 354 ReportUmaEvent(SERVICE_UTILITY_SEMANTIC_CAPS_FAILED); |
369 SERVICE_UTILITY_SEMANTIC_CAPS_FAILED, | |
370 SERVICE_UTILITY_EVENT_MAX); | |
371 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsFailTime", | 355 UMA_HISTOGRAM_TIMES("CloudPrint.ServiceUtilitySemanticCapsFailTime", |
372 base::Time::Now() - start_time_); | 356 base::Time::Now() - start_time_); |
373 waiting_for_reply_ = false; | 357 waiting_for_reply_ = false; |
374 client_message_loop_proxy_->PostTask( | 358 client_message_loop_proxy_->PostTask( |
375 FROM_HERE, | 359 FROM_HERE, |
376 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, | 360 base::Bind(&Client::OnGetPrinterSemanticCapsAndDefaults, |
377 client_.get(), false, printer_name, | 361 client_.get(), false, printer_name, |
378 printing::PrinterSemanticCapsAndDefaults())); | 362 printing::PrinterSemanticCapsAndDefaults())); |
379 } | 363 } |
380 | 364 |
(...skipping 14 matching lines...) Expand all Loading... |
395 if (!metafile.InitFromFile(metafile_path)) { | 379 if (!metafile.InitFromFile(metafile_path)) { |
396 OnRenderPDFPagesToMetafileFailed(); | 380 OnRenderPDFPagesToMetafileFailed(); |
397 } else { | 381 } else { |
398 OnRenderPDFPagesToMetafileSucceeded(metafile, | 382 OnRenderPDFPagesToMetafileSucceeded(metafile, |
399 highest_rendered_page_number, | 383 highest_rendered_page_number, |
400 scale_factor); | 384 scale_factor); |
401 } | 385 } |
402 #endif // defined(OS_WIN) | 386 #endif // defined(OS_WIN) |
403 } | 387 } |
404 | 388 |
OLD | NEW |