Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: chrome/browser/chromeos/drive/job_scheduler.cc

Issue 17101020: Support cancellation of non-yet-running jobs in drive::JobScheduler. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698