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/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "base/rand_util.h" | 9 #include "base/rand_util.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
82 google_apis::CancelCallback RunResumeUploadFile( | 82 google_apis::CancelCallback RunResumeUploadFile( |
83 DriveUploaderInterface* uploader, | 83 DriveUploaderInterface* uploader, |
84 const ResumeUploadFileParams& params) { | 84 const ResumeUploadFileParams& params) { |
85 return uploader->ResumeUploadFile(params.upload_location, | 85 return uploader->ResumeUploadFile(params.upload_location, |
86 params.local_file_path, | 86 params.local_file_path, |
87 params.content_type, | 87 params.content_type, |
88 params.callback, | 88 params.callback, |
89 params.progress_callback); | 89 params.progress_callback); |
90 } | 90 } |
91 | 91 |
| 92 // Helper for CreateErrorRunCallback. |
| 93 template<typename P1> |
| 94 struct CreateErrorRunCallbackHelper { |
| 95 static void Run( |
| 96 const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback, |
| 97 google_apis::GDataErrorCode error) { |
| 98 callback.Run(error, P1()); |
| 99 } |
| 100 }; |
| 101 |
| 102 template<typename P1> |
| 103 struct CreateErrorRunCallbackHelper<const P1&> { |
| 104 static void Run( |
| 105 const base::Callback<void(google_apis::GDataErrorCode, |
| 106 const P1&)>& callback, |
| 107 google_apis::GDataErrorCode error) { |
| 108 callback.Run(error, P1()); |
| 109 } |
| 110 }; |
| 111 |
| 112 // Returns a callback with the tail parameter bound to its default value. |
| 113 // In other words, returned_callback.Run(error) runs callback.Run(error, T()). |
| 114 template<typename P1> |
| 115 base::Callback<void(google_apis::GDataErrorCode)> CreateErrorRunCallback( |
| 116 const base::Callback<void(google_apis::GDataErrorCode, P1)>& callback) { |
| 117 return base::Bind(&CreateErrorRunCallbackHelper<P1>::Run, callback); |
| 118 } |
| 119 |
92 } // namespace | 120 } // namespace |
93 | 121 |
94 const int JobScheduler::kMaxJobCount[] = { | 122 const int JobScheduler::kMaxJobCount[] = { |
95 5, // METADATA_QUEUE | 123 5, // METADATA_QUEUE |
96 1, // FILE_QUEUE | 124 1, // FILE_QUEUE |
97 }; | 125 }; |
98 | 126 |
99 JobScheduler::JobEntry::JobEntry(JobType type) | 127 JobScheduler::JobEntry::JobEntry(JobType type) |
100 : job_info(type), | 128 : job_info(type), |
101 context(ClientContext(USER_INITIATED)), | 129 context(ClientContext(USER_INITIATED)), |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
156 void JobScheduler::RemoveObserver(JobListObserver* observer) { | 184 void JobScheduler::RemoveObserver(JobListObserver* observer) { |
157 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
158 observer_list_.RemoveObserver(observer); | 186 observer_list_.RemoveObserver(observer); |
159 } | 187 } |
160 | 188 |
161 void JobScheduler::CancelJob(JobID job_id) { | 189 void JobScheduler::CancelJob(JobID job_id) { |
162 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
163 | 191 |
164 JobEntry* job = job_map_.Lookup(job_id); | 192 JobEntry* job = job_map_.Lookup(job_id); |
165 if (job) { | 193 if (job) { |
166 // TODO(kinaba): crbug.com/251116 Support cancelling jobs not yet started. | 194 if (job->job_info.state == STATE_RUNNING) { |
167 if (!job->cancel_callback.is_null()) | 195 // If the job is running an HTTP request, cancel it via |cancel_callback| |
168 job->cancel_callback.Run(); | 196 // returned from the request, and wait for termination in the normal |
| 197 // callback handler, OnJobDone. |
| 198 if (!job->cancel_callback.is_null()) |
| 199 job->cancel_callback.Run(); |
| 200 } else { |
| 201 // Otherwise, just remove from the queue and calls back to the client. |
| 202 base::Callback<void(google_apis::GDataErrorCode)> callback = |
| 203 job->abort_callback; |
| 204 queue_[GetJobQueueType(job->job_info.job_type)]->Remove(job_id); |
| 205 job_map_.Remove(job_id); |
| 206 callback.Run(google_apis::GDATA_CANCELLED); |
| 207 } |
169 } | 208 } |
170 } | 209 } |
171 | 210 |
172 void JobScheduler::CancelAllJobs() { | 211 void JobScheduler::CancelAllJobs() { |
173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 212 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
174 | 213 |
175 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports | 214 // CancelJob may remove the entry from |job_map_|. That's OK. IDMap supports |
176 // removable during iteration. | 215 // removable during iteration. |
177 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) | 216 for (JobIDMap::iterator iter(&job_map_); !iter.IsAtEnd(); iter.Advance()) |
178 CancelJob(iter.GetCurrentKey()); | 217 CancelJob(iter.GetCurrentKey()); |
179 } | 218 } |
180 | 219 |
181 void JobScheduler::GetAboutResource( | 220 void JobScheduler::GetAboutResource( |
182 const google_apis::GetAboutResourceCallback& callback) { | 221 const google_apis::GetAboutResourceCallback& callback) { |
183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 222 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
184 DCHECK(!callback.is_null()); | 223 DCHECK(!callback.is_null()); |
185 | 224 |
186 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); | 225 JobEntry* new_job = CreateNewJob(TYPE_GET_ABOUT_RESOURCE); |
187 new_job->task = base::Bind( | 226 new_job->task = base::Bind( |
188 &DriveServiceInterface::GetAboutResource, | 227 &DriveServiceInterface::GetAboutResource, |
189 base::Unretained(drive_service_), | 228 base::Unretained(drive_service_), |
190 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, | 229 base::Bind(&JobScheduler::OnGetAboutResourceJobDone, |
191 weak_ptr_factory_.GetWeakPtr(), | 230 weak_ptr_factory_.GetWeakPtr(), |
192 new_job->job_info.job_id, | 231 new_job->job_info.job_id, |
193 callback)); | 232 callback)); |
| 233 new_job->abort_callback = CreateErrorRunCallback(callback); |
194 StartJob(new_job); | 234 StartJob(new_job); |
195 } | 235 } |
196 | 236 |
197 void JobScheduler::GetAppList( | 237 void JobScheduler::GetAppList( |
198 const google_apis::GetAppListCallback& callback) { | 238 const google_apis::GetAppListCallback& callback) { |
199 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 239 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
200 DCHECK(!callback.is_null()); | 240 DCHECK(!callback.is_null()); |
201 | 241 |
202 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); | 242 JobEntry* new_job = CreateNewJob(TYPE_GET_APP_LIST); |
203 new_job->task = base::Bind( | 243 new_job->task = base::Bind( |
204 &DriveServiceInterface::GetAppList, | 244 &DriveServiceInterface::GetAppList, |
205 base::Unretained(drive_service_), | 245 base::Unretained(drive_service_), |
206 base::Bind(&JobScheduler::OnGetAppListJobDone, | 246 base::Bind(&JobScheduler::OnGetAppListJobDone, |
207 weak_ptr_factory_.GetWeakPtr(), | 247 weak_ptr_factory_.GetWeakPtr(), |
208 new_job->job_info.job_id, | 248 new_job->job_info.job_id, |
209 callback)); | 249 callback)); |
| 250 new_job->abort_callback = CreateErrorRunCallback(callback); |
210 StartJob(new_job); | 251 StartJob(new_job); |
211 } | 252 } |
212 | 253 |
213 void JobScheduler::GetAllResourceList( | 254 void JobScheduler::GetAllResourceList( |
214 const google_apis::GetResourceListCallback& callback) { | 255 const google_apis::GetResourceListCallback& callback) { |
215 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 256 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
216 DCHECK(!callback.is_null()); | 257 DCHECK(!callback.is_null()); |
217 | 258 |
218 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); | 259 JobEntry* new_job = CreateNewJob(TYPE_GET_ALL_RESOURCE_LIST); |
219 new_job->task = base::Bind( | 260 new_job->task = base::Bind( |
220 &DriveServiceInterface::GetAllResourceList, | 261 &DriveServiceInterface::GetAllResourceList, |
221 base::Unretained(drive_service_), | 262 base::Unretained(drive_service_), |
222 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 263 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
223 weak_ptr_factory_.GetWeakPtr(), | 264 weak_ptr_factory_.GetWeakPtr(), |
224 new_job->job_info.job_id, | 265 new_job->job_info.job_id, |
225 callback)); | 266 callback)); |
| 267 new_job->abort_callback = CreateErrorRunCallback(callback); |
226 StartJob(new_job); | 268 StartJob(new_job); |
227 } | 269 } |
228 | 270 |
229 void JobScheduler::GetResourceListInDirectory( | 271 void JobScheduler::GetResourceListInDirectory( |
230 const std::string& directory_resource_id, | 272 const std::string& directory_resource_id, |
231 const google_apis::GetResourceListCallback& callback) { | 273 const google_apis::GetResourceListCallback& callback) { |
232 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 274 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
233 DCHECK(!callback.is_null()); | 275 DCHECK(!callback.is_null()); |
234 | 276 |
235 JobEntry* new_job = CreateNewJob( | 277 JobEntry* new_job = CreateNewJob( |
236 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); | 278 TYPE_GET_RESOURCE_LIST_IN_DIRECTORY); |
237 new_job->task = base::Bind( | 279 new_job->task = base::Bind( |
238 &DriveServiceInterface::GetResourceListInDirectory, | 280 &DriveServiceInterface::GetResourceListInDirectory, |
239 base::Unretained(drive_service_), | 281 base::Unretained(drive_service_), |
240 directory_resource_id, | 282 directory_resource_id, |
241 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 283 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
242 weak_ptr_factory_.GetWeakPtr(), | 284 weak_ptr_factory_.GetWeakPtr(), |
243 new_job->job_info.job_id, | 285 new_job->job_info.job_id, |
244 callback)); | 286 callback)); |
| 287 new_job->abort_callback = CreateErrorRunCallback(callback); |
245 StartJob(new_job); | 288 StartJob(new_job); |
246 } | 289 } |
247 | 290 |
248 void JobScheduler::Search( | 291 void JobScheduler::Search( |
249 const std::string& search_query, | 292 const std::string& search_query, |
250 const google_apis::GetResourceListCallback& callback) { | 293 const google_apis::GetResourceListCallback& callback) { |
251 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 294 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
252 DCHECK(!callback.is_null()); | 295 DCHECK(!callback.is_null()); |
253 | 296 |
254 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); | 297 JobEntry* new_job = CreateNewJob(TYPE_SEARCH); |
255 new_job->task = base::Bind( | 298 new_job->task = base::Bind( |
256 &DriveServiceInterface::Search, | 299 &DriveServiceInterface::Search, |
257 base::Unretained(drive_service_), | 300 base::Unretained(drive_service_), |
258 search_query, | 301 search_query, |
259 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 302 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
260 weak_ptr_factory_.GetWeakPtr(), | 303 weak_ptr_factory_.GetWeakPtr(), |
261 new_job->job_info.job_id, | 304 new_job->job_info.job_id, |
262 callback)); | 305 callback)); |
| 306 new_job->abort_callback = CreateErrorRunCallback(callback); |
263 StartJob(new_job); | 307 StartJob(new_job); |
264 } | 308 } |
265 | 309 |
266 void JobScheduler::GetChangeList( | 310 void JobScheduler::GetChangeList( |
267 int64 start_changestamp, | 311 int64 start_changestamp, |
268 const google_apis::GetResourceListCallback& callback) { | 312 const google_apis::GetResourceListCallback& callback) { |
269 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 313 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
270 DCHECK(!callback.is_null()); | 314 DCHECK(!callback.is_null()); |
271 | 315 |
272 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); | 316 JobEntry* new_job = CreateNewJob(TYPE_GET_CHANGE_LIST); |
273 new_job->task = base::Bind( | 317 new_job->task = base::Bind( |
274 &DriveServiceInterface::GetChangeList, | 318 &DriveServiceInterface::GetChangeList, |
275 base::Unretained(drive_service_), | 319 base::Unretained(drive_service_), |
276 start_changestamp, | 320 start_changestamp, |
277 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 321 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
278 weak_ptr_factory_.GetWeakPtr(), | 322 weak_ptr_factory_.GetWeakPtr(), |
279 new_job->job_info.job_id, | 323 new_job->job_info.job_id, |
280 callback)); | 324 callback)); |
| 325 new_job->abort_callback = CreateErrorRunCallback(callback); |
281 StartJob(new_job); | 326 StartJob(new_job); |
282 } | 327 } |
283 | 328 |
284 void JobScheduler::ContinueGetResourceList( | 329 void JobScheduler::ContinueGetResourceList( |
285 const GURL& next_url, | 330 const GURL& next_url, |
286 const google_apis::GetResourceListCallback& callback) { | 331 const google_apis::GetResourceListCallback& callback) { |
287 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 332 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
288 DCHECK(!callback.is_null()); | 333 DCHECK(!callback.is_null()); |
289 | 334 |
290 JobEntry* new_job = CreateNewJob(TYPE_CONTINUE_GET_RESOURCE_LIST); | 335 JobEntry* new_job = CreateNewJob(TYPE_CONTINUE_GET_RESOURCE_LIST); |
291 new_job->task = base::Bind( | 336 new_job->task = base::Bind( |
292 &DriveServiceInterface::ContinueGetResourceList, | 337 &DriveServiceInterface::ContinueGetResourceList, |
293 base::Unretained(drive_service_), | 338 base::Unretained(drive_service_), |
294 next_url, | 339 next_url, |
295 base::Bind(&JobScheduler::OnGetResourceListJobDone, | 340 base::Bind(&JobScheduler::OnGetResourceListJobDone, |
296 weak_ptr_factory_.GetWeakPtr(), | 341 weak_ptr_factory_.GetWeakPtr(), |
297 new_job->job_info.job_id, | 342 new_job->job_info.job_id, |
298 callback)); | 343 callback)); |
| 344 new_job->abort_callback = CreateErrorRunCallback(callback); |
299 StartJob(new_job); | 345 StartJob(new_job); |
300 } | 346 } |
301 | 347 |
302 void JobScheduler::GetResourceEntry( | 348 void JobScheduler::GetResourceEntry( |
303 const std::string& resource_id, | 349 const std::string& resource_id, |
304 const ClientContext& context, | 350 const ClientContext& context, |
305 const google_apis::GetResourceEntryCallback& callback) { | 351 const google_apis::GetResourceEntryCallback& callback) { |
306 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 352 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
307 DCHECK(!callback.is_null()); | 353 DCHECK(!callback.is_null()); |
308 | 354 |
309 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); | 355 JobEntry* new_job = CreateNewJob(TYPE_GET_RESOURCE_ENTRY); |
310 new_job->context = context; | 356 new_job->context = context; |
311 new_job->task = base::Bind( | 357 new_job->task = base::Bind( |
312 &DriveServiceInterface::GetResourceEntry, | 358 &DriveServiceInterface::GetResourceEntry, |
313 base::Unretained(drive_service_), | 359 base::Unretained(drive_service_), |
314 resource_id, | 360 resource_id, |
315 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 361 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
316 weak_ptr_factory_.GetWeakPtr(), | 362 weak_ptr_factory_.GetWeakPtr(), |
317 new_job->job_info.job_id, | 363 new_job->job_info.job_id, |
318 callback)); | 364 callback)); |
| 365 new_job->abort_callback = CreateErrorRunCallback(callback); |
319 StartJob(new_job); | 366 StartJob(new_job); |
320 } | 367 } |
321 | 368 |
322 void JobScheduler::DeleteResource( | 369 void JobScheduler::DeleteResource( |
323 const std::string& resource_id, | 370 const std::string& resource_id, |
324 const google_apis::EntryActionCallback& callback) { | 371 const google_apis::EntryActionCallback& callback) { |
325 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 372 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
326 DCHECK(!callback.is_null()); | 373 DCHECK(!callback.is_null()); |
327 | 374 |
328 JobEntry* new_job = CreateNewJob(TYPE_DELETE_RESOURCE); | 375 JobEntry* new_job = CreateNewJob(TYPE_DELETE_RESOURCE); |
329 new_job->task = base::Bind( | 376 new_job->task = base::Bind( |
330 &DriveServiceInterface::DeleteResource, | 377 &DriveServiceInterface::DeleteResource, |
331 base::Unretained(drive_service_), | 378 base::Unretained(drive_service_), |
332 resource_id, | 379 resource_id, |
333 "", // etag | 380 "", // etag |
334 base::Bind(&JobScheduler::OnEntryActionJobDone, | 381 base::Bind(&JobScheduler::OnEntryActionJobDone, |
335 weak_ptr_factory_.GetWeakPtr(), | 382 weak_ptr_factory_.GetWeakPtr(), |
336 new_job->job_info.job_id, | 383 new_job->job_info.job_id, |
337 callback)); | 384 callback)); |
| 385 new_job->abort_callback = callback; |
338 StartJob(new_job); | 386 StartJob(new_job); |
339 } | 387 } |
340 | 388 |
341 void JobScheduler::CopyResource( | 389 void JobScheduler::CopyResource( |
342 const std::string& resource_id, | 390 const std::string& resource_id, |
343 const std::string& parent_resource_id, | 391 const std::string& parent_resource_id, |
344 const std::string& new_name, | 392 const std::string& new_name, |
345 const google_apis::GetResourceEntryCallback& callback) { | 393 const google_apis::GetResourceEntryCallback& callback) { |
346 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 394 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
347 DCHECK(!callback.is_null()); | 395 DCHECK(!callback.is_null()); |
348 | 396 |
349 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); | 397 JobEntry* new_job = CreateNewJob(TYPE_COPY_RESOURCE); |
350 new_job->task = base::Bind( | 398 new_job->task = base::Bind( |
351 &DriveServiceInterface::CopyResource, | 399 &DriveServiceInterface::CopyResource, |
352 base::Unretained(drive_service_), | 400 base::Unretained(drive_service_), |
353 resource_id, | 401 resource_id, |
354 parent_resource_id, | 402 parent_resource_id, |
355 new_name, | 403 new_name, |
356 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 404 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
357 weak_ptr_factory_.GetWeakPtr(), | 405 weak_ptr_factory_.GetWeakPtr(), |
358 new_job->job_info.job_id, | 406 new_job->job_info.job_id, |
359 callback)); | 407 callback)); |
| 408 new_job->abort_callback = CreateErrorRunCallback(callback); |
360 StartJob(new_job); | 409 StartJob(new_job); |
361 } | 410 } |
362 | 411 |
363 void JobScheduler::CopyHostedDocument( | 412 void JobScheduler::CopyHostedDocument( |
364 const std::string& resource_id, | 413 const std::string& resource_id, |
365 const std::string& new_name, | 414 const std::string& new_name, |
366 const google_apis::GetResourceEntryCallback& callback) { | 415 const google_apis::GetResourceEntryCallback& callback) { |
367 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 416 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
368 DCHECK(!callback.is_null()); | 417 DCHECK(!callback.is_null()); |
369 | 418 |
370 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); | 419 JobEntry* new_job = CreateNewJob(TYPE_COPY_HOSTED_DOCUMENT); |
371 new_job->task = base::Bind( | 420 new_job->task = base::Bind( |
372 &DriveServiceInterface::CopyHostedDocument, | 421 &DriveServiceInterface::CopyHostedDocument, |
373 base::Unretained(drive_service_), | 422 base::Unretained(drive_service_), |
374 resource_id, | 423 resource_id, |
375 new_name, | 424 new_name, |
376 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 425 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
377 weak_ptr_factory_.GetWeakPtr(), | 426 weak_ptr_factory_.GetWeakPtr(), |
378 new_job->job_info.job_id, | 427 new_job->job_info.job_id, |
379 callback)); | 428 callback)); |
| 429 new_job->abort_callback = CreateErrorRunCallback(callback); |
380 StartJob(new_job); | 430 StartJob(new_job); |
381 } | 431 } |
382 | 432 |
383 void JobScheduler::RenameResource( | 433 void JobScheduler::RenameResource( |
384 const std::string& resource_id, | 434 const std::string& resource_id, |
385 const std::string& new_name, | 435 const std::string& new_name, |
386 const google_apis::EntryActionCallback& callback) { | 436 const google_apis::EntryActionCallback& callback) { |
387 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 437 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
388 DCHECK(!callback.is_null()); | 438 DCHECK(!callback.is_null()); |
389 | 439 |
390 JobEntry* new_job = CreateNewJob(TYPE_RENAME_RESOURCE); | 440 JobEntry* new_job = CreateNewJob(TYPE_RENAME_RESOURCE); |
391 new_job->task = base::Bind( | 441 new_job->task = base::Bind( |
392 &DriveServiceInterface::RenameResource, | 442 &DriveServiceInterface::RenameResource, |
393 base::Unretained(drive_service_), | 443 base::Unretained(drive_service_), |
394 resource_id, | 444 resource_id, |
395 new_name, | 445 new_name, |
396 base::Bind(&JobScheduler::OnEntryActionJobDone, | 446 base::Bind(&JobScheduler::OnEntryActionJobDone, |
397 weak_ptr_factory_.GetWeakPtr(), | 447 weak_ptr_factory_.GetWeakPtr(), |
398 new_job->job_info.job_id, | 448 new_job->job_info.job_id, |
399 callback)); | 449 callback)); |
| 450 new_job->abort_callback = callback; |
400 StartJob(new_job); | 451 StartJob(new_job); |
401 } | 452 } |
402 | 453 |
403 void JobScheduler::TouchResource( | 454 void JobScheduler::TouchResource( |
404 const std::string& resource_id, | 455 const std::string& resource_id, |
405 const base::Time& modified_date, | 456 const base::Time& modified_date, |
406 const base::Time& last_viewed_by_me_date, | 457 const base::Time& last_viewed_by_me_date, |
407 const google_apis::GetResourceEntryCallback& callback) { | 458 const google_apis::GetResourceEntryCallback& callback) { |
408 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 459 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
409 DCHECK(!callback.is_null()); | 460 DCHECK(!callback.is_null()); |
410 | 461 |
411 JobEntry* new_job = CreateNewJob(TYPE_TOUCH_RESOURCE); | 462 JobEntry* new_job = CreateNewJob(TYPE_TOUCH_RESOURCE); |
412 new_job->task = base::Bind( | 463 new_job->task = base::Bind( |
413 &DriveServiceInterface::TouchResource, | 464 &DriveServiceInterface::TouchResource, |
414 base::Unretained(drive_service_), | 465 base::Unretained(drive_service_), |
415 resource_id, | 466 resource_id, |
416 modified_date, | 467 modified_date, |
417 last_viewed_by_me_date, | 468 last_viewed_by_me_date, |
418 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 469 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
419 weak_ptr_factory_.GetWeakPtr(), | 470 weak_ptr_factory_.GetWeakPtr(), |
420 new_job->job_info.job_id, | 471 new_job->job_info.job_id, |
421 callback)); | 472 callback)); |
| 473 new_job->abort_callback = CreateErrorRunCallback(callback); |
422 StartJob(new_job); | 474 StartJob(new_job); |
423 } | 475 } |
424 | 476 |
425 void JobScheduler::AddResourceToDirectory( | 477 void JobScheduler::AddResourceToDirectory( |
426 const std::string& parent_resource_id, | 478 const std::string& parent_resource_id, |
427 const std::string& resource_id, | 479 const std::string& resource_id, |
428 const google_apis::EntryActionCallback& callback) { | 480 const google_apis::EntryActionCallback& callback) { |
429 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 481 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
430 DCHECK(!callback.is_null()); | 482 DCHECK(!callback.is_null()); |
431 | 483 |
432 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); | 484 JobEntry* new_job = CreateNewJob(TYPE_ADD_RESOURCE_TO_DIRECTORY); |
433 new_job->task = base::Bind( | 485 new_job->task = base::Bind( |
434 &DriveServiceInterface::AddResourceToDirectory, | 486 &DriveServiceInterface::AddResourceToDirectory, |
435 base::Unretained(drive_service_), | 487 base::Unretained(drive_service_), |
436 parent_resource_id, | 488 parent_resource_id, |
437 resource_id, | 489 resource_id, |
438 base::Bind(&JobScheduler::OnEntryActionJobDone, | 490 base::Bind(&JobScheduler::OnEntryActionJobDone, |
439 weak_ptr_factory_.GetWeakPtr(), | 491 weak_ptr_factory_.GetWeakPtr(), |
440 new_job->job_info.job_id, | 492 new_job->job_info.job_id, |
441 callback)); | 493 callback)); |
| 494 new_job->abort_callback = callback; |
442 StartJob(new_job); | 495 StartJob(new_job); |
443 } | 496 } |
444 | 497 |
445 void JobScheduler::RemoveResourceFromDirectory( | 498 void JobScheduler::RemoveResourceFromDirectory( |
446 const std::string& parent_resource_id, | 499 const std::string& parent_resource_id, |
447 const std::string& resource_id, | 500 const std::string& resource_id, |
448 const google_apis::EntryActionCallback& callback) { | 501 const google_apis::EntryActionCallback& callback) { |
449 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 502 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
450 | 503 |
451 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); | 504 JobEntry* new_job = CreateNewJob(TYPE_REMOVE_RESOURCE_FROM_DIRECTORY); |
452 new_job->task = base::Bind( | 505 new_job->task = base::Bind( |
453 &DriveServiceInterface::RemoveResourceFromDirectory, | 506 &DriveServiceInterface::RemoveResourceFromDirectory, |
454 base::Unretained(drive_service_), | 507 base::Unretained(drive_service_), |
455 parent_resource_id, | 508 parent_resource_id, |
456 resource_id, | 509 resource_id, |
457 base::Bind(&JobScheduler::OnEntryActionJobDone, | 510 base::Bind(&JobScheduler::OnEntryActionJobDone, |
458 weak_ptr_factory_.GetWeakPtr(), | 511 weak_ptr_factory_.GetWeakPtr(), |
459 new_job->job_info.job_id, | 512 new_job->job_info.job_id, |
460 callback)); | 513 callback)); |
| 514 new_job->abort_callback = callback; |
461 StartJob(new_job); | 515 StartJob(new_job); |
462 } | 516 } |
463 | 517 |
464 void JobScheduler::AddNewDirectory( | 518 void JobScheduler::AddNewDirectory( |
465 const std::string& parent_resource_id, | 519 const std::string& parent_resource_id, |
466 const std::string& directory_name, | 520 const std::string& directory_name, |
467 const google_apis::GetResourceEntryCallback& callback) { | 521 const google_apis::GetResourceEntryCallback& callback) { |
468 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 522 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
469 | 523 |
470 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); | 524 JobEntry* new_job = CreateNewJob(TYPE_ADD_NEW_DIRECTORY); |
471 new_job->task = base::Bind( | 525 new_job->task = base::Bind( |
472 &DriveServiceInterface::AddNewDirectory, | 526 &DriveServiceInterface::AddNewDirectory, |
473 base::Unretained(drive_service_), | 527 base::Unretained(drive_service_), |
474 parent_resource_id, | 528 parent_resource_id, |
475 directory_name, | 529 directory_name, |
476 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, | 530 base::Bind(&JobScheduler::OnGetResourceEntryJobDone, |
477 weak_ptr_factory_.GetWeakPtr(), | 531 weak_ptr_factory_.GetWeakPtr(), |
478 new_job->job_info.job_id, | 532 new_job->job_info.job_id, |
479 callback)); | 533 callback)); |
| 534 new_job->abort_callback = CreateErrorRunCallback(callback); |
480 StartJob(new_job); | 535 StartJob(new_job); |
481 } | 536 } |
482 | 537 |
483 JobID JobScheduler::DownloadFile( | 538 JobID JobScheduler::DownloadFile( |
484 const base::FilePath& virtual_path, | 539 const base::FilePath& virtual_path, |
485 const base::FilePath& local_cache_path, | 540 const base::FilePath& local_cache_path, |
486 const GURL& download_url, | 541 const GURL& download_url, |
487 const ClientContext& context, | 542 const ClientContext& context, |
488 const google_apis::DownloadActionCallback& download_action_callback, | 543 const google_apis::DownloadActionCallback& download_action_callback, |
489 const google_apis::GetContentCallback& get_content_callback) { | 544 const google_apis::GetContentCallback& get_content_callback) { |
490 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 545 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
491 | 546 |
492 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); | 547 JobEntry* new_job = CreateNewJob(TYPE_DOWNLOAD_FILE); |
493 new_job->job_info.file_path = virtual_path; | 548 new_job->job_info.file_path = virtual_path; |
494 new_job->context = context; | 549 new_job->context = context; |
495 new_job->task = base::Bind( | 550 new_job->task = base::Bind( |
496 &DriveServiceInterface::DownloadFile, | 551 &DriveServiceInterface::DownloadFile, |
497 base::Unretained(drive_service_), | 552 base::Unretained(drive_service_), |
498 local_cache_path, | 553 local_cache_path, |
499 download_url, | 554 download_url, |
500 base::Bind(&JobScheduler::OnDownloadActionJobDone, | 555 base::Bind(&JobScheduler::OnDownloadActionJobDone, |
501 weak_ptr_factory_.GetWeakPtr(), | 556 weak_ptr_factory_.GetWeakPtr(), |
502 new_job->job_info.job_id, | 557 new_job->job_info.job_id, |
503 download_action_callback), | 558 download_action_callback), |
504 get_content_callback, | 559 get_content_callback, |
505 base::Bind(&JobScheduler::UpdateProgress, | 560 base::Bind(&JobScheduler::UpdateProgress, |
506 weak_ptr_factory_.GetWeakPtr(), | 561 weak_ptr_factory_.GetWeakPtr(), |
507 new_job->job_info.job_id)); | 562 new_job->job_info.job_id)); |
508 | 563 new_job->abort_callback = CreateErrorRunCallback(download_action_callback); |
509 StartJob(new_job); | 564 StartJob(new_job); |
510 return new_job->job_info.job_id; | 565 return new_job->job_info.job_id; |
511 } | 566 } |
512 | 567 |
513 void JobScheduler::UploadNewFile( | 568 void JobScheduler::UploadNewFile( |
514 const std::string& parent_resource_id, | 569 const std::string& parent_resource_id, |
515 const base::FilePath& drive_file_path, | 570 const base::FilePath& drive_file_path, |
516 const base::FilePath& local_file_path, | 571 const base::FilePath& local_file_path, |
517 const std::string& title, | 572 const std::string& title, |
518 const std::string& content_type, | 573 const std::string& content_type, |
(...skipping 17 matching lines...) Expand all Loading... |
536 | 591 |
537 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 592 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
538 weak_ptr_factory_.GetWeakPtr(), | 593 weak_ptr_factory_.GetWeakPtr(), |
539 new_job->job_info.job_id, | 594 new_job->job_info.job_id, |
540 resume_params, | 595 resume_params, |
541 callback); | 596 callback); |
542 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 597 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
543 weak_ptr_factory_.GetWeakPtr(), | 598 weak_ptr_factory_.GetWeakPtr(), |
544 new_job->job_info.job_id); | 599 new_job->job_info.job_id); |
545 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 600 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
546 | 601 new_job->abort_callback = CreateErrorRunCallback(callback); |
547 StartJob(new_job); | 602 StartJob(new_job); |
548 } | 603 } |
549 | 604 |
550 void JobScheduler::UploadExistingFile( | 605 void JobScheduler::UploadExistingFile( |
551 const std::string& resource_id, | 606 const std::string& resource_id, |
552 const base::FilePath& drive_file_path, | 607 const base::FilePath& drive_file_path, |
553 const base::FilePath& local_file_path, | 608 const base::FilePath& local_file_path, |
554 const std::string& content_type, | 609 const std::string& content_type, |
555 const std::string& etag, | 610 const std::string& etag, |
556 const ClientContext& context, | 611 const ClientContext& context, |
(...skipping 16 matching lines...) Expand all Loading... |
573 | 628 |
574 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 629 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
575 weak_ptr_factory_.GetWeakPtr(), | 630 weak_ptr_factory_.GetWeakPtr(), |
576 new_job->job_info.job_id, | 631 new_job->job_info.job_id, |
577 resume_params, | 632 resume_params, |
578 callback); | 633 callback); |
579 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, | 634 params.progress_callback = base::Bind(&JobScheduler::UpdateProgress, |
580 weak_ptr_factory_.GetWeakPtr(), | 635 weak_ptr_factory_.GetWeakPtr(), |
581 new_job->job_info.job_id); | 636 new_job->job_info.job_id); |
582 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); | 637 new_job->task = base::Bind(&RunUploadExistingFile, uploader_.get(), params); |
583 | 638 new_job->abort_callback = CreateErrorRunCallback(callback); |
584 StartJob(new_job); | 639 StartJob(new_job); |
585 } | 640 } |
586 | 641 |
587 void JobScheduler::CreateFile( | 642 void JobScheduler::CreateFile( |
588 const std::string& parent_resource_id, | 643 const std::string& parent_resource_id, |
589 const base::FilePath& drive_file_path, | 644 const base::FilePath& drive_file_path, |
590 const std::string& title, | 645 const std::string& title, |
591 const std::string& content_type, | 646 const std::string& content_type, |
592 const ClientContext& context, | 647 const ClientContext& context, |
593 const google_apis::GetResourceEntryCallback& callback) { | 648 const google_apis::GetResourceEntryCallback& callback) { |
(...skipping 16 matching lines...) Expand all Loading... |
610 resume_params.content_type = params.content_type; | 665 resume_params.content_type = params.content_type; |
611 | 666 |
612 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, | 667 params.callback = base::Bind(&JobScheduler::OnUploadCompletionJobDone, |
613 weak_ptr_factory_.GetWeakPtr(), | 668 weak_ptr_factory_.GetWeakPtr(), |
614 new_job->job_info.job_id, | 669 new_job->job_info.job_id, |
615 resume_params, | 670 resume_params, |
616 callback); | 671 callback); |
617 params.progress_callback = google_apis::ProgressCallback(); | 672 params.progress_callback = google_apis::ProgressCallback(); |
618 | 673 |
619 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); | 674 new_job->task = base::Bind(&RunUploadNewFile, uploader_.get(), params); |
620 | 675 new_job->abort_callback = CreateErrorRunCallback(callback); |
621 StartJob(new_job); | 676 StartJob(new_job); |
622 } | 677 } |
623 | 678 |
624 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { | 679 JobScheduler::JobEntry* JobScheduler::CreateNewJob(JobType type) { |
625 JobEntry* job = new JobEntry(type); | 680 JobEntry* job = new JobEntry(type); |
626 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. | 681 job->job_info.job_id = job_map_.Add(job); // Takes the ownership of |job|. |
627 return job; | 682 return job; |
628 } | 683 } |
629 | 684 |
630 void JobScheduler::StartJob(JobEntry* job) { | 685 void JobScheduler::StartJob(JobEntry* job) { |
(...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
969 case FILE_QUEUE: | 1024 case FILE_QUEUE: |
970 return "FILE_QUEUE"; | 1025 return "FILE_QUEUE"; |
971 case NUM_QUEUES: | 1026 case NUM_QUEUES: |
972 break; // This value is just a sentinel. Should never be used. | 1027 break; // This value is just a sentinel. Should never be used. |
973 } | 1028 } |
974 NOTREACHED(); | 1029 NOTREACHED(); |
975 return ""; | 1030 return ""; |
976 } | 1031 } |
977 | 1032 |
978 } // namespace drive | 1033 } // namespace drive |
OLD | NEW |