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"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/file_util.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "build/build_config.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/file_system/file_system_api.h"
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_prefs.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/platform_app_browsertest_util.h"
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_paths.h"
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "content/public/browser/notification_observer.h"
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_service.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace extensions {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AppInstallObserver : public content::NotificationObserver {
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  AppInstallObserver(
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      base::Callback<void(const Extension*)> callback)
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      : callback_(callback) {
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    registrar_.Add(this,
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   chrome::NOTIFICATION_EXTENSION_LOADED,
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                   content::NotificationService::AllSources());
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void Observe(int type,
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       const content::NotificationSource& source,
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       const content::NotificationDetails& details) OVERRIDE {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(chrome::NOTIFICATION_EXTENSION_LOADED, type);
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    callback_.Run(content::Details<const Extension>(details).ptr());
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  content::NotificationRegistrar registrar_;
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::Callback<void(const Extension*)> callback_;
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AppInstallObserver);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void SetLastChooseEntryDirectory(const base::FilePath& choose_entry_directory,
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 ExtensionPrefs* prefs,
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                 const Extension* extension) {
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  file_system_api::SetLastChooseEntryDirectory(
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      prefs, extension->id(), choose_entry_directory);
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void SetLastChooseEntryDirectoryToAppDirectory(
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExtensionPrefs* prefs,
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const Extension* extension) {
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  file_system_api::SetLastChooseEntryDirectory(
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      prefs, extension->id(), extension->path());
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void AddSavedEntry(const base::FilePath& path_to_save,
5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   apps::SavedFilesService* service,
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   const Extension* extension) {
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  service->RegisterFileEntry(
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      extension->id(), "magic id", path_to_save, /* writable */ true);
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FileSystemApiTest : public PlatformAppBrowserTest {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    PlatformAppBrowserTest::SetUpCommandLine(command_line);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    test_root_folder_ = test_data_dir_.AppendASCII("api_test")
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        .AppendASCII("file_system");
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "test_root", test_root_folder_);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemChooseEntryFunction::StopSkippingPickerForTest();
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    PlatformAppBrowserTest::TearDown();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath TempFilePath(const std::string& destination_name,
842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                              bool copy_gold) {
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (!temp_dir_.CreateUniqueTempDir()) {
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ADD_FAILURE() << "CreateUniqueTempDir failed";
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      return base::FilePath();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        "test_temp", temp_dir_.path());
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath destination = temp_dir_.path().AppendASCII(destination_name);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (copy_gold) {
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      EXPECT_TRUE(base::CopyFile(source, destination));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return destination;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
100a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> TempFilePaths(
101a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      const std::vector<std::string>& destination_names,
102a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      bool copy_gold) {
103a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    if (!temp_dir_.CreateUniqueTempDir()) {
104a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      ADD_FAILURE() << "CreateUniqueTempDir failed";
105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      return std::vector<base::FilePath>();
106a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
107a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    FileSystemChooseEntryFunction::RegisterTempExternalFileSystemForTest(
108a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        "test_temp", temp_dir_.path());
109a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
110a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    std::vector<base::FilePath> result;
111a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    for (std::vector<std::string>::const_iterator it =
112a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)             destination_names.begin();
113a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)         it != destination_names.end(); ++it) {
114a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      base::FilePath destination = temp_dir_.path().AppendASCII(*it);
115a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      if (copy_gold) {
116a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
117a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)        EXPECT_TRUE(base::CopyFile(source, destination));
118a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      }
119a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      result.push_back(destination);
120a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    }
121a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    return result;
122a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  }
123a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void CheckStoredDirectoryMatches(const base::FilePath& filename) {
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const Extension* extension = GetSingleLoadedExtension();
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(extension);
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    std::string extension_id = extension->id();
128eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    ExtensionPrefs* prefs = ExtensionPrefs::Get(profile());
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    base::FilePath stored_value;
130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    if (filename.empty()) {
131eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_FALSE(file_system_api::GetLastChooseEntryDirectory(
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          prefs, extension_id, &stored_value));
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    } else {
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      EXPECT_TRUE(file_system_api::GetLastChooseEntryDirectory(
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          prefs, extension_id, &stored_value));
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) {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN)
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int override = base::DIR_PROFILE;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_POSIX)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int override = base::DIR_HOME;
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(override,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      test_root_folder_, false));
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = test_root_folder_.AppendASCII("gold.txt");
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_display_path_prettify")) << message_;
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_MACOSX)
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiGetDisplayPathPrettifyMac) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // On Mac, "test.localized" will be localized into just "test".
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_path = TempFilePath("test.localized", false);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(file_util::CreateDirectory(test_path));
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = test_path.AppendASCII("gold.txt");
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath source = test_root_folder_.AppendASCII("gold.txt");
1807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_TRUE(base::CopyFile(source, test_file));
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_display_path_prettify_mac")) << message_;
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenExistingFileTest) {
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       FileSystemApiOpenExistingFileUsingPreviousPathTest) {
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
203c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
204c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
205c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
206c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    AppInstallObserver observer(
20790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        base::Bind(SetLastChooseEntryDirectory,
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)                   test_file.DirName(),
209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   ExtensionPrefs::Get(profile())));
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        << message_;
212c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
213c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    FileSystemApiOpenExistingFilePreviousPathDoesNotExistTest) {
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
219c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false));
222c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
223c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  {
22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    AppInstallObserver observer(base::Bind(
22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        SetLastChooseEntryDirectory,
22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        test_file.DirName().Append(
22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)            base::FilePath::FromUTF8Unsafe("fake_directory_does_not_exist")),
229eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        ExtensionPrefs::Get(profile())));
230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        << message_;
232c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
233c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
234c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
236c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       FileSystemApiOpenExistingFileDefaultPathTest) {
238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false));
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FileSystemChooseEntryFunction::
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SkipPickerAndSelectSuggestedPathForTest();
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      << message_;
246c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
249a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenMultipleSuggested) {
250a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
251a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
252a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
253a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      chrome::DIR_USER_DOCUMENTS, test_file.DirName(), false));
254a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
255a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
256a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      "api_test/file_system/open_multiple_with_suggested_name"))
257a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
258a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
259a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
260a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
261a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
262a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       FileSystemApiOpenMultipleExistingFilesTest) {
263a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
264a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing1.txt");
265a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing2.txt");
266a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, true);
267a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
268a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
269a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
270a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_multiple_existing"))
271a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
272a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
273a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiInvalidChooseEntryTypeTest) {
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/invalid_choose_file_type")) << message_;
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163
286868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG)
287868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_FileSystemApiOpenExistingFileWithWriteTest DISABLED_FileSystemApiOpenExistingFileWithWriteTest
288868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else
289868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_FileSystemApiOpenExistingFileWithWriteTest FileSystemApiOpenExistingFileWithWriteTest
290868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
292868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    MAYBE_FileSystemApiOpenExistingFileWithWriteTest) {
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_existing_with_write")) << message_;
299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiOpenWritableExistingFileTest) {
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_writable_existing")) << message_;
310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiOpenWritableExistingFileWithWriteTest) {
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/open_writable_existing_with_write")) << message_;
321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
324a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
325a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)                       FileSystemApiOpenMultipleWritableExistingFilesTest) {
326a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
327a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing1.txt");
328a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("open_existing2.txt");
329a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, true);
330a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
331a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
332a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
333a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
334a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      "api_test/file_system/open_multiple_writable_existing_with_write"))
335a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
336a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
337a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenCancelTest) {
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest();
3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_cancel"))
3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
342c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiOpenBackgroundTest) {
3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_background"))
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveNewFileTest) {
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_new.txt", false);
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_new"))
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveExistingFileTest) {
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_existing.txt", true);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_existing"))
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
367c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(base::FilePath());
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiSaveNewFileWithWriteTest) {
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_new.txt", false);
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_new_with_write"))
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiSaveExistingFileWithWriteTest) {
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("save_existing.txt", true);
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/save_existing_with_write")) << message_;
389c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CheckStoredDirectoryMatches(test_file);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
392a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveMultipleFilesTest) {
393a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<std::string> names;
394a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("save1.txt");
395a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  names.push_back("save2.txt");
396a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  std::vector<base::FilePath> test_files = TempFilePaths(names, false);
397a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_EQ(2u, test_files.size());
398a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathsForTest(
399a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      &test_files);
400a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_multiple"))
401a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      << message_;
402a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}
403a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveCancelTest) {
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysCancelForTest();
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_cancel"))
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiSaveBackgroundTest) {
4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/save_background"))
4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiGetWritableTest) {
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry")) << message_;
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    FileSystemApiGetWritableWithWriteTest) {
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry_with_write")) << message_;
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
434868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
435868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiGetWritableInUserDataDirTest) {
436868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file =
437868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::MakeAbsoluteFilePath(TempFilePath("test.js", true));
438868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
439868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
440868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
441868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
442868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_USER_DATA, test_file.DirName(), false));
443868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
444868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry_non_writable_file"))
445868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      << message_;
446868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
447868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
448868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
449868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiGetWritableInChromeDirTest) {
450868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file =
451868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::MakeAbsoluteFilePath(TempFilePath("test.js", true));
452868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
453868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
454868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
455868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
456868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_APP, test_file.DirName(), false));
457868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
458868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "api_test/file_system/get_writable_file_entry_non_writable_file"))
459868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      << message_;
460868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
461868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
462868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
463868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiGetWritableInAppDirectory) {
464868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
465868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  {
466868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    AppInstallObserver observer(
467868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        base::Bind(SetLastChooseEntryDirectoryToAppDirectory,
468eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   ExtensionPrefs::Get(profile())));
469868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest(
470868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        "api_test/file_system/get_writable_file_entry_non_writable_file"))
471868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        << message_;
472868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
473868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
474868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiIsWritableTest) {
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      &test_file);
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "api_test/file_system/is_writable_file_entry")) << message_;
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
48490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRetainEntry) {
4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      &test_file);
4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
49090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      "api_test/file_system/retain_entry")) << message_;
49190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  std::vector<apps::SavedFileEntry> file_entries = apps::SavedFilesService::Get(
49290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      profile())->GetAllFileEntries(GetSingleLoadedExtension()->id());
49390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_EQ(1u, file_entries.size());
49490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(test_file, file_entries[0].path);
49590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_EQ(1, file_entries[0].sequence_number);
49690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  EXPECT_FALSE(file_entries[0].writable);
49790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
49890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
49990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest, FileSystemApiRestoreEntry) {
50090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  base::FilePath test_file = TempFilePath("writable.txt", true);
50190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_FALSE(test_file.empty());
50290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
50390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      &test_file);
50490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  {
50590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    AppInstallObserver observer(base::Bind(
50690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        AddSavedEntry, test_file, apps::SavedFilesService::Get(profile())));
50790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest(
50890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "api_test/file_system/restore_entry")) << message_;
50990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
511868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
512868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
513868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiOpenNonWritableFileForRead) {
514868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file = TempFilePath("open_existing.txt", true);
515868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
516868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
517868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_USER_DATA, test_file.DirName(), false));
518868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
519868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
520868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("api_test/file_system/open_existing"))
521868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      << message_;
522868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
523868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
524868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
525868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiOpenInUserDataDirForWrite) {
526868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file =
527868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::MakeAbsoluteFilePath(TempFilePath("open_existing.txt", true));
528868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
529868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_USER_DATA, test_file.DirName(), false));
531868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
532868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
533868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
534868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "api_test/file_system/open_writable_existing_non_writable")) << message_;
535868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
536868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
537868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_CHROMEOS)
538868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// In Chrome OS the download directory is whitelisted for write.
539868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
540868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiOpenInDownloadDirForWrite) {
541868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file =
542868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::MakeAbsoluteFilePath(TempFilePath("writable.txt", true));
543868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
544868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
545868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_USER_DATA, test_file.DirName(), false));
546868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
547868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_DEFAULT_DOWNLOADS_SAFE, test_file.DirName(), false));
548868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
549868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
550868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
551868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "api_test/file_system/is_writable_file_entry")) << message_;
552868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
553868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif
554868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiOpenInChromeDirForWrite) {
557868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  base::FilePath test_file =
558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      base::MakeAbsoluteFilePath(TempFilePath("open_existing.txt", true));
559868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_FALSE(test_file.empty());
560868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(PathService::OverrideAndCreateIfNeeded(
561868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      chrome::DIR_APP, test_file.DirName(), false));
562868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest(
563868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      &test_file);
564868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
565868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      "api_test/file_system/open_writable_existing_non_writable")) << message_;
566868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(FileSystemApiTest,
569868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                       FileSystemApiOpenInAppDirectoryForWrite) {
570868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  FileSystemChooseEntryFunction::SkipPickerAndSelectSuggestedPathForTest();
571868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  {
572868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    AppInstallObserver observer(
573868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        base::Bind(SetLastChooseEntryDirectoryToAppDirectory,
574eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   ExtensionPrefs::Get(profile())));
575868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ASSERT_TRUE(RunPlatformAppTest(
576868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        "api_test/file_system/open_writable_existing_non_writable"))
577868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        << message_;
578868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
579868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
580eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
581eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace extensions
582