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