From fc2a40fab7f0d6347eba9ce7757532d5b47b977d Mon Sep 17 00:00:00 2001 From: "koz@chromium.org" Date: Wed, 13 Mar 2013 13:14:57 +0000 Subject: Give an app the file entries it had back on restart. BUG=165832 Review URL: https://chromiumcodereview.appspot.com/12391006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187846 0039d316-1c4b-4281-b951-d872f2087c98 --- apps/app_restore_service_browsertest.cc | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'apps/app_restore_service_browsertest.cc') diff --git a/apps/app_restore_service_browsertest.cc b/apps/app_restore_service_browsertest.cc index 3eaf3ff..f17cc64 100644 --- a/apps/app_restore_service_browsertest.cc +++ b/apps/app_restore_service_browsertest.cc @@ -98,4 +98,52 @@ IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, FileAccessIsSavedToPrefs) { ASSERT_TRUE(file_entries.empty()); } +IN_PROC_BROWSER_TEST_F(PlatformAppBrowserTest, FileAccessIsRestored) { + content::WindowedNotificationObserver extension_suspended( + chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED, + content::NotificationService::AllSources()); + + base::ScopedTempDir temp_directory; + ASSERT_TRUE(temp_directory.CreateUniqueTempDir()); + base::FilePath temp_file; + ASSERT_TRUE(file_util::CreateTemporaryFileInDir(temp_directory.path(), + &temp_file)); + + FileSystemChooseEntryFunction::SkipPickerAndAlwaysSelectPathForTest( + &temp_file); + + ExtensionTestMessageListener file_written_listener("fileWritten", false); + ExtensionTestMessageListener access_ok_listener( + "restartedFileAccessOK", false); + + const Extension* extension = + LoadAndLaunchPlatformApp("file_access_restored_test"); + ASSERT_TRUE(extension); + file_written_listener.WaitUntilSatisfied(); + + ExtensionService* extension_service = + ExtensionSystem::Get(browser()->profile())->extension_service(); + ExtensionPrefs* extension_prefs = extension_service->extension_prefs(); + + // Record the file entries in prefs because when the app gets suspended it + // will have them all cleared. + std::vector file_entries; + extension_prefs->GetSavedFileEntries(extension->id(), &file_entries); + extension_suspended.Wait(); + + // Simulate a restart by populating the preferences as if the browser didn't + // get time to clean itself up. + extension_prefs->SetExtensionRunning(extension->id(), true); + for (std::vector::const_iterator it = file_entries.begin(); + it != file_entries.end(); ++it) { + extension_prefs->AddSavedFileEntry( + extension->id(), it->id, it->path, it->writable); + } + + apps::AppRestoreServiceFactory::GetForProfile(browser()->profile())-> + HandleStartup(true); + + access_ok_listener.WaitUntilSatisfied(); +} + } // namespace apps -- cgit v1.1