| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/extensions/file_manager/private_api_drive.h" | 5 #include "chrome/browser/chromeos/extensions/file_manager/private_api_drive.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/chromeos/drive/drive_integration_service.h" | 9 #include "chrome/browser/chromeos/drive/drive_integration_service.h" |
| 10 #include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h" | 10 #include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h" |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "webkit/common/fileapi/file_system_util.h" | 28 #include "webkit/common/fileapi/file_system_util.h" |
| 29 | 29 |
| 30 using content::BrowserThread; | 30 using content::BrowserThread; |
| 31 | 31 |
| 32 using file_manager::util::EntryDefinition; | 32 using file_manager::util::EntryDefinition; |
| 33 using file_manager::util::EntryDefinitionCallback; | 33 using file_manager::util::EntryDefinitionCallback; |
| 34 using file_manager::util::EntryDefinitionList; | 34 using file_manager::util::EntryDefinitionList; |
| 35 using file_manager::util::EntryDefinitionListCallback; | 35 using file_manager::util::EntryDefinitionListCallback; |
| 36 using file_manager::util::FileDefinition; | 36 using file_manager::util::FileDefinition; |
| 37 using file_manager::util::FileDefinitionList; | 37 using file_manager::util::FileDefinitionList; |
| 38 using extensions::api::file_browser_private::EntryProperties; | 38 using extensions::api::file_manager_private::EntryProperties; |
| 39 | 39 |
| 40 namespace extensions { | 40 namespace extensions { |
| 41 namespace { | 41 namespace { |
| 42 | 42 |
| 43 // List of connection types of drive. | 43 // List of connection types of drive. |
| 44 // Keep this in sync with the DriveConnectionType in common/js/util.js. | 44 // Keep this in sync with the DriveConnectionType in common/js/util.js. |
| 45 const char kDriveConnectionTypeOffline[] = "offline"; | 45 const char kDriveConnectionTypeOffline[] = "offline"; |
| 46 const char kDriveConnectionTypeMetered[] = "metered"; | 46 const char kDriveConnectionTypeMetered[] = "metered"; |
| 47 const char kDriveConnectionTypeOnline[] = "online"; | 47 const char kDriveConnectionTypeOnline[] = "online"; |
| 48 | 48 |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 DCHECK(!callback_.is_null()); | 350 DCHECK(!callback_.is_null()); |
| 351 | 351 |
| 352 callback_.Run(properties_.Pass(), drive::FileErrorToBaseFileError(error)); | 352 callback_.Run(properties_.Pass(), drive::FileErrorToBaseFileError(error)); |
| 353 | 353 |
| 354 delete this; | 354 delete this; |
| 355 } | 355 } |
| 356 }; // class SingleEntryPropertiesGetterForDrive | 356 }; // class SingleEntryPropertiesGetterForDrive |
| 357 | 357 |
| 358 } // namespace | 358 } // namespace |
| 359 | 359 |
| 360 FileBrowserPrivateGetEntryPropertiesFunction:: | 360 FileManagerPrivateGetEntryPropertiesFunction:: |
| 361 FileBrowserPrivateGetEntryPropertiesFunction() | 361 FileManagerPrivateGetEntryPropertiesFunction() |
| 362 : processed_count_(0) { | 362 : processed_count_(0) { |
| 363 } | 363 } |
| 364 | 364 |
| 365 FileBrowserPrivateGetEntryPropertiesFunction:: | 365 FileManagerPrivateGetEntryPropertiesFunction:: |
| 366 ~FileBrowserPrivateGetEntryPropertiesFunction() { | 366 ~FileManagerPrivateGetEntryPropertiesFunction() { |
| 367 } | 367 } |
| 368 | 368 |
| 369 bool FileBrowserPrivateGetEntryPropertiesFunction::RunAsync() { | 369 bool FileManagerPrivateGetEntryPropertiesFunction::RunAsync() { |
| 370 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 370 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 371 | 371 |
| 372 using api::file_browser_private::GetEntryProperties::Params; | 372 using api::file_manager_private::GetEntryProperties::Params; |
| 373 const scoped_ptr<Params> params(Params::Create(*args_)); | 373 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 374 EXTENSION_FUNCTION_VALIDATE(params); | 374 EXTENSION_FUNCTION_VALIDATE(params); |
| 375 | 375 |
| 376 scoped_refptr<storage::FileSystemContext> file_system_context = | 376 scoped_refptr<storage::FileSystemContext> file_system_context = |
| 377 file_manager::util::GetFileSystemContextForRenderViewHost( | 377 file_manager::util::GetFileSystemContextForRenderViewHost( |
| 378 GetProfile(), render_view_host()); | 378 GetProfile(), render_view_host()); |
| 379 | 379 |
| 380 properties_list_.resize(params->file_urls.size()); | 380 properties_list_.resize(params->file_urls.size()); |
| 381 for (size_t i = 0; i < params->file_urls.size(); i++) { | 381 for (size_t i = 0; i < params->file_urls.size(); i++) { |
| 382 const GURL url = GURL(params->file_urls[i]); | 382 const GURL url = GURL(params->file_urls[i]); |
| 383 const storage::FileSystemURL file_system_url = | 383 const storage::FileSystemURL file_system_url = |
| 384 file_system_context->CrackURL(url); | 384 file_system_context->CrackURL(url); |
| 385 switch (file_system_url.type()) { | 385 switch (file_system_url.type()) { |
| 386 case storage::kFileSystemTypeDrive: | 386 case storage::kFileSystemTypeDrive: |
| 387 SingleEntryPropertiesGetterForDrive::Start( | 387 SingleEntryPropertiesGetterForDrive::Start( |
| 388 file_system_url.path(), | 388 file_system_url.path(), |
| 389 GetProfile(), | 389 GetProfile(), |
| 390 base::Bind(&FileBrowserPrivateGetEntryPropertiesFunction:: | 390 base::Bind(&FileManagerPrivateGetEntryPropertiesFunction:: |
| 391 CompleteGetEntryProperties, | 391 CompleteGetEntryProperties, |
| 392 this, | 392 this, |
| 393 i)); | 393 i)); |
| 394 break; | 394 break; |
| 395 case storage::kFileSystemTypeProvided: | 395 case storage::kFileSystemTypeProvided: |
| 396 // TODO(mtomasz): Add support for provided file systems. | 396 // TODO(mtomasz): Add support for provided file systems. |
| 397 NOTIMPLEMENTED(); | 397 NOTIMPLEMENTED(); |
| 398 break; | 398 break; |
| 399 default: | 399 default: |
| 400 LOG(ERROR) << "Not supported file system type."; | 400 LOG(ERROR) << "Not supported file system type."; |
| 401 CompleteGetEntryProperties(i, | 401 CompleteGetEntryProperties(i, |
| 402 make_scoped_ptr(new EntryProperties), | 402 make_scoped_ptr(new EntryProperties), |
| 403 base::File::FILE_ERROR_INVALID_OPERATION); | 403 base::File::FILE_ERROR_INVALID_OPERATION); |
| 404 } | 404 } |
| 405 } | 405 } |
| 406 | 406 |
| 407 return true; | 407 return true; |
| 408 } | 408 } |
| 409 | 409 |
| 410 void FileBrowserPrivateGetEntryPropertiesFunction::CompleteGetEntryProperties( | 410 void FileManagerPrivateGetEntryPropertiesFunction::CompleteGetEntryProperties( |
| 411 size_t index, | 411 size_t index, |
| 412 scoped_ptr<EntryProperties> properties, | 412 scoped_ptr<EntryProperties> properties, |
| 413 base::File::Error error) { | 413 base::File::Error error) { |
| 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 414 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 415 DCHECK(0 <= processed_count_ && processed_count_ < properties_list_.size()); | 415 DCHECK(0 <= processed_count_ && processed_count_ < properties_list_.size()); |
| 416 | 416 |
| 417 properties_list_[index] = make_linked_ptr(properties.release()); | 417 properties_list_[index] = make_linked_ptr(properties.release()); |
| 418 | 418 |
| 419 processed_count_++; | 419 processed_count_++; |
| 420 if (processed_count_ < properties_list_.size()) | 420 if (processed_count_ < properties_list_.size()) |
| 421 return; | 421 return; |
| 422 | 422 |
| 423 results_ = extensions::api::file_browser_private::GetEntryProperties:: | 423 results_ = extensions::api::file_manager_private::GetEntryProperties:: |
| 424 Results::Create(properties_list_); | 424 Results::Create(properties_list_); |
| 425 SendResponse(true); | 425 SendResponse(true); |
| 426 } | 426 } |
| 427 | 427 |
| 428 bool FileBrowserPrivatePinDriveFileFunction::RunAsync() { | 428 bool FileManagerPrivatePinDriveFileFunction::RunAsync() { |
| 429 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 429 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 430 | 430 |
| 431 using extensions::api::file_browser_private::PinDriveFile::Params; | 431 using extensions::api::file_manager_private::PinDriveFile::Params; |
| 432 const scoped_ptr<Params> params(Params::Create(*args_)); | 432 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 433 EXTENSION_FUNCTION_VALIDATE(params); | 433 EXTENSION_FUNCTION_VALIDATE(params); |
| 434 | 434 |
| 435 drive::FileSystemInterface* const file_system = | 435 drive::FileSystemInterface* const file_system = |
| 436 drive::util::GetFileSystemByProfile(GetProfile()); | 436 drive::util::GetFileSystemByProfile(GetProfile()); |
| 437 if (!file_system) // |file_system| is NULL if Drive is disabled. | 437 if (!file_system) // |file_system| is NULL if Drive is disabled. |
| 438 return false; | 438 return false; |
| 439 | 439 |
| 440 const base::FilePath drive_path = | 440 const base::FilePath drive_path = |
| 441 drive::util::ExtractDrivePath(file_manager::util::GetLocalPathFromURL( | 441 drive::util::ExtractDrivePath(file_manager::util::GetLocalPathFromURL( |
| 442 render_view_host(), GetProfile(), GURL(params->file_url))); | 442 render_view_host(), GetProfile(), GURL(params->file_url))); |
| 443 if (params->pin) { | 443 if (params->pin) { |
| 444 file_system->Pin(drive_path, | 444 file_system->Pin(drive_path, |
| 445 base::Bind(&FileBrowserPrivatePinDriveFileFunction:: | 445 base::Bind(&FileManagerPrivatePinDriveFileFunction:: |
| 446 OnPinStateSet, this)); | 446 OnPinStateSet, this)); |
| 447 } else { | 447 } else { |
| 448 file_system->Unpin(drive_path, | 448 file_system->Unpin(drive_path, |
| 449 base::Bind(&FileBrowserPrivatePinDriveFileFunction:: | 449 base::Bind(&FileManagerPrivatePinDriveFileFunction:: |
| 450 OnPinStateSet, this)); | 450 OnPinStateSet, this)); |
| 451 } | 451 } |
| 452 return true; | 452 return true; |
| 453 } | 453 } |
| 454 | 454 |
| 455 void FileBrowserPrivatePinDriveFileFunction:: | 455 void FileManagerPrivatePinDriveFileFunction:: |
| 456 OnPinStateSet(drive::FileError error) { | 456 OnPinStateSet(drive::FileError error) { |
| 457 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 457 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 458 | 458 |
| 459 if (error == drive::FILE_ERROR_OK) { | 459 if (error == drive::FILE_ERROR_OK) { |
| 460 SendResponse(true); | 460 SendResponse(true); |
| 461 } else { | 461 } else { |
| 462 SetError(drive::FileErrorToString(error)); | 462 SetError(drive::FileErrorToString(error)); |
| 463 SendResponse(false); | 463 SendResponse(false); |
| 464 } | 464 } |
| 465 } | 465 } |
| 466 | 466 |
| 467 FileBrowserPrivateGetDriveFilesFunction:: | 467 FileManagerPrivateGetDriveFilesFunction:: |
| 468 FileBrowserPrivateGetDriveFilesFunction() { | 468 FileManagerPrivateGetDriveFilesFunction() { |
| 469 } | 469 } |
| 470 | 470 |
| 471 FileBrowserPrivateGetDriveFilesFunction:: | 471 FileManagerPrivateGetDriveFilesFunction:: |
| 472 ~FileBrowserPrivateGetDriveFilesFunction() { | 472 ~FileManagerPrivateGetDriveFilesFunction() { |
| 473 } | 473 } |
| 474 | 474 |
| 475 bool FileBrowserPrivateGetDriveFilesFunction::RunAsync() { | 475 bool FileManagerPrivateGetDriveFilesFunction::RunAsync() { |
| 476 using extensions::api::file_browser_private::GetDriveFiles::Params; | 476 using extensions::api::file_manager_private::GetDriveFiles::Params; |
| 477 const scoped_ptr<Params> params(Params::Create(*args_)); | 477 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 478 EXTENSION_FUNCTION_VALIDATE(params); | 478 EXTENSION_FUNCTION_VALIDATE(params); |
| 479 | 479 |
| 480 // Convert the list of strings to a list of GURLs. | 480 // Convert the list of strings to a list of GURLs. |
| 481 for (size_t i = 0; i < params->file_urls.size(); ++i) { | 481 for (size_t i = 0; i < params->file_urls.size(); ++i) { |
| 482 const base::FilePath path = file_manager::util::GetLocalPathFromURL( | 482 const base::FilePath path = file_manager::util::GetLocalPathFromURL( |
| 483 render_view_host(), GetProfile(), GURL(params->file_urls[i])); | 483 render_view_host(), GetProfile(), GURL(params->file_urls[i])); |
| 484 DCHECK(drive::util::IsUnderDriveMountPoint(path)); | 484 DCHECK(drive::util::IsUnderDriveMountPoint(path)); |
| 485 base::FilePath drive_path = drive::util::ExtractDrivePath(path); | 485 base::FilePath drive_path = drive::util::ExtractDrivePath(path); |
| 486 remaining_drive_paths_.push(drive_path); | 486 remaining_drive_paths_.push(drive_path); |
| 487 } | 487 } |
| 488 | 488 |
| 489 GetFileOrSendResponse(); | 489 GetFileOrSendResponse(); |
| 490 return true; | 490 return true; |
| 491 } | 491 } |
| 492 | 492 |
| 493 void FileBrowserPrivateGetDriveFilesFunction::GetFileOrSendResponse() { | 493 void FileManagerPrivateGetDriveFilesFunction::GetFileOrSendResponse() { |
| 494 // Send the response if all files are obtained. | 494 // Send the response if all files are obtained. |
| 495 if (remaining_drive_paths_.empty()) { | 495 if (remaining_drive_paths_.empty()) { |
| 496 results_ = extensions::api::file_browser_private:: | 496 results_ = extensions::api::file_manager_private:: |
| 497 GetDriveFiles::Results::Create(local_paths_); | 497 GetDriveFiles::Results::Create(local_paths_); |
| 498 SendResponse(true); | 498 SendResponse(true); |
| 499 return; | 499 return; |
| 500 } | 500 } |
| 501 | 501 |
| 502 // Get the file on the top of the queue. | 502 // Get the file on the top of the queue. |
| 503 base::FilePath drive_path = remaining_drive_paths_.front(); | 503 base::FilePath drive_path = remaining_drive_paths_.front(); |
| 504 | 504 |
| 505 drive::FileSystemInterface* file_system = | 505 drive::FileSystemInterface* file_system = |
| 506 drive::util::GetFileSystemByProfile(GetProfile()); | 506 drive::util::GetFileSystemByProfile(GetProfile()); |
| 507 if (!file_system) { | 507 if (!file_system) { |
| 508 // |file_system| is NULL if Drive is disabled or not mounted. | 508 // |file_system| is NULL if Drive is disabled or not mounted. |
| 509 OnFileReady(drive::FILE_ERROR_FAILED, drive_path, | 509 OnFileReady(drive::FILE_ERROR_FAILED, drive_path, |
| 510 scoped_ptr<drive::ResourceEntry>()); | 510 scoped_ptr<drive::ResourceEntry>()); |
| 511 return; | 511 return; |
| 512 } | 512 } |
| 513 | 513 |
| 514 file_system->GetFile( | 514 file_system->GetFile( |
| 515 drive_path, | 515 drive_path, |
| 516 base::Bind(&FileBrowserPrivateGetDriveFilesFunction::OnFileReady, this)); | 516 base::Bind(&FileManagerPrivateGetDriveFilesFunction::OnFileReady, this)); |
| 517 } | 517 } |
| 518 | 518 |
| 519 | 519 |
| 520 void FileBrowserPrivateGetDriveFilesFunction::OnFileReady( | 520 void FileManagerPrivateGetDriveFilesFunction::OnFileReady( |
| 521 drive::FileError error, | 521 drive::FileError error, |
| 522 const base::FilePath& local_path, | 522 const base::FilePath& local_path, |
| 523 scoped_ptr<drive::ResourceEntry> entry) { | 523 scoped_ptr<drive::ResourceEntry> entry) { |
| 524 base::FilePath drive_path = remaining_drive_paths_.front(); | 524 base::FilePath drive_path = remaining_drive_paths_.front(); |
| 525 | 525 |
| 526 if (error == drive::FILE_ERROR_OK) { | 526 if (error == drive::FILE_ERROR_OK) { |
| 527 local_paths_.push_back(local_path.AsUTF8Unsafe()); | 527 local_paths_.push_back(local_path.AsUTF8Unsafe()); |
| 528 DVLOG(1) << "Got " << drive_path.value() << " as " << local_path.value(); | 528 DVLOG(1) << "Got " << drive_path.value() << " as " << local_path.value(); |
| 529 } else { | 529 } else { |
| 530 local_paths_.push_back(""); | 530 local_paths_.push_back(""); |
| 531 DVLOG(1) << "Failed to get " << drive_path.value() | 531 DVLOG(1) << "Failed to get " << drive_path.value() |
| 532 << " with error code: " << error; | 532 << " with error code: " << error; |
| 533 } | 533 } |
| 534 | 534 |
| 535 remaining_drive_paths_.pop(); | 535 remaining_drive_paths_.pop(); |
| 536 | 536 |
| 537 // Start getting the next file. | 537 // Start getting the next file. |
| 538 GetFileOrSendResponse(); | 538 GetFileOrSendResponse(); |
| 539 } | 539 } |
| 540 | 540 |
| 541 bool FileBrowserPrivateCancelFileTransfersFunction::RunAsync() { | 541 bool FileManagerPrivateCancelFileTransfersFunction::RunAsync() { |
| 542 using extensions::api::file_browser_private::CancelFileTransfers::Params; | 542 using extensions::api::file_manager_private::CancelFileTransfers::Params; |
| 543 const scoped_ptr<Params> params(Params::Create(*args_)); | 543 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 544 EXTENSION_FUNCTION_VALIDATE(params); | 544 EXTENSION_FUNCTION_VALIDATE(params); |
| 545 | 545 |
| 546 drive::DriveIntegrationService* integration_service = | 546 drive::DriveIntegrationService* integration_service = |
| 547 drive::DriveIntegrationServiceFactory::FindForProfile(GetProfile()); | 547 drive::DriveIntegrationServiceFactory::FindForProfile(GetProfile()); |
| 548 if (!integration_service || !integration_service->IsMounted()) | 548 if (!integration_service || !integration_service->IsMounted()) |
| 549 return false; | 549 return false; |
| 550 | 550 |
| 551 // Create the mapping from file path to job ID. | 551 // Create the mapping from file path to job ID. |
| 552 drive::JobListInterface* job_list = integration_service->job_list(); | 552 drive::JobListInterface* job_list = integration_service->job_list(); |
| 553 DCHECK(job_list); | 553 DCHECK(job_list); |
| 554 std::vector<drive::JobInfo> jobs = job_list->GetJobInfoList(); | 554 std::vector<drive::JobInfo> jobs = job_list->GetJobInfoList(); |
| 555 | 555 |
| 556 typedef std::map<base::FilePath, std::vector<drive::JobID> > PathToIdMap; | 556 typedef std::map<base::FilePath, std::vector<drive::JobID> > PathToIdMap; |
| 557 PathToIdMap path_to_id_map; | 557 PathToIdMap path_to_id_map; |
| 558 for (size_t i = 0; i < jobs.size(); ++i) { | 558 for (size_t i = 0; i < jobs.size(); ++i) { |
| 559 if (drive::IsActiveFileTransferJobInfo(jobs[i])) | 559 if (drive::IsActiveFileTransferJobInfo(jobs[i])) |
| 560 path_to_id_map[jobs[i].file_path].push_back(jobs[i].job_id); | 560 path_to_id_map[jobs[i].file_path].push_back(jobs[i].job_id); |
| 561 } | 561 } |
| 562 | 562 |
| 563 // Cancel by Job ID. | 563 // Cancel by Job ID. |
| 564 std::vector<linked_ptr<api::file_browser_private:: | 564 std::vector<linked_ptr<api::file_manager_private:: |
| 565 FileTransferCancelStatus> > responses; | 565 FileTransferCancelStatus> > responses; |
| 566 for (size_t i = 0; i < params->file_urls.size(); ++i) { | 566 for (size_t i = 0; i < params->file_urls.size(); ++i) { |
| 567 base::FilePath file_path = file_manager::util::GetLocalPathFromURL( | 567 base::FilePath file_path = file_manager::util::GetLocalPathFromURL( |
| 568 render_view_host(), GetProfile(), GURL(params->file_urls[i])); | 568 render_view_host(), GetProfile(), GURL(params->file_urls[i])); |
| 569 if (file_path.empty()) | 569 if (file_path.empty()) |
| 570 continue; | 570 continue; |
| 571 | 571 |
| 572 DCHECK(drive::util::IsUnderDriveMountPoint(file_path)); | 572 DCHECK(drive::util::IsUnderDriveMountPoint(file_path)); |
| 573 file_path = drive::util::ExtractDrivePath(file_path); | 573 file_path = drive::util::ExtractDrivePath(file_path); |
| 574 | 574 |
| 575 // Cancel all the jobs for the file. | 575 // Cancel all the jobs for the file. |
| 576 PathToIdMap::iterator it = path_to_id_map.find(file_path); | 576 PathToIdMap::iterator it = path_to_id_map.find(file_path); |
| 577 if (it != path_to_id_map.end()) { | 577 if (it != path_to_id_map.end()) { |
| 578 for (size_t i = 0; i < it->second.size(); ++i) | 578 for (size_t i = 0; i < it->second.size(); ++i) |
| 579 job_list->CancelJob(it->second[i]); | 579 job_list->CancelJob(it->second[i]); |
| 580 } | 580 } |
| 581 linked_ptr<api::file_browser_private::FileTransferCancelStatus> result( | 581 linked_ptr<api::file_manager_private::FileTransferCancelStatus> result( |
| 582 new api::file_browser_private::FileTransferCancelStatus); | 582 new api::file_manager_private::FileTransferCancelStatus); |
| 583 result->canceled = it != path_to_id_map.end(); | 583 result->canceled = it != path_to_id_map.end(); |
| 584 // TODO(kinaba): simplify cancelFileTransfer() to take single URL each time, | 584 // TODO(kinaba): simplify cancelFileTransfer() to take single URL each time, |
| 585 // and eliminate this field; it is just returning a copy of the argument. | 585 // and eliminate this field; it is just returning a copy of the argument. |
| 586 result->file_url = params->file_urls[i]; | 586 result->file_url = params->file_urls[i]; |
| 587 responses.push_back(result); | 587 responses.push_back(result); |
| 588 } | 588 } |
| 589 results_ = api::file_browser_private::CancelFileTransfers::Results::Create( | 589 results_ = api::file_manager_private::CancelFileTransfers::Results::Create( |
| 590 responses); | 590 responses); |
| 591 SendResponse(true); | 591 SendResponse(true); |
| 592 return true; | 592 return true; |
| 593 } | 593 } |
| 594 | 594 |
| 595 bool FileBrowserPrivateSearchDriveFunction::RunAsync() { | 595 bool FileManagerPrivateSearchDriveFunction::RunAsync() { |
| 596 using extensions::api::file_browser_private::SearchDrive::Params; | 596 using extensions::api::file_manager_private::SearchDrive::Params; |
| 597 const scoped_ptr<Params> params(Params::Create(*args_)); | 597 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 598 EXTENSION_FUNCTION_VALIDATE(params); | 598 EXTENSION_FUNCTION_VALIDATE(params); |
| 599 | 599 |
| 600 drive::FileSystemInterface* const file_system = | 600 drive::FileSystemInterface* const file_system = |
| 601 drive::util::GetFileSystemByProfile(GetProfile()); | 601 drive::util::GetFileSystemByProfile(GetProfile()); |
| 602 if (!file_system) { | 602 if (!file_system) { |
| 603 // |file_system| is NULL if Drive is disabled. | 603 // |file_system| is NULL if Drive is disabled. |
| 604 return false; | 604 return false; |
| 605 } | 605 } |
| 606 | 606 |
| 607 file_system->Search( | 607 file_system->Search( |
| 608 params->search_params.query, GURL(params->search_params.next_feed), | 608 params->search_params.query, GURL(params->search_params.next_feed), |
| 609 base::Bind(&FileBrowserPrivateSearchDriveFunction::OnSearch, this)); | 609 base::Bind(&FileManagerPrivateSearchDriveFunction::OnSearch, this)); |
| 610 return true; | 610 return true; |
| 611 } | 611 } |
| 612 | 612 |
| 613 void FileBrowserPrivateSearchDriveFunction::OnSearch( | 613 void FileManagerPrivateSearchDriveFunction::OnSearch( |
| 614 drive::FileError error, | 614 drive::FileError error, |
| 615 const GURL& next_link, | 615 const GURL& next_link, |
| 616 scoped_ptr<SearchResultInfoList> results) { | 616 scoped_ptr<SearchResultInfoList> results) { |
| 617 if (error != drive::FILE_ERROR_OK) { | 617 if (error != drive::FILE_ERROR_OK) { |
| 618 SendResponse(false); | 618 SendResponse(false); |
| 619 return; | 619 return; |
| 620 } | 620 } |
| 621 | 621 |
| 622 // Outlives the following conversion, since the pointer is bound to the | 622 // Outlives the following conversion, since the pointer is bound to the |
| 623 // callback. | 623 // callback. |
| 624 DCHECK(results.get()); | 624 DCHECK(results.get()); |
| 625 const SearchResultInfoList& results_ref = *results.get(); | 625 const SearchResultInfoList& results_ref = *results.get(); |
| 626 | 626 |
| 627 ConvertSearchResultInfoListToEntryDefinitionList( | 627 ConvertSearchResultInfoListToEntryDefinitionList( |
| 628 GetProfile(), | 628 GetProfile(), |
| 629 extension_->id(), | 629 extension_->id(), |
| 630 results_ref, | 630 results_ref, |
| 631 base::Bind(&FileBrowserPrivateSearchDriveFunction::OnEntryDefinitionList, | 631 base::Bind(&FileManagerPrivateSearchDriveFunction::OnEntryDefinitionList, |
| 632 this, | 632 this, |
| 633 next_link, | 633 next_link, |
| 634 base::Passed(&results))); | 634 base::Passed(&results))); |
| 635 } | 635 } |
| 636 | 636 |
| 637 void FileBrowserPrivateSearchDriveFunction::OnEntryDefinitionList( | 637 void FileManagerPrivateSearchDriveFunction::OnEntryDefinitionList( |
| 638 const GURL& next_link, | 638 const GURL& next_link, |
| 639 scoped_ptr<SearchResultInfoList> search_result_info_list, | 639 scoped_ptr<SearchResultInfoList> search_result_info_list, |
| 640 scoped_ptr<EntryDefinitionList> entry_definition_list) { | 640 scoped_ptr<EntryDefinitionList> entry_definition_list) { |
| 641 DCHECK_EQ(search_result_info_list->size(), entry_definition_list->size()); | 641 DCHECK_EQ(search_result_info_list->size(), entry_definition_list->size()); |
| 642 base::ListValue* entries = new base::ListValue(); | 642 base::ListValue* entries = new base::ListValue(); |
| 643 | 643 |
| 644 // Convert Drive files to something File API stack can understand. | 644 // Convert Drive files to something File API stack can understand. |
| 645 for (EntryDefinitionList::const_iterator it = entry_definition_list->begin(); | 645 for (EntryDefinitionList::const_iterator it = entry_definition_list->begin(); |
| 646 it != entry_definition_list->end(); | 646 it != entry_definition_list->end(); |
| 647 ++it) { | 647 ++it) { |
| 648 base::DictionaryValue* entry = new base::DictionaryValue(); | 648 base::DictionaryValue* entry = new base::DictionaryValue(); |
| 649 entry->SetString("fileSystemName", it->file_system_name); | 649 entry->SetString("fileSystemName", it->file_system_name); |
| 650 entry->SetString("fileSystemRoot", it->file_system_root_url); | 650 entry->SetString("fileSystemRoot", it->file_system_root_url); |
| 651 entry->SetString("fileFullPath", "/" + it->full_path.AsUTF8Unsafe()); | 651 entry->SetString("fileFullPath", "/" + it->full_path.AsUTF8Unsafe()); |
| 652 entry->SetBoolean("fileIsDirectory", it->is_directory); | 652 entry->SetBoolean("fileIsDirectory", it->is_directory); |
| 653 entries->Append(entry); | 653 entries->Append(entry); |
| 654 } | 654 } |
| 655 | 655 |
| 656 base::DictionaryValue* result = new base::DictionaryValue(); | 656 base::DictionaryValue* result = new base::DictionaryValue(); |
| 657 result->Set("entries", entries); | 657 result->Set("entries", entries); |
| 658 result->SetString("nextFeed", next_link.spec()); | 658 result->SetString("nextFeed", next_link.spec()); |
| 659 | 659 |
| 660 SetResult(result); | 660 SetResult(result); |
| 661 SendResponse(true); | 661 SendResponse(true); |
| 662 } | 662 } |
| 663 | 663 |
| 664 bool FileBrowserPrivateSearchDriveMetadataFunction::RunAsync() { | 664 bool FileManagerPrivateSearchDriveMetadataFunction::RunAsync() { |
| 665 using api::file_browser_private::SearchDriveMetadata::Params; | 665 using api::file_manager_private::SearchDriveMetadata::Params; |
| 666 const scoped_ptr<Params> params(Params::Create(*args_)); | 666 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 667 EXTENSION_FUNCTION_VALIDATE(params); | 667 EXTENSION_FUNCTION_VALIDATE(params); |
| 668 | 668 |
| 669 drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); | 669 drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); |
| 670 if (logger) { | 670 if (logger) { |
| 671 logger->Log(logging::LOG_INFO, | 671 logger->Log(logging::LOG_INFO, |
| 672 "%s[%d] called. (types: '%s', maxResults: '%d')", | 672 "%s[%d] called. (types: '%s', maxResults: '%d')", |
| 673 name().c_str(), | 673 name().c_str(), |
| 674 request_id(), | 674 request_id(), |
| 675 api::file_browser_private::ToString( | 675 api::file_manager_private::ToString( |
| 676 params->search_params.types).c_str(), | 676 params->search_params.types).c_str(), |
| 677 params->search_params.max_results); | 677 params->search_params.max_results); |
| 678 } | 678 } |
| 679 set_log_on_completion(true); | 679 set_log_on_completion(true); |
| 680 | 680 |
| 681 drive::FileSystemInterface* const file_system = | 681 drive::FileSystemInterface* const file_system = |
| 682 drive::util::GetFileSystemByProfile(GetProfile()); | 682 drive::util::GetFileSystemByProfile(GetProfile()); |
| 683 if (!file_system) { | 683 if (!file_system) { |
| 684 // |file_system| is NULL if Drive is disabled. | 684 // |file_system| is NULL if Drive is disabled. |
| 685 return false; | 685 return false; |
| 686 } | 686 } |
| 687 | 687 |
| 688 int options = -1; | 688 int options = -1; |
| 689 switch (params->search_params.types) { | 689 switch (params->search_params.types) { |
| 690 case api::file_browser_private::SEARCH_TYPE_EXCLUDE_DIRECTORIES: | 690 case api::file_manager_private::SEARCH_TYPE_EXCLUDE_DIRECTORIES: |
| 691 options = drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES; | 691 options = drive::SEARCH_METADATA_EXCLUDE_DIRECTORIES; |
| 692 break; | 692 break; |
| 693 case api::file_browser_private::SEARCH_TYPE_SHARED_WITH_ME: | 693 case api::file_manager_private::SEARCH_TYPE_SHARED_WITH_ME: |
| 694 options = drive::SEARCH_METADATA_SHARED_WITH_ME; | 694 options = drive::SEARCH_METADATA_SHARED_WITH_ME; |
| 695 break; | 695 break; |
| 696 case api::file_browser_private::SEARCH_TYPE_OFFLINE: | 696 case api::file_manager_private::SEARCH_TYPE_OFFLINE: |
| 697 options = drive::SEARCH_METADATA_OFFLINE; | 697 options = drive::SEARCH_METADATA_OFFLINE; |
| 698 break; | 698 break; |
| 699 case api::file_browser_private::SEARCH_TYPE_ALL: | 699 case api::file_manager_private::SEARCH_TYPE_ALL: |
| 700 options = drive::SEARCH_METADATA_ALL; | 700 options = drive::SEARCH_METADATA_ALL; |
| 701 break; | 701 break; |
| 702 case api::file_browser_private::SEARCH_TYPE_NONE: | 702 case api::file_manager_private::SEARCH_TYPE_NONE: |
| 703 break; | 703 break; |
| 704 } | 704 } |
| 705 DCHECK_NE(options, -1); | 705 DCHECK_NE(options, -1); |
| 706 | 706 |
| 707 file_system->SearchMetadata( | 707 file_system->SearchMetadata( |
| 708 params->search_params.query, | 708 params->search_params.query, |
| 709 options, | 709 options, |
| 710 params->search_params.max_results, | 710 params->search_params.max_results, |
| 711 base::Bind(&FileBrowserPrivateSearchDriveMetadataFunction:: | 711 base::Bind(&FileManagerPrivateSearchDriveMetadataFunction:: |
| 712 OnSearchMetadata, this)); | 712 OnSearchMetadata, this)); |
| 713 return true; | 713 return true; |
| 714 } | 714 } |
| 715 | 715 |
| 716 void FileBrowserPrivateSearchDriveMetadataFunction::OnSearchMetadata( | 716 void FileManagerPrivateSearchDriveMetadataFunction::OnSearchMetadata( |
| 717 drive::FileError error, | 717 drive::FileError error, |
| 718 scoped_ptr<drive::MetadataSearchResultVector> results) { | 718 scoped_ptr<drive::MetadataSearchResultVector> results) { |
| 719 if (error != drive::FILE_ERROR_OK) { | 719 if (error != drive::FILE_ERROR_OK) { |
| 720 SendResponse(false); | 720 SendResponse(false); |
| 721 return; | 721 return; |
| 722 } | 722 } |
| 723 | 723 |
| 724 // Outlives the following conversion, since the pointer is bound to the | 724 // Outlives the following conversion, since the pointer is bound to the |
| 725 // callback. | 725 // callback. |
| 726 DCHECK(results.get()); | 726 DCHECK(results.get()); |
| 727 const drive::MetadataSearchResultVector& results_ref = *results.get(); | 727 const drive::MetadataSearchResultVector& results_ref = *results.get(); |
| 728 | 728 |
| 729 ConvertSearchResultInfoListToEntryDefinitionList( | 729 ConvertSearchResultInfoListToEntryDefinitionList( |
| 730 GetProfile(), | 730 GetProfile(), |
| 731 extension_->id(), | 731 extension_->id(), |
| 732 results_ref, | 732 results_ref, |
| 733 base::Bind( | 733 base::Bind( |
| 734 &FileBrowserPrivateSearchDriveMetadataFunction::OnEntryDefinitionList, | 734 &FileManagerPrivateSearchDriveMetadataFunction::OnEntryDefinitionList, |
| 735 this, | 735 this, |
| 736 base::Passed(&results))); | 736 base::Passed(&results))); |
| 737 } | 737 } |
| 738 | 738 |
| 739 void FileBrowserPrivateSearchDriveMetadataFunction::OnEntryDefinitionList( | 739 void FileManagerPrivateSearchDriveMetadataFunction::OnEntryDefinitionList( |
| 740 scoped_ptr<drive::MetadataSearchResultVector> search_result_info_list, | 740 scoped_ptr<drive::MetadataSearchResultVector> search_result_info_list, |
| 741 scoped_ptr<EntryDefinitionList> entry_definition_list) { | 741 scoped_ptr<EntryDefinitionList> entry_definition_list) { |
| 742 DCHECK_EQ(search_result_info_list->size(), entry_definition_list->size()); | 742 DCHECK_EQ(search_result_info_list->size(), entry_definition_list->size()); |
| 743 base::ListValue* results_list = new base::ListValue(); | 743 base::ListValue* results_list = new base::ListValue(); |
| 744 | 744 |
| 745 // Convert Drive files to something File API stack can understand. See | 745 // Convert Drive files to something File API stack can understand. See |
| 746 // file_browser_handler_custom_bindings.cc and | 746 // file_browser_handler_custom_bindings.cc and |
| 747 // file_browser_private_custom_bindings.js for how this is magically | 747 // file_manager_private_custom_bindings.js for how this is magically |
| 748 // converted to a FileEntry. | 748 // converted to a FileEntry. |
| 749 for (size_t i = 0; i < entry_definition_list->size(); ++i) { | 749 for (size_t i = 0; i < entry_definition_list->size(); ++i) { |
| 750 base::DictionaryValue* result_dict = new base::DictionaryValue(); | 750 base::DictionaryValue* result_dict = new base::DictionaryValue(); |
| 751 | 751 |
| 752 // FileEntry fields. | 752 // FileEntry fields. |
| 753 base::DictionaryValue* entry = new base::DictionaryValue(); | 753 base::DictionaryValue* entry = new base::DictionaryValue(); |
| 754 entry->SetString( | 754 entry->SetString( |
| 755 "fileSystemName", entry_definition_list->at(i).file_system_name); | 755 "fileSystemName", entry_definition_list->at(i).file_system_name); |
| 756 entry->SetString( | 756 entry->SetString( |
| 757 "fileSystemRoot", entry_definition_list->at(i).file_system_root_url); | 757 "fileSystemRoot", entry_definition_list->at(i).file_system_root_url); |
| 758 entry->SetString( | 758 entry->SetString( |
| 759 "fileFullPath", | 759 "fileFullPath", |
| 760 "/" + entry_definition_list->at(i).full_path.AsUTF8Unsafe()); | 760 "/" + entry_definition_list->at(i).full_path.AsUTF8Unsafe()); |
| 761 entry->SetBoolean("fileIsDirectory", | 761 entry->SetBoolean("fileIsDirectory", |
| 762 entry_definition_list->at(i).is_directory); | 762 entry_definition_list->at(i).is_directory); |
| 763 | 763 |
| 764 result_dict->Set("entry", entry); | 764 result_dict->Set("entry", entry); |
| 765 result_dict->SetString( | 765 result_dict->SetString( |
| 766 "highlightedBaseName", | 766 "highlightedBaseName", |
| 767 search_result_info_list->at(i).highlighted_base_name); | 767 search_result_info_list->at(i).highlighted_base_name); |
| 768 results_list->Append(result_dict); | 768 results_list->Append(result_dict); |
| 769 } | 769 } |
| 770 | 770 |
| 771 SetResult(results_list); | 771 SetResult(results_list); |
| 772 SendResponse(true); | 772 SendResponse(true); |
| 773 } | 773 } |
| 774 | 774 |
| 775 bool FileBrowserPrivateGetDriveConnectionStateFunction::RunSync() { | 775 bool FileManagerPrivateGetDriveConnectionStateFunction::RunSync() { |
| 776 api::file_browser_private::DriveConnectionState result; | 776 api::file_manager_private::DriveConnectionState result; |
| 777 | 777 |
| 778 switch (drive::util::GetDriveConnectionStatus(GetProfile())) { | 778 switch (drive::util::GetDriveConnectionStatus(GetProfile())) { |
| 779 case drive::util::DRIVE_DISCONNECTED_NOSERVICE: | 779 case drive::util::DRIVE_DISCONNECTED_NOSERVICE: |
| 780 result.type = kDriveConnectionTypeOffline; | 780 result.type = kDriveConnectionTypeOffline; |
| 781 result.reason.reset(new std::string(kDriveConnectionReasonNoService)); | 781 result.reason.reset(new std::string(kDriveConnectionReasonNoService)); |
| 782 break; | 782 break; |
| 783 case drive::util::DRIVE_DISCONNECTED_NONETWORK: | 783 case drive::util::DRIVE_DISCONNECTED_NONETWORK: |
| 784 result.type = kDriveConnectionTypeOffline; | 784 result.type = kDriveConnectionTypeOffline; |
| 785 result.reason.reset(new std::string(kDriveConnectionReasonNoNetwork)); | 785 result.reason.reset(new std::string(kDriveConnectionReasonNoNetwork)); |
| 786 break; | 786 break; |
| 787 case drive::util::DRIVE_DISCONNECTED_NOTREADY: | 787 case drive::util::DRIVE_DISCONNECTED_NOTREADY: |
| 788 result.type = kDriveConnectionTypeOffline; | 788 result.type = kDriveConnectionTypeOffline; |
| 789 result.reason.reset(new std::string(kDriveConnectionReasonNotReady)); | 789 result.reason.reset(new std::string(kDriveConnectionReasonNotReady)); |
| 790 break; | 790 break; |
| 791 case drive::util::DRIVE_CONNECTED_METERED: | 791 case drive::util::DRIVE_CONNECTED_METERED: |
| 792 result.type = kDriveConnectionTypeMetered; | 792 result.type = kDriveConnectionTypeMetered; |
| 793 break; | 793 break; |
| 794 case drive::util::DRIVE_CONNECTED: | 794 case drive::util::DRIVE_CONNECTED: |
| 795 result.type = kDriveConnectionTypeOnline; | 795 result.type = kDriveConnectionTypeOnline; |
| 796 break; | 796 break; |
| 797 } | 797 } |
| 798 | 798 |
| 799 results_ = api::file_browser_private::GetDriveConnectionState::Results:: | 799 results_ = api::file_manager_private::GetDriveConnectionState::Results:: |
| 800 Create(result); | 800 Create(result); |
| 801 | 801 |
| 802 drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); | 802 drive::EventLogger* logger = file_manager::util::GetLogger(GetProfile()); |
| 803 if (logger) | 803 if (logger) |
| 804 logger->Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); | 804 logger->Log(logging::LOG_INFO, "%s succeeded.", name().c_str()); |
| 805 return true; | 805 return true; |
| 806 } | 806 } |
| 807 | 807 |
| 808 bool FileBrowserPrivateRequestAccessTokenFunction::RunAsync() { | 808 bool FileManagerPrivateRequestAccessTokenFunction::RunAsync() { |
| 809 using extensions::api::file_browser_private::RequestAccessToken::Params; | 809 using extensions::api::file_manager_private::RequestAccessToken::Params; |
| 810 const scoped_ptr<Params> params(Params::Create(*args_)); | 810 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 811 EXTENSION_FUNCTION_VALIDATE(params); | 811 EXTENSION_FUNCTION_VALIDATE(params); |
| 812 | 812 |
| 813 drive::DriveServiceInterface* const drive_service = | 813 drive::DriveServiceInterface* const drive_service = |
| 814 drive::util::GetDriveServiceByProfile(GetProfile()); | 814 drive::util::GetDriveServiceByProfile(GetProfile()); |
| 815 | 815 |
| 816 if (!drive_service) { | 816 if (!drive_service) { |
| 817 // DriveService is not available. | 817 // DriveService is not available. |
| 818 SetResult(new base::StringValue("")); | 818 SetResult(new base::StringValue("")); |
| 819 SendResponse(true); | 819 SendResponse(true); |
| 820 return true; | 820 return true; |
| 821 } | 821 } |
| 822 | 822 |
| 823 // If refreshing is requested, then clear the token to refetch it. | 823 // If refreshing is requested, then clear the token to refetch it. |
| 824 if (params->refresh) | 824 if (params->refresh) |
| 825 drive_service->ClearAccessToken(); | 825 drive_service->ClearAccessToken(); |
| 826 | 826 |
| 827 // Retrieve the cached auth token (if available), otherwise the AuthService | 827 // Retrieve the cached auth token (if available), otherwise the AuthService |
| 828 // instance will try to refetch it. | 828 // instance will try to refetch it. |
| 829 drive_service->RequestAccessToken( | 829 drive_service->RequestAccessToken( |
| 830 base::Bind(&FileBrowserPrivateRequestAccessTokenFunction:: | 830 base::Bind(&FileManagerPrivateRequestAccessTokenFunction:: |
| 831 OnAccessTokenFetched, this)); | 831 OnAccessTokenFetched, this)); |
| 832 return true; | 832 return true; |
| 833 } | 833 } |
| 834 | 834 |
| 835 void FileBrowserPrivateRequestAccessTokenFunction::OnAccessTokenFetched( | 835 void FileManagerPrivateRequestAccessTokenFunction::OnAccessTokenFetched( |
| 836 google_apis::GDataErrorCode code, | 836 google_apis::GDataErrorCode code, |
| 837 const std::string& access_token) { | 837 const std::string& access_token) { |
| 838 SetResult(new base::StringValue(access_token)); | 838 SetResult(new base::StringValue(access_token)); |
| 839 SendResponse(true); | 839 SendResponse(true); |
| 840 } | 840 } |
| 841 | 841 |
| 842 bool FileBrowserPrivateGetShareUrlFunction::RunAsync() { | 842 bool FileManagerPrivateGetShareUrlFunction::RunAsync() { |
| 843 using extensions::api::file_browser_private::GetShareUrl::Params; | 843 using extensions::api::file_manager_private::GetShareUrl::Params; |
| 844 const scoped_ptr<Params> params(Params::Create(*args_)); | 844 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 845 EXTENSION_FUNCTION_VALIDATE(params); | 845 EXTENSION_FUNCTION_VALIDATE(params); |
| 846 | 846 |
| 847 const base::FilePath path = file_manager::util::GetLocalPathFromURL( | 847 const base::FilePath path = file_manager::util::GetLocalPathFromURL( |
| 848 render_view_host(), GetProfile(), GURL(params->url)); | 848 render_view_host(), GetProfile(), GURL(params->url)); |
| 849 DCHECK(drive::util::IsUnderDriveMountPoint(path)); | 849 DCHECK(drive::util::IsUnderDriveMountPoint(path)); |
| 850 | 850 |
| 851 const base::FilePath drive_path = drive::util::ExtractDrivePath(path); | 851 const base::FilePath drive_path = drive::util::ExtractDrivePath(path); |
| 852 | 852 |
| 853 drive::FileSystemInterface* const file_system = | 853 drive::FileSystemInterface* const file_system = |
| 854 drive::util::GetFileSystemByProfile(GetProfile()); | 854 drive::util::GetFileSystemByProfile(GetProfile()); |
| 855 if (!file_system) { | 855 if (!file_system) { |
| 856 // |file_system| is NULL if Drive is disabled. | 856 // |file_system| is NULL if Drive is disabled. |
| 857 return false; | 857 return false; |
| 858 } | 858 } |
| 859 | 859 |
| 860 file_system->GetShareUrl( | 860 file_system->GetShareUrl( |
| 861 drive_path, | 861 drive_path, |
| 862 GURL("chrome-extension://" + extension_id()), // embed origin | 862 GURL("chrome-extension://" + extension_id()), // embed origin |
| 863 base::Bind(&FileBrowserPrivateGetShareUrlFunction::OnGetShareUrl, this)); | 863 base::Bind(&FileManagerPrivateGetShareUrlFunction::OnGetShareUrl, this)); |
| 864 return true; | 864 return true; |
| 865 } | 865 } |
| 866 | 866 |
| 867 void FileBrowserPrivateGetShareUrlFunction::OnGetShareUrl( | 867 void FileManagerPrivateGetShareUrlFunction::OnGetShareUrl( |
| 868 drive::FileError error, | 868 drive::FileError error, |
| 869 const GURL& share_url) { | 869 const GURL& share_url) { |
| 870 if (error != drive::FILE_ERROR_OK) { | 870 if (error != drive::FILE_ERROR_OK) { |
| 871 SetError("Share Url for this item is not available."); | 871 SetError("Share Url for this item is not available."); |
| 872 SendResponse(false); | 872 SendResponse(false); |
| 873 return; | 873 return; |
| 874 } | 874 } |
| 875 | 875 |
| 876 SetResult(new base::StringValue(share_url.spec())); | 876 SetResult(new base::StringValue(share_url.spec())); |
| 877 SendResponse(true); | 877 SendResponse(true); |
| 878 } | 878 } |
| 879 | 879 |
| 880 bool FileBrowserPrivateRequestDriveShareFunction::RunAsync() { | 880 bool FileManagerPrivateRequestDriveShareFunction::RunAsync() { |
| 881 using extensions::api::file_browser_private::RequestDriveShare::Params; | 881 using extensions::api::file_manager_private::RequestDriveShare::Params; |
| 882 const scoped_ptr<Params> params(Params::Create(*args_)); | 882 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 883 EXTENSION_FUNCTION_VALIDATE(params); | 883 EXTENSION_FUNCTION_VALIDATE(params); |
| 884 | 884 |
| 885 const base::FilePath path = file_manager::util::GetLocalPathFromURL( | 885 const base::FilePath path = file_manager::util::GetLocalPathFromURL( |
| 886 render_view_host(), GetProfile(), GURL(params->url)); | 886 render_view_host(), GetProfile(), GURL(params->url)); |
| 887 const base::FilePath drive_path = drive::util::ExtractDrivePath(path); | 887 const base::FilePath drive_path = drive::util::ExtractDrivePath(path); |
| 888 Profile* const owner_profile = drive::util::ExtractProfileFromPath(path); | 888 Profile* const owner_profile = drive::util::ExtractProfileFromPath(path); |
| 889 | 889 |
| 890 if (!owner_profile) | 890 if (!owner_profile) |
| 891 return false; | 891 return false; |
| 892 | 892 |
| 893 drive::FileSystemInterface* const owner_file_system = | 893 drive::FileSystemInterface* const owner_file_system = |
| 894 drive::util::GetFileSystemByProfile(owner_profile); | 894 drive::util::GetFileSystemByProfile(owner_profile); |
| 895 if (!owner_file_system) | 895 if (!owner_file_system) |
| 896 return false; | 896 return false; |
| 897 | 897 |
| 898 const user_manager::User* const user = | 898 const user_manager::User* const user = |
| 899 chromeos::ProfileHelper::Get()->GetUserByProfile(GetProfile()); | 899 chromeos::ProfileHelper::Get()->GetUserByProfile(GetProfile()); |
| 900 if (!user || !user->is_logged_in()) | 900 if (!user || !user->is_logged_in()) |
| 901 return false; | 901 return false; |
| 902 | 902 |
| 903 google_apis::drive::PermissionRole role = | 903 google_apis::drive::PermissionRole role = |
| 904 google_apis::drive::PERMISSION_ROLE_READER; | 904 google_apis::drive::PERMISSION_ROLE_READER; |
| 905 switch (params->share_type) { | 905 switch (params->share_type) { |
| 906 case api::file_browser_private::DRIVE_SHARE_TYPE_NONE: | 906 case api::file_manager_private::DRIVE_SHARE_TYPE_NONE: |
| 907 NOTREACHED(); | 907 NOTREACHED(); |
| 908 return false; | 908 return false; |
| 909 case api::file_browser_private::DRIVE_SHARE_TYPE_CAN_EDIT: | 909 case api::file_manager_private::DRIVE_SHARE_TYPE_CAN_EDIT: |
| 910 role = google_apis::drive::PERMISSION_ROLE_WRITER; | 910 role = google_apis::drive::PERMISSION_ROLE_WRITER; |
| 911 break; | 911 break; |
| 912 case api::file_browser_private::DRIVE_SHARE_TYPE_CAN_COMMENT: | 912 case api::file_manager_private::DRIVE_SHARE_TYPE_CAN_COMMENT: |
| 913 role = google_apis::drive::PERMISSION_ROLE_COMMENTER; | 913 role = google_apis::drive::PERMISSION_ROLE_COMMENTER; |
| 914 break; | 914 break; |
| 915 case api::file_browser_private::DRIVE_SHARE_TYPE_CAN_VIEW: | 915 case api::file_manager_private::DRIVE_SHARE_TYPE_CAN_VIEW: |
| 916 role = google_apis::drive::PERMISSION_ROLE_READER; | 916 role = google_apis::drive::PERMISSION_ROLE_READER; |
| 917 break; | 917 break; |
| 918 } | 918 } |
| 919 | 919 |
| 920 // Share |drive_path| in |owner_file_system| to |user->email()|. | 920 // Share |drive_path| in |owner_file_system| to |user->email()|. |
| 921 owner_file_system->AddPermission( | 921 owner_file_system->AddPermission( |
| 922 drive_path, | 922 drive_path, |
| 923 user->email(), | 923 user->email(), |
| 924 role, | 924 role, |
| 925 base::Bind(&FileBrowserPrivateRequestDriveShareFunction::OnAddPermission, | 925 base::Bind(&FileManagerPrivateRequestDriveShareFunction::OnAddPermission, |
| 926 this)); | 926 this)); |
| 927 return true; | 927 return true; |
| 928 } | 928 } |
| 929 | 929 |
| 930 void FileBrowserPrivateRequestDriveShareFunction::OnAddPermission( | 930 void FileManagerPrivateRequestDriveShareFunction::OnAddPermission( |
| 931 drive::FileError error) { | 931 drive::FileError error) { |
| 932 SendResponse(error == drive::FILE_ERROR_OK); | 932 SendResponse(error == drive::FILE_ERROR_OK); |
| 933 } | 933 } |
| 934 | 934 |
| 935 FileBrowserPrivateGetDownloadUrlFunction:: | 935 FileManagerPrivateGetDownloadUrlFunction:: |
| 936 FileBrowserPrivateGetDownloadUrlFunction() { | 936 FileManagerPrivateGetDownloadUrlFunction() { |
| 937 } | 937 } |
| 938 | 938 |
| 939 FileBrowserPrivateGetDownloadUrlFunction:: | 939 FileManagerPrivateGetDownloadUrlFunction:: |
| 940 ~FileBrowserPrivateGetDownloadUrlFunction() { | 940 ~FileManagerPrivateGetDownloadUrlFunction() { |
| 941 } | 941 } |
| 942 | 942 |
| 943 bool FileBrowserPrivateGetDownloadUrlFunction::RunAsync() { | 943 bool FileManagerPrivateGetDownloadUrlFunction::RunAsync() { |
| 944 using extensions::api::file_browser_private::GetShareUrl::Params; | 944 using extensions::api::file_manager_private::GetShareUrl::Params; |
| 945 const scoped_ptr<Params> params(Params::Create(*args_)); | 945 const scoped_ptr<Params> params(Params::Create(*args_)); |
| 946 EXTENSION_FUNCTION_VALIDATE(params); | 946 EXTENSION_FUNCTION_VALIDATE(params); |
| 947 | 947 |
| 948 // Start getting the file info. | 948 // Start getting the file info. |
| 949 drive::FileSystemInterface* const file_system = | 949 drive::FileSystemInterface* const file_system = |
| 950 drive::util::GetFileSystemByProfile(GetProfile()); | 950 drive::util::GetFileSystemByProfile(GetProfile()); |
| 951 if (!file_system) { | 951 if (!file_system) { |
| 952 // |file_system| is NULL if Drive is disabled or not mounted. | 952 // |file_system| is NULL if Drive is disabled or not mounted. |
| 953 SetError("Drive is disabled or not mounted."); | 953 SetError("Drive is disabled or not mounted."); |
| 954 SetResult(new base::StringValue("")); // Intentionally returns a blank. | 954 SetResult(new base::StringValue("")); // Intentionally returns a blank. |
| 955 return false; | 955 return false; |
| 956 } | 956 } |
| 957 | 957 |
| 958 const base::FilePath path = file_manager::util::GetLocalPathFromURL( | 958 const base::FilePath path = file_manager::util::GetLocalPathFromURL( |
| 959 render_view_host(), GetProfile(), GURL(params->url)); | 959 render_view_host(), GetProfile(), GURL(params->url)); |
| 960 if (!drive::util::IsUnderDriveMountPoint(path)) { | 960 if (!drive::util::IsUnderDriveMountPoint(path)) { |
| 961 SetError("The given file is not in Drive."); | 961 SetError("The given file is not in Drive."); |
| 962 SetResult(new base::StringValue("")); // Intentionally returns a blank. | 962 SetResult(new base::StringValue("")); // Intentionally returns a blank. |
| 963 return false; | 963 return false; |
| 964 } | 964 } |
| 965 base::FilePath file_path = drive::util::ExtractDrivePath(path); | 965 base::FilePath file_path = drive::util::ExtractDrivePath(path); |
| 966 | 966 |
| 967 file_system->GetResourceEntry( | 967 file_system->GetResourceEntry( |
| 968 file_path, | 968 file_path, |
| 969 base::Bind(&FileBrowserPrivateGetDownloadUrlFunction::OnGetResourceEntry, | 969 base::Bind(&FileManagerPrivateGetDownloadUrlFunction::OnGetResourceEntry, |
| 970 this)); | 970 this)); |
| 971 return true; | 971 return true; |
| 972 } | 972 } |
| 973 | 973 |
| 974 void FileBrowserPrivateGetDownloadUrlFunction::OnGetResourceEntry( | 974 void FileManagerPrivateGetDownloadUrlFunction::OnGetResourceEntry( |
| 975 drive::FileError error, | 975 drive::FileError error, |
| 976 scoped_ptr<drive::ResourceEntry> entry) { | 976 scoped_ptr<drive::ResourceEntry> entry) { |
| 977 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 977 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 978 | 978 |
| 979 if (error != drive::FILE_ERROR_OK) { | 979 if (error != drive::FILE_ERROR_OK) { |
| 980 SetError("Download Url for this item is not available."); | 980 SetError("Download Url for this item is not available."); |
| 981 SetResult(new base::StringValue("")); // Intentionally returns a blank. | 981 SetResult(new base::StringValue("")); // Intentionally returns a blank. |
| 982 SendResponse(false); | 982 SendResponse(false); |
| 983 return; | 983 return; |
| 984 } | 984 } |
| 985 | 985 |
| 986 download_url_ = | 986 download_url_ = |
| 987 google_apis::DriveApiUrlGenerator::kBaseDownloadUrlForProduction + | 987 google_apis::DriveApiUrlGenerator::kBaseDownloadUrlForProduction + |
| 988 entry->resource_id(); | 988 entry->resource_id(); |
| 989 | 989 |
| 990 ProfileOAuth2TokenService* oauth2_token_service = | 990 ProfileOAuth2TokenService* oauth2_token_service = |
| 991 ProfileOAuth2TokenServiceFactory::GetForProfile(GetProfile()); | 991 ProfileOAuth2TokenServiceFactory::GetForProfile(GetProfile()); |
| 992 SigninManagerBase* signin_manager = | 992 SigninManagerBase* signin_manager = |
| 993 SigninManagerFactory::GetForProfile(GetProfile()); | 993 SigninManagerFactory::GetForProfile(GetProfile()); |
| 994 const std::string& account_id = signin_manager->GetAuthenticatedAccountId(); | 994 const std::string& account_id = signin_manager->GetAuthenticatedAccountId(); |
| 995 std::vector<std::string> scopes; | 995 std::vector<std::string> scopes; |
| 996 scopes.push_back("https://www.googleapis.com/auth/drive.readonly"); | 996 scopes.push_back("https://www.googleapis.com/auth/drive.readonly"); |
| 997 | 997 |
| 998 auth_service_.reset( | 998 auth_service_.reset( |
| 999 new google_apis::AuthService(oauth2_token_service, | 999 new google_apis::AuthService(oauth2_token_service, |
| 1000 account_id, | 1000 account_id, |
| 1001 GetProfile()->GetRequestContext(), | 1001 GetProfile()->GetRequestContext(), |
| 1002 scopes)); | 1002 scopes)); |
| 1003 auth_service_->StartAuthentication(base::Bind( | 1003 auth_service_->StartAuthentication(base::Bind( |
| 1004 &FileBrowserPrivateGetDownloadUrlFunction::OnTokenFetched, this)); | 1004 &FileManagerPrivateGetDownloadUrlFunction::OnTokenFetched, this)); |
| 1005 } | 1005 } |
| 1006 | 1006 |
| 1007 void FileBrowserPrivateGetDownloadUrlFunction::OnTokenFetched( | 1007 void FileManagerPrivateGetDownloadUrlFunction::OnTokenFetched( |
| 1008 google_apis::GDataErrorCode code, | 1008 google_apis::GDataErrorCode code, |
| 1009 const std::string& access_token) { | 1009 const std::string& access_token) { |
| 1010 if (code != google_apis::HTTP_SUCCESS) { | 1010 if (code != google_apis::HTTP_SUCCESS) { |
| 1011 SetError("Not able to fetch the token."); | 1011 SetError("Not able to fetch the token."); |
| 1012 SetResult(new base::StringValue("")); // Intentionally returns a blank. | 1012 SetResult(new base::StringValue("")); // Intentionally returns a blank. |
| 1013 SendResponse(false); | 1013 SendResponse(false); |
| 1014 return; | 1014 return; |
| 1015 } | 1015 } |
| 1016 | 1016 |
| 1017 const std::string url = download_url_ + "?access_token=" + access_token; | 1017 const std::string url = download_url_ + "?access_token=" + access_token; |
| 1018 SetResult(new base::StringValue(url)); | 1018 SetResult(new base::StringValue(url)); |
| 1019 | 1019 |
| 1020 SendResponse(true); | 1020 SendResponse(true); |
| 1021 } | 1021 } |
| 1022 | 1022 |
| 1023 } // namespace extensions | 1023 } // namespace extensions |
| OLD | NEW |