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