blob: cf520bae897a2e94786fa78e983c405ce5064fc1 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stddef.h>
#include "ash/public/cpp/keyboard/keyboard_switches.h"
#include "base/stl_util.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/threading/thread_restrictions.h"
#include "chrome/browser/chromeos/file_manager/file_manager_browsertest_base.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/signin/identity_manager_factory.h"
#include "chrome/common/pref_names.h"
#include "chromeos/constants/chromeos_switches.h"
#include "components/prefs/pref_service.h"
#include "components/session_manager/core/session_manager.h"
#include "components/signin/public/identity_manager/identity_manager.h"
#include "components/signin/public/identity_manager/identity_test_utils.h"
#include "components/user_manager/user_manager.h"
#include "components/user_manager/user_manager_base.h"
#include "content/public/test/browser_test.h"
namespace file_manager {
// TestCase: FilesAppBrowserTest parameters.
struct TestCase {
explicit TestCase(const char* name) : test_case_name(name) {
CHECK(name) << "FATAL: no test case name";
}
TestCase& InGuestMode() {
guest_mode = IN_GUEST_MODE;
return *this;
}
TestCase& InIncognito() {
guest_mode = IN_INCOGNITO;
return *this;
}
TestCase& TabletMode() {
tablet_mode = true;
return *this;
}
TestCase& EnableDocumentsProvider() {
enable_arc = true;
enable_documents_provider.emplace(true);
return *this;
}
TestCase& DisableDocumentsProvider() {
enable_documents_provider.emplace(false);
return *this;
}
TestCase& EnableArc() {
enable_arc = true;
return *this;
}
TestCase& Offline() {
offline = true;
return *this;
}
TestCase& FilesNg() {
files_ng.emplace(true);
return *this;
}
TestCase& DisableFilesNg() {
files_ng.emplace(false);
return *this;
}
TestCase& DisableNativeSmb() {
enable_native_smb = false;
return *this;
}
TestCase& EnableSmbfs() {
enable_smbfs = true;
return *this;
}
TestCase& EnableUnifiedMediaView() {
enable_unified_media_view.emplace(true);
return *this;
}
TestCase& DontMountVolumes() {
mount_no_volumes = true;
return *this;
}
TestCase& DontObserveFileTasks() {
observe_file_tasks = false;
return *this;
}
// Show the startup browser. Some tests invoke the file picker dialog during
// the test. Requesting a file picker from a background page is forbidden by
// the apps platform, and it's a bug that these tests do so.
// FindRuntimeContext() in select_file_dialog_extension.cc will use the last
// active browser in this case, which requires a Browser to be present. See
// https://crbug.com/736930.
TestCase& WithBrowser() {
with_browser = true;
return *this;
}
static std::string GetFullTestCaseName(const TestCase& test) {
std::string name(test.test_case_name);
CHECK(!name.empty()) << "FATAL: no test case name.";
if (test.guest_mode == IN_GUEST_MODE)
name.append("_GuestMode");
else if (test.guest_mode == IN_INCOGNITO)
name.append("_Incognito");
if (test.tablet_mode)
name.append("_TabletMode");
if (!test.files_ng.value_or(true))
name.append("_DisableFilesNg");
if (!test.enable_native_smb)
name.append("_DisableNativeSmb");
if (test.enable_documents_provider.value_or(false))
name.append("_DocumentsProvider");
return name;
}
const char* test_case_name = nullptr;
GuestMode guest_mode = NOT_IN_GUEST_MODE;
bool tablet_mode = false;
base::Optional<bool> enable_documents_provider;
bool enable_arc = false;
bool with_browser = false;
bool needs_zip = false;
bool offline = false;
base::Optional<bool> files_ng;
bool enable_native_smb = true;
bool enable_smbfs = false;
base::Optional<bool> enable_unified_media_view;
bool mount_no_volumes = false;
bool observe_file_tasks = true;
};
// ZipCase: FilesAppBrowserTest with zip/unzip support.
struct ZipCase : public TestCase {
explicit ZipCase(const char* name) : TestCase(name) { needs_zip = true; }
};
// FilesApp browser test.
class FilesAppBrowserTest : public FileManagerBrowserTestBase,
public ::testing::WithParamInterface<TestCase> {
public:
FilesAppBrowserTest() = default;
protected:
void SetUpCommandLine(base::CommandLine* command_line) override {
FileManagerBrowserTestBase::SetUpCommandLine(command_line);
// Default mode is clamshell: force Ash into tablet mode if requested,
// and enable the Ash virtual keyboard sub-system therein.
if (GetParam().tablet_mode) {
command_line->AppendSwitchASCII("force-tablet-mode", "touch_view");
command_line->AppendSwitch(keyboard::switches::kEnableVirtualKeyboard);
}
}
GuestMode GetGuestMode() const override { return GetParam().guest_mode; }
const char* GetTestCaseName() const override {
return GetParam().test_case_name;
}
std::string GetFullTestCaseName() const override {
return TestCase::GetFullTestCaseName(GetParam());
}
const char* GetTestExtensionManifestName() const override {
return "file_manager_test_manifest.json";
}
bool GetTabletMode() const override { return GetParam().tablet_mode; }
bool GetEnableDocumentsProvider() const override {
return GetParam().enable_documents_provider.value_or(
FileManagerBrowserTestBase::GetEnableDocumentsProvider());
}
bool GetEnableArc() const override { return GetParam().enable_arc; }
bool GetRequiresStartupBrowser() const override {
return GetParam().with_browser;
}
bool GetNeedsZipSupport() const override { return GetParam().needs_zip; }
bool GetIsOffline() const override { return GetParam().offline; }
bool GetEnableFilesNg() const override {
return GetParam().files_ng.value_or(
FileManagerBrowserTestBase::GetEnableFilesNg());
}
bool GetEnableNativeSmb() const override {
return GetParam().enable_native_smb;
}
bool GetEnableSmbfs() const override { return GetParam().enable_smbfs; }
bool GetEnableUnifiedMediaView() const override {
return GetParam().enable_unified_media_view.value_or(
FileManagerBrowserTestBase::GetEnableUnifiedMediaView());
}
bool GetStartWithNoVolumesMounted() const override {
return GetParam().mount_no_volumes;
}
bool GetStartWithFileTasksObserver() const override {
return GetParam().observe_file_tasks;
}
private:
DISALLOW_COPY_AND_ASSIGN(FilesAppBrowserTest);
};
IN_PROC_BROWSER_TEST_P(FilesAppBrowserTest, Test) {
StartTest();
}
// A version of the FilesAppBrowserTest that supports spanning browser restart
// to allow testing prefs and other things.
class ExtendedFilesAppBrowserTest : public FilesAppBrowserTest {
public:
ExtendedFilesAppBrowserTest() = default;
private:
DISALLOW_COPY_AND_ASSIGN(ExtendedFilesAppBrowserTest);
};
IN_PROC_BROWSER_TEST_P(ExtendedFilesAppBrowserTest, PRE_Test) {
profile()->GetPrefs()->SetBoolean(prefs::kNetworkFileSharesAllowed,
GetEnableNativeSmb());
}
IN_PROC_BROWSER_TEST_P(ExtendedFilesAppBrowserTest, Test) {
StartTest();
}
// INSTANTIATE_TEST_SUITE_P expands to code that stringizes the arguments. Thus
// macro parameters such as |prefix| and |test_class| won't be expanded by the
// macro pre-processor. To work around this, indirect INSTANTIATE_TEST_SUITE_P,
// as WRAPPED_INSTANTIATE_TEST_SUITE_P here, so the pre-processor expands macro
// defines used to disable tests, MAYBE_prefix for example.
#define WRAPPED_INSTANTIATE_TEST_SUITE_P(prefix, test_class, generator) \
INSTANTIATE_TEST_SUITE_P(prefix, test_class, generator, &PostTestCaseName)
std::string PostTestCaseName(const ::testing::TestParamInfo<TestCase>& test) {
return TestCase::GetFullTestCaseName(test.param);
}
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FileDisplay, /* file_display.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("fileDisplayDownloads"),
TestCase("fileDisplayDownloads").InGuestMode(),
TestCase("fileDisplayDownloads").TabletMode(),
TestCase("fileDisplayLaunchOnLocalFolder").DontObserveFileTasks(),
TestCase("fileDisplayLaunchOnDrive").DontObserveFileTasks(),
TestCase("fileDisplayDrive").TabletMode(),
TestCase("fileDisplayDrive"),
TestCase("fileDisplayDriveOffline").Offline(),
TestCase("fileDisplayDriveOnline"),
TestCase("fileDisplayComputers"),
TestCase("fileDisplayMtp"),
TestCase("fileDisplayUsb"),
TestCase("fileDisplayUsbPartition"),
TestCase("fileDisplayUsbPartitionSort"),
TestCase("fileDisplayPartitionFileTable"),
TestCase("fileSearch"),
TestCase("fileDisplayWithoutDownloadsVolume").DontMountVolumes(),
TestCase("fileDisplayWithoutVolumes").DontMountVolumes(),
TestCase("fileDisplayWithoutVolumesThenMountDownloads")
.DontMountVolumes(),
TestCase("fileDisplayWithoutVolumesThenMountDrive").DontMountVolumes(),
TestCase("fileDisplayWithoutDrive").DontMountVolumes(),
TestCase("fileDisplayWithoutDriveThenDisable").DontMountVolumes(),
TestCase("fileDisplayMountWithFakeItemSelected"),
TestCase("fileDisplayUnmountDriveWithSharedWithMeSelected"),
TestCase("fileDisplayUnmountRemovableRoot"),
TestCase("fileDisplayUnmountFirstPartition"),
TestCase("fileDisplayUnmountLastPartition"),
TestCase("fileSearchCaseInsensitive"),
TestCase("fileSearchNotFound"),
TestCase("fileDisplayDownloadsWithBlockedFileTaskRunner"),
TestCase("fileDisplayCheckSelectWithFakeItemSelected"),
TestCase("fileDisplayCheckReadOnlyIconOnFakeDirectory"),
TestCase("fileDisplayCheckNoReadOnlyIconOnDownloads"),
TestCase("fileDisplayCheckNoReadOnlyIconOnLinuxFiles"),
TestCase("fileDisplayStartupError")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
OpenVideoFiles, /* open_video_files.js */
FilesAppBrowserTest,
::testing::Values(TestCase("videoOpenDownloads").InGuestMode(),
TestCase("videoOpenDownloads"),
TestCase("videoOpenDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
OpenAudioFiles, /* open_audio_files.js */
FilesAppBrowserTest,
::testing::Values(TestCase("audioOpenCloseDownloads"),
TestCase("audioOpenCloseDownloads").InGuestMode(),
TestCase("audioOpenCloseDrive"),
TestCase("audioOpenDownloads").InGuestMode(),
TestCase("audioOpenDownloads"),
TestCase("audioOpenDrive"),
TestCase("audioAutoAdvanceDrive"),
TestCase("audioRepeatAllModeSingleFileDrive"),
TestCase("audioNoRepeatModeSingleFileDrive"),
TestCase("audioRepeatOneModeSingleFileDrive"),
TestCase("audioRepeatAllModeMultipleFileDrive"),
TestCase("audioNoRepeatModeMultipleFileDrive"),
TestCase("audioRepeatOneModeMultipleFileDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
OpenImageFiles, /* open_image_files.js */
FilesAppBrowserTest,
::testing::Values(TestCase("imageOpenDownloads").InGuestMode(),
TestCase("imageOpenDownloads"),
TestCase("imageOpenDrive"),
TestCase("imageOpenGalleryOpenDownloads"),
TestCase("imageOpenGalleryOpenDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
OpenSniffedFiles, /* open_sniffed_files.js */
FilesAppBrowserTest,
::testing::Values(TestCase("pdfOpenDownloads"),
TestCase("pdfOpenDrive"),
TestCase("textOpenDownloads"),
TestCase("textOpenDrive")));
// NaCl fails to compile zip plugin.pexe too often on ASAN, crbug.com/867738
// The tests are flaky on the debug bot and always time out first and then pass
// on retry. Disabled for debug as per crbug.com/936429.
#if defined(ADDRESS_SANITIZER) || !defined(NDEBUG)
#define MAYBE_ZipFiles DISABLED_ZipFiles
#else
#define MAYBE_ZipFiles ZipFiles
#endif
WRAPPED_INSTANTIATE_TEST_SUITE_P(
MAYBE_ZipFiles, /* zip_files.js */
FilesAppBrowserTest,
::testing::Values(ZipCase("zipFileOpenDownloads").InGuestMode(),
ZipCase("zipFileOpenDownloads"),
ZipCase("zipFileOpenDownloadsShiftJIS"),
ZipCase("zipFileOpenDownloadsMacOs"),
ZipCase("zipFileOpenDownloadsWithAbsolutePaths"),
ZipCase("zipFileOpenDownloadsEncryptedCancelPassphrase"),
ZipCase("zipFileOpenDrive"),
ZipCase("zipFileOpenUsb"),
ZipCase("zipCreateFileDownloads").InGuestMode(),
ZipCase("zipCreateFileDownloads"),
ZipCase("zipCreateFileDrive"),
ZipCase("zipCreateFileUsb")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
CreateNewFolder, /* create_new_folder.js */
FilesAppBrowserTest,
::testing::Values(TestCase("selectCreateFolderDownloads").InGuestMode(),
TestCase("selectCreateFolderDownloads").FilesNg(),
TestCase("selectCreateFolderDownloads").DisableFilesNg(),
TestCase("createFolderDownloads").InGuestMode(),
TestCase("createFolderDownloads"),
TestCase("createFolderNestedDownloads"),
TestCase("createFolderDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
KeyboardOperations, /* keyboard_operations.js */
FilesAppBrowserTest,
::testing::Values(TestCase("keyboardDeleteDownloads").InGuestMode(),
TestCase("keyboardDeleteDownloads").FilesNg(),
TestCase("keyboardDeleteDownloads").DisableFilesNg(),
TestCase("keyboardDeleteDrive"),
TestCase("keyboardDeleteFolderDownloads").InGuestMode(),
TestCase("keyboardDeleteFolderDownloads"),
TestCase("keyboardDeleteFolderDrive"),
TestCase("keyboardCopyDownloads").InGuestMode(),
TestCase("keyboardCopyDownloads"),
TestCase("keyboardCopyDrive"),
TestCase("keyboardFocusOutlineVisible"),
TestCase("keyboardFocusOutlineVisibleMouse"),
TestCase("keyboardSelectDriveDirectoryTree"),
TestCase("keyboardDisableCopyWhenDialogDisplayed"),
TestCase("keyboardOpenNewWindow"),
TestCase("keyboardOpenNewWindow").InGuestMode(),
TestCase("renameFileDownloads").InGuestMode(),
TestCase("renameFileDownloads"),
TestCase("renameFileDrive"),
TestCase("renameNewFolderDownloads").InGuestMode(),
TestCase("renameNewFolderDownloads").FilesNg(),
TestCase("renameNewFolderDownloads").DisableFilesNg(),
TestCase("renameNewFolderDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
ContextMenu, /* context_menu.js for file list */
FilesAppBrowserTest,
::testing::Values(
TestCase("checkDeleteEnabledForReadWriteFile"),
TestCase("checkDeleteDisabledForReadOnlyDocument"),
TestCase("checkDeleteDisabledForReadOnlyFile"),
TestCase("checkDeleteDisabledForReadOnlyFolder"),
TestCase("checkRenameEnabledForReadWriteFile"),
TestCase("checkRenameDisabledForReadOnlyDocument"),
TestCase("checkRenameDisabledForReadOnlyFile"),
TestCase("checkRenameDisabledForReadOnlyFolder"),
TestCase("checkContextMenuForRenameInput"),
TestCase("checkShareEnabledForReadWriteFile"),
TestCase("checkShareEnabledForReadOnlyDocument"),
TestCase("checkShareDisabledForStrictReadOnlyDocument"),
TestCase("checkShareEnabledForReadOnlyFile"),
TestCase("checkShareEnabledForReadOnlyFolder"),
TestCase("checkCopyEnabledForReadWriteFile"),
TestCase("checkCopyEnabledForReadOnlyDocument"),
TestCase("checkCopyDisabledForStrictReadOnlyDocument"),
TestCase("checkCopyEnabledForReadOnlyFile"),
TestCase("checkCopyEnabledForReadOnlyFolder"),
TestCase("checkCutEnabledForReadWriteFile"),
TestCase("checkCutDisabledForReadOnlyDocument"),
TestCase("checkCutDisabledForReadOnlyFile"),
TestCase("checkCutDisabledForReadOnlyFolder"),
TestCase("checkPasteIntoFolderEnabledForReadWriteFolder"),
TestCase("checkPasteIntoFolderDisabledForReadOnlyFolder"),
TestCase("checkInstallWithLinuxDisabledForDebianFile"),
TestCase("checkInstallWithLinuxEnabledForDebianFile"),
TestCase("checkImportCrostiniImageEnabled"),
TestCase("checkImportCrostiniImageDisabled"),
TestCase("checkNewFolderEnabledInsideReadWriteFolder"),
TestCase("checkNewFolderDisabledInsideReadOnlyFolder"),
TestCase("checkPasteEnabledInsideReadWriteFolder"),
TestCase("checkPasteDisabledInsideReadOnlyFolder"),
TestCase("checkDownloadsContextMenu"),
TestCase("checkPlayFilesContextMenu"),
TestCase("checkLinuxFilesContextMenu"),
TestCase("checkDeleteDisabledInDocProvider").EnableDocumentsProvider(),
TestCase("checkDeleteEnabledInDocProvider").EnableDocumentsProvider(),
TestCase("checkRenameDisabledInDocProvider").EnableDocumentsProvider(),
TestCase("checkRenameEnabledInDocProvider").EnableDocumentsProvider(),
TestCase("checkContextMenuFocus"),
TestCase("checkContextMenusForInputElements")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Toolbar, /* toolbar.js */
FilesAppBrowserTest,
::testing::Values(TestCase("toolbarDeleteWithMenuItemNoEntrySelected"),
TestCase("toolbarDeleteButtonKeepFocus"),
TestCase("toolbarDeleteEntry").InGuestMode(),
TestCase("toolbarDeleteEntry"),
TestCase("toolbarRefreshButtonWithSelection").EnableArc(),
TestCase("toolbarAltACommand").FilesNg(),
TestCase("toolbarRefreshButtonHiddenInRecents"),
TestCase("toolbarMultiMenuFollowsButton")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
QuickView, /* quick_view.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("openQuickView").DisableFilesNg(),
TestCase("openQuickView").FilesNg(),
TestCase("openQuickViewDialog"),
TestCase("openQuickViewAndEscape"),
TestCase("openQuickView").InGuestMode(),
TestCase("openQuickView").TabletMode(),
TestCase("openQuickViewViaContextMenuSingleSelection"),
TestCase("openQuickViewViaContextMenuCheckSelections"),
TestCase("openQuickViewAudio"),
TestCase("openQuickViewAudioOnDrive"),
TestCase("openQuickViewAudioWithImageMetadata"),
TestCase("openQuickViewImageJpg"),
TestCase("openQuickViewImageJpeg"),
TestCase("openQuickViewImageExif"),
TestCase("openQuickViewImageRaw"),
TestCase("openQuickViewImageRawWithOrientation"),
TestCase("openQuickViewBrokenImage"),
TestCase("openQuickViewImageClick"),
TestCase("openQuickViewVideo"),
TestCase("openQuickViewVideoOnDrive"),
TestCase("openQuickViewPdf"),
TestCase("openQuickViewPdfPreviewsDisabled"),
TestCase("openQuickViewKeyboardUpDownChangesView"),
TestCase("openQuickViewKeyboardLeftRightChangesView"),
TestCase("openQuickViewSniffedText"),
TestCase("openQuickViewTextFileWithUnknownMimeType"),
TestCase("openQuickViewScrollText"),
TestCase("openQuickViewScrollHtml"),
TestCase("openQuickViewMhtml"),
TestCase("openQuickViewBackgroundColorHtml"),
TestCase("openQuickViewDrive"),
TestCase("openQuickViewSmbfs").EnableSmbfs(),
TestCase("openQuickViewAndroid"),
TestCase("openQuickViewDocumentsProvider").EnableDocumentsProvider(),
TestCase("openQuickViewCrostini"),
TestCase("openQuickViewUsb"),
TestCase("openQuickViewRemovablePartitions"),
TestCase("openQuickViewMtp"),
TestCase("openQuickViewTabIndexImage"),
TestCase("openQuickViewTabIndexText"),
TestCase("openQuickViewTabIndexAudio"),
TestCase("openQuickViewTabIndexVideo"),
TestCase("openQuickViewTabIndexDeleteDialog"),
TestCase("openQuickViewToggleInfoButtonKeyboard"),
TestCase("openQuickViewToggleInfoButtonClick"),
TestCase("openQuickViewWithMultipleFiles"),
TestCase("openQuickViewWithMultipleFilesText"),
TestCase("openQuickViewWithMultipleFilesPdf"),
TestCase("openQuickViewWithMultipleFilesKeyboardUpDown"),
TestCase("openQuickViewWithMultipleFilesKeyboardLeftRight"),
TestCase("openQuickViewFromDirectoryTree"),
TestCase("openQuickViewAndDeleteSingleSelection"),
TestCase("openQuickViewAndDeleteCheckSelection"),
TestCase("openQuickViewDeleteEntireCheckSelection"),
TestCase("openQuickViewClickDeleteButton"),
TestCase("openQuickViewDeleteButtonNotShown"),
TestCase("openQuickViewUmaViaContextMenu"),
TestCase("openQuickViewUmaForCheckSelectViaContextMenu"),
TestCase("openQuickViewUmaViaSelectionMenu"),
TestCase("openQuickViewUmaViaSelectionMenuKeyboard"),
TestCase("closeQuickView")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
DirectoryTree, /* directory_tree.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("directoryTreeActiveDirectory").DisableFilesNg(),
TestCase("directoryTreeActiveDirectory").FilesNg(),
TestCase("directoryTreeSelectedDirectory").DisableFilesNg(),
TestCase("directoryTreeSelectedDirectory").FilesNg(),
TestCase("directoryTreeRecentsSubtypeScroll").EnableUnifiedMediaView(),
TestCase("directoryTreeHorizontalScroll"),
TestCase("directoryTreeExpandHorizontalScroll"),
// Disabled. Fails on internal ChromeOS bot. https://crbug.com/1061821.
// TestCase("directoryTreeExpandHorizontalScrollRTL"),
TestCase("directoryTreeVerticalScroll"),
TestCase("directoryTreeExpandFolder")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
DirectoryTreeContextMenu, /* directory_tree_context_menu.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("dirCopyWithContextMenu").InGuestMode(),
TestCase("dirCopyWithContextMenu").FilesNg(),
TestCase("dirCopyWithContextMenu").DisableFilesNg(),
TestCase("dirCopyWithKeyboard").InGuestMode(),
TestCase("dirCopyWithKeyboard"),
TestCase("dirCopyWithoutChangingCurrent"),
TestCase("dirCutWithContextMenu").InGuestMode(),
TestCase("dirCutWithContextMenu"),
TestCase("dirCutWithKeyboard").InGuestMode(),
TestCase("dirCutWithKeyboard"),
TestCase("dirPasteWithContextMenu").InGuestMode(),
TestCase("dirPasteWithContextMenu"),
TestCase("dirPasteWithoutChangingCurrent"),
TestCase("dirRenameWithContextMenu").InGuestMode(),
TestCase("dirRenameWithContextMenu"),
TestCase("dirRenameUpdateChildrenBreadcrumbs"),
TestCase("dirRenameWithKeyboard").InGuestMode(),
TestCase("dirRenameWithKeyboard"),
TestCase("dirRenameWithoutChangingCurrent"),
TestCase("dirRenameToEmptyString").InGuestMode(),
TestCase("dirRenameToEmptyString"),
TestCase("dirRenameToExisting").InGuestMode(),
TestCase("dirRenameToExisting"),
TestCase("dirRenameRemovableWithKeyboard"),
TestCase("dirRenameRemovableWithKeyboard").InGuestMode(),
TestCase("dirRenameRemovableWithContentMenu"),
TestCase("dirRenameRemovableWithContentMenu").InGuestMode(),
TestCase("dirContextMenuForRenameInput"),
TestCase("dirCreateWithContextMenu"),
TestCase("dirCreateWithKeyboard"),
TestCase("dirCreateWithoutChangingCurrent"),
TestCase("dirCreateMultipleFolders"),
#if !(defined(ADDRESS_SANITIZER) || !defined(NDEBUG))
// Zip tests times out too often on ASAN and DEBUG. crbug.com/936429
// and crbug.com/944697
ZipCase("dirContextMenuZip"),
ZipCase("dirEjectContextMenuZip"),
#endif
TestCase("dirContextMenuRecent"),
TestCase("dirContextMenuMyFiles"),
TestCase("dirContextMenuMyFilesWithPaste"),
TestCase("dirContextMenuCrostini"),
TestCase("dirContextMenuPlayFiles"),
TestCase("dirContextMenuUsbs"),
TestCase("dirContextMenuFsp"),
TestCase("dirContextMenuDocumentsProvider").EnableDocumentsProvider(),
TestCase("dirContextMenuUsbDcim"),
TestCase("dirContextMenuMtp"),
TestCase("dirContextMenuMediaView").EnableArc(),
TestCase("dirContextMenuMyDrive"),
TestCase("dirContextMenuSharedDrive"),
TestCase("dirContextMenuSharedWithMe"),
TestCase("dirContextMenuOffline"),
TestCase("dirContextMenuComputers"),
TestCase("dirContextMenuShortcut"),
TestCase("dirContextMenuFocus")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
DriveSpecific, /* drive_specific.js */
FilesAppBrowserTest,
::testing::Values(TestCase("driveOpenSidebarOffline"),
TestCase("driveOpenSidebarSharedWithMe"),
TestCase("driveAutoCompleteQuery"),
TestCase("drivePinFileMobileNetwork"),
TestCase("driveClickFirstSearchResult"),
TestCase("drivePressEnterToSearch"),
TestCase("drivePressClearSearch"),
TestCase("drivePressCtrlAFromSearch"),
TestCase("driveBackupPhotos"),
TestCase("driveAvailableOfflineGearMenu"),
TestCase("driveAvailableOfflineDirectoryGearMenu"),
TestCase("driveLinkToDirectory"),
TestCase("driveLinkOpenFileThroughLinkedDirectory"),
TestCase("driveLinkOpenFileThroughTransitiveLink"),
TestCase("driveWelcomeBanner")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Transfer, /* transfer.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("transferFromDriveToDownloads"),
TestCase("transferFromDownloadsToMyFiles"),
TestCase("transferFromDownloadsToMyFilesMove"),
TestCase("transferFromDownloadsToDrive"),
TestCase("transferFromSharedToDownloads"),
TestCase("transferFromSharedToDrive"),
TestCase("transferFromOfflineToDownloads"),
TestCase("transferFromOfflineToDrive"),
TestCase("transferFromTeamDriveToDrive"),
TestCase("transferFromDriveToTeamDrive"),
TestCase("transferFromTeamDriveToDownloads"),
TestCase("transferHostedFileFromTeamDriveToDownloads"),
TestCase("transferFromDownloadsToTeamDrive").DisableFilesNg(),
TestCase("transferFromDownloadsToTeamDrive").FilesNg(),
TestCase("transferBetweenTeamDrives").DisableFilesNg(),
TestCase("transferBetweenTeamDrives").FilesNg(),
TestCase("transferDragAndDrop"),
TestCase("transferDragAndHover"),
TestCase("transferFromDownloadsToDownloads"),
TestCase("transferDeletedFile"),
TestCase("transferInfoIsRemembered"),
TestCase("transferToUsbHasDestinationText"),
TestCase("transferDismissedErrorIsRemembered")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
RestorePrefs, /* restore_prefs.js */
FilesAppBrowserTest,
::testing::Values(TestCase("restoreSortColumn").InGuestMode(),
TestCase("restoreSortColumn"),
TestCase("restoreCurrentView").InGuestMode(),
TestCase("restoreCurrentView")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
RestoreGeometry, /* restore_geometry.js */
FilesAppBrowserTest,
::testing::Values(TestCase("restoreGeometry"),
TestCase("restoreGeometry").InGuestMode(),
TestCase("restoreGeometryMaximized")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
ShareAndManageDialog, /* share_and_manage_dialog.js */
FilesAppBrowserTest,
::testing::Values(TestCase("shareFileDrive").DisableFilesNg(),
TestCase("shareFileDrive").FilesNg(),
TestCase("shareDirectoryDrive"),
TestCase("shareHostedFileDrive"),
TestCase("manageHostedFileDrive"),
TestCase("manageFileDrive"),
TestCase("manageDirectoryDrive"),
TestCase("shareFileTeamDrive"),
TestCase("shareDirectoryTeamDrive"),
TestCase("shareHostedFileTeamDrive"),
TestCase("shareTeamDrive"),
TestCase("manageHostedFileTeamDrive"),
TestCase("manageFileTeamDrive"),
TestCase("manageDirectoryTeamDrive").DisableFilesNg(),
TestCase("manageDirectoryTeamDrive").FilesNg(),
TestCase("manageTeamDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
SuggestAppDialog, /* suggest_app_dialog.js */
FilesAppBrowserTest,
::testing::Values(TestCase("suggestAppDialog")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Traverse, /* traverse.js */
FilesAppBrowserTest,
::testing::Values(TestCase("traverseDownloads").InGuestMode(),
TestCase("traverseDownloads"),
TestCase("traverseDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Tasks, /* tasks.js */
FilesAppBrowserTest,
::testing::Values(TestCase("executeDefaultTaskDownloads"),
TestCase("executeDefaultTaskDownloads").InGuestMode(),
TestCase("executeDefaultTaskDrive"),
TestCase("defaultTaskForPdf"),
TestCase("defaultTaskForTextPlain"),
TestCase("defaultTaskDialogDownloads"),
TestCase("defaultTaskDialogDownloads").InGuestMode(),
TestCase("defaultTaskDialogDrive"),
TestCase("genericTaskIsNotExecuted"),
TestCase("genericTaskAndNonGenericTask")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FolderShortcuts, /* folder_shortcuts.js */
FilesAppBrowserTest,
::testing::Values(TestCase("traverseFolderShortcuts").DisableFilesNg(),
TestCase("traverseFolderShortcuts").FilesNg(),
TestCase("addRemoveFolderShortcuts").DisableFilesNg(),
TestCase("addRemoveFolderShortcuts").FilesNg()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
SortColumns, /* sort_columns.js */
FilesAppBrowserTest,
::testing::Values(TestCase("sortColumns"),
TestCase("sortColumns").InGuestMode()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
TabIndex, /* tab_index.js: */
FilesAppBrowserTest,
::testing::Values(
TestCase("tabindexSearchBoxFocus").FilesNg(),
TestCase("tabindexSearchBoxFocus").DisableFilesNg(),
TestCase("tabindexFocus").DisableFilesNg(),
TestCase("tabindexFocusDownloads").FilesNg(),
TestCase("tabindexFocusDownloads").DisableFilesNg(),
TestCase("tabindexFocusDownloads").InGuestMode().FilesNg(),
TestCase("tabindexFocusDownloads").InGuestMode().DisableFilesNg(),
// TestCase("tabindexFocusBreadcrumbBackground").FilesNg(),
TestCase("tabindexFocusBreadcrumbBackground").DisableFilesNg(),
TestCase("tabindexFocusDirectorySelected").FilesNg(),
TestCase("tabindexFocusDirectorySelected").DisableFilesNg(),
TestCase("tabindexOpenDialogDownloadsFilesNg").WithBrowser().FilesNg(),
TestCase("tabindexOpenDialogDownloads").WithBrowser().DisableFilesNg(),
TestCase("tabindexOpenDialogDownloads")
.WithBrowser()
.InGuestMode()
.DisableFilesNg(),
TestCase("tabindexOpenDialogDownloadsFilesNg")
.WithBrowser()
.InGuestMode()
.FilesNg(),
TestCase("tabindexSaveFileDialogDriveFilesNg").WithBrowser().FilesNg(),
TestCase("tabindexSaveFileDialogDrive").WithBrowser().DisableFilesNg(),
TestCase("tabindexSaveFileDialogDownloadsFilesNg")
.WithBrowser()
.FilesNg(),
TestCase("tabindexSaveFileDialogDownloads")
.WithBrowser()
.DisableFilesNg(),
TestCase("tabindexSaveFileDialogDownloads")
.WithBrowser()
.InGuestMode()
.DisableFilesNg(),
TestCase("tabindexSaveFileDialogDownloadsFilesNg")
.WithBrowser()
.InGuestMode()
.FilesNg()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FileDialog, /* file_dialog.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("openFileDialogUnload").WithBrowser(),
TestCase("openFileDialogDownloads").WithBrowser(),
TestCase("openFileDialogDownloads").WithBrowser().InGuestMode(),
TestCase("openFileDialogDownloads").WithBrowser().InIncognito(),
TestCase("openFileDialogPanelsDisabled").WithBrowser(),
TestCase("saveFileDialogDownloads").WithBrowser(),
TestCase("saveFileDialogDownloads").WithBrowser().InGuestMode(),
TestCase("saveFileDialogDownloads").WithBrowser().InIncognito(),
TestCase("saveFileDialogDownloadsNewFolderButton").WithBrowser(),
TestCase("saveFileDialogPanelsDisabled").WithBrowser(),
TestCase("openFileDialogCancelDownloads").WithBrowser(),
TestCase("openFileDialogEscapeDownloads").WithBrowser(),
TestCase("openFileDialogDrive").WithBrowser(),
TestCase("openFileDialogDrive").WithBrowser().InIncognito(),
TestCase("saveFileDialogDrive").WithBrowser(),
TestCase("saveFileDialogDrive").WithBrowser().InIncognito(),
TestCase("openFileDialogDriveFromBrowser").WithBrowser(),
TestCase("openFileDialogDriveHostedDoc").WithBrowser(),
TestCase("openFileDialogDriveHostedNeedsFile").WithBrowser(),
TestCase("saveFileDialogDriveHostedNeedsFile").WithBrowser(),
TestCase("openFileDialogCancelDrive").WithBrowser(),
TestCase("openFileDialogEscapeDrive").WithBrowser(),
TestCase("openFileDialogDriveOffline").WithBrowser().Offline(),
TestCase("saveFileDialogDriveOffline").WithBrowser().Offline(),
TestCase("openFileDialogDriveOfflinePinned").WithBrowser().Offline(),
TestCase("saveFileDialogDriveOfflinePinned").WithBrowser().Offline(),
TestCase("openFileDialogDefaultFilter").WithBrowser(),
TestCase("saveFileDialogDefaultFilter").WithBrowser(),
TestCase("openFileDialogFileListShowContextMenu").WithBrowser(),
TestCase("openFileDialogSelectAllDisabled").WithBrowser(),
TestCase("openMultiFileDialogSelectAllEnabled").WithBrowser()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
CopyBetweenWindows, /* copy_between_windows.js */
FilesAppBrowserTest,
::testing::Values(TestCase("copyBetweenWindowsLocalToDrive"),
TestCase("copyBetweenWindowsLocalToUsb"),
TestCase("copyBetweenWindowsUsbToDrive"),
TestCase("copyBetweenWindowsDriveToLocal"),
TestCase("copyBetweenWindowsDriveToUsb"),
TestCase("copyBetweenWindowsUsbToLocal")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
GridView, /* grid_view.js */
FilesAppBrowserTest,
::testing::Values(TestCase("showGridViewDownloads").DisableFilesNg(),
TestCase("showGridViewDownloads").InGuestMode(),
TestCase("showGridViewDownloads").FilesNg(),
TestCase("showGridViewDrive"),
TestCase("showGridViewButtonSwitches"),
TestCase("showGridViewKeyboardSelectionA11y"),
TestCase("showGridViewTitles").FilesNg(),
TestCase("showGridViewMouseSelectionA11y")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Providers, /* providers.js */
ExtendedFilesAppBrowserTest,
::testing::Values(TestCase("requestMount"),
TestCase("requestMount").DisableNativeSmb(),
TestCase("requestMountMultipleMounts"),
TestCase("requestMountMultipleMounts").DisableNativeSmb(),
TestCase("requestMountSourceDevice"),
TestCase("requestMountSourceDevice").DisableNativeSmb(),
TestCase("requestMountSourceFile"),
TestCase("requestMountSourceFile").DisableNativeSmb(),
TestCase("providerEject"),
TestCase("providerEject").DisableNativeSmb(),
TestCase("installNewServiceOnline"),
TestCase("installNewServiceOffline").Offline()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
GearMenu, /* gear_menu.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("showHiddenFilesDownloads"),
TestCase("showHiddenFilesDownloads").InGuestMode(),
TestCase("showHiddenFilesDrive"),
TestCase("showPasteIntoCurrentFolder"),
TestCase("showSelectAllInCurrentFolder"),
TestCase("showToggleHiddenAndroidFoldersGearMenuItemsInMyFiles"),
TestCase("enableToggleHiddenAndroidFoldersShowsHiddenFiles"),
TestCase("hideCurrentDirectoryByTogglingHiddenAndroidFolders"),
TestCase("newFolderInDownloads"),
TestCase("showSendFeedbackAction"),
TestCase("enableDisableStorageSettingsLink")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FilesTooltip, /* files_tooltip.js */
FilesAppBrowserTest,
::testing::Values(TestCase("filesTooltipFocus"),
TestCase("filesTooltipMouseOver"),
TestCase("filesTooltipClickHides"),
TestCase("filesTooltipHidesOnWindowResize"),
TestCase("filesCardTooltipClickHides")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FileList, /* file_list.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("fileListAriaAttributes").DisableFilesNg(),
TestCase("fileListAriaAttributes").FilesNg(),
TestCase("fileListFocusFirstItem").DisableFilesNg(),
TestCase("fileListFocusFirstItem").FilesNg(),
TestCase("fileListSelectLastFocusedItem").DisableFilesNg(),
TestCase("fileListSelectLastFocusedItem").FilesNg(),
TestCase("fileListKeyboardSelectionA11y").DisableFilesNg(),
TestCase("fileListKeyboardSelectionA11y").FilesNg(),
TestCase("fileListMouseSelectionA11y").DisableFilesNg(),
TestCase("fileListMouseSelectionA11y").FilesNg(),
TestCase("fileListDeleteMultipleFiles").DisableFilesNg(),
TestCase("fileListDeleteMultipleFiles").FilesNg(),
TestCase("fileListRenameFromSelectAll").FilesNg()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Crostini, /* crostini.js */
FilesAppBrowserTest,
::testing::Values(TestCase("mountCrostini"),
TestCase("enableDisableCrostini"),
TestCase("sharePathWithCrostini"),
TestCase("pluginVmErrorDialog")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
MyFiles, /* my_files.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("directoryTreeRefresh"),
TestCase("showMyFiles").DisableFilesNg(),
TestCase("myFilesDisplaysAndOpensEntries"),
TestCase("myFilesFolderRename"),
TestCase("myFilesUpdatesWhenAndroidVolumeMounts").DontMountVolumes(),
TestCase("myFilesUpdatesChildren"),
TestCase("myFilesAutoExpandOnce").DisableFilesNg(),
TestCase("myFilesAutoExpandOnce").FilesNg(),
TestCase("myFilesToolbarDelete")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
InstallLinuxPackageDialog, /* install_linux_package_dialog.js */
FilesAppBrowserTest,
::testing::Values(TestCase("installLinuxPackageDialog")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
LauncherSearch, /* launcher_search.js */
FilesAppBrowserTest,
::testing::Values(TestCase("launcherOpenSearchResult"),
TestCase("launcherSearch"),
TestCase("launcherSearchOffline").Offline()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Recents, /* recents.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("recentsDownloads"),
TestCase("recentsDrive"),
TestCase("recentsCrostiniNotMounted"),
TestCase("recentsCrostiniMounted"),
TestCase("recentsDownloadsAndDrive"),
TestCase("recentsDownloadsAndDriveWithOverlap"),
TestCase("recentAudioDownloads").EnableUnifiedMediaView(),
TestCase("recentAudioDownloadsAndDrive").EnableUnifiedMediaView(),
TestCase("recentImagesDownloads").EnableUnifiedMediaView(),
TestCase("recentImagesDownloadsAndDrive").EnableUnifiedMediaView(),
TestCase("recentVideosDownloads").EnableUnifiedMediaView(),
TestCase("recentVideosDownloadsAndDrive").EnableUnifiedMediaView()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Metadata, /* metadata.js */
FilesAppBrowserTest,
::testing::Values(
TestCase("metadataDocumentsProvider").EnableDocumentsProvider(),
TestCase("metadataDownloads").DisableFilesNg(),
TestCase("metadataDownloads").FilesNg(),
TestCase("metadataDrive").DisableFilesNg(),
TestCase("metadataDrive").FilesNg(),
TestCase("metadataTeamDrives"),
TestCase("metadataLargeDrive")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Search, /* search.js */
FilesAppBrowserTest,
::testing::Values(TestCase("searchDownloadsWithResults"),
TestCase("searchDownloadsWithNoResults"),
TestCase("searchDownloadsClearSearchKeyDown"),
TestCase("searchDownloadsClearSearch"),
TestCase("searchHidingViaTab"),
TestCase("searchHidingTextEntryField"),
TestCase("searchButtonToggles")));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Metrics, /* metrics.js */
FilesAppBrowserTest,
::testing::Values(TestCase("metricsRecordEnum")));
// TODO(adanilo) Remove 'breadcrumbsLeafNoFocus' when files-ng ships.
WRAPPED_INSTANTIATE_TEST_SUITE_P(
Breadcrumbs, /* breadcrumbs.js */
FilesAppBrowserTest,
::testing::Values(TestCase("breadcrumbsNavigate").DisableFilesNg(),
TestCase("breadcrumbsLeafNoFocus").DisableFilesNg(),
TestCase("breadcrumbsTooltip").DisableFilesNg(),
TestCase("breadcrumbsDownloadsTranslation"),
TestCase("breadcrumbsRenderShortPath").FilesNg(),
TestCase("breadcrumbsEliderButtonHidden").FilesNg(),
TestCase("breadcrumbsRenderLongPath").FilesNg(),
TestCase("breadcrumbsMainButtonClick").FilesNg(),
TestCase("breadcrumbsMainButtonEnterKey").FilesNg(),
TestCase("breadcrumbsEliderButtonClick").FilesNg(),
TestCase("breadcrumbsEliderButtonKeyboard").FilesNg(),
TestCase("breadcrumbsEliderMenuClickOutside").FilesNg(),
TestCase("breadcrumbsEliderMenuItemClick").FilesNg(),
TestCase("breadcrumbsEliderMenuItemTabLeft").FilesNg(),
TestCase("breadcrumbsEliderMenuItemTabRight").FilesNg()));
WRAPPED_INSTANTIATE_TEST_SUITE_P(
FormatDialog, /* format_dialog.js */
FilesAppBrowserTest,
::testing::Values(TestCase("formatDialog"),
TestCase("formatDialogEmpty"),
TestCase("formatDialogCancel"),
TestCase("formatDialogNameLength"),
TestCase("formatDialogNameInvalid"),
TestCase("formatDialogGearMenu")));
} // namespace file_manager