1effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// found in the LICENSE file. 4effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chrome/browser/chromeos/file_system_provider/service.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include <string> 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <vector> 9effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/files/file.h" 110529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/memory/ref_counted.h" 12effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "base/memory/scoped_ptr.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 140529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h" 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/mount_path_util.h" 16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/chromeos/file_system_provider/observer.h" 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/browser/chromeos/file_system_provider/provided_file_system_info.h" 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/fake_user_manager.h" 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/chromeos/login/users/scoped_user_manager_enabler.h" 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/pref_names.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/testing_browser_process.h" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 23effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/test/base/testing_profile.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/test/base/testing_profile_manager.h" 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/user_prefs/user_prefs.h" 26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "content/public/test/test_browser_thread_bundle.h" 270529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/browser/extension_registry.h" 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/common/extension.h" 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "extensions/common/manifest_constants.h" 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/external_mount_points.h" 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "testing/gtest/include/gtest/gtest.h" 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace chromeos { 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace file_system_provider { 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochnamespace { 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochconst char kExtensionId[] = "mbflcebpggnecokmikipoihdbecnjfoj"; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kDisplayName[] = "Camera Pictures"; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// The dot in the file system ID is there in order to check that saving to 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// preferences works correctly. File System ID is used as a key in 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// a base::DictionaryValue, so it has to be stored without path expansion. 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kFileSystemId[] = "camera/pictures/id .!@#$%^&*()_+"; 44effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 45effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch// Utility observer, logging events from file_system_provider::Service. 46effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass LoggingObserver : public Observer { 47effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch public: 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch class Event { 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 500529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch Event(const ProvidedFileSystemInfo& file_system_info, 510529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::File::Error error) 520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch : file_system_info_(file_system_info), error_(error) {} 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ~Event() {} 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const ProvidedFileSystemInfo& file_system_info() { 560529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return file_system_info_; 570529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch } 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::File::Error error() { return error_; } 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private: 610529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ProvidedFileSystemInfo file_system_info_; 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::File::Error error_; 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver() {} 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~LoggingObserver() {} 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // file_system_provider::Observer overrides. 690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch virtual void OnProvidedFileSystemMount( 700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const ProvidedFileSystemInfo& file_system_info, 710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::File::Error error) OVERRIDE { 720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch mounts.push_back(Event(file_system_info, error)); 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnProvidedFileSystemUnmount( 760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const ProvidedFileSystemInfo& file_system_info, 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::File::Error error) OVERRIDE { 780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch unmounts.push_back(Event(file_system_info, error)); 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::vector<Event> mounts; 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch std::vector<Event> unmounts; 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 850529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch// Creates a fake extension with the specified |extension_id|. 860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochscoped_refptr<extensions::Extension> createFakeExtension( 870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch const std::string& extension_id) { 880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::DictionaryValue manifest; 890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::string error; 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kVersion, 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "1.0.0.0"); 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch manifest.SetStringWithoutPathExpansion(extensions::manifest_keys::kName, 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch "unused"); 940529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch return extensions::Extension::Create(base::FilePath(), 950529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extensions::Manifest::UNPACKED, 960529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch manifest, 970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extensions::Extension::NO_FLAGS, 980529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extension_id, 990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch &error); 1000529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 1010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Stores a provided file system information in preferences. 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void RememberFakeFileSystem(TestingProfile* profile, 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& extension_id, 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& file_system_id, 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& display_name, 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool writable) { 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingPrefServiceSyncable* const pref_service = 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile->GetTestingPrefService(); 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(pref_service); 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::DictionaryValue extensions; 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::DictionaryValue* file_systems = new base::DictionaryValue(); 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::DictionaryValue* file_system = new base::DictionaryValue(); 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system->SetStringWithoutPathExpansion(kPrefKeyFileSystemId, 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kFileSystemId); 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system->SetStringWithoutPathExpansion(kPrefKeyDisplayName, kDisplayName); 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system->SetBooleanWithoutPathExpansion(kPrefKeyWritable, writable); 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_systems->SetWithoutPathExpansion(kFileSystemId, file_system); 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch extensions.SetWithoutPathExpansion(kExtensionId, file_systems); 12146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 12246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_service->Set(prefs::kFileSystemProviderMounted, extensions); 12346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 12446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 125effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace 126effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 127effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochclass FileSystemProviderServiceTest : public testing::Test { 128effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch protected: 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci FileSystemProviderServiceTest() : profile_(NULL) {} 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 131effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual ~FileSystemProviderServiceTest() {} 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void SetUp() OVERRIDE { 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_manager_.reset( 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(profile_manager_->SetUp()); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_ = profile_manager_->CreateTestingProfile("test-user@example.com"); 1380529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch user_manager_ = new FakeUserManager(); 139effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch user_manager_->AddUser(profile_->GetProfileName()); 1400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch user_manager_enabler_.reset(new ScopedUserManagerEnabler(user_manager_)); 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_registry_.reset(new extensions::ExtensionRegistry(profile_)); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_.reset(new Service(profile_, extension_registry_.get())); 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->SetFileSystemFactoryForTesting( 1440529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::Bind(&FakeProvidedFileSystem::Create)); 1450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extension_ = createFakeExtension(kExtensionId); 146effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 147effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 148effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch content::TestBrowserThreadBundle thread_bundle_; 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<TestingProfileManager> profile_manager_; 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestingProfile* profile_; 151effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FakeUserManager* user_manager_; 1520529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<ScopedUserManagerEnabler> user_manager_enabler_; 1530529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<extensions::ExtensionRegistry> extension_registry_; 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<Service> service_; 1550529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_refptr<extensions::Extension> extension_; 156effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}; 157effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(FileSystemProviderServiceTest, MountFileSystem) { 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver observer; 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(1u, observer.mounts.size()); 1660529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 167cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(kFileSystemId, 168cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) observer.mounts[0].file_system_info().file_system_id()); 1690529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch base::FilePath expected_mount_path = 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci util::GetMountPath(profile_, kExtensionId, kFileSystemId); 1710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(expected_mount_path.AsUTF8Unsafe(), 1720529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observer.mounts[0].file_system_info().mount_path().AsUTF8Unsafe()); 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kDisplayName, observer.mounts[0].file_system_info().display_name()); 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(observer.mounts[0].file_system_info().writable()); 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(0u, observer.unmounts.size()); 177effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 1800529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(1u, file_system_info_list.size()); 181effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 183effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 184effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 185116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FileSystemProviderServiceTest, MountFileSystem_Writable) { 186effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver observer; 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, true /* writable */)); 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, observer.mounts.size()); 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(0u, observer.unmounts.size()); 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, file_system_info_list.size()); 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 201effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 202116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FileSystemProviderServiceTest, MountFileSystem_UniqueIds) { 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LoggingObserver observer; 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 205effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(service_->MountFileSystem( 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 210effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(2u, observer.mounts.size()); 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 213cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(base::File::FILE_ERROR_EXISTS, observer.mounts[1].error()); 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 217cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(1u, file_system_info_list.size()); 218effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 220effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 221effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(FileSystemProviderServiceTest, MountFileSystem_StressTest) { 223effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver observer; 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 225effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 226effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const size_t kMaxFileSystems = 16; 227effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch for (size_t i = 0; i < kMaxFileSystems; ++i) { 228cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const std::string file_system_id = 229cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::string("test-") + base::IntToString(i); 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, file_system_id, kDisplayName, false /* writable */)); 232effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(kMaxFileSystems, observer.mounts.size()); 234effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 235effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // The next file system is out of limit, and registering it should fail. 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(service_->MountFileSystem( 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(kMaxFileSystems + 1, observer.mounts.size()); 240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(base::File::FILE_ERROR_TOO_MANY_OPENED, 241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch observer.mounts[kMaxFileSystems].error()); 242effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2430529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 2450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(kMaxFileSystems, file_system_info_list.size()); 246effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 248effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 249effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(FileSystemProviderServiceTest, UnmountFileSystem) { 251effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver observer; 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 253effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(1u, observer.mounts.size()); 257effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->UnmountFileSystem( 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(1u, observer.unmounts.size()); 261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 262effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2630529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kExtensionId, 2640529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observer.unmounts[0].file_system_info().extension_id()); 265cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(kFileSystemId, 266cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) observer.unmounts[0].file_system_info().file_system_id()); 2670529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2680529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 2700529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(0u, file_system_info_list.size()); 2710529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 2730529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2740529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2750529e5d033099cbfc42635f6f6183833b09dff6eBen MurdochTEST_F(FileSystemProviderServiceTest, UnmountFileSystem_OnExtensionUnload) { 2760529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch LoggingObserver observer; 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 2780529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 2810529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(1u, observer.mounts.size()); 2820529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2830529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch // Directly call the observer's method. 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->OnExtensionUnloaded( 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_, 2860529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extension_.get(), 2870529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch extensions::UnloadedExtensionInfo::REASON_DISABLE); 2880529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2890529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(1u, observer.unmounts.size()); 2900529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(base::File::FILE_OK, observer.unmounts[0].error()); 2910529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch EXPECT_EQ(kExtensionId, 2930529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch observer.unmounts[0].file_system_info().extension_id()); 294cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(kFileSystemId, 295cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) observer.unmounts[0].file_system_info().file_system_id()); 296effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 2970529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 2990529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(0u, file_system_info_list.size()); 300effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 302effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 303effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(FileSystemProviderServiceTest, UnmountFileSystem_WrongExtensionId) { 305effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch LoggingObserver observer; 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 307effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 308effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const std::string kWrongExtensionId = "helloworldhelloworldhelloworldhe"; 309effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(1u, observer.mounts.size()); 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); 314effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(service_->UnmountFileSystem( 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kWrongExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); 317c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_EQ(1u, observer.unmounts.size()); 318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(base::File::FILE_ERROR_NOT_FOUND, observer.unmounts[0].error()); 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, service_->GetProvidedFileSystemInfoList().size()); 320effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 3210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch std::vector<ProvidedFileSystemInfo> file_system_info_list = 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->GetProvidedFileSystemInfoList(); 3230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch ASSERT_EQ(1u, file_system_info_list.size()); 324effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 326effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 327effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 32846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST_F(FileSystemProviderServiceTest, RestoreFileSystem_OnExtensionLoad) { 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a fake entry in the preferences. 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci RememberFakeFileSystem( 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci profile_, kExtensionId, kFileSystemId, kDisplayName, true /* writable */); 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Create a new service instance in order to load remembered file systems 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // from preferences. 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<Service> new_service( 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new Service(profile_, extension_registry_.get())); 33746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LoggingObserver observer; 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_service->AddObserver(&observer); 33946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_service->SetFileSystemFactoryForTesting( 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::Bind(&FakeProvidedFileSystem::Create)); 34246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(0u, observer.mounts.size()); 34446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Directly call the observer's method. 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new_service->OnExtensionLoaded(profile_, extension_.get()); 34746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 34846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(1u, observer.mounts.size()); 34946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(base::File::FILE_OK, observer.mounts[0].error()); 35046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kExtensionId, observer.mounts[0].file_system_info().extension_id()); 35246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(kFileSystemId, 35346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) observer.mounts[0].file_system_info().file_system_id()); 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(observer.mounts[0].file_system_info().writable()); 35546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 35646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::vector<ProvidedFileSystemInfo> file_system_info_list = 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_service->GetProvidedFileSystemInfoList(); 35846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(1u, file_system_info_list.size()); 35946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new_service->RemoveObserver(&observer); 36146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 36246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 363116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnMount) { 36446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) LoggingObserver observer; 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 36646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, true /* writable */)); 36946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(1u, observer.mounts.size()); 37046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingPrefServiceSyncable* const pref_service = 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetTestingPrefService(); 37346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(pref_service); 37446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* const extensions = 37646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 37746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(extensions); 37846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_systems = NULL; 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_systems)); 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, file_systems->size()); 38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::Value* file_system_value = NULL; 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_system = NULL; 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE( 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_systems->GetWithoutPathExpansion(kFileSystemId, &file_system_value)); 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(file_system_value->GetAsDictionary(&file_system)); 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string file_system_id; 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyFileSystemId, 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_system_id)); 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kFileSystemId, file_system_id); 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string display_name; 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(file_system->GetStringWithoutPathExpansion(kPrefKeyDisplayName, 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &display_name)); 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(kDisplayName, display_name); 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool writable = false; 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE( 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch file_system->GetBooleanWithoutPathExpansion(kPrefKeyWritable, &writable)); 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(writable); 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 40646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 40746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 408116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountOnShutdown) { 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LoggingObserver observer; 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 41146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingPrefServiceSyncable* const pref_service = 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetTestingPrefService(); 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(pref_service); 41546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 41946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_EQ(1u, observer.mounts.size()); 42046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* extensions = 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions); 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_systems = NULL; 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_systems)); 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, file_systems->size()); 42946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 43046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->UnmountFileSystem( 433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_SHUTDOWN)); 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* const extensions = 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions); 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_systems = NULL; 440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_systems)); 442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, file_systems->size()); 443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 448116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(FileSystemProviderServiceTest, RememberFileSystem_OnUnmountByUser) { 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch LoggingObserver observer; 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->AddObserver(&observer); 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch TestingPrefServiceSyncable* const pref_service = 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch profile_->GetTestingPrefService(); 45446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(pref_service); 45546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->MountFileSystem( 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, kDisplayName, false /* writable */)); 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_EQ(1u, observer.mounts.size()); 46046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* extensions = 462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions); 46446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_systems = NULL; 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_systems)); 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_EQ(1u, file_systems->size()); 469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 47046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { 472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_TRUE(service_->UnmountFileSystem( 473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch kExtensionId, kFileSystemId, Service::UNMOUNT_REASON_USER)); 474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* const extensions = 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch pref_service->GetDictionary(prefs::kFileSystemProviderMounted); 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ASSERT_TRUE(extensions); 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const base::DictionaryValue* file_systems = NULL; 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch EXPECT_FALSE(extensions->GetDictionaryWithoutPathExpansion(kExtensionId, 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch &file_systems)); 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 48346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch service_->RemoveObserver(&observer); 48546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 48646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 487effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace file_system_provider 488effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} // namespace chromeos 489