15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "apps/saved_files_service.h"
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/scoped_observer.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "build/build_config.h"
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "chrome/browser/apps/app_browsertest_util.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/file_system/file_system_api.h"
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_paths.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_prefs.h"
156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "extensions/browser/extension_registry.h"
166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h"
176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace content {
196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class BrowserContext;
206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class AppLoadObserver : public ExtensionRegistryObserver {
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AppLoadObserver(content::BrowserContext* browser_context,
296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                  base::Callback<void(const Extension*)> callback)
306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      : callback_(callback), extension_registry_observer_(this) {
316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    extension_registry_observer_.Add(ExtensionRegistry::Get(browser_context));
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                 const Extension* extension) OVERRIDE {
366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    callback_.Run(extension);
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::Callback<void(const Extension*)> callback_;
416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)      extension_registry_observer_;
436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppLoadObserver);
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SetLastChooseEntryDirectory(const base::FilePath& choose_entry_directory,
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 ExtensionPrefs* prefs,
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 const Extension* extension) {
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  file_system_api::SetLastChooseEntryDirectory(
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      prefs, extension->id(), choose_entry_directory);
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AddSavedEntry(const base::FilePath& path_to_save,
54424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   bool is_directory,
5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   apps::SavedFilesService* service,
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   const Extension* extension) {
5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  service->RegisterFileEntry(
58424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      extension->id(), "magic id", path_to_save, is_directory);
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)const int kGraylistedPath = base::DIR_HOME;
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FileSystemApiTest : public PlatformAppBrowserTest {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    PlatformAppBrowserTest::SetUpCommandLine(command_line);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_root_folder_ = test_data_dir_.AppendASCII("api_test")
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .AppendASCII("file_system");
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "test_root", test_root_folder_);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE {
76424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)    ClearCommandLineArgs();
77424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
78424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemChooseEntryFunction::StopSkippingPickerForTest();
81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    PlatformAppBrowserTest::TearDown();
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath TempFilePath(const std::string& destination_name,
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              bool copy_gold) {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!temp_dir_.CreateUniqueTempDir()) {
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ADD_FAILURE() << "CreateUniqueTempDir failed";
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return base::FilePath();
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "test_temp", temp_dir_.path());
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath destination = temp_dir_.path().AppendASCII(destination_name);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (copy_gold) {
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_TRUE(base::CopyFile(source, destination));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return destination;
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> TempFilePaths(
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      const std::vector<std::string>& destination_names,
104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      bool copy_gold) {
105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (!temp_dir_.CreateUniqueTempDir()) {
106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      ADD_FAILURE() << "CreateUniqueTempDir failed";
107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      return std::vector<base::FilePath>();
108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        "test_temp", temp_dir_.path());
111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    std::vector<base::FilePath> result;
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    for (std::vector<std::string>::const_iterator it =
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)             destination_names.begin();
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)         it != destination_names.end(); ++it) {
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      base::FilePath destination = temp_dir_.path().AppendASCII(*it);
117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      if (copy_gold) {
118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        EXPECT_TRUE(base::CopyFile(source, destination));
120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      }
121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      result.push_back(destination);
122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return result;
124a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
125a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void CheckStoredDirectoryMatches(const base::FilePath& filename) {
127eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const Extension* extension = GetSingleLoadedExtension();
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(extension);
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::string extension_id = extension->id();
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
1310f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)    base::FilePath stored_value =
1320f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)        file_system_api::GetLastChooseEntryDirectory(prefs, extension_id);
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (filename.empty()) {
1340f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)      EXPECT_TRUE(stored_value.empty());
135c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    } else {
136c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      EXPECT_EQ(base::MakeAbsoluteFilePath(filename.DirName()),
137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                base::MakeAbsoluteFilePath(stored_value));
138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
140c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_root_folder_;
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::ScopedTempDir temp_dir_;
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiGetDisplayPath) {
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = test_root_folder_.AppendASCII("gold.txt");
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/get_display_path"))
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) || defined(OS_POSIX)
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiGetDisplayPathPrettify) {
155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(base::DIR_HOME,
156010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      test_root_folder_, false, false));
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = test_root_folder_.AppendASCII("gold.txt");
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_display_path_prettify")) << message_;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiGetDisplayPathPrettifyMac) {
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // On Mac, "test.localized" will be localized into just "test".
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_path = TempFilePath("test.localized", false);
171a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(base::CreateDirectory(test_path));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = test_path.AppendASCII("gold.txt");
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
1757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(base::CopyFile(source, test_file));
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_display_path_prettify_mac")) << message_;
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenExistingFileTest) {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       FileSystemApiOpenExistingFileUsingPreviousPathTest) {
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
2016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    AppLoadObserver observer(profile(),
2026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                             base::Bind(SetLastChooseEntryDirectory,
2036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                        test_file.DirName(),
2046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                        ExtensionPrefs::Get(profile())));
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        << message_;
207c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
208c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    FileSystemApiOpenExistingFilePreviousPathDoesNotExistTest) {
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
216010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false, false));
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
2206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)    AppLoadObserver observer(
2216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        profile(),
2226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)        base::Bind(SetLastChooseEntryDirectory,
2236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                   test_file.DirName().Append(base::FilePath::FromUTF8Unsafe(
2246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       "fake_directory_does_not_exist")),
2256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                   ExtensionPrefs::Get(profile())));
226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        << message_;
228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       FileSystemApiOpenExistingFileDefaultPathTest) {
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
237010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false, false));
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << message_;
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenMultipleSuggested) {
246a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
247a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
248a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
249010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false, false));
250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
251a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      "api_test/file_system/open_multiple_with_suggested_name"))
253a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
254a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
258a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       FileSystemApiOpenMultipleExistingFilesTest) {
259a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
260a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing1.txt");
261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing2.txt");
262a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, true);
263a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
265a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_multiple_existing"))
267a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
268a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
269a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
270424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenDirectoryTest) {
271424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
272424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
273424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
274424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
275424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      &test_directory);
276424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_directory"))
277424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
278424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
279424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
280424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
281424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
282424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       FileSystemApiOpenDirectoryWithWriteTest) {
283424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
284424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
285424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
286424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
287424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      &test_directory);
288424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(
289424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      RunPlatformAppTest("api_test/file_system/open_directory_with_write"))
290424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
291424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
292424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
293424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
294424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
295424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       FileSystemApiOpenDirectoryWithoutPermissionTest) {
296424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
297424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
298424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
299424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
300424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      &test_directory);
301424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
302424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "api_test/file_system/open_directory_without_permission"))
303424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
304424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
305424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
306424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
307424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
308424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       FileSystemApiOpenDirectoryWithOnlyWritePermissionTest) {
309424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
310424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
311424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
312424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
313424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      &test_directory);
314424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
315424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "api_test/file_system/open_directory_with_only_write"))
316424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
317424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
318424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
319424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
32058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(OS_WIN) || defined(OS_POSIX)
32158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
32258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       FileSystemApiOpenDirectoryOnGraylistAndAllowTest) {
32358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipDirectoryConfirmationForTest();
32458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
32658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
32758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
328010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kGraylistedPath, test_directory, false, false));
32958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
33058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      &test_directory);
33158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_directory"))
33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      << message_;
33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
33558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
33758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       FileSystemApiOpenDirectoryOnGraylistTest) {
33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::AutoCancelDirectoryConfirmationForTest();
33958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
34158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
34258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
343010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kGraylistedPath, test_directory, false, false));
34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      &test_directory);
34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_directory_cancel"))
34758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      << message_;
34858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
34958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
35058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
35158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
35258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       FileSystemApiOpenDirectoryContainingGraylistTest) {
35358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::AutoCancelDirectoryConfirmationForTest();
35458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
35558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
35658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
35758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath parent_directory = test_directory.DirName();
35858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
359010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kGraylistedPath, test_directory, false, false));
36058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      &parent_directory);
36258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_directory_cancel"))
36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      << message_;
36458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  CheckStoredDirectoryMatches(test_directory);
36558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
36658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
36758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test that choosing a subdirectory of a path does not require confirmation.
36858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
36958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                       FileSystemApiOpenDirectorySubdirectoryOfGraylistTest) {
37058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // If a dialog is erroneously displayed, auto cancel it, so that the test
37158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // fails.
37258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::AutoCancelDirectoryConfirmationForTest();
37358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
37458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
37558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
37658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  base::FilePath parent_directory = test_directory.DirName();
37758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
378010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      kGraylistedPath, parent_directory, false, false));
37958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
38058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      &test_directory);
38158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_directory"))
38258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      << message_;
38358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
38458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
38558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif  // defined(OS_WIN) || defined(OS_POSIX)
38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiInvalidChooseEntryTypeTest) {
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/invalid_choose_file_type")) << message_;
395c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
398868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163
399868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
400868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_FileSystemApiOpenExistingFileWithWriteTest DISABLED_FileSystemApiOpenExistingFileWithWriteTest
401868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else
402868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_FileSystemApiOpenExistingFileWithWriteTest FileSystemApiOpenExistingFileWithWriteTest
403868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
405868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    MAYBE_FileSystemApiOpenExistingFileWithWriteTest) {
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_existing_with_write")) << message_;
412c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiOpenWritableExistingFileTest) {
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_writable_existing")) << message_;
423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiOpenWritableExistingFileWithWriteTest) {
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_writable_existing_with_write")) << message_;
434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
437a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
438a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       FileSystemApiOpenMultipleWritableExistingFilesTest) {
439a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
440a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing1.txt");
441a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing2.txt");
442a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, true);
443a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
444a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
445a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
446a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
447a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      "api_test/file_system/open_multiple_writable_existing_with_write"))
448a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
449a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
450a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenCancelTest) {
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest();
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_cancel"))
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenBackgroundTest) {
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_background"))
4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveNewFileTest) {
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_new.txt", false);
4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_new"))
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveExistingFileTest) {
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_existing.txt", true);
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_existing"))
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
480c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiSaveNewFileWithWriteTest) {
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_new.txt", false);
4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_new_with_write"))
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
491c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiSaveExistingFileWithWriteTest) {
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_existing.txt", true);
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/save_existing_with_write")) << message_;
502c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveMultipleFilesTest) {
506a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
507a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("save1.txt");
508a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("save2.txt");
509a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, false);
510a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
511a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
512a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
513a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_multiple"))
514a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
515a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
516a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveCancelTest) {
5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest();
5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_cancel"))
5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveBackgroundTest) {
5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_background"))
5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiGetWritableTest) {
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry")) << message_;
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiGetWritableWithWriteTest) {
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry_with_write")) << message_;
5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       FileSystemApiGetWritableRootEntryTest) {
5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
5525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      &test_file);
5535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
5545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      "api_test/file_system/get_writable_root_entry")) << message_;
5555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
5565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
557424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiIsWritableTest) {
558424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
562424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/is_writable_file_entry"))
563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      << message_;
564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
567424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       FileSystemApiIsWritableWithWritePermissionTest) {
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
573424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      "api_test/file_system/is_writable_file_entry_with_write"))
574424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
57790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRetainEntry) {
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &test_file);
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
58390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      "api_test/file_system/retain_entry")) << message_;
58490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<apps::SavedFileEntry> file_entries = apps::SavedFilesService::Get(
58590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      profile())->GetAllFileEntries(GetSingleLoadedExtension()->id());
58690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(1u, file_entries.size());
58790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(test_file, file_entries[0].path);
58890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(1, file_entries[0].sequence_number);
5894e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)  EXPECT_FALSE(file_entries[0].is_directory);
59090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
59190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
592424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRetainDirectoryEntry) {
593868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
594868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
595424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
596868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
597424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      &test_directory);
598424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/retain_directory"))
599868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      << message_;
600424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::vector<apps::SavedFileEntry> file_entries = apps::SavedFilesService::Get(
601424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      profile())->GetAllFileEntries(GetSingleLoadedExtension()->id());
602424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_EQ(1u, file_entries.size());
603424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(test_directory, file_entries[0].path);
604424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_EQ(1, file_entries[0].sequence_number);
605424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  EXPECT_TRUE(file_entries[0].is_directory);
606868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
607868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
608424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRestoreEntry) {
609424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
610868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
611868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
612868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
6136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AppLoadObserver observer(profile(),
6146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                           base::Bind(AddSavedEntry,
6156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      test_file,
6166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      false,
6176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      apps::SavedFilesService::Get(profile())));
618424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/restore_entry"))
619424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
620868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
621868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
622424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRestoreDirectoryEntry) {
623424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
624868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
625424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::FilePath test_directory = test_file.DirName();
626868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
627868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
6286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AppLoadObserver observer(profile(),
6296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                           base::Bind(AddSavedEntry,
6306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      test_directory,
6316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      true,
6326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                                      apps::SavedFilesService::Get(profile())));
633424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/restore_directory"))
634424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
635868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
636eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
637eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace extensions
638