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/browser/chromeos/drive/job_scheduler.h" | 5 #include "chrome/browser/chromeos/drive/job_scheduler.h" |
6 | 6 |
7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 // Metadata jobs are cheap, so we run them concurrently. File jobs run serially. | 164 // Metadata jobs are cheap, so we run them concurrently. File jobs run serially. |
165 const int JobScheduler::kMaxJobCount[] = { | 165 const int JobScheduler::kMaxJobCount[] = { |
166 5, // METADATA_QUEUE | 166 5, // METADATA_QUEUE |
167 1, // FILE_QUEUE | 167 1, // FILE_QUEUE |
168 }; | 168 }; |
169 | 169 |
170 JobScheduler::JobEntry::JobEntry(JobType type) | 170 JobScheduler::JobEntry::JobEntry(JobType type) |
171 : job_info(type), | 171 : job_info(type), |
172 context(ClientContext(USER_INITIATED)), | 172 context(ClientContext(USER_INITIATED)), |
173 retry_count(0) { | 173 retry_count(0) { |
174 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 174 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
175 } | 175 } |
176 | 176 |
177 JobScheduler::JobEntry::~JobEntry() { | 177 JobScheduler::JobEntry::~JobEntry() { |
178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 178 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
179 } | 179 } |
180 | 180 |
181 struct JobScheduler::ResumeUploadParams { | 181 struct JobScheduler::ResumeUploadParams { |
182 base::FilePath drive_file_path; | 182 base::FilePath drive_file_path; |
183 base::FilePath local_file_path; | 183 base::FilePath local_file_path; |
184 std::string content_type; | 184 std::string content_type; |
185 }; | 185 }; |
186 | 186 |
187 JobScheduler::JobScheduler(PrefService* pref_service, | 187 JobScheduler::JobScheduler(PrefService* pref_service, |
188 EventLogger* logger, | 188 EventLogger* logger, |
189 DriveServiceInterface* drive_service, | 189 DriveServiceInterface* drive_service, |
190 base::SequencedTaskRunner* blocking_task_runner) | 190 base::SequencedTaskRunner* blocking_task_runner) |
191 : throttle_count_(0), | 191 : throttle_count_(0), |
192 wait_until_(base::Time::Now()), | 192 wait_until_(base::Time::Now()), |
193 disable_throttling_(false), | 193 disable_throttling_(false), |
194 logger_(logger), | 194 logger_(logger), |
195 drive_service_(drive_service), | 195 drive_service_(drive_service), |
196 blocking_task_runner_(blocking_task_runner), | 196 blocking_task_runner_(blocking_task_runner), |
197 uploader_(new DriveUploader(drive_service, blocking_task_runner)), | 197 uploader_(new DriveUploader(drive_service, blocking_task_runner)), |
198 pref_service_(pref_service), | 198 pref_service_(pref_service), |
199 weak_ptr_factory_(this) { | 199 weak_ptr_factory_(this) { |
200 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 200 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
201 | 201 |
202 for (int i = 0; i < NUM_QUEUES; ++i) | 202 for (int i = 0; i < NUM_QUEUES; ++i) |
203 queue_[i].reset(new JobQueue(kMaxJobCount[i], NUM_CONTEXT_TYPES)); | 203 queue_[i].reset(new JobQueue(kMaxJobCount[i], NUM_CONTEXT_TYPES)); |
204 | 204 |
205 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); | 205 net::NetworkChangeNotifier::AddConnectionTypeObserver(this); |
206 } | 206 } |
207 | 207 |
208 JobScheduler::~JobScheduler() { | 208 JobScheduler::~JobScheduler() { |
209 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 209 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
210 | 210 |
211 size_t num_queued_jobs = 0; | 211 size_t num_queued_jobs = 0; |
212 for (int i = 0; i < NUM_QUEUES; ++i) | 212 for (int i = 0; i < NUM_QUEUES; ++i) |
213 num_queued_jobs += queue_[i]->GetNumberOfJobs(); | 213 num_queued_jobs += queue_[i]->GetNumberOfJobs(); |
214 DCHECK_EQ(num_queued_jobs, job_map_.size()); | 214 DCHECK_EQ(num_queued_jobs, job_map_.size()); |
215 | 215 |
216 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); | 216 net::NetworkChangeNotifier::RemoveConnectionTypeObserver(this); |
217 } | 217 } |
218 | 218 |
219 std::vector<JobInfo> JobScheduler::GetJobInfoList() { | 219 std::vector<JobInfo> JobScheduler::GetJobInfoList() { |
220 std::vector<JobInfo> job_info_list; | 220 std::vector<JobInfo> job_info_list; |
221 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) | 221 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) |
222 job_info_list.push_back(iter.GetCurrentValue()->job_info); | 222 job_info_list.push_back(iter.GetCurrentValue()->job_info); |
223 return job_info_list; | 223 return job_info_list; |
224 } | 224 } |
225 | 225 |
226 void JobScheduler::AddObserver(JobListObserver* observer) { | 226 void JobScheduler::AddObserver(JobListObserver* observer) { |
227 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 227 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
228 observer_list_.AddObserver(observer); | 228 observer_list_.AddObserver(observer); |
229 } | 229 } |
230 | 230 |
231 void JobScheduler::RemoveObserver(JobListObserver* observer) { | 231 void JobScheduler::RemoveObserver(JobListObserver* observer) { |
232 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 232 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
233 observer_list_.RemoveObserver(observer); | 233 observer_list_.RemoveObserver(observer); |
234 } | 234 } |
235 | 235 |
236 void JobScheduler::CancelJob(JobID job_id) { | 236 void JobScheduler::CancelJob(JobID job_id) { |
237 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 237 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
238 | 238 |
239 JobEntry* job = job_map_.Lookup(job_id); | 239 JobEntry* job = job_map_.Lookup(job_id); |
240 if (job) { | 240 if (job) { |
241 if (job->job_info.state == STATE_RUNNING) { | 241 if (job->job_info.state == STATE_RUNNING) { |
242 // If the job is running an HTTP request, cancel it via |cancel_callback| | 242 // If the job is running an HTTP request, cancel it via |cancel_callback| |
243 // returned from the request, and wait for termination in the normal | 243 // returned from the request, and wait for termination in the normal |
244 // callback handler, OnJobDone. | 244 // callback handler, OnJobDone. |
245 if (!job->cancel_callback.is_null()) | 245 if (!job->cancel_callback.is_null()) |
246 job->cancel_callback.Run(); | 246 job->cancel_callback.Run(); |
247 } else { | 247 } else { |
248 AbortNotRunningJob(job, google_apis::DRIVE_CANCELLED); | 248 AbortNotRunningJob(job, google_apis::DRIVE_CANCELLED); |
249 } | 249 } |
250 } | 250 } |
251 } | 251 } |
252 | 252 |
253 void JobScheduler::CancelAllJobs() { | 253 void JobScheduler::CancelAllJobs() { |
254 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 254 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
255 | 255 |
256 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports | 256 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports |
257 // removable during iteration. | 257 // removable during iteration. |
258 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) | 258 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) |
259 CancelJob(iter.GetCurrentKey()); | 259 CancelJob(iter.GetCurrentKey()); |
260 } | 260 } |
261 | 261 |
262 void JobScheduler::GetAboutResource( | 262 void JobScheduler::GetAboutResource( |
263 const google_apis::AboutResourceCallback& callback) { | 263 const google_apis::AboutResourceCallback& callback) { |
264 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 264 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
265 DCHECK(!callback.is_null()); | 265 DCHECK(!callback.is_null()); |
266 | 266 |
267 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); | 267 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); |
268 new_job->task = base::Bind( | 268 new_job->task = base::Bind( |
269 &DriveServiceInterface::GetAboutResource, | 269 &DriveServiceInterface::GetAboutResource, |
270 base::Unretained(drive_service_), | 270 base::Unretained(drive_service_), |
271 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, | 271 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, |
272 weak_ptr_factory_.GetWeakPtr(), | 272 weak_ptr_factory_.GetWeakPtr(), |
273 new_job->job_info.job_id, | 273 new_job->job_info.job_id, |
274 callback)); | 274 callback)); |
275 new_job->abort_callback = CreateErrorRunCallback(callback); | 275 new_job->abort_callback = CreateErrorRunCallback(callback); |
276 StartJob(new_job); | 276 StartJob(new_job); |
277 } | 277 } |
278 | 278 |
279 void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) { | 279 void JobScheduler::GetAppList(const google_apis::AppListCallback& callback) { |
280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 280 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
281 DCHECK(!callback.is_null()); | 281 DCHECK(!callback.is_null()); |
282 | 282 |
283 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); | 283 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); |
284 new_job->task = base::Bind( | 284 new_job->task = base::Bind( |
285 &DriveServiceInterface::GetAppList, | 285 &DriveServiceInterface::GetAppList, |
286 base::Unretained(drive_service_), | 286 base::Unretained(drive_service_), |
287 base::Bind(&JobScheduler::OnGetAppListJobDone, | 287 base::Bind(&JobScheduler::OnGetAppListJobDone, |
288 weak_ptr_factory_.GetWeakPtr(), | 288 weak_ptr_factory_.GetWeakPtr(), |
289 new_job->job_info.job_id, | 289 new_job->job_info.job_id, |
290 callback)); | 290 callback)); |
291 new_job->abort_callback = CreateErrorRunCallback(callback); | 291 new_job->abort_callback = CreateErrorRunCallback(callback); |
292 StartJob(new_job); | 292 StartJob(new_job); |
293 } | 293 } |
294 | 294 |
295 void JobScheduler::GetAllFileList( | 295 void JobScheduler::GetAllFileList( |
296 const google_apis::FileListCallback& callback) { | 296 const google_apis::FileListCallback& callback) { |
297 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 297 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
298 DCHECK(!callback.is_null()); | 298 DCHECK(!callback.is_null()); |
299 | 299 |
300 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); | 300 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); |
301 new_job->task = base::Bind( | 301 new_job->task = base::Bind( |
302 &DriveServiceInterface::GetAllFileList, | 302 &DriveServiceInterface::GetAllFileList, |
303 base::Unretained(drive_service_), | 303 base::Unretained(drive_service_), |
304 base::Bind(&JobScheduler::OnGetFileListJobDone, | 304 base::Bind(&JobScheduler::OnGetFileListJobDone, |
305 weak_ptr_factory_.GetWeakPtr(), | 305 weak_ptr_factory_.GetWeakPtr(), |
306 new_job->job_info.job_id, | 306 new_job->job_info.job_id, |
307 callback)); | 307 callback)); |
308 new_job->abort_callback = CreateErrorRunCallback(callback); | 308 new_job->abort_callback = CreateErrorRunCallback(callback); |
309 StartJob(new_job); | 309 StartJob(new_job); |
310 } | 310 } |
311 | 311 |
312 void JobScheduler::GetFileListInDirectory( | 312 void JobScheduler::GetFileListInDirectory( |
313 const std::string& directory_resource_id, | 313 const std::string& directory_resource_id, |
314 const google_apis::FileListCallback& callback) { | 314 const google_apis::FileListCallback& callback) { |
315 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 315 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
316 DCHECK(!callback.is_null()); | 316 DCHECK(!callback.is_null()); |
317 | 317 |
318 JobEntry* new_job = CreateNewJob( | 318 JobEntry* new_job = CreateNewJob( |
319 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); | 319 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); |
320 new_job->task = base::Bind( | 320 new_job->task = base::Bind( |
321 &DriveServiceInterface::GetFileListInDirectory, | 321 &DriveServiceInterface::GetFileListInDirectory, |
322 base::Unretained(drive_service_), | 322 base::Unretained(drive_service_), |
323 directory_resource_id, | 323 directory_resource_id, |
324 base::Bind(&JobScheduler::OnGetFileListJobDone, | 324 base::Bind(&JobScheduler::OnGetFileListJobDone, |
325 weak_ptr_factory_.GetWeakPtr(), | 325 weak_ptr_factory_.GetWeakPtr(), |
326 new_job->job_info.job_id, | 326 new_job->job_info.job_id, |
327 callback)); | 327 callback)); |
328 new_job->abort_callback = CreateErrorRunCallback(callback); | 328 new_job->abort_callback = CreateErrorRunCallback(callback); |
329 StartJob(new_job); | 329 StartJob(new_job); |
330 } | 330 } |
331 | 331 |
332 void JobScheduler::Search(const std::string& search_query, | 332 void JobScheduler::Search(const std::string& search_query, |
333 const google_apis::FileListCallback& callback) { | 333 const google_apis::FileListCallback& callback) { |
334 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 334 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
335 DCHECK(!callback.is_null()); | 335 DCHECK(!callback.is_null()); |
336 | 336 |
337 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); | 337 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); |
338 new_job->task = base::Bind( | 338 new_job->task = base::Bind( |
339 &DriveServiceInterface::Search, | 339 &DriveServiceInterface::Search, |
340 base::Unretained(drive_service_), | 340 base::Unretained(drive_service_), |
341 search_query, | 341 search_query, |
342 base::Bind(&JobScheduler::OnGetFileListJobDone, | 342 base::Bind(&JobScheduler::OnGetFileListJobDone, |
343 weak_ptr_factory_.GetWeakPtr(), | 343 weak_ptr_factory_.GetWeakPtr(), |
344 new_job->job_info.job_id, | 344 new_job->job_info.job_id, |
345 callback)); | 345 callback)); |
346 new_job->abort_callback = CreateErrorRunCallback(callback); | 346 new_job->abort_callback = CreateErrorRunCallback(callback); |
347 StartJob(new_job); | 347 StartJob(new_job); |
348 } | 348 } |
349 | 349 |
350 void JobScheduler::GetChangeList( | 350 void JobScheduler::GetChangeList( |
351 int64 start_changestamp, | 351 int64 start_changestamp, |
352 const google_apis::ChangeListCallback& callback) { | 352 const google_apis::ChangeListCallback& callback) { |
353 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 353 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
354 DCHECK(!callback.is_null()); | 354 DCHECK(!callback.is_null()); |
355 | 355 |
356 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); | 356 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); |
357 new_job->task = base::Bind( | 357 new_job->task = base::Bind( |
358 &DriveServiceInterface::GetChangeList, | 358 &DriveServiceInterface::GetChangeList, |
359 base::Unretained(drive_service_), | 359 base::Unretained(drive_service_), |
360 start_changestamp, | 360 start_changestamp, |
361 base::Bind(&JobScheduler::OnGetChangeListJobDone, | 361 base::Bind(&JobScheduler::OnGetChangeListJobDone, |
362 weak_ptr_factory_.GetWeakPtr(), | 362 weak_ptr_factory_.GetWeakPtr(), |
363 new_job->job_info.job_id, | 363 new_job->job_info.job_id, |
364 callback)); | 364 callback)); |
365 new_job->abort_callback = CreateErrorRunCallback(callback); | 365 new_job->abort_callback = CreateErrorRunCallback(callback); |
366 StartJob(new_job); | 366 StartJob(new_job); |
367 } | 367 } |
368 | 368 |
369 void JobScheduler::GetRemainingChangeList( | 369 void JobScheduler::GetRemainingChangeList( |
370 const GURL& next_link, | 370 const GURL& next_link, |
371 const google_apis::ChangeListCallback& callback) { | 371 const google_apis::ChangeListCallback& callback) { |
372 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 372 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
373 DCHECK(!callback.is_null()); | 373 DCHECK(!callback.is_null()); |
374 | 374 |
375 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_CHANGE_LIST); | 375 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_CHANGE_LIST); |
376 new_job->task = base::Bind( | 376 new_job->task = base::Bind( |
377 &DriveServiceInterface::GetRemainingChangeList, | 377 &DriveServiceInterface::GetRemainingChangeList, |
378 base::Unretained(drive_service_), | 378 base::Unretained(drive_service_), |
379 next_link, | 379 next_link, |
380 base::Bind(&JobScheduler::OnGetChangeListJobDone, | 380 base::Bind(&JobScheduler::OnGetChangeListJobDone, |
381 weak_ptr_factory_.GetWeakPtr(), | 381 weak_ptr_factory_.GetWeakPtr(), |
382 new_job->job_info.job_id, | 382 new_job->job_info.job_id, |
383 callback)); | 383 callback)); |
384 new_job->abort_callback = CreateErrorRunCallback(callback); | 384 new_job->abort_callback = CreateErrorRunCallback(callback); |
385 StartJob(new_job); | 385 StartJob(new_job); |
386 } | 386 } |
387 | 387 |
388 void JobScheduler::GetRemainingFileList( | 388 void JobScheduler::GetRemainingFileList( |
389 const GURL& next_link, | 389 const GURL& next_link, |
390 const google_apis::FileListCallback& callback) { | 390 const google_apis::FileListCallback& callback) { |
391 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 391 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
392 DCHECK(!callback.is_null()); | 392 DCHECK(!callback.is_null()); |
393 | 393 |
394 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_FILE_LIST); | 394 JobEntry* new_job = CreateNewJob(TYPE_GET_REMAINING_FILE_LIST); |
395 new_job->task = base::Bind( | 395 new_job->task = base::Bind( |
396 &DriveServiceInterface::GetRemainingFileList, | 396 &DriveServiceInterface::GetRemainingFileList, |
397 base::Unretained(drive_service_), | 397 base::Unretained(drive_service_), |
398 next_link, | 398 next_link, |
399 base::Bind(&JobScheduler::OnGetFileListJobDone, | 399 base::Bind(&JobScheduler::OnGetFileListJobDone, |
400 weak_ptr_factory_.GetWeakPtr(), | 400 weak_ptr_factory_.GetWeakPtr(), |
401 new_job->job_info.job_id, | 401 new_job->job_info.job_id, |
402 callback)); | 402 callback)); |
403 new_job->abort_callback = CreateErrorRunCallback(callback); | 403 new_job->abort_callback = CreateErrorRunCallback(callback); |
404 StartJob(new_job); | 404 StartJob(new_job); |
405 } | 405 } |
406 | 406 |
407 void JobScheduler::GetFileResource( | 407 void JobScheduler::GetFileResource( |
408 const std::string& resource_id, | 408 const std::string& resource_id, |
409 const ClientContext& context, | 409 const ClientContext& context, |
410 const google_apis::FileResourceCallback& callback) { | 410 const google_apis::FileResourceCallback& callback) { |
411 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 411 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
412 DCHECK(!callback.is_null()); | 412 DCHECK(!callback.is_null()); |
413 | 413 |
414 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); | 414 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); |
415 new_job->context = context; | 415 new_job->context = context; |
416 new_job->task = base::Bind( | 416 new_job->task = base::Bind( |
417 &DriveServiceInterface::GetFileResource, | 417 &DriveServiceInterface::GetFileResource, |
418 base::Unretained(drive_service_), | 418 base::Unretained(drive_service_), |
419 resource_id, | 419 resource_id, |
420 base::Bind(&JobScheduler::OnGetFileResourceJobDone, | 420 base::Bind(&JobScheduler::OnGetFileResourceJobDone, |
421 weak_ptr_factory_.GetWeakPtr(), | 421 weak_ptr_factory_.GetWeakPtr(), |
422 new_job->job_info.job_id, | 422 new_job->job_info.job_id, |
423 callback)); | 423 callback)); |
424 new_job->abort_callback = CreateErrorRunCallback(callback); | 424 new_job->abort_callback = CreateErrorRunCallback(callback); |
425 StartJob(new_job); | 425 StartJob(new_job); |
426 } | 426 } |
427 | 427 |
428 void JobScheduler::GetShareUrl( | 428 void JobScheduler::GetShareUrl( |
429 const std::string& resource_id, | 429 const std::string& resource_id, |
430 const GURL& embed_origin, | 430 const GURL& embed_origin, |
431 const ClientContext& context, | 431 const ClientContext& context, |
432 const google_apis::GetShareUrlCallback& callback) { | 432 const google_apis::GetShareUrlCallback& callback) { |
433 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 433 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
434 DCHECK(!callback.is_null()); | 434 DCHECK(!callback.is_null()); |
435 | 435 |
436 JobEntry* new_job = CreateNewJob(TYPE_GET_SHARE_URL); | 436 JobEntry* new_job = CreateNewJob(TYPE_GET_SHARE_URL); |
437 new_job->context = context; | 437 new_job->context = context; |
438 new_job->task = base::Bind( | 438 new_job->task = base::Bind( |
439 &DriveServiceInterface::GetShareUrl, | 439 &DriveServiceInterface::GetShareUrl, |
440 base::Unretained(drive_service_), | 440 base::Unretained(drive_service_), |
441 resource_id, | 441 resource_id, |
442 embed_origin, | 442 embed_origin, |
443 base::Bind(&JobScheduler::OnGetShareUrlJobDone, | 443 base::Bind(&JobScheduler::OnGetShareUrlJobDone, |
444 weak_ptr_factory_.GetWeakPtr(), | 444 weak_ptr_factory_.GetWeakPtr(), |
445 new_job->job_info.job_id, | 445 new_job->job_info.job_id, |
446 callback)); | 446 callback)); |
447 new_job->abort_callback = CreateErrorRunCallback(callback); | 447 new_job->abort_callback = CreateErrorRunCallback(callback); |
448 StartJob(new_job); | 448 StartJob(new_job); |
449 } | 449 } |
450 | 450 |
451 void JobScheduler::TrashResource( | 451 void JobScheduler::TrashResource( |
452 const std::string& resource_id, | 452 const std::string& resource_id, |
453 const ClientContext& context, | 453 const ClientContext& context, |
454 const google_apis::EntryActionCallback& callback) { | 454 const google_apis::EntryActionCallback& callback) { |
455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 455 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
456 DCHECK(!callback.is_null()); | 456 DCHECK(!callback.is_null()); |
457 | 457 |
458 JobEntry* new_job = CreateNewJob(TYPE_TRASH_RESOURCE); | 458 JobEntry* new_job = CreateNewJob(TYPE_TRASH_RESOURCE); |
459 new_job->context = context; | 459 new_job->context = context; |
460 new_job->task = base::Bind( | 460 new_job->task = base::Bind( |
461 &DriveServiceInterface::TrashResource, | 461 &DriveServiceInterface::TrashResource, |
462 base::Unretained(drive_service_), | 462 base::Unretained(drive_service_), |
463 resource_id, | 463 resource_id, |
464 base::Bind(&JobScheduler::OnEntryActionJobDone, | 464 base::Bind(&JobScheduler::OnEntryActionJobDone, |
465 weak_ptr_factory_.GetWeakPtr(), | 465 weak_ptr_factory_.GetWeakPtr(), |
466 new_job->job_info.job_id, | 466 new_job->job_info.job_id, |
467 callback)); | 467 callback)); |
468 new_job->abort_callback = callback; | 468 new_job->abort_callback = callback; |
469 StartJob(new_job); | 469 StartJob(new_job); |
470 } | 470 } |
471 | 471 |
472 void JobScheduler::CopyResource( | 472 void JobScheduler::CopyResource( |
473 const std::string& resource_id, | 473 const std::string& resource_id, |
474 const std::string& parent_resource_id, | 474 const std::string& parent_resource_id, |
475 const std::string& new_title, | 475 const std::string& new_title, |
476 const base::Time& last_modified, | 476 const base::Time& last_modified, |
477 const google_apis::FileResourceCallback& callback) { | 477 const google_apis::FileResourceCallback& callback) { |
478 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 478 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
479 DCHECK(!callback.is_null()); | 479 DCHECK(!callback.is_null()); |
480 | 480 |
481 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); | 481 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); |
482 new_job->task = base::Bind( | 482 new_job->task = base::Bind( |
483 &DriveServiceInterface::CopyResource, | 483 &DriveServiceInterface::CopyResource, |
484 base::Unretained(drive_service_), | 484 base::Unretained(drive_service_), |
485 resource_id, | 485 resource_id, |
486 parent_resource_id, | 486 parent_resource_id, |
487 new_title, | 487 new_title, |
488 last_modified, | 488 last_modified, |
489 base::Bind(&JobScheduler::OnGetFileResourceJobDone, | 489 base::Bind(&JobScheduler::OnGetFileResourceJobDone, |
490 weak_ptr_factory_.GetWeakPtr(), | 490 weak_ptr_factory_.GetWeakPtr(), |
491 new_job->job_info.job_id, | 491 new_job->job_info.job_id, |
492 callback)); | 492 callback)); |
493 new_job->abort_callback = CreateErrorRunCallback(callback); | 493 new_job->abort_callback = CreateErrorRunCallback(callback); |
494 StartJob(new_job); | 494 StartJob(new_job); |
495 } | 495 } |
496 | 496 |
497 void JobScheduler::UpdateResource( | 497 void JobScheduler::UpdateResource( |
498 const std::string& resource_id, | 498 const std::string& resource_id, |
499 const std::string& parent_resource_id, | 499 const std::string& parent_resource_id, |
500 const std::string& new_title, | 500 const std::string& new_title, |
501 const base::Time& last_modified, | 501 const base::Time& last_modified, |
502 const base::Time& last_viewed_by_me, | 502 const base::Time& last_viewed_by_me, |
503 const google_apis::drive::Properties& properties, | 503 const google_apis::drive::Properties& properties, |
504 const ClientContext& context, | 504 const ClientContext& context, |
505 const google_apis::FileResourceCallback& callback) { | 505 const google_apis::FileResourceCallback& callback) { |
506 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 506 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
507 DCHECK(!callback.is_null()); | 507 DCHECK(!callback.is_null()); |
508 | 508 |
509 JobEntry* new_job = CreateNewJob(TYPE_UPDATE_RESOURCE); | 509 JobEntry* new_job = CreateNewJob(TYPE_UPDATE_RESOURCE); |
510 new_job->context = context; | 510 new_job->context = context; |
511 new_job->task = base::Bind(&DriveServiceInterface::UpdateResource, | 511 new_job->task = base::Bind(&DriveServiceInterface::UpdateResource, |
512 base::Unretained(drive_service_), resource_id, | 512 base::Unretained(drive_service_), resource_id, |
513 parent_resource_id, new_title, last_modified, | 513 parent_resource_id, new_title, last_modified, |
514 last_viewed_by_me, properties, | 514 last_viewed_by_me, properties, |
515 base::Bind(&JobScheduler::OnGetFileResourceJobDone, | 515 base::Bind(&JobScheduler::OnGetFileResourceJobDone, |
516 weak_ptr_factory_.GetWeakPtr(), | 516 weak_ptr_factory_.GetWeakPtr(), |
517 new_job->job_info.job_id, callback)); | 517 new_job->job_info.job_id, callback)); |
518 new_job->abort_callback = CreateErrorRunCallback(callback); | 518 new_job->abort_callback = CreateErrorRunCallback(callback); |
519 StartJob(new_job); | 519 StartJob(new_job); |
520 } | 520 } |
521 | 521 |
522 void JobScheduler::AddResourceToDirectory( | 522 void JobScheduler::AddResourceToDirectory( |
523 const std::string& parent_resource_id, | 523 const std::string& parent_resource_id, |
524 const std::string& resource_id, | 524 const std::string& resource_id, |
525 const google_apis::EntryActionCallback& callback) { | 525 const google_apis::EntryActionCallback& callback) { |
526 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 526 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
527 DCHECK(!callback.is_null()); | 527 DCHECK(!callback.is_null()); |
528 | 528 |
529 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); | 529 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); |
530 new_job->task = base::Bind( | 530 new_job->task = base::Bind( |
531 &DriveServiceInterface::AddResourceToDirectory, | 531 &DriveServiceInterface::AddResourceToDirectory, |
532 base::Unretained(drive_service_), | 532 base::Unretained(drive_service_), |
533 parent_resource_id, | 533 parent_resource_id, |
534 resource_id, | 534 resource_id, |
535 base::Bind(&JobScheduler::OnEntryActionJobDone, | 535 base::Bind(&JobScheduler::OnEntryActionJobDone, |
536 weak_ptr_factory_.GetWeakPtr(), | 536 weak_ptr_factory_.GetWeakPtr(), |
537 new_job->job_info.job_id, | 537 new_job->job_info.job_id, |
538 callback)); | 538 callback)); |
539 new_job->abort_callback = callback; | 539 new_job->abort_callback = callback; |
540 StartJob(new_job); | 540 StartJob(new_job); |
541 } | 541 } |
542 | 542 |
543 void JobScheduler::RemoveResourceFromDirectory( | 543 void JobScheduler::RemoveResourceFromDirectory( |
544 const std::string& parent_resource_id, | 544 const std::string& parent_resource_id, |
545 const std::string& resource_id, | 545 const std::string& resource_id, |
546 const ClientContext& context, | 546 const ClientContext& context, |
547 const google_apis::EntryActionCallback& callback) { | 547 const google_apis::EntryActionCallback& callback) { |
548 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 548 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
549 | 549 |
550 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); | 550 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); |
551 new_job->context = context; | 551 new_job->context = context; |
552 new_job->task = base::Bind( | 552 new_job->task = base::Bind( |
553 &DriveServiceInterface::RemoveResourceFromDirectory, | 553 &DriveServiceInterface::RemoveResourceFromDirectory, |
554 base::Unretained(drive_service_), | 554 base::Unretained(drive_service_), |
555 parent_resource_id, | 555 parent_resource_id, |
556 resource_id, | 556 resource_id, |
557 base::Bind(&JobScheduler::OnEntryActionJobDone, | 557 base::Bind(&JobScheduler::OnEntryActionJobDone, |
558 weak_ptr_factory_.GetWeakPtr(), | 558 weak_ptr_factory_.GetWeakPtr(), |
559 new_job->job_info.job_id, | 559 new_job->job_info.job_id, |
560 callback)); | 560 callback)); |
561 new_job->abort_callback = callback; | 561 new_job->abort_callback = callback; |
562 StartJob(new_job); | 562 StartJob(new_job); |
563 } | 563 } |
564 | 564 |
565 void JobScheduler::AddNewDirectory( | 565 void JobScheduler::AddNewDirectory( |
566 const std::string& parent_resource_id, | 566 const std::string& parent_resource_id, |
567 const std::string& directory_title, | 567 const std::string& directory_title, |
568 const DriveServiceInterface::AddNewDirectoryOptions& options, | 568 const DriveServiceInterface::AddNewDirectoryOptions& options, |
569 const ClientContext& context, | 569 const ClientContext& context, |
570 const google_apis::FileResourceCallback& callback) { | 570 const google_apis::FileResourceCallback& callback) { |
571 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 571 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
572 | 572 |
573 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); | 573 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); |
574 new_job->context = context; | 574 new_job->context = context; |
575 new_job->task = base::Bind( | 575 new_job->task = base::Bind( |
576 &DriveServiceInterface::AddNewDirectory, | 576 &DriveServiceInterface::AddNewDirectory, |
577 base::Unretained(drive_service_), | 577 base::Unretained(drive_service_), |
578 parent_resource_id, | 578 parent_resource_id, |
579 directory_title, | 579 directory_title, |
580 options, | 580 options, |
581 base::Bind(&JobScheduler::OnGetFileResourceJobDone, | 581 base::Bind(&JobScheduler::OnGetFileResourceJobDone, |
582 weak_ptr_factory_.GetWeakPtr(), | 582 weak_ptr_factory_.GetWeakPtr(), |
583 new_job->job_info.job_id, | 583 new_job->job_info.job_id, |
584 callback)); | 584 callback)); |
585 new_job->abort_callback = CreateErrorRunCallback(callback); | 585 new_job->abort_callback = CreateErrorRunCallback(callback); |
586 StartJob(new_job); | 586 StartJob(new_job); |
587 } | 587 } |
588 | 588 |
589 JobID JobScheduler::DownloadFile( | 589 JobID JobScheduler::DownloadFile( |
590 const base::FilePath& virtual_path, | 590 const base::FilePath& virtual_path, |
591 int64 expected_file_size, | 591 int64 expected_file_size, |
592 const base::FilePath& local_cache_path, | 592 const base::FilePath& local_cache_path, |
593 const std::string& resource_id, | 593 const std::string& resource_id, |
594 const ClientContext& context, | 594 const ClientContext& context, |
595 const google_apis::DownloadActionCallback& download_action_callback, | 595 const google_apis::DownloadActionCallback& download_action_callback, |
596 const google_apis::GetContentCallback& get_content_callback) { | 596 const google_apis::GetContentCallback& get_content_callback) { |
597 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 597 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
598 | 598 |
599 // Temporary histogram for crbug.com/229650. | 599 // Temporary histogram for crbug.com/229650. |
600 CollectCopyHistogramSample("Drive.DownloadFromDriveFileSize", | 600 CollectCopyHistogramSample("Drive.DownloadFromDriveFileSize", |
601 expected_file_size); | 601 expected_file_size); |
602 | 602 |
603 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); | 603 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); |
604 new_job->job_info.file_path = virtual_path; | 604 new_job->job_info.file_path = virtual_path; |
605 new_job->job_info.num_total_bytes = expected_file_size; | 605 new_job->job_info.num_total_bytes = expected_file_size; |
606 new_job->context = context; | 606 new_job->context = context; |
607 new_job->task = base::Bind( | 607 new_job->task = base::Bind( |
(...skipping 16 matching lines...) Expand all Loading... |
624 | 624 |
625 void JobScheduler::UploadNewFile( | 625 void JobScheduler::UploadNewFile( |
626 const std::string& parent_resource_id, | 626 const std::string& parent_resource_id, |
627 const base::FilePath& drive_file_path, | 627 const base::FilePath& drive_file_path, |
628 const base::FilePath& local_file_path, | 628 const base::FilePath& local_file_path, |
629 const std::string& title, | 629 const std::string& title, |
630 const std::string& content_type, | 630 const std::string& content_type, |
631 const DriveUploader::UploadNewFileOptions& options, | 631 const DriveUploader::UploadNewFileOptions& options, |
632 const ClientContext& context, | 632 const ClientContext& context, |
633 const google_apis::FileResourceCallback& callback) { | 633 const google_apis::FileResourceCallback& callback) { |
634 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 634 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
635 | 635 |
636 JobEntry* new_job = CreateNewJob(TYPE_UPLOAD_NEW_FILE); | 636 JobEntry* new_job = CreateNewJob(TYPE_UPLOAD_NEW_FILE); |
637 new_job->job_info.file_path = drive_file_path; | 637 new_job->job_info.file_path = drive_file_path; |
638 new_job->context = context; | 638 new_job->context = context; |
639 | 639 |
640 GetFileSizeForJob( | 640 GetFileSizeForJob( |
641 blocking_task_runner_, local_file_path, | 641 blocking_task_runner_, local_file_path, |
642 base::Bind(&JobScheduler::OnGotFileSizeForJob, | 642 base::Bind(&JobScheduler::OnGotFileSizeForJob, |
643 weak_ptr_factory_.GetWeakPtr(), new_job->job_info.job_id, | 643 weak_ptr_factory_.GetWeakPtr(), new_job->job_info.job_id, |
644 "Drive.UploadToDriveFileSize")); | 644 "Drive.UploadToDriveFileSize")); |
(...skipping 23 matching lines...) Expand all Loading... |
668 } | 668 } |
669 | 669 |
670 void JobScheduler::UploadExistingFile( | 670 void JobScheduler::UploadExistingFile( |
671 const std::string& resource_id, | 671 const std::string& resource_id, |
672 const base::FilePath& drive_file_path, | 672 const base::FilePath& drive_file_path, |
673 const base::FilePath& local_file_path, | 673 const base::FilePath& local_file_path, |
674 const std::string& content_type, | 674 const std::string& content_type, |
675 const DriveUploader::UploadExistingFileOptions& options, | 675 const DriveUploader::UploadExistingFileOptions& options, |
676 const ClientContext& context, | 676 const ClientContext& context, |
677 const google_apis::FileResourceCallback& callback) { | 677 const google_apis::FileResourceCallback& callback) { |
678 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 678 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
679 | 679 |
680 JobEntry* new_job = CreateNewJob(TYPE_UPLOAD_EXISTING_FILE); | 680 JobEntry* new_job = CreateNewJob(TYPE_UPLOAD_EXISTING_FILE); |
681 new_job->job_info.file_path = drive_file_path; | 681 new_job->job_info.file_path = drive_file_path; |
682 new_job->context = context; | 682 new_job->context = context; |
683 | 683 |
684 GetFileSizeForJob( | 684 GetFileSizeForJob( |
685 blocking_task_runner_, local_file_path, | 685 blocking_task_runner_, local_file_path, |
686 base::Bind(&JobScheduler::OnGotFileSizeForJob, | 686 base::Bind(&JobScheduler::OnGotFileSizeForJob, |
687 weak_ptr_factory_.GetWeakPtr(), new_job->job_info.job_id, | 687 weak_ptr_factory_.GetWeakPtr(), new_job->job_info.job_id, |
688 "Drive.UploadToDriveFileSize")); | 688 "Drive.UploadToDriveFileSize")); |
(...skipping 19 matching lines...) Expand all Loading... |
708 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); | 708 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); |
709 new_job->abort_callback = CreateErrorRunCallback(callback); | 709 new_job->abort_callback = CreateErrorRunCallback(callback); |
710 StartJob(new_job); | 710 StartJob(new_job); |
711 } | 711 } |
712 | 712 |
713 void JobScheduler::AddPermission( | 713 void JobScheduler::AddPermission( |
714 const std::string& resource_id, | 714 const std::string& resource_id, |
715 const std::string& email, | 715 const std::string& email, |
716 google_apis::drive::PermissionRole role, | 716 google_apis::drive::PermissionRole role, |
717 const google_apis::EntryActionCallback& callback) { | 717 const google_apis::EntryActionCallback& callback) { |
718 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 718 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
719 DCHECK(!callback.is_null()); | 719 DCHECK(!callback.is_null()); |
720 | 720 |
721 JobEntry* new_job = CreateNewJob(TYPE_ADD_PERMISSION); | 721 JobEntry* new_job = CreateNewJob(TYPE_ADD_PERMISSION); |
722 new_job->task = base::Bind(&DriveServiceInterface::AddPermission, | 722 new_job->task = base::Bind(&DriveServiceInterface::AddPermission, |
723 base::Unretained(drive_service_), | 723 base::Unretained(drive_service_), |
724 resource_id, | 724 resource_id, |
725 email, | 725 email, |
726 role, | 726 role, |
727 base::Bind(&JobScheduler::OnEntryActionJobDone, | 727 base::Bind(&JobScheduler::OnEntryActionJobDone, |
728 weak_ptr_factory_.GetWeakPtr(), | 728 weak_ptr_factory_.GetWeakPtr(), |
(...skipping 11 matching lines...) Expand all Loading... |
740 | 740 |
741 void JobScheduler::StartJob(JobEntry* job) { | 741 void JobScheduler::StartJob(JobEntry* job) { |
742 DCHECK(!job->task.is_null()); | 742 DCHECK(!job->task.is_null()); |
743 | 743 |
744 QueueJob(job->job_info.job_id); | 744 QueueJob(job->job_info.job_id); |
745 NotifyJobAdded(job->job_info); | 745 NotifyJobAdded(job->job_info); |
746 DoJobLoop(GetJobQueueType(job->job_info.job_type)); | 746 DoJobLoop(GetJobQueueType(job->job_info.job_type)); |
747 } | 747 } |
748 | 748 |
749 void JobScheduler::QueueJob(JobID job_id) { | 749 void JobScheduler::QueueJob(JobID job_id) { |
750 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 750 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
751 | 751 |
752 JobEntry* job_entry = job_map_.Lookup(job_id); | 752 JobEntry* job_entry = job_map_.Lookup(job_id); |
753 DCHECK(job_entry); | 753 DCHECK(job_entry); |
754 const JobInfo& job_info = job_entry->job_info; | 754 const JobInfo& job_info = job_entry->job_info; |
755 | 755 |
756 const QueueType queue_type = GetJobQueueType(job_info.job_type); | 756 const QueueType queue_type = GetJobQueueType(job_info.job_type); |
757 queue_[queue_type]->Push(job_id, job_entry->context.type); | 757 queue_[queue_type]->Push(job_id, job_entry->context.type); |
758 | 758 |
759 // Temporary histogram for crbug.com/229650. | 759 // Temporary histogram for crbug.com/229650. |
760 if (job_info.job_type == TYPE_DOWNLOAD_FILE || | 760 if (job_info.job_type == TYPE_DOWNLOAD_FILE || |
(...skipping 12 matching lines...) Expand all Loading... |
773 const std::string retry_prefix = job_entry->retry_count > 0 ? | 773 const std::string retry_prefix = job_entry->retry_count > 0 ? |
774 base::StringPrintf(" (retry %d)", job_entry->retry_count) : ""; | 774 base::StringPrintf(" (retry %d)", job_entry->retry_count) : ""; |
775 logger_->Log(logging::LOG_INFO, | 775 logger_->Log(logging::LOG_INFO, |
776 "Job queued%s: %s - %s", | 776 "Job queued%s: %s - %s", |
777 retry_prefix.c_str(), | 777 retry_prefix.c_str(), |
778 job_info.ToString().c_str(), | 778 job_info.ToString().c_str(), |
779 GetQueueInfo(queue_type).c_str()); | 779 GetQueueInfo(queue_type).c_str()); |
780 } | 780 } |
781 | 781 |
782 void JobScheduler::DoJobLoop(QueueType queue_type) { | 782 void JobScheduler::DoJobLoop(QueueType queue_type) { |
783 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 783 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
784 | 784 |
785 const int accepted_priority = GetCurrentAcceptedPriority(queue_type); | 785 const int accepted_priority = GetCurrentAcceptedPriority(queue_type); |
786 | 786 |
787 // Abort all USER_INITAITED jobs when not accepted. | 787 // Abort all USER_INITAITED jobs when not accepted. |
788 if (accepted_priority < USER_INITIATED) { | 788 if (accepted_priority < USER_INITIATED) { |
789 std::vector<JobID> jobs; | 789 std::vector<JobID> jobs; |
790 queue_[queue_type]->GetQueuedJobs(USER_INITIATED, &jobs); | 790 queue_[queue_type]->GetQueuedJobs(USER_INITIATED, &jobs); |
791 for (size_t i = 0; i < jobs.size(); ++i) { | 791 for (size_t i = 0; i < jobs.size(); ++i) { |
792 JobEntry* job = job_map_.Lookup(jobs[i]); | 792 JobEntry* job = job_map_.Lookup(jobs[i]); |
793 DCHECK(job); | 793 DCHECK(job); |
(...skipping 30 matching lines...) Expand all Loading... |
824 | 824 |
825 UpdateWait(); | 825 UpdateWait(); |
826 | 826 |
827 logger_->Log(logging::LOG_INFO, | 827 logger_->Log(logging::LOG_INFO, |
828 "Job started: %s - %s", | 828 "Job started: %s - %s", |
829 job_info->ToString().c_str(), | 829 job_info->ToString().c_str(), |
830 GetQueueInfo(queue_type).c_str()); | 830 GetQueueInfo(queue_type).c_str()); |
831 } | 831 } |
832 | 832 |
833 int JobScheduler::GetCurrentAcceptedPriority(QueueType queue_type) { | 833 int JobScheduler::GetCurrentAcceptedPriority(QueueType queue_type) { |
834 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 834 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
835 | 835 |
836 const int kNoJobShouldRun = -1; | 836 const int kNoJobShouldRun = -1; |
837 | 837 |
838 // Should stop if Drive was disabled while running the fetch loop. | 838 // Should stop if Drive was disabled while running the fetch loop. |
839 if (pref_service_->GetBoolean(prefs::kDisableDrive)) | 839 if (pref_service_->GetBoolean(prefs::kDisableDrive)) |
840 return kNoJobShouldRun; | 840 return kNoJobShouldRun; |
841 | 841 |
842 // Should stop if the network is not online. | 842 // Should stop if the network is not online. |
843 if (net::NetworkChangeNotifier::IsOffline()) | 843 if (net::NetworkChangeNotifier::IsOffline()) |
844 return kNoJobShouldRun; | 844 return kNoJobShouldRun; |
845 | 845 |
846 // For the file queue, if it is on cellular network, only user initiated | 846 // For the file queue, if it is on cellular network, only user initiated |
847 // operations are allowed to start. | 847 // operations are allowed to start. |
848 if (queue_type == FILE_QUEUE && | 848 if (queue_type == FILE_QUEUE && |
849 pref_service_->GetBoolean(prefs::kDisableDriveOverCellular) && | 849 pref_service_->GetBoolean(prefs::kDisableDriveOverCellular) && |
850 net::NetworkChangeNotifier::IsConnectionCellular( | 850 net::NetworkChangeNotifier::IsConnectionCellular( |
851 net::NetworkChangeNotifier::GetConnectionType())) | 851 net::NetworkChangeNotifier::GetConnectionType())) |
852 return USER_INITIATED; | 852 return USER_INITIATED; |
853 | 853 |
854 // Otherwise, every operations including background tasks are allowed. | 854 // Otherwise, every operations including background tasks are allowed. |
855 return BACKGROUND; | 855 return BACKGROUND; |
856 } | 856 } |
857 | 857 |
858 void JobScheduler::UpdateWait() { | 858 void JobScheduler::UpdateWait() { |
859 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 859 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
860 | 860 |
861 if (disable_throttling_ || throttle_count_ == 0) | 861 if (disable_throttling_ || throttle_count_ == 0) |
862 return; | 862 return; |
863 | 863 |
864 // Exponential backoff: https://developers.google.com/drive/handle-errors. | 864 // Exponential backoff: https://developers.google.com/drive/handle-errors. |
865 base::TimeDelta delay = | 865 base::TimeDelta delay = |
866 base::TimeDelta::FromSeconds(1 << (throttle_count_ - 1)) + | 866 base::TimeDelta::FromSeconds(1 << (throttle_count_ - 1)) + |
867 base::TimeDelta::FromMilliseconds(base::RandInt(0, 1000)); | 867 base::TimeDelta::FromMilliseconds(base::RandInt(0, 1000)); |
868 VLOG(1) << "Throttling for " << delay.InMillisecondsF(); | 868 VLOG(1) << "Throttling for " << delay.InMillisecondsF(); |
869 | 869 |
870 wait_until_ = std::max(wait_until_, base::Time::Now() + delay); | 870 wait_until_ = std::max(wait_until_, base::Time::Now() + delay); |
871 } | 871 } |
872 | 872 |
873 bool JobScheduler::OnJobDone(JobID job_id, | 873 bool JobScheduler::OnJobDone(JobID job_id, |
874 google_apis::DriveApiErrorCode error) { | 874 google_apis::DriveApiErrorCode error) { |
875 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 875 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
876 | 876 |
877 JobEntry* job_entry = job_map_.Lookup(job_id); | 877 JobEntry* job_entry = job_map_.Lookup(job_id); |
878 DCHECK(job_entry); | 878 DCHECK(job_entry); |
879 JobInfo* job_info = &job_entry->job_info; | 879 JobInfo* job_info = &job_entry->job_info; |
880 QueueType queue_type = GetJobQueueType(job_info->job_type); | 880 QueueType queue_type = GetJobQueueType(job_info->job_type); |
881 queue_[queue_type]->MarkFinished(job_id); | 881 queue_[queue_type]->MarkFinished(job_id); |
882 | 882 |
883 const base::TimeDelta elapsed = base::Time::Now() - job_info->start_time; | 883 const base::TimeDelta elapsed = base::Time::Now() - job_info->start_time; |
884 bool success = (GDataToFileError(error) == FILE_ERROR_OK); | 884 bool success = (GDataToFileError(error) == FILE_ERROR_OK); |
885 logger_->Log(success ? logging::LOG_INFO : logging::LOG_WARNING, | 885 logger_->Log(success ? logging::LOG_INFO : logging::LOG_WARNING, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
926 weak_ptr_factory_.GetWeakPtr(), | 926 weak_ptr_factory_.GetWeakPtr(), |
927 queue_type)); | 927 queue_type)); |
928 return !should_retry; | 928 return !should_retry; |
929 } | 929 } |
930 | 930 |
931 void JobScheduler::OnGetFileListJobDone( | 931 void JobScheduler::OnGetFileListJobDone( |
932 JobID job_id, | 932 JobID job_id, |
933 const google_apis::FileListCallback& callback, | 933 const google_apis::FileListCallback& callback, |
934 google_apis::DriveApiErrorCode error, | 934 google_apis::DriveApiErrorCode error, |
935 scoped_ptr<google_apis::FileList> file_list) { | 935 scoped_ptr<google_apis::FileList> file_list) { |
936 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 936 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
937 DCHECK(!callback.is_null()); | 937 DCHECK(!callback.is_null()); |
938 | 938 |
939 if (OnJobDone(job_id, error)) | 939 if (OnJobDone(job_id, error)) |
940 callback.Run(error, file_list.Pass()); | 940 callback.Run(error, file_list.Pass()); |
941 } | 941 } |
942 | 942 |
943 void JobScheduler::OnGetChangeListJobDone( | 943 void JobScheduler::OnGetChangeListJobDone( |
944 JobID job_id, | 944 JobID job_id, |
945 const google_apis::ChangeListCallback& callback, | 945 const google_apis::ChangeListCallback& callback, |
946 google_apis::DriveApiErrorCode error, | 946 google_apis::DriveApiErrorCode error, |
947 scoped_ptr<google_apis::ChangeList> change_list) { | 947 scoped_ptr<google_apis::ChangeList> change_list) { |
948 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 948 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
949 DCHECK(!callback.is_null()); | 949 DCHECK(!callback.is_null()); |
950 | 950 |
951 if (OnJobDone(job_id, error)) | 951 if (OnJobDone(job_id, error)) |
952 callback.Run(error, change_list.Pass()); | 952 callback.Run(error, change_list.Pass()); |
953 } | 953 } |
954 | 954 |
955 void JobScheduler::OnGetFileResourceJobDone( | 955 void JobScheduler::OnGetFileResourceJobDone( |
956 JobID job_id, | 956 JobID job_id, |
957 const google_apis::FileResourceCallback& callback, | 957 const google_apis::FileResourceCallback& callback, |
958 google_apis::DriveApiErrorCode error, | 958 google_apis::DriveApiErrorCode error, |
959 scoped_ptr<google_apis::FileResource> entry) { | 959 scoped_ptr<google_apis::FileResource> entry) { |
960 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 960 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
961 DCHECK(!callback.is_null()); | 961 DCHECK(!callback.is_null()); |
962 | 962 |
963 if (OnJobDone(job_id, error)) | 963 if (OnJobDone(job_id, error)) |
964 callback.Run(error, entry.Pass()); | 964 callback.Run(error, entry.Pass()); |
965 } | 965 } |
966 | 966 |
967 void JobScheduler::OnGetAboutResourceJobDone( | 967 void JobScheduler::OnGetAboutResourceJobDone( |
968 JobID job_id, | 968 JobID job_id, |
969 const google_apis::AboutResourceCallback& callback, | 969 const google_apis::AboutResourceCallback& callback, |
970 google_apis::DriveApiErrorCode error, | 970 google_apis::DriveApiErrorCode error, |
971 scoped_ptr<google_apis::AboutResource> about_resource) { | 971 scoped_ptr<google_apis::AboutResource> about_resource) { |
972 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 972 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
973 DCHECK(!callback.is_null()); | 973 DCHECK(!callback.is_null()); |
974 | 974 |
975 if (OnJobDone(job_id, error)) | 975 if (OnJobDone(job_id, error)) |
976 callback.Run(error, about_resource.Pass()); | 976 callback.Run(error, about_resource.Pass()); |
977 } | 977 } |
978 | 978 |
979 void JobScheduler::OnGetShareUrlJobDone( | 979 void JobScheduler::OnGetShareUrlJobDone( |
980 JobID job_id, | 980 JobID job_id, |
981 const google_apis::GetShareUrlCallback& callback, | 981 const google_apis::GetShareUrlCallback& callback, |
982 google_apis::DriveApiErrorCode error, | 982 google_apis::DriveApiErrorCode error, |
983 const GURL& share_url) { | 983 const GURL& share_url) { |
984 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 984 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
985 DCHECK(!callback.is_null()); | 985 DCHECK(!callback.is_null()); |
986 | 986 |
987 if (OnJobDone(job_id, error)) | 987 if (OnJobDone(job_id, error)) |
988 callback.Run(error, share_url); | 988 callback.Run(error, share_url); |
989 } | 989 } |
990 | 990 |
991 void JobScheduler::OnGetAppListJobDone( | 991 void JobScheduler::OnGetAppListJobDone( |
992 JobID job_id, | 992 JobID job_id, |
993 const google_apis::AppListCallback& callback, | 993 const google_apis::AppListCallback& callback, |
994 google_apis::DriveApiErrorCode error, | 994 google_apis::DriveApiErrorCode error, |
995 scoped_ptr<google_apis::AppList> app_list) { | 995 scoped_ptr<google_apis::AppList> app_list) { |
996 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 996 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
997 DCHECK(!callback.is_null()); | 997 DCHECK(!callback.is_null()); |
998 | 998 |
999 if (OnJobDone(job_id, error)) | 999 if (OnJobDone(job_id, error)) |
1000 callback.Run(error, app_list.Pass()); | 1000 callback.Run(error, app_list.Pass()); |
1001 } | 1001 } |
1002 | 1002 |
1003 void JobScheduler::OnEntryActionJobDone( | 1003 void JobScheduler::OnEntryActionJobDone( |
1004 JobID job_id, | 1004 JobID job_id, |
1005 const google_apis::EntryActionCallback& callback, | 1005 const google_apis::EntryActionCallback& callback, |
1006 google_apis::DriveApiErrorCode error) { | 1006 google_apis::DriveApiErrorCode error) { |
1007 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1007 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1008 DCHECK(!callback.is_null()); | 1008 DCHECK(!callback.is_null()); |
1009 | 1009 |
1010 if (OnJobDone(job_id, error)) | 1010 if (OnJobDone(job_id, error)) |
1011 callback.Run(error); | 1011 callback.Run(error); |
1012 } | 1012 } |
1013 | 1013 |
1014 void JobScheduler::OnDownloadActionJobDone( | 1014 void JobScheduler::OnDownloadActionJobDone( |
1015 JobID job_id, | 1015 JobID job_id, |
1016 const google_apis::DownloadActionCallback& callback, | 1016 const google_apis::DownloadActionCallback& callback, |
1017 google_apis::DriveApiErrorCode error, | 1017 google_apis::DriveApiErrorCode error, |
1018 const base::FilePath& temp_file) { | 1018 const base::FilePath& temp_file) { |
1019 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1019 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1020 DCHECK(!callback.is_null()); | 1020 DCHECK(!callback.is_null()); |
1021 | 1021 |
1022 if (OnJobDone(job_id, error)) | 1022 if (OnJobDone(job_id, error)) |
1023 callback.Run(error, temp_file); | 1023 callback.Run(error, temp_file); |
1024 } | 1024 } |
1025 | 1025 |
1026 void JobScheduler::OnUploadCompletionJobDone( | 1026 void JobScheduler::OnUploadCompletionJobDone( |
1027 JobID job_id, | 1027 JobID job_id, |
1028 const ResumeUploadParams& resume_params, | 1028 const ResumeUploadParams& resume_params, |
1029 const google_apis::FileResourceCallback& callback, | 1029 const google_apis::FileResourceCallback& callback, |
1030 google_apis::DriveApiErrorCode error, | 1030 google_apis::DriveApiErrorCode error, |
1031 const GURL& upload_location, | 1031 const GURL& upload_location, |
1032 scoped_ptr<google_apis::FileResource> entry) { | 1032 scoped_ptr<google_apis::FileResource> entry) { |
1033 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1033 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1034 DCHECK(!callback.is_null()); | 1034 DCHECK(!callback.is_null()); |
1035 | 1035 |
1036 if (!upload_location.is_empty()) { | 1036 if (!upload_location.is_empty()) { |
1037 // If upload_location is available, update the task to resume the | 1037 // If upload_location is available, update the task to resume the |
1038 // upload process from the terminated point. | 1038 // upload process from the terminated point. |
1039 // When we need to retry, the error code should be HTTP_SERVICE_UNAVAILABLE | 1039 // When we need to retry, the error code should be HTTP_SERVICE_UNAVAILABLE |
1040 // so OnJobDone called below will be in charge to re-queue the job. | 1040 // so OnJobDone called below will be in charge to re-queue the job. |
1041 JobEntry* job_entry = job_map_.Lookup(job_id); | 1041 JobEntry* job_entry = job_map_.Lookup(job_id); |
1042 DCHECK(job_entry); | 1042 DCHECK(job_entry); |
1043 | 1043 |
(...skipping 16 matching lines...) Expand all Loading... |
1060 callback.Run(error, entry.Pass()); | 1060 callback.Run(error, entry.Pass()); |
1061 } | 1061 } |
1062 | 1062 |
1063 void JobScheduler::OnResumeUploadFileDone( | 1063 void JobScheduler::OnResumeUploadFileDone( |
1064 JobID job_id, | 1064 JobID job_id, |
1065 const base::Callback<google_apis::CancelCallback()>& original_task, | 1065 const base::Callback<google_apis::CancelCallback()>& original_task, |
1066 const google_apis::FileResourceCallback& callback, | 1066 const google_apis::FileResourceCallback& callback, |
1067 google_apis::DriveApiErrorCode error, | 1067 google_apis::DriveApiErrorCode error, |
1068 const GURL& upload_location, | 1068 const GURL& upload_location, |
1069 scoped_ptr<google_apis::FileResource> entry) { | 1069 scoped_ptr<google_apis::FileResource> entry) { |
1070 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1070 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1071 DCHECK(!original_task.is_null()); | 1071 DCHECK(!original_task.is_null()); |
1072 DCHECK(!callback.is_null()); | 1072 DCHECK(!callback.is_null()); |
1073 | 1073 |
1074 if (upload_location.is_empty()) { | 1074 if (upload_location.is_empty()) { |
1075 // If upload_location is not available, we should discard it and stop trying | 1075 // If upload_location is not available, we should discard it and stop trying |
1076 // to resume. Restore the original task. | 1076 // to resume. Restore the original task. |
1077 JobEntry* job_entry = job_map_.Lookup(job_id); | 1077 JobEntry* job_entry = job_map_.Lookup(job_id); |
1078 DCHECK(job_entry); | 1078 DCHECK(job_entry); |
1079 job_entry->task = original_task; | 1079 job_entry->task = original_task; |
1080 } | 1080 } |
1081 | 1081 |
1082 if (OnJobDone(job_id, error)) | 1082 if (OnJobDone(job_id, error)) |
1083 callback.Run(error, entry.Pass()); | 1083 callback.Run(error, entry.Pass()); |
1084 } | 1084 } |
1085 | 1085 |
1086 void JobScheduler::UpdateProgress(JobID job_id, int64 progress, int64 total) { | 1086 void JobScheduler::UpdateProgress(JobID job_id, int64 progress, int64 total) { |
1087 JobEntry* job_entry = job_map_.Lookup(job_id); | 1087 JobEntry* job_entry = job_map_.Lookup(job_id); |
1088 DCHECK(job_entry); | 1088 DCHECK(job_entry); |
1089 | 1089 |
1090 job_entry->job_info.num_completed_bytes = progress; | 1090 job_entry->job_info.num_completed_bytes = progress; |
1091 if (total != -1) | 1091 if (total != -1) |
1092 job_entry->job_info.num_total_bytes = total; | 1092 job_entry->job_info.num_total_bytes = total; |
1093 NotifyJobUpdated(job_entry->job_info); | 1093 NotifyJobUpdated(job_entry->job_info); |
1094 } | 1094 } |
1095 | 1095 |
1096 void JobScheduler::OnConnectionTypeChanged( | 1096 void JobScheduler::OnConnectionTypeChanged( |
1097 net::NetworkChangeNotifier::ConnectionType type) { | 1097 net::NetworkChangeNotifier::ConnectionType type) { |
1098 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1098 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1099 | 1099 |
1100 // Resume the job loop. | 1100 // Resume the job loop. |
1101 // Note that we don't need to check the network connection status as it will | 1101 // Note that we don't need to check the network connection status as it will |
1102 // be checked in GetCurrentAcceptedPriority(). | 1102 // be checked in GetCurrentAcceptedPriority(). |
1103 for (int i = METADATA_QUEUE; i < NUM_QUEUES; ++i) | 1103 for (int i = METADATA_QUEUE; i < NUM_QUEUES; ++i) |
1104 DoJobLoop(static_cast<QueueType>(i)); | 1104 DoJobLoop(static_cast<QueueType>(i)); |
1105 } | 1105 } |
1106 | 1106 |
1107 void JobScheduler::OnGotFileSizeForJob(JobID job_id, | 1107 void JobScheduler::OnGotFileSizeForJob(JobID job_id, |
1108 const std::string& histogram_name, | 1108 const std::string& histogram_name, |
1109 int64* size) { | 1109 int64* size) { |
1110 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1110 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1111 if (*size == -1) | 1111 if (*size == -1) |
1112 return; | 1112 return; |
1113 | 1113 |
1114 // Temporary histogram for crbug.com/229650. | 1114 // Temporary histogram for crbug.com/229650. |
1115 CollectCopyHistogramSample(histogram_name, *size); | 1115 CollectCopyHistogramSample(histogram_name, *size); |
1116 | 1116 |
1117 JobEntry* const job_entry = job_map_.Lookup(job_id); | 1117 JobEntry* const job_entry = job_map_.Lookup(job_id); |
1118 if (!job_entry) | 1118 if (!job_entry) |
1119 return; | 1119 return; |
1120 | 1120 |
(...skipping 26 matching lines...) Expand all Loading... |
1147 case TYPE_UPLOAD_NEW_FILE: | 1147 case TYPE_UPLOAD_NEW_FILE: |
1148 case TYPE_UPLOAD_EXISTING_FILE: | 1148 case TYPE_UPLOAD_EXISTING_FILE: |
1149 return FILE_QUEUE; | 1149 return FILE_QUEUE; |
1150 } | 1150 } |
1151 NOTREACHED(); | 1151 NOTREACHED(); |
1152 return FILE_QUEUE; | 1152 return FILE_QUEUE; |
1153 } | 1153 } |
1154 | 1154 |
1155 void JobScheduler::AbortNotRunningJob(JobEntry* job, | 1155 void JobScheduler::AbortNotRunningJob(JobEntry* job, |
1156 google_apis::DriveApiErrorCode error) { | 1156 google_apis::DriveApiErrorCode error) { |
1157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1157 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1158 | 1158 |
1159 const base::TimeDelta elapsed = base::Time::Now() - job->job_info.start_time; | 1159 const base::TimeDelta elapsed = base::Time::Now() - job->job_info.start_time; |
1160 const QueueType queue_type = GetJobQueueType(job->job_info.job_type); | 1160 const QueueType queue_type = GetJobQueueType(job->job_info.job_type); |
1161 logger_->Log(logging::LOG_INFO, | 1161 logger_->Log(logging::LOG_INFO, |
1162 "Job aborted: %s => %s (elapsed time: %sms) - %s", | 1162 "Job aborted: %s => %s (elapsed time: %sms) - %s", |
1163 job->job_info.ToString().c_str(), | 1163 job->job_info.ToString().c_str(), |
1164 DriveApiErrorCodeToString(error).c_str(), | 1164 DriveApiErrorCodeToString(error).c_str(), |
1165 base::Int64ToString(elapsed.InMilliseconds()).c_str(), | 1165 base::Int64ToString(elapsed.InMilliseconds()).c_str(), |
1166 GetQueueInfo(queue_type).c_str()); | 1166 GetQueueInfo(queue_type).c_str()); |
1167 | 1167 |
1168 base::Callback<void(google_apis::DriveApiErrorCode)> callback = | 1168 base::Callback<void(google_apis::DriveApiErrorCode)> callback = |
1169 job->abort_callback; | 1169 job->abort_callback; |
1170 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id); | 1170 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job->job_info.job_id); |
1171 NotifyJobDone(job->job_info, error); | 1171 NotifyJobDone(job->job_info, error); |
1172 job_map_.Remove(job->job_info.job_id); | 1172 job_map_.Remove(job->job_info.job_id); |
1173 base::MessageLoopProxy::current()->PostTask(FROM_HERE, | 1173 base::MessageLoopProxy::current()->PostTask(FROM_HERE, |
1174 base::Bind(callback, error)); | 1174 base::Bind(callback, error)); |
1175 } | 1175 } |
1176 | 1176 |
1177 void JobScheduler::NotifyJobAdded(const JobInfo& job_info) { | 1177 void JobScheduler::NotifyJobAdded(const JobInfo& job_info) { |
1178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1178 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1179 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobAdded(job_info)); | 1179 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobAdded(job_info)); |
1180 } | 1180 } |
1181 | 1181 |
1182 void JobScheduler::NotifyJobDone(const JobInfo& job_info, | 1182 void JobScheduler::NotifyJobDone(const JobInfo& job_info, |
1183 google_apis::DriveApiErrorCode error) { | 1183 google_apis::DriveApiErrorCode error) { |
1184 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1184 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1185 FOR_EACH_OBSERVER(JobListObserver, observer_list_, | 1185 FOR_EACH_OBSERVER(JobListObserver, observer_list_, |
1186 OnJobDone(job_info, GDataToFileError(error))); | 1186 OnJobDone(job_info, GDataToFileError(error))); |
1187 } | 1187 } |
1188 | 1188 |
1189 void JobScheduler::NotifyJobUpdated(const JobInfo& job_info) { | 1189 void JobScheduler::NotifyJobUpdated(const JobInfo& job_info) { |
1190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 1190 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1191 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobUpdated(job_info)); | 1191 FOR_EACH_OBSERVER(JobListObserver, observer_list_, OnJobUpdated(job_info)); |
1192 } | 1192 } |
1193 | 1193 |
1194 std::string JobScheduler::GetQueueInfo(QueueType type) const { | 1194 std::string JobScheduler::GetQueueInfo(QueueType type) const { |
1195 return QueueTypeToString(type) + " " + queue_[type]->ToString(); | 1195 return QueueTypeToString(type) + " " + queue_[type]->ToString(); |
1196 } | 1196 } |
1197 | 1197 |
1198 // static | 1198 // static |
1199 std::string JobScheduler::QueueTypeToString(QueueType type) { | 1199 std::string JobScheduler::QueueTypeToString(QueueType type) { |
1200 switch (type) { | 1200 switch (type) { |
1201 case METADATA_QUEUE: | 1201 case METADATA_QUEUE: |
1202 return "METADATA_QUEUE"; | 1202 return "METADATA_QUEUE"; |
1203 case FILE_QUEUE: | 1203 case FILE_QUEUE: |
1204 return "FILE_QUEUE"; | 1204 return "FILE_QUEUE"; |
1205 case NUM_QUEUES: | 1205 case NUM_QUEUES: |
1206 break; // This value is just a sentinel. Should never be used. | 1206 break; // This value is just a sentinel. Should never be used. |
1207 } | 1207 } |
1208 NOTREACHED(); | 1208 NOTREACHED(); |
1209 return ""; | 1209 return ""; |
1210 } | 1210 } |
1211 | 1211 |
1212 } // namespace drive | 1212 } // namespace drive |
OLD | NEW |