summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/api/file_system/file_system_api.cc65
-rw-r--r--chrome/browser/extensions/api/file_system/file_system_apitest.cc110
2 files changed, 11 insertions, 164 deletions
diff --git a/chrome/browser/extensions/api/file_system/file_system_api.cc b/chrome/browser/extensions/api/file_system/file_system_api.cc
index 99e761d..785c7c2 100644
--- a/chrome/browser/extensions/api/file_system/file_system_api.cc
+++ b/chrome/browser/extensions/api/file_system/file_system_api.cc
@@ -61,8 +61,6 @@ const char kSecurityError[] = "Security error";
const char kInvalidCallingPage[] = "Invalid calling page. This function can't "
"be called from a background page.";
const char kUserCancelled[] = "User cancelled";
-const char kWritableFileRestrictedLocationError[] =
- "Cannot write to file in a restricted location";
const char kWritableFileErrorFormat[] = "Error opening %s";
const char kRequiresFileSystemWriteError[] =
"Operation requires fileSystem.write permission";
@@ -75,19 +73,6 @@ namespace ChooseEntry = file_system::ChooseEntry;
namespace {
-const int kBlacklistedPaths[] = {
- chrome::DIR_APP,
- chrome::DIR_USER_DATA,
-};
-
-#if defined(OS_CHROMEOS)
-// On Chrome OS, the default downloads directory is a subdirectory of user data
-// directory, and should be whitelisted.
-const int kWhitelistedPaths[] = {
- chrome::DIR_DEFAULT_DOWNLOADS_SAFE,
-};
-#endif
-
#if defined(OS_MACOSX)
// Retrieves the localized display name for the base name of the given path.
// If the path is not localized, this will just return the base name.
@@ -189,10 +174,15 @@ bool GetFileSystemAndPathOfFileEntry(
base::FilePath::FromUTF8Unsafe(filesystem_path);
base::FilePath virtual_path = context->CreateVirtualRootPath(*filesystem_id)
.Append(relative_path);
- if (!context->CrackVirtualPath(virtual_path,
- filesystem_id,
- NULL,
- file_path)) {
+ fileapi::FileSystemType type;
+ if (!context->CrackVirtualPath(
+ virtual_path, filesystem_id, &type, file_path)) {
+ *error = kInvalidParameters;
+ return false;
+ }
+
+ if (type != fileapi::kFileSystemTypeNativeForPlatformApp &&
+ type != fileapi::kFileSystemTypeDragged) {
*error = kInvalidParameters;
return false;
}
@@ -215,7 +205,6 @@ bool GetFilePathOfFileEntry(const std::string& filesystem_name,
}
bool DoCheckWritableFile(const base::FilePath& path,
- const base::FilePath& extension_directory,
std::string* error_message) {
// Don't allow links.
if (base::PathExists(path) && file_util::IsLink(path)) {
@@ -224,35 +213,6 @@ bool DoCheckWritableFile(const base::FilePath& path,
return false;
}
- if (extension_directory == path || extension_directory.IsParent(path)) {
- *error_message = kWritableFileRestrictedLocationError;
- return false;
- }
-
- bool is_whitelisted_path = false;
-
-#if defined(OS_CHROMEOS)
- for (size_t i = 0; i < arraysize(kWhitelistedPaths); i++) {
- base::FilePath whitelisted_path;
- if (PathService::Get(kWhitelistedPaths[i], &whitelisted_path) &&
- (whitelisted_path == path || whitelisted_path.IsParent(path))) {
- is_whitelisted_path = true;
- break;
- }
- }
-#endif
-
- if (!is_whitelisted_path) {
- for (size_t i = 0; i < arraysize(kBlacklistedPaths); i++) {
- base::FilePath blacklisted_path;
- if (PathService::Get(kBlacklistedPaths[i], &blacklisted_path) &&
- (blacklisted_path == path || blacklisted_path.IsParent(path))) {
- *error_message = kWritableFileRestrictedLocationError;
- return false;
- }
- }
- }
-
// Create the file if it doesn't already exist.
base::PlatformFileError error = base::PLATFORM_FILE_OK;
int creation_flags = base::PLATFORM_FILE_CREATE |
@@ -283,11 +243,9 @@ class WritableFileChecker
WritableFileChecker(
const std::vector<base::FilePath>& paths,
Profile* profile,
- const base::FilePath& extension_path,
const base::Closure& on_success,
const base::Callback<void(const std::string&)>& on_failure)
: outstanding_tasks_(1),
- extension_path_(extension_path),
on_success_(on_success),
on_failure_(on_failure) {
#if defined(OS_CHROMEOS)
@@ -339,7 +297,7 @@ class WritableFileChecker
std::string error;
for (std::vector<base::FilePath>::const_iterator it = paths.begin();
it != paths.end(); ++it) {
- if (!DoCheckWritableFile(*it, extension_path_, &error)) {
+ if (!DoCheckWritableFile(*it, &error)) {
content::BrowserThread::PostTask(
content::BrowserThread::UI,
FROM_HERE,
@@ -375,7 +333,6 @@ class WritableFileChecker
#endif
int outstanding_tasks_;
- const base::FilePath extension_path_;
std::string error_;
base::Closure on_success_;
base::Callback<void(const std::string&)> on_failure_;
@@ -511,7 +468,7 @@ void FileSystemEntryFunction::CheckWritableFiles(
const std::vector<base::FilePath>& paths) {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
scoped_refptr<WritableFileChecker> helper = new WritableFileChecker(
- paths, profile_, extension_->path(),
+ paths, profile_,
base::Bind(
&FileSystemEntryFunction::RegisterFileSystemsAndSendResponse,
this, paths),
diff --git a/chrome/browser/extensions/api/file_system/file_system_apitest.cc b/chrome/browser/extensions/api/file_system/file_system_apitest.cc
index 90c90bf..8c21a17 100644
--- a/chrome/browser/extensions/api/file_system/file_system_apitest.cc
+++ b/chrome/browser/extensions/api/file_system/file_system_apitest.cc
@@ -431,47 +431,6 @@ IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
"api_test/file_system/get_writable_file_entry_with_write")) << message_;
}
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiGetWritableInUserDataDirTest) {
- base::FilePath test_file =
- base::MakeAbsoluteFilePath(TempFilePath("test.js", true));
- ASSERT_FALSE(test_file.empty());
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_USER_DATA, test_file.DirName(), false));
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/get_writable_file_entry_non_writable_file"))
- << message_;
-}
-
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiGetWritableInChromeDirTest) {
- base::FilePath test_file =
- base::MakeAbsoluteFilePath(TempFilePath("test.js", true));
- ASSERT_FALSE(test_file.empty());
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_APP, test_file.DirName(), false));
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/get_writable_file_entry_non_writable_file"))
- << message_;
-}
-
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiGetWritableInAppDirectory) {
- FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
- {
- AppInstallObserver observer(
- base::Bind(SetLastChooseEntryDirectoryToAppDirectory,
- ExtensionPrefs::Get(profile())));
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/get_writable_file_entry_non_writable_file"))
- << message_;
- }
-}
-
IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiIsWritableTest) {
base::FilePath test_file = TempFilePath("writable.txt", true);
ASSERT_FALSE(test_file.empty());
@@ -509,73 +468,4 @@ IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRestoreEntry) {
}
}
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiOpenNonWritableFileForRead) {
- base::FilePath test_file = TempFilePath("open_existing.txt", true);
- ASSERT_FALSE(test_file.empty());
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_USER_DATA, test_file.DirName(), false));
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
- << message_;
-}
-
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiOpenInUserDataDirForWrite) {
- base::FilePath test_file =
- base::MakeAbsoluteFilePath(TempFilePath("open_existing.txt", true));
- ASSERT_FALSE(test_file.empty());
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_USER_DATA, test_file.DirName(), false));
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/open_writable_existing_non_writable")) << message_;
-}
-
-#if defined(OS_CHROMEOS)
-// In Chrome OS the download directory is whitelisted for write.
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiOpenInDownloadDirForWrite) {
- base::FilePath test_file =
- base::MakeAbsoluteFilePath(TempFilePath("writable.txt", true));
- ASSERT_FALSE(test_file.empty());
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_USER_DATA, test_file.DirName(), false));
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_DEFAULT_DOWNLOADS_SAFE, test_file.DirName(), false));
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/is_writable_file_entry")) << message_;
-}
-#endif
-
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiOpenInChromeDirForWrite) {
- base::FilePath test_file =
- base::MakeAbsoluteFilePath(TempFilePath("open_existing.txt", true));
- ASSERT_FALSE(test_file.empty());
- ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
- chrome::DIR_APP, test_file.DirName(), false));
- FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
- &test_file);
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/open_writable_existing_non_writable")) << message_;
-}
-
-IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
- FileSystemApiOpenInAppDirectoryForWrite) {
- FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
- {
- AppInstallObserver observer(
- base::Bind(SetLastChooseEntryDirectoryToAppDirectory,
- ExtensionPrefs::Get(profile())));
- ASSERT_TRUE(RunPlatformAppTest(
- "api_test/file_system/open_writable_existing_non_writable"))
- << message_;
- }
-}
-
} // namespace extensions