Chromium Code Reviews| 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/extensions/api/file_system/file_system_api.h" | 5 #include "chrome/browser/extensions/api/file_system/file_system_api.h" |
| 6 | 6 |
| 7 #include "apps/saved_files_service.h" | 7 #include "apps/saved_files_service.h" |
| 8 #include "apps/shell_window.h" | 8 #include "apps/shell_window.h" |
| 9 #include "apps/shell_window_registry.h" | 9 #include "apps/shell_window_registry.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 157 std::string filesystem_id; | 157 std::string filesystem_id; |
| 158 if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id)) { | 158 if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id)) { |
| 159 *error = kInvalidParameters; | 159 *error = kInvalidParameters; |
| 160 return false; | 160 return false; |
| 161 } | 161 } |
| 162 | 162 |
| 163 // Only return the display path if the process has read access to the | 163 // Only return the display path if the process has read access to the |
| 164 // filesystem. | 164 // filesystem. |
| 165 content::ChildProcessSecurityPolicy* policy = | 165 content::ChildProcessSecurityPolicy* policy = |
| 166 content::ChildProcessSecurityPolicy::GetInstance(); | 166 content::ChildProcessSecurityPolicy::GetInstance(); |
| 167 DCHECK(render_view_host); | |
|
benwells
2013/09/10 00:47:14
Why add all these DCHECKs?
Sam McNally
2013/09/10 01:04:13
No real reason.
| |
| 167 if (!policy->CanReadFileSystem(render_view_host->GetProcess()->GetID(), | 168 if (!policy->CanReadFileSystem(render_view_host->GetProcess()->GetID(), |
| 168 filesystem_id)) { | 169 filesystem_id)) { |
| 169 *error = kSecurityError; | 170 *error = kSecurityError; |
| 170 return false; | 171 return false; |
| 171 } | 172 } |
| 172 | 173 |
| 173 IsolatedContext* context = IsolatedContext::GetInstance(); | 174 IsolatedContext* context = IsolatedContext::GetInstance(); |
| 174 base::FilePath relative_path = | 175 base::FilePath relative_path = |
| 175 base::FilePath::FromUTF8Unsafe(filesystem_path); | 176 base::FilePath::FromUTF8Unsafe(filesystem_path); |
| 176 base::FilePath virtual_path = context->CreateVirtualRootPath(filesystem_id) | 177 base::FilePath virtual_path = context->CreateVirtualRootPath(filesystem_id) |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 332 is_directory_, | 333 is_directory_, |
| 333 base::Bind(&FileSystemEntryFunction::RegisterFileSystemsAndSendResponse, | 334 base::Bind(&FileSystemEntryFunction::RegisterFileSystemsAndSendResponse, |
| 334 this, | 335 this, |
| 335 paths), | 336 paths), |
| 336 base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this)); | 337 base::Bind(&FileSystemEntryFunction::HandleWritableFileError, this)); |
| 337 } | 338 } |
| 338 | 339 |
| 339 void FileSystemEntryFunction::RegisterFileSystemsAndSendResponse( | 340 void FileSystemEntryFunction::RegisterFileSystemsAndSendResponse( |
| 340 const std::vector<base::FilePath>& paths) { | 341 const std::vector<base::FilePath>& paths) { |
| 341 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 342 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 343 if (!render_view_host_) | |
| 344 return; | |
| 342 | 345 |
| 343 CreateResponse(); | 346 CreateResponse(); |
| 344 for (std::vector<base::FilePath>::const_iterator it = paths.begin(); | 347 for (std::vector<base::FilePath>::const_iterator it = paths.begin(); |
| 345 it != paths.end(); ++it) { | 348 it != paths.end(); ++it) { |
| 346 AddEntryToResponse(*it, ""); | 349 AddEntryToResponse(*it, ""); |
| 347 } | 350 } |
| 348 SendResponse(true); | 351 SendResponse(true); |
| 349 } | 352 } |
| 350 | 353 |
| 351 void FileSystemEntryFunction::CreateResponse() { | 354 void FileSystemEntryFunction::CreateResponse() { |
| 352 DCHECK(!response_); | 355 DCHECK(!response_); |
| 353 response_ = new base::DictionaryValue(); | 356 response_ = new base::DictionaryValue(); |
| 354 base::ListValue* list = new base::ListValue(); | 357 base::ListValue* list = new base::ListValue(); |
| 355 response_->Set("entries", list); | 358 response_->Set("entries", list); |
| 356 response_->SetBoolean("multiple", multiple_); | 359 response_->SetBoolean("multiple", multiple_); |
| 357 SetResult(response_); | 360 SetResult(response_); |
| 358 } | 361 } |
| 359 | 362 |
| 360 void FileSystemEntryFunction::AddEntryToResponse( | 363 void FileSystemEntryFunction::AddEntryToResponse( |
| 361 const base::FilePath& path, | 364 const base::FilePath& path, |
| 362 const std::string& id_override) { | 365 const std::string& id_override) { |
| 363 DCHECK(response_); | 366 DCHECK(response_); |
| 367 DCHECK(render_view_host_); | |
| 364 extensions::app_file_handler_util::GrantedFileEntry file_entry = | 368 extensions::app_file_handler_util::GrantedFileEntry file_entry = |
| 365 extensions::app_file_handler_util::CreateFileEntry( | 369 extensions::app_file_handler_util::CreateFileEntry( |
| 366 profile(), | 370 profile(), |
| 367 GetExtension(), | 371 GetExtension(), |
| 368 render_view_host_->GetProcess()->GetID(), | 372 render_view_host_->GetProcess()->GetID(), |
| 369 path, | 373 path, |
| 370 is_directory_); | 374 is_directory_); |
| 371 base::ListValue* entries; | 375 base::ListValue* entries; |
| 372 bool success = response_->GetList("entries", &entries); | 376 bool success = response_->GetList("entries", &entries); |
| 373 DCHECK(success); | 377 DCHECK(success); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 444 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); | 448 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &filesystem_path)); |
| 445 | 449 |
| 446 std::string filesystem_id; | 450 std::string filesystem_id; |
| 447 if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id)) { | 451 if (!fileapi::CrackIsolatedFileSystemName(filesystem_name, &filesystem_id)) { |
| 448 error_ = kInvalidParameters; | 452 error_ = kInvalidParameters; |
| 449 return false; | 453 return false; |
| 450 } | 454 } |
| 451 | 455 |
| 452 content::ChildProcessSecurityPolicy* policy = | 456 content::ChildProcessSecurityPolicy* policy = |
| 453 content::ChildProcessSecurityPolicy::GetInstance(); | 457 content::ChildProcessSecurityPolicy::GetInstance(); |
| 458 DCHECK(render_view_host_); | |
| 454 int renderer_id = render_view_host_->GetProcess()->GetID(); | 459 int renderer_id = render_view_host_->GetProcess()->GetID(); |
| 455 bool is_writable = policy->CanReadWriteFileSystem(renderer_id, | 460 bool is_writable = policy->CanReadWriteFileSystem(renderer_id, |
| 456 filesystem_id); | 461 filesystem_id); |
| 457 | 462 |
| 458 SetResult(new base::FundamentalValue(is_writable)); | 463 SetResult(new base::FundamentalValue(is_writable)); |
| 459 return true; | 464 return true; |
| 460 } | 465 } |
| 461 | 466 |
| 462 // Handles showing a dialog to the user to ask for the filename for a file to | 467 // Handles showing a dialog to the user to ask for the filename for a file to |
| 463 // save or open. | 468 // save or open. |
| (...skipping 541 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1005 if (needs_new_entry) { | 1010 if (needs_new_entry) { |
| 1006 is_directory_ = file_entry->is_directory; | 1011 is_directory_ = file_entry->is_directory; |
| 1007 CreateResponse(); | 1012 CreateResponse(); |
| 1008 AddEntryToResponse(file_entry->path, file_entry->id); | 1013 AddEntryToResponse(file_entry->path, file_entry->id); |
| 1009 } | 1014 } |
| 1010 SendResponse(true); | 1015 SendResponse(true); |
| 1011 return true; | 1016 return true; |
| 1012 } | 1017 } |
| 1013 | 1018 |
| 1014 } // namespace extensions | 1019 } // namespace extensions |
| OLD | NEW |