1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Browser test for basic Chrome OS file manager functionality:
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//  - The file list is updated when a file is added externally to the Downloads
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//    folder.
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//  - Selecting a file and copy-pasting it with the keyboard copies the file.
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)//  - Selecting a file and pressing delete deletes it.
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <deque>
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <string>
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/bind.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/files/file_path.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h"
1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/json/json_reader.h"
1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/json/json_value_converter.h"
194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/json/json_writer.h"
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/prefs/pref_service.h"
2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "base/strings/string_piece.h"
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/time/time.h"
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/drive_integration_service.h"
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/chromeos/drive/file_system_interface.h"
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/file_manager/app_id.h"
2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/drive_test_util.h"
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/file_manager/path_util.h"
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/file_manager/volume_manager.h"
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/chromeos/profiles/profile_helper.h"
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/drive/fake_drive_service.h"
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/component_loader.h"
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_util.h"
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/ash/multi_user/multi_user_window_manager.h"
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/chrome_switches.h"
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/common/pref_names.h"
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chromeos/chromeos_switches.h"
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "components/user_manager/user_manager.h"
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/browser/notification_service.h"
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/public/test/test_utils.h"
43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/browser/api/test/test_api.h"
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window.h"
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window_registry.h"
465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/notification_types.h"
47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h"
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/test/extension_test_message_listener.h"
4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "google_apis/drive/drive_api_parser.h"
50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "google_apis/drive/test_util.h"
512385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "net/test/embedded_test_server/embedded_test_server.h"
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/external_mount_points.h"
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using drive::DriveIntegrationServiceFactory;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)namespace file_manager {
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum EntryType {
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FILE,
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DIRECTORY,
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)enum TargetVolume { LOCAL_VOLUME, DRIVE_VOLUME, USB_VOLUME, };
6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)enum SharedOption {
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  NONE,
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SHARED,
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
71868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)enum GuestMode {
72868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NOT_IN_GUEST_MODE,
7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  IN_GUEST_MODE,
74f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  IN_INCOGNITO
75868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)};
76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// This global operator is used from Google Test to format error messages.
78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)std::ostream& operator<<(std::ostream& os, const GuestMode& guest_mode) {
79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return os << (guest_mode == IN_GUEST_MODE ?
80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                "IN_GUEST_MODE" : "NOT_IN_GUEST_MODE");
81868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
82868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Maps the given string to EntryType. Returns true on success.
8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool MapStringToEntryType(const base::StringPiece& value, EntryType* output) {
8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (value == "file")
8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = FILE;
8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else if (value == "directory")
8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = DIRECTORY;
8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else
9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Maps the given string to SharedOption. Returns true on success.
9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool MapStringToSharedOption(const base::StringPiece& value,
9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             SharedOption* output) {
9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (value == "shared")
9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = SHARED;
9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else if (value == "none")
10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = NONE;
10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else
10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Maps the given string to TargetVolume. Returns true on success.
10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool MapStringToTargetVolume(const base::StringPiece& value,
10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                             TargetVolume* output) {
10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  if (value == "drive")
11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = DRIVE_VOLUME;
11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else if (value == "local")
11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    *output = LOCAL_VOLUME;
113a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  else if (value == "usb")
114a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    *output = USB_VOLUME;
11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  else
11658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    return false;
11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return true;
11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Maps the given string to base::Time. Returns true on success.
12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool MapStringToTime(const base::StringPiece& value, base::Time* time) {
12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return base::Time::FromString(value.as_string().c_str(), time);
12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Test data of file or directory.
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct TestEntryInfo {
12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TestEntryInfo() : type(FILE), shared_option(NONE) {}
12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
129424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  TestEntryInfo(EntryType type,
130424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                const std::string& source_file_name,
13168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                const std::string& target_path,
132424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                const std::string& mime_type,
133424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                SharedOption shared_option,
134424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                const base::Time& last_modified_time) :
135424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      type(type),
136424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      source_file_name(source_file_name),
13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      target_path(target_path),
138424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      mime_type(mime_type),
139424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      shared_option(shared_option),
140424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      last_modified_time(last_modified_time) {
141424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  }
142424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EntryType type;
144424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string source_file_name;  // Source file name to be used as a prototype.
14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::string target_path;  // Target file or directory path.
146424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  std::string mime_type;
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  SharedOption shared_option;
148424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  base::Time last_modified_time;
14958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
15058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Registers the member information to the given converter.
15158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  static void RegisterJSONConverter(
15258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      base::JSONValueConverter<TestEntryInfo>* converter);
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// static
15658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void TestEntryInfo::RegisterJSONConverter(
15758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    base::JSONValueConverter<TestEntryInfo>* converter) {
15858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterCustomField("type",
15958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &TestEntryInfo::type,
16058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &MapStringToEntryType);
16158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterStringField("sourceFileName",
16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &TestEntryInfo::source_file_name);
16368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  converter->RegisterStringField("targetPath", &TestEntryInfo::target_path);
16458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterStringField("mimeType", &TestEntryInfo::mime_type);
16558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterCustomField("sharedOption",
16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &TestEntryInfo::shared_option,
16758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &MapStringToSharedOption);
16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterCustomField("lastModifiedTime",
16958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &TestEntryInfo::last_modified_time,
17058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &MapStringToTime);
17158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
17258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
17358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Message from JavaScript to add entries.
17458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct AddEntriesMessage {
17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Target volume to be added the |entries|.
17658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TargetVolume volume;
17758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
17858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Entries to be added.
17958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  ScopedVector<TestEntryInfo> entries;
18058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
18158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // Registers the member information to the given converter.
18258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  static void RegisterJSONConverter(
18358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      base::JSONValueConverter<AddEntriesMessage>* converter);
18458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)};
18558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
18658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// static
18758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void AddEntriesMessage::RegisterJSONConverter(
18858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    base::JSONValueConverter<AddEntriesMessage>* converter) {
18958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterCustomField("volume",
19058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &AddEntriesMessage::volume,
19158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)                                 &MapStringToTargetVolume);
19258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  converter->RegisterRepeatedMessage<TestEntryInfo>(
19358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      "entries",
19458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      &AddEntriesMessage::entries);
19558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
19658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
197a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Test volume.
198a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class TestVolume {
199a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected:
200a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit TestVolume(const std::string& name) : name_(name) {}
201a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~TestVolume() {}
202a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool CreateRootDirectory(const Profile* profile) {
20446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    const base::FilePath path = profile->GetPath().Append(name_);
20546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return root_.path() == path || root_.Set(path);
206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
207a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
208a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const std::string& name() { return name_; }
209a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const base::FilePath root_path() { return root_.path(); }
210a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
211a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
212a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::string name_;
213a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::ScopedTempDir root_;
214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// The local volume class for test.
217c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// This class provides the operations for a test volume that simulates local
218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// drive.
219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class LocalTestVolume : public TestVolume {
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
221a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  explicit LocalTestVolume(const std::string& name) : TestVolume(name) {}
222a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~LocalTestVolume() {}
223a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
224c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Adds this volume to the file system as a local volume. Returns true on
225c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // success.
226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool Mount(Profile* profile) = 0;
227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
228868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  void CreateEntry(const TestEntryInfo& entry) {
22968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const base::FilePath target_path =
230a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        root_path().AppendASCII(entry.target_path);
23168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
23268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    entries_.insert(std::make_pair(target_path, entry));
233868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    switch (entry.type) {
234868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      case FILE: {
23568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        const base::FilePath source_path =
236868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            google_apis::test_util::GetTestFilePath("chromeos/file_manager").
237868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            AppendASCII(entry.source_file_name);
2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch        ASSERT_TRUE(base::CopyFile(source_path, target_path))
239868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            << "Copy from " << source_path.value()
240868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            << " to " << target_path.value() << " failed.";
241868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        break;
242868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      }
243868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      case DIRECTORY:
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)        ASSERT_TRUE(base::CreateDirectory(target_path)) <<
245868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            "Failed to create a directory: " << target_path.value();
246868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        break;
247868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    }
24868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ASSERT_TRUE(UpdateModifiedTime(entry));
249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
25268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Updates ModifiedTime of the entry and its parents by referring
25368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // TestEntryInfo. Returns true on success.
25468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  bool UpdateModifiedTime(const TestEntryInfo& entry) {
255a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const base::FilePath path = root_path().AppendASCII(entry.target_path);
256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    if (!base::TouchFile(path, entry.last_modified_time,
257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                         entry.last_modified_time))
25868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return false;
25968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
26068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // Update the modified time of parent directories because it may be also
26168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // affected by the update of child items.
262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (path.DirName() != root_path()) {
26368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      const std::map<base::FilePath, const TestEntryInfo>::iterator it =
26468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          entries_.find(path.DirName());
26568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      if (it == entries_.end())
26668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        return false;
26768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      return UpdateModifiedTime(it->second);
26868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    }
26968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return true;
27068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
27168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
27268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  std::map<base::FilePath, const TestEntryInfo> entries_;
273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
275a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class DownloadsTestVolume : public LocalTestVolume {
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
277a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DownloadsTestVolume() : LocalTestVolume("Downloads") {}
278a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~DownloadsTestVolume() {}
279a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
280a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool Mount(Profile* profile) OVERRIDE {
281a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return CreateRootDirectory(profile) &&
282a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)           VolumeManager::Get(profile)
283a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               ->RegisterDownloadsDirectoryForTesting(root_path());
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
285a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
286a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
28746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Test volume for mimicing a specified type of volumes by a local folder.
28846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class FakeTestVolume : public LocalTestVolume {
289a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
29046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  FakeTestVolume(const std::string& name,
29146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 VolumeType volume_type,
29246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                 chromeos::DeviceType device_type)
29346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      : LocalTestVolume(name),
29446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        volume_type_(volume_type),
29546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        device_type_(device_type) {}
29646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual ~FakeTestVolume() {}
29746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
29846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  // Simple test entries used for testing, e.g., read-only volumes.
29946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  bool PrepareTestEntries(Profile* profile) {
30046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    if (!CreateRootDirectory(profile))
30146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      return false;
30246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    // Must be in sync with BASIC_FAKE_ENTRY_SET in the JS test code.
30346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    CreateEntry(
30446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestEntryInfo(FILE, "text.txt", "hello.txt", "text/plain", NONE,
30546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      base::Time::Now()));
30646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    CreateEntry(
30746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestEntryInfo(DIRECTORY, std::string(), "A", std::string(), NONE,
30846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      base::Time::Now()));
30946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return true;
31046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
312a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual bool Mount(Profile* profile) OVERRIDE {
313a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (!CreateRootDirectory(profile))
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      return false;
31503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::ExternalMountPoints* const mount_points =
31603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        storage::ExternalMountPoints::GetSystemInstance();
317a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
318a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // First revoke the existing mount point (if any).
319a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    mount_points->RevokeFileSystem(name());
320a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const bool result =
321a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        mount_points->RegisterFileSystem(name(),
32203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                         storage::kFileSystemTypeNativeLocal,
32303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                         storage::FileSystemMountOption(),
324a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                         root_path());
325a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (!result)
326a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      return false;
327a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
32846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    VolumeManager::Get(profile)->AddVolumeInfoForTesting(
32946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        root_path(), volume_type_, device_type_);
330c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return true;
331c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
33246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
33346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
33446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const VolumeType volume_type_;
33546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const chromeos::DeviceType device_type_;
336a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
337a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
338a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// The drive volume class for test.
339a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This class provides the operations for a test volume that simulates Google
340a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// drive.
341a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class DriveTestVolume : public TestVolume {
342a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
343a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DriveTestVolume() : TestVolume("drive"), integration_service_(NULL) {}
344a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual ~DriveTestVolume() {}
345c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
346a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void CreateEntry(const TestEntryInfo& entry) {
34768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const base::FilePath path =
34868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        base::FilePath::FromUTF8Unsafe(entry.target_path);
34968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    const std::string target_name = path.BaseName().AsUTF8Unsafe();
35068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
35168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    // Obtain the parent entry.
35268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    drive::FileError error = drive::FILE_ERROR_OK;
35368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    scoped_ptr<drive::ResourceEntry> parent_entry(new drive::ResourceEntry);
354f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    integration_service_->file_system()->GetResourceEntry(
35568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        drive::util::GetDriveMyDriveRootPath().Append(path).DirName(),
35668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        google_apis::test_util::CreateCopyResultCallback(
35768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)            &error, &parent_entry));
358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    content::RunAllBlockingPoolTasksUntilIdle();
35968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ASSERT_EQ(drive::FILE_ERROR_OK, error);
36068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ASSERT_TRUE(parent_entry);
36168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
362868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    switch (entry.type) {
363868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      case FILE:
364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        CreateFile(entry.source_file_name,
36568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                   parent_entry->resource_id(),
36668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                   target_name,
367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                   entry.mime_type,
368868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                   entry.shared_option == SHARED,
369424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                   entry.last_modified_time);
370868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        break;
371868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      case DIRECTORY:
372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        CreateDirectory(
373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            parent_entry->resource_id(), target_name, entry.last_modified_time);
374868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)        break;
375c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
377c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
378c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Creates an empty directory with the given |name| and |modification_time|.
379a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void CreateDirectory(const std::string& parent_id,
38068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                       const std::string& target_name,
381424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                       const base::Time& modification_time) {
382c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
38346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_ptr<google_apis::FileResource> entry;
384a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->AddNewDirectory(
38568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        parent_id,
38668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        target_name,
3875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        drive::DriveServiceInterface::AddNewDirectoryOptions(),
38846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        google_apis::test_util::CreateCopyResultCallback(&error, &entry));
38990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
39068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED, error);
39146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ASSERT_TRUE(entry);
392c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
393a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->SetLastModifiedTime(
39446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        entry->file_id(),
395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        modification_time,
39646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        google_apis::test_util::CreateCopyResultCallback(&error, &entry));
39790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
39890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ASSERT_TRUE(error == google_apis::HTTP_SUCCESS);
39946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ASSERT_TRUE(entry);
400c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CheckForUpdates();
401c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
402c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
40390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Creates a test file with the given spec.
40490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // Serves |test_file_name| file. Pass an empty string for an empty file.
405a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void CreateFile(const std::string& source_file_name,
40668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                  const std::string& parent_id,
40768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                  const std::string& target_name,
408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  const std::string& mime_type,
409c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                  bool shared_with_me,
410424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)                  const base::Time& modification_time) {
411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR;
41290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
41390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    std::string content_data;
41490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (!source_file_name.empty()) {
41590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base::FilePath source_file_path =
41690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)          google_apis::test_util::GetTestFilePath("chromeos/file_manager").
41790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)              AppendASCII(source_file_name);
41858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      ASSERT_TRUE(base::ReadFileToString(source_file_path, &content_data));
41990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    }
42090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
42146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scoped_ptr<google_apis::FileResource> entry;
422a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->AddNewFile(
423c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        mime_type,
42490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        content_data,
42568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        parent_id,
42668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        target_name,
427c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        shared_with_me,
42846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        google_apis::test_util::CreateCopyResultCallback(&error, &entry));
42990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
43090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_CREATED, error);
43146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ASSERT_TRUE(entry);
432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
433a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->SetLastModifiedTime(
43446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        entry->file_id(),
435424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)        modification_time,
43646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        google_apis::test_util::CreateCopyResultCallback(&error, &entry));
43790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    base::MessageLoop::current()->RunUntilIdle();
43890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ASSERT_EQ(google_apis::HTTP_SUCCESS, error);
43946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ASSERT_TRUE(entry);
440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    CheckForUpdates();
442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Notifies FileSystem that the contents in FakeDriveService are
445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // changed, hence the new contents should be fetched.
446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void CheckForUpdates() {
44790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    if (integration_service_ && integration_service_->file_system()) {
44890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      integration_service_->file_system()->CheckForUpdates();
449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    }
450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4522385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // Sets the url base for the test server to be used to generate share urls
4532385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  // on the files and directories.
454a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void ConfigureShareUrlBase(const GURL& share_url_base) {
455a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->set_share_url_base(share_url_base);
4562385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch  }
4572385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  drive::DriveIntegrationService* CreateDriveIntegrationService(
45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      Profile* profile) {
460a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    profile_ = profile;
461a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_ = new drive::FakeDriveService;
462a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    fake_drive_service_->LoadAppListForDriveApi("drive/applist.json");
4635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
464a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    if (!CreateRootDirectory(profile))
465a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      return NULL;
46690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    integration_service_ = new drive::DriveIntegrationService(
467a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        profile, NULL, fake_drive_service_, std::string(), root_path(), NULL);
46890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return integration_service_;
469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
472a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  Profile* profile_;
473a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  drive::FakeDriveService* fake_drive_service_;
47490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  drive::DriveIntegrationService* integration_service_;
475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
477eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Listener to obtain the test relative messages synchronously.
478eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FileManagerTestListener : public content::NotificationObserver {
479eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
480eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  struct Message {
481eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    int type;
482eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    std::string message;
483f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    scoped_refptr<extensions::TestSendMessageFunction> function;
484eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  };
485eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
486eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FileManagerTestListener() {
487eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    registrar_.Add(this,
4885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   extensions::NOTIFICATION_EXTENSION_TEST_PASSED,
489eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   content::NotificationService::AllSources());
490eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    registrar_.Add(this,
4915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   extensions::NOTIFICATION_EXTENSION_TEST_FAILED,
492eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   content::NotificationService::AllSources());
493eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    registrar_.Add(this,
4945f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                   extensions::NOTIFICATION_EXTENSION_TEST_MESSAGE,
495eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                   content::NotificationService::AllSources());
496eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
497eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
498eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Message GetNextMessage() {
499eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    if (messages_.empty())
500eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      content::RunMessageLoop();
501eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    const Message entry = messages_.front();
502eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    messages_.pop_front();
503eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return entry;
504eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
505eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
506eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void Observe(int type,
507eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       const content::NotificationSource& source,
508eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                       const content::NotificationDetails& details) OVERRIDE {
509eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    Message entry;
510eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    entry.type = type;
5115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    entry.message = type != extensions::NOTIFICATION_EXTENSION_TEST_PASSED
5125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        ? *content::Details<std::string>(details).ptr()
5135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)                        : std::string();
5145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    entry.function =
5155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)        type == extensions::NOTIFICATION_EXTENSION_TEST_MESSAGE
5165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            ? content::Source<extensions::TestSendMessageFunction>(source).ptr()
5175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)            : NULL;
518eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    messages_.push_back(entry);
519eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    base::MessageLoopForUI::current()->Quit();
520eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
521eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
522eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
523eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  std::deque<Message> messages_;
524eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  content::NotificationRegistrar registrar_;
525eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
526eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
527868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// The base test class.
5285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FileManagerBrowserTestBase : public ExtensionApiTest {
529c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) protected:
530868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE;
531868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
532868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE;
533868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Adds an incognito and guest-mode flags for tests in the guest mode.
535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
537c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Loads our testing extension and sends it a string identifying the current
538c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // test.
53946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual void StartTest();
54046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void RunTestMessageLoop();
541c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Overriding point for test configurations.
54346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual const char* GetTestManifestName() const {
54446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return "file_manager_test_manifest.json";
54546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
5465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual GuestMode GetGuestModeParam() const = 0;
5475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const char* GetTestCaseNameParam() const = 0;
5485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual std::string OnMessage(const std::string& name,
5495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const base::Value* value);
5505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
5515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<LocalTestVolume> local_volume_;
552a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  linked_ptr<DriveTestVolume> drive_volume_;
553a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::map<Profile*, linked_ptr<DriveTestVolume> > drive_volumes_;
55446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<FakeTestVolume> usb_volume_;
55546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  scoped_ptr<FakeTestVolume> mtp_volume_;
556a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
557a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
558a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  drive::DriveIntegrationService* CreateDriveIntegrationService(
559a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      Profile* profile);
560a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  DriveIntegrationServiceFactory::FactoryCallback
561a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      create_drive_integration_service_;
562a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<DriveIntegrationServiceFactory::ScopedFactoryForTest>
563a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      service_factory_for_test_;
564c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
565c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileManagerBrowserTestBase::SetUpInProcessBrowserTestFixture() {
567868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ExtensionApiTest::SetUpInProcessBrowserTestFixture();
568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  extensions::ComponentLoader::EnableBackgroundExtensionsForTesting();
5695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
570a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  local_volume_.reset(new DownloadsTestVolume);
5715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (GetGuestModeParam() != IN_GUEST_MODE) {
572a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    create_drive_integration_service_ =
573a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        base::Bind(&FileManagerBrowserTestBase::CreateDriveIntegrationService,
574a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                   base::Unretained(this));
575a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    service_factory_for_test_.reset(
576a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        new DriveIntegrationServiceFactory::ScopedFactoryForTest(
577a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            &create_drive_integration_service_));
5785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
579868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
580868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileManagerBrowserTestBase::SetUpOnMainThread() {
582868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  ExtensionApiTest::SetUpOnMainThread();
5835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ASSERT_TRUE(local_volume_->Mount(profile()));
584868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
585a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (GetGuestModeParam() != IN_GUEST_MODE) {
5862385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    // Install the web server to serve the mocked share dialog.
5872385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
5882385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    const GURL share_url_base(embedded_test_server()->GetURL(
5892385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch        "/chromeos/file_manager/share_dialog_mock/index.html"));
590f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    drive_volume_ = drive_volumes_[profile()->GetOriginalProfile()];
591a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    drive_volume_->ConfigureShareUrlBase(share_url_base);
5925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    test_util::WaitUntilDriveMountPointIsAdded(profile());
593868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  }
594868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}
595868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
5965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileManagerBrowserTestBase::SetUpCommandLine(CommandLine* command_line) {
5975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (GetGuestModeParam() == IN_GUEST_MODE) {
598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    command_line->AppendSwitch(chromeos::switches::kGuestSession);
599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    command_line->AppendSwitchNative(chromeos::switches::kLoginUser, "");
600c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    command_line->AppendSwitch(switches::kIncognito);
601c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
602f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  if (GetGuestModeParam() == IN_INCOGNITO) {
603f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    command_line->AppendSwitch(switches::kIncognito);
604f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
605c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ExtensionApiTest::SetUpCommandLine(command_line);
606c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
607c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
6085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FileManagerBrowserTestBase::StartTest() {
609eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Launch the extension.
61046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const base::FilePath path =
61146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      test_data_dir_.AppendASCII("file_manager_browsertest");
61246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  const extensions::Extension* const extension =
61346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      LoadExtensionAsComponentWithManifest(path, GetTestManifestName());
614c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_TRUE(extension);
615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
61646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  RunTestMessageLoop();
61746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
61846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
61946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)void FileManagerBrowserTestBase::RunTestMessageLoop() {
620eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Handle the messages from JavaScript.
621eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // The while loop is break when the test is passed or failed.
622eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FileManagerTestListener listener;
623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  while (true) {
624eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerTestListener::Message entry = listener.GetNextMessage();
6255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    if (entry.type == extensions::NOTIFICATION_EXTENSION_TEST_PASSED) {
626eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      // Test succeed.
627eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
6285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    } else if (entry.type == extensions::NOTIFICATION_EXTENSION_TEST_FAILED) {
629eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      // Test failed.
630eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      ADD_FAILURE() << entry.message;
631eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      break;
63258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    }
63358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
63458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // Parse the message value as JSON.
63558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const scoped_ptr<const base::Value> value(
63658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        base::JSONReader::Read(entry.message));
63758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
63858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    // If the message is not the expected format, just ignore it.
63958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    const base::DictionaryValue* message_dictionary = NULL;
64058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    std::string name;
64158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    if (!value || !value->GetAsDictionary(&message_dictionary) ||
64258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)        !message_dictionary->GetString("name", &name))
64358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      continue;
64458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
6455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    entry.function->Reply(OnMessage(name, value.get()));
6465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
6475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
6485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)std::string FileManagerBrowserTestBase::OnMessage(const std::string& name,
6505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                                  const base::Value* value) {
6515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  if (name == "getTestName") {
6525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Pass the test case name.
6535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return GetTestCaseNameParam();
6545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else if (name == "getRootPaths") {
6555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Pass the root paths.
6565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
6575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    res->SetString("downloads",
6585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "/" + util::GetDownloadsMountPointName(profile()));
6595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    res->SetString("drive",
6605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        "/" + drive::util::GetDriveMountPointPath(profile()
6615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)            ).BaseName().AsUTF8Unsafe() + "/root");
6625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string jsonString;
6635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::JSONWriter::Write(res.get(), &jsonString);
6645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return jsonString;
6655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else if (name == "isInGuestMode") {
6665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Obtain whether the test is in guest mode or not.
667f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    return GetGuestModeParam() != NOT_IN_GUEST_MODE ? "true" : "false";
6685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else if (name == "getCwsWidgetContainerMockUrl") {
6695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Obtain whether the test is in guest mode or not.
6705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const GURL url = embedded_test_server()->GetURL(
6715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          "/chromeos/file_manager/cws_container_mock/index.html");
6725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string origin = url.GetOrigin().spec();
6735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Removes trailing a slash.
6755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (*origin.rbegin() == '/')
6765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      origin.resize(origin.length() - 1);
6775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
6785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const scoped_ptr<base::DictionaryValue> res(new base::DictionaryValue());
6795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    res->SetString("url", url.spec());
6805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    res->SetString("origin", origin);
6815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string jsonString;
6825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::JSONWriter::Write(res.get(), &jsonString);
6835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return jsonString;
6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  } else if (name == "addEntries") {
6855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Add entries to the specified volume.
6865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    base::JSONValueConverter<AddEntriesMessage> add_entries_message_converter;
6875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    AddEntriesMessage message;
6885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (!add_entries_message_converter.Convert(*value, &message))
6895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return "onError";
6905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for (size_t i = 0; i < message.entries.size(); ++i) {
6915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      switch (message.volume) {
6925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        case LOCAL_VOLUME:
6935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          local_volume_->CreateEntry(*message.entries[i]);
6945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          break;
6955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        case DRIVE_VOLUME:
696a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          if (drive_volume_.get())
697a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            drive_volume_->CreateEntry(*message.entries[i]);
698a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          break;
699a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        case USB_VOLUME:
700a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          if (usb_volume_)
701a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)            usb_volume_->CreateEntry(*message.entries[i]);
7025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          break;
7035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        default:
7045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          NOTREACHED();
7055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          break;
70658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      }
707eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    }
7085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return "onEntryAdded";
709a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  } else if (name == "mountFakeUsb") {
71046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    usb_volume_.reset(new FakeTestVolume("fake-usb",
71146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         VOLUME_TYPE_REMOVABLE_DISK_PARTITION,
71246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         chromeos::DEVICE_TYPE_USB));
713a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    usb_volume_->Mount(profile());
714a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    return "true";
71546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  } else if (name == "mountFakeMtp") {
71646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    mtp_volume_.reset(new FakeTestVolume("fake-mtp",
71746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         VOLUME_TYPE_MTP,
71846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                         chromeos::DEVICE_TYPE_UNKNOWN));
71946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    if (!mtp_volume_->PrepareTestEntries(profile()))
72046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)      return "false";
72146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    mtp_volume_->Mount(profile());
72246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return "true";
7235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
7245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return "unknownMessage";
7255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
7265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
727a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)drive::DriveIntegrationService*
728a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)FileManagerBrowserTestBase::CreateDriveIntegrationService(Profile* profile) {
729f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  drive_volumes_[profile->GetOriginalProfile()].reset(new DriveTestVolume());
730f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return drive_volumes_[profile->GetOriginalProfile()]->
731f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      CreateDriveIntegrationService(profile);
732a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
733a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Parameter of FileManagerBrowserTest.
7355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// The second value is the case name of JavaScript.
7365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)typedef std::tr1::tuple<GuestMode, const char*> TestParameter;
7375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test fixture class for normal (not multi-profile related) tests.
7395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FileManagerBrowserTest :
7405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      public FileManagerBrowserTestBase,
7415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      public ::testing::WithParamInterface<TestParameter> {
7425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual GuestMode GetGuestModeParam() const OVERRIDE {
7435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return std::tr1::get<0>(GetParam());
744eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const char* GetTestCaseNameParam() const OVERRIDE {
7465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return std::tr1::get<1>(GetParam());
7475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
7485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
7495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
7506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)IN_PROC_BROWSER_TEST_P(FileManagerBrowserTest, Test) {
7515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StartTest();
752c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
753c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Unlike TEST/TEST_F, which are macros that expand to further macros,
75546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// INSTANTIATE_TEST_CASE_P is a macro that expands directly to code that
75646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// stringizes the arguments. As a result, macros passed as parameters (such as
75746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// prefix or test_case_name) will not be expanded by the preprocessor. To work
75846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// around this, indirect the macro for INSTANTIATE_TEST_CASE_P, so that the
75946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// pre-processor will expand macros such as MAYBE_test_name before
76046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// instantiating the test.
76146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define WRAPPED_INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator) \
76246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  INSTANTIATE_TEST_CASE_P(prefix, test_case_name, generator)
76346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
76446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
76546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
76646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_FileDisplay DISABLED_FileDisplay
76746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
76846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_FileDisplay FileDisplay
76946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
77046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
77146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_FileDisplay,
772eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
773868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "fileDisplayDownloads"),
774868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "fileDisplayDownloads"),
77546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "fileDisplayDrive"),
77646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "fileDisplayMtp")));
77746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
7785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// http://crbug.com/327719
77946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
7805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)    DISABLED_OpenZipFiles,
781eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
782cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ::testing::Values(TestParameter(IN_GUEST_MODE, "zipOpenDownloads"),
783cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "zipOpenDownloads"),
784cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "zipOpenDrive")));
785868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
78646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
78746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
78846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_OpenVideoFiles DISABLED_OpenVideoFiles
78946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
79046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_OpenVideoFiles OpenVideoFiles
79146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
79246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
79346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_OpenVideoFiles,
794effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    FileManagerBrowserTest,
795effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    ::testing::Values(TestParameter(IN_GUEST_MODE, "videoOpenDownloads"),
796effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                      TestParameter(NOT_IN_GUEST_MODE, "videoOpenDownloads"),
797effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                      TestParameter(NOT_IN_GUEST_MODE, "videoOpenDrive")));
798effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
79946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
80046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
80146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_OpenAudioFiles DISABLED_OpenAudioFiles
80246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
80346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_OpenAudioFiles OpenAudioFiles
80446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
80546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
80646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_OpenAudioFiles,
807effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    FileManagerBrowserTest,
808e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    ::testing::Values(
809e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        TestParameter(IN_GUEST_MODE, "audioOpenDownloads"),
810e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioOpenDownloads"),
811e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioOpenDrive"),
812c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioAutoAdvanceDrive"),
813c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioRepeatSingleFileDrive"),
814c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioNoRepeatSingleFileDrive"),
815c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioRepeatMultipleFileDrive"),
816c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        TestParameter(NOT_IN_GUEST_MODE, "audioNoRepeatMultipleFileDrive")));
817effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
8181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Flaky http://crbug.com/327719
819116680a4aac90f2aa7413d9095a592090648e557Ben MurdochWRAPPED_INSTANTIATE_TEST_CASE_P(
8201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    DISABLED_CreateNewFolder,
821cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    FileManagerBrowserTest,
822cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE,
823cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    "createNewFolderAfterSelectFile"),
824cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE,
825cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    "createNewFolderDownloads"),
826cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE,
827cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    "createNewFolderDownloads"),
828cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE,
829cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)                                    "createNewFolderDrive")));
830cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
83146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
83246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
83346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_KeyboardOperations DISABLED_KeyboardOperations
83446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
83546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_KeyboardOperations KeyboardOperations
83646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
83746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
83846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_KeyboardOperations,
839eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
840868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ::testing::Values(TestParameter(IN_GUEST_MODE, "keyboardDeleteDownloads"),
841868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE,
842868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                    "keyboardDeleteDownloads"),
843868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "keyboardDeleteDrive"),
844868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "keyboardCopyDownloads"),
845868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "keyboardCopyDownloads"),
846effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                      TestParameter(NOT_IN_GUEST_MODE, "keyboardCopyDrive"),
84746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "renameFileDownloads"),
84846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "renameFileDownloads"),
84946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "renameFileDrive")));
850868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
851f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
852f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
853f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_DriveSpecific DISABLED_DriveSpecific
854f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
855f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_DriveSpecific DriveSpecific
856f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
857f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
858f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_DriveSpecific,
859eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
860868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "openSidebarRecent"),
861868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "openSidebarOffline"),
862868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE,
863868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                    "openSidebarSharedWithMe"),
864868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "autocomplete")));
865868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
86646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
86746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
86846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Transfer DISABLED_Transfer
86946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
87046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Transfer Transfer
87146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
87246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
87346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_Transfer,
874eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
87546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ::testing::Values(
87646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromDriveToDownloads"),
87746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromDownloadsToDrive"),
87846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromSharedToDownloads"),
87946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromSharedToDrive"),
88046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromRecentToDownloads"),
88146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromRecentToDrive"),
88246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromOfflineToDownloads"),
88346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "transferFromOfflineToDrive")));
88446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
88546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
88646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
88746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_RestorePrefs DISABLED_RestorePrefs
88846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
88946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_RestorePrefs RestorePrefs
89046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
89146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
89246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_RestorePrefs,
893eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    FileManagerBrowserTest,
894868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)    ::testing::Values(TestParameter(IN_GUEST_MODE, "restoreSortColumn"),
895868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "restoreSortColumn"),
896868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "restoreCurrentView"),
897868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "restoreCurrentView")));
898a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)
89946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
90046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
90146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_ShareDialog DISABLED_ShareDialog
90246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
90346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_ShareDialog ShareDialog
90446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
90546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
90646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_ShareDialog,
9072385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    FileManagerBrowserTest,
9082385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "shareFile"),
9092385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch                      TestParameter(NOT_IN_GUEST_MODE, "shareDirectory")));
9102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch
91146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
91246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
91346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_RestoreGeometry DISABLED_RestoreGeometry
91446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
91546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_RestoreGeometry RestoreGeometry
91646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
91746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
91846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_RestoreGeometry,
9193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    FileManagerBrowserTest,
9203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "restoreGeometry"),
9213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "restoreGeometry")));
9223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
92346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
92446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
92546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Traverse DISABLED_Traverse
92646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
92746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Traverse Traverse
92846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
92946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
93046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_Traverse,
93168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    FileManagerBrowserTest,
93268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    ::testing::Values(TestParameter(IN_GUEST_MODE, "traverseDownloads"),
93368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "traverseDownloads"),
93468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "traverseDrive")));
93568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
93646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
93746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
93846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_SuggestAppDialog DISABLED_SuggestAppDialog
93946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
94046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_SuggestAppDialog SuggestAppDialog
94146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
94246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
94346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_SuggestAppDialog,
9444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    FileManagerBrowserTest,
9454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "suggestAppDialog")));
9464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
94746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
94846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
94946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_ExecuteDefaultTaskOnDownloads \
95046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  DISABLED_ExecuteDefaultTaskOnDownloads
95146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
95246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_ExecuteDefaultTaskOnDownloads ExecuteDefaultTaskOnDownloads
95346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
95446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
95546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_ExecuteDefaultTaskOnDownloads,
9565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    FileManagerBrowserTest,
9575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ::testing::Values(
9585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "executeDefaultTaskOnDownloads"),
9595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        TestParameter(IN_GUEST_MODE, "executeDefaultTaskOnDownloads")));
9605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
961f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
962f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
963f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_ExecuteDefaultTaskOnDrive DISABLED_ExecuteDefaultTaskOnDrive
964f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
965f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_ExecuteDefaultTaskOnDrive ExecuteDefaultTaskOnDrive
966f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
9675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(
968f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_ExecuteDefaultTaskOnDrive,
969f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FileManagerBrowserTest,
9705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ::testing::Values(
9715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "executeDefaultTaskOnDrive")));
972f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
97346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
97446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
975f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_DefaultActionDialog DISABLED_DefaultActionDialog
976f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
977f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_DefaultActionDialog DefaultActionDialog
978f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
979f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
980f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_DefaultActionDialog,
981f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    FileManagerBrowserTest,
982f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ::testing::Values(
983f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "defaultActionDialogOnDownloads"),
984f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TestParameter(IN_GUEST_MODE, "defaultActionDialogOnDownloads"),
985f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "defaultActionDialogOnDrive")));
986f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
987f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
988f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
98946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_FolderShortcuts DISABLED_FolderShortcuts
99046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
99146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_FolderShortcuts FolderShortcuts
99246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
99346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
99446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_FolderShortcuts,
99546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    FileManagerBrowserTest,
99646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    ::testing::Values(
99746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "traverseFolderShortcuts"),
99846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "addRemoveFolderShortcuts")));
99946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
10004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)INSTANTIATE_TEST_CASE_P(
10014e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    TabIndex,
10024e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    FileManagerBrowserTest,
1003f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "searchBoxFocus")));
1004f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
100546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
100646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
100746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Thumbnails DISABLED_Thumbnails
100846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
100946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_Thumbnails Thumbnails
101046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
101146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
101246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    MAYBE_Thumbnails,
1013f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    FileManagerBrowserTest,
1014f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "thumbnailsDownloads"),
1015f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "thumbnailsDownloads")));
10164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)
1017f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
1018f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_OpenFileDialog DISABLED_OpenFileDialog
1019f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
1020f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_OpenFileDialog OpenFileDialog
1021f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
1022f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
1023f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_OpenFileDialog,
1024f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    FileManagerBrowserTest,
1025f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE,
1026f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    "openFileDialogOnDownloads"),
1027f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE,
1028f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    "openFileDialogOnDownloads"),
1029f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE,
1030f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    "openFileDialogOnDrive"),
1031f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(IN_INCOGNITO,
1032f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    "openFileDialogOnDownloads"),
1033f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(IN_INCOGNITO,
1034f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                    "openFileDialogOnDrive")));
1035f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1036f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
1037f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
1038f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_CopyBetweenWindows DISABLED_CopyBetweenWindows
1039f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
1040f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_CopyBetweenWindows CopyBetweenWindows
1041f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
1042f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
1043f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_CopyBetweenWindows,
1044a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    FileManagerBrowserTest,
1045a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ::testing::Values(
1046a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsLocalToDrive"),
1047a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsLocalToUsb"),
1048cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsUsbToDrive"),
1049cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsDriveToLocal"),
1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsDriveToUsb"),
1051cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)        TestParameter(NOT_IN_GUEST_MODE, "copyBetweenWindowsUsbToLocal")));
1052a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1053f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
1054f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#if !defined(NDEBUG)
1055f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_ShowGridView DISABLED_ShowGridView
1056f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else
1057f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#define MAYBE_ShowGridView ShowGridView
1058f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#endif
1059f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)WRAPPED_INSTANTIATE_TEST_CASE_P(
1060f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    MAYBE_ShowGridView,
1061f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    FileManagerBrowserTest,
1062f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    ::testing::Values(TestParameter(NOT_IN_GUEST_MODE, "showGridViewDownloads"),
1063f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(IN_GUEST_MODE, "showGridViewDownloads"),
1064f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                      TestParameter(NOT_IN_GUEST_MODE, "showGridViewDrive")));
1065f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
10665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Structure to describe an account info.
10675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct TestAccountInfo {
10685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const char* const email;
10695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const char* const hash;
10705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const char* const display_name;
10715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
10725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)enum {
10745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DUMMY_ACCOUNT_INDEX = 0,
10755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  PRIMARY_ACCOUNT_INDEX = 1,
10765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SECONDARY_ACCOUNT_INDEX_START = 2,
10775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
10785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)static const TestAccountInfo kTestAccounts[] = {
10805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  {"__dummy__@invalid.domain", "hashdummy", "Dummy Account"},
10815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  {"alice@invalid.domain", "hashalice", "Alice"},
10825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  {"bob@invalid.domain", "hashbob", "Bob"},
10835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  {"charlie@invalid.domain", "hashcharlie", "Charlie"},
10845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
10855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
10865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test fixture class for testing multi-profile features.
10875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MultiProfileFileManagerBrowserTest : public FileManagerBrowserTestBase {
10885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protected:
10895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Enables multi-profiles.
10905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
10915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    FileManagerBrowserTestBase::SetUpCommandLine(command_line);
10925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Logs in to a dummy profile (For making MultiProfileWindowManager happy;
10935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // browser test creates a default window and the manager tries to assign a
10945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // user for it, and we need a profile connected to a user.)
10955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    command_line->AppendSwitchASCII(chromeos::switches::kLoginUser,
10965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    kTestAccounts[DUMMY_ACCOUNT_INDEX].email);
10975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile,
10985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                    kTestAccounts[DUMMY_ACCOUNT_INDEX].hash);
10995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Logs in to the primary profile of this test.
11025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE {
11035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    const TestAccountInfo& info = kTestAccounts[PRIMARY_ACCOUNT_INDEX];
11045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    AddUser(info, true);
11065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    FileManagerBrowserTestBase::SetUpOnMainThread();
11075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Loads all users to the current session and sets up necessary fields.
11105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // This is used for preparing all accounts in PRE_ test setup, and for testing
11115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // actual login behavior.
11125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddAllUsers() {
11135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    for (size_t i = 0; i < arraysize(kTestAccounts); ++i)
11145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddUser(kTestAccounts[i], i >= SECONDARY_ACCOUNT_INDEX_START);
11155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Returns primary profile (if it is already created.)
11185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual Profile* profile() OVERRIDE {
11195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    Profile* const profile = chromeos::ProfileHelper::GetProfileByUserIdHash(
11205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        kTestAccounts[PRIMARY_ACCOUNT_INDEX].hash);
11215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return profile ? profile : FileManagerBrowserTestBase::profile();
11225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Sets the test case name (used as a function name in test_cases.js to call.)
11255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void set_test_case_name(const std::string& name) { test_case_name_ = name; }
11265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Adds a new user for testing to the current session.
11285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void AddUser(const TestAccountInfo& info, bool log_in) {
11296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)    user_manager::UserManager* const user_manager =
11306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)        user_manager::UserManager::Get();
11315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (log_in)
11325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      user_manager->UserLoggedIn(info.email, info.hash, false);
11335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    user_manager->SaveUserDisplayName(info.email,
11345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      base::UTF8ToUTF16(info.display_name));
11355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    chromeos::ProfileHelper::GetProfileByUserIdHash(info.hash)->GetPrefs()->
11365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        SetString(prefs::kGoogleServicesUsername, info.email);
11375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
11405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual GuestMode GetGuestModeParam() const OVERRIDE {
11415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return NOT_IN_GUEST_MODE;
11425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const char* GetTestCaseNameParam() const OVERRIDE {
11455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return test_case_name_.c_str();
11465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual std::string OnMessage(const std::string& name,
11495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                const base::Value* value) OVERRIDE {
11505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    if (name == "addAllUsers") {
11515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      AddAllUsers();
11525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return "true";
11535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    } else if (name == "getWindowOwnerId") {
11545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      chrome::MultiUserWindowManager* const window_manager =
11555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          chrome::MultiUserWindowManager::GetInstance();
11561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      extensions::AppWindowRegistry* const app_window_registry =
11571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci          extensions::AppWindowRegistry::Get(profile());
11585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      DCHECK(window_manager);
11595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      DCHECK(app_window_registry);
11605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const extensions::AppWindowRegistry::AppWindowList& list =
11625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          app_window_registry->GetAppWindowsForApp(
11635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              file_manager::kFileManagerAppId);
11645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      return list.size() == 1u ?
11655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          window_manager->GetUserPresentingWindow(
11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)              list.front()->GetNativeWindow()) : "";
11675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    }
11685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return FileManagerBrowserTestBase::OnMessage(name, value);
11695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
11705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  std::string test_case_name_;
11725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
11735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
117446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
117546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
117646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_PRE_BasicDownloads DISABLED_PRE_BasicDownloads
117746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_BasicDownloads DISABLED_BasicDownloads
117846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
117946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_PRE_BasicDownloads PRE_BasicDownloads
118046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_BasicDownloads BasicDownloads
118146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
118246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest,
118346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                       MAYBE_PRE_BasicDownloads) {
11845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddAllUsers();
11855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
11865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
118746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest,
118846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                       MAYBE_BasicDownloads) {
11895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddAllUsers();
11905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
11915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Sanity check that normal operations work in multi-profile setting as well.
11925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_test_case_name("keyboardCopyDownloads");
11935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StartTest();
11945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
11955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
119646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Slow tests are disabled on debug build. http://crbug.com/327719
119746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if !defined(NDEBUG)
119846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_PRE_BasicDrive DISABLED_PRE_BasicDrive
119946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_BasicDrive DISABLED_BasicDrive
120046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else
120146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_PRE_BasicDrive PRE_BasicDrive
120246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define MAYBE_BasicDrive BasicDrive
120346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif
120446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest,
120546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                       MAYBE_PRE_BasicDrive) {
12065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddAllUsers();
12075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
12085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
120946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(MultiProfileFileManagerBrowserTest, MAYBE_BasicDrive) {
12105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  AddAllUsers();
12115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
12125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Sanity check that normal operations work in multi-profile setting as well.
12135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  set_test_case_name("keyboardCopyDrive");
12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StartTest();
12155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
12165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
121746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)template<GuestMode M>
121846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class GalleryBrowserTestBase : public FileManagerBrowserTestBase {
121946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public:
122046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual GuestMode GetGuestModeParam() const OVERRIDE { return M; }
122146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual const char* GetTestCaseNameParam() const OVERRIDE {
122246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return test_case_name_.c_str();
122346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
122446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
122546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) protected:
1226f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
122703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddScript("common/test_util_common.js");
1228f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    AddScript("gallery/test_util.js");
1229f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    FileManagerBrowserTestBase::SetUp();
1230f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  }
1231f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
123246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual std::string OnMessage(const std::string& name,
123346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                const base::Value* value) OVERRIDE;
123446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
123546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  virtual const char* GetTestManifestName() const OVERRIDE {
123646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return "gallery_test_manifest.json";
123746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
123846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
123946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void AddScript(const std::string& name) {
124046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    scripts_.AppendString(
124146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)        "chrome-extension://ejhcmmdhhpdhhgmifplfmjobgegbibkn/" + name);
124246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
124346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
124446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  void set_test_case_name(const std::string& name) {
124546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    test_case_name_ = name;
124646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
124746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
124846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private:
124946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  base::ListValue scripts_;
125046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  std::string test_case_name_;
125146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)};
125246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
125346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)template<GuestMode M>
125446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string GalleryBrowserTestBase<M>::OnMessage(const std::string& name,
125546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                                 const base::Value* value) {
125646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  if (name == "getScripts") {
125746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    std::string jsonString;
125846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    base::JSONWriter::Write(&scripts_, &jsonString);
125946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)    return jsonString;
126046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  }
126146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  return FileManagerBrowserTestBase::OnMessage(name, value);
12625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
12635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
126446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef GalleryBrowserTestBase<NOT_IN_GUEST_MODE> GalleryBrowserTest;
126546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef GalleryBrowserTestBase<IN_GUEST_MODE> GalleryBrowserTestInGuestMode;
12665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
126746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, OpenSingleImageOnDownloads) {
126846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AddScript("gallery/open_image_files.js");
126946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  set_test_case_name("openSingleImageOnDownloads");
127046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  StartTest();
127146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
127246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
127346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
127446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                       OpenSingleImageOnDownloads) {
127546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AddScript("gallery/open_image_files.js");
127646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  set_test_case_name("openSingleImageOnDownloads");
127746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  StartTest();
127846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}
127946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)
128046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, OpenSingleImageOnDrive) {
128146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  AddScript("gallery/open_image_files.js");
128246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)  set_test_case_name("openSingleImageOnDrive");
12835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  StartTest();
12845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
12855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1286f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, OpenMultipleImagesOnDownloads) {
1287f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/open_image_files.js");
1288f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("openMultipleImagesOnDownloads");
1289f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1290f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1291f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1292f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1293f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       OpenMultipleImagesOnDownloads) {
1294f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/open_image_files.js");
1295f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("openMultipleImagesOnDownloads");
1296f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1297f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1298f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1299f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, OpenMultipleImagesOnDrive) {
1300f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/open_image_files.js");
1301f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("openMultipleImagesOnDrive");
1302f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1303f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1304f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1305f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, TraverseSlideImagesOnDownloads) {
1306f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1307f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("traverseSlideImagesOnDownloads");
1308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1309f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1310f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1311f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1312f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       TraverseSlideImagesOnDownloads) {
1313f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1314f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("traverseSlideImagesOnDownloads");
1315f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1316f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1317f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1318f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, TraverseSlideImagesOnDrive) {
1319f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1320f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("traverseSlideImagesOnDrive");
1321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1322f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1323f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1324f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, RenameImageOnDownloads) {
1325f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1326f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("renameImageOnDownloads");
1327f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1328f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1329f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1330f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1331f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       RenameImageOnDownloads) {
1332f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1333f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("renameImageOnDownloads");
1334f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1335f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1336f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1337f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, RenameImageOnDrive) {
1338f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1339f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("renameImageOnDrive");
1340f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1341f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1342f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1343f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, DeleteImageOnDownloads) {
1344f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1345f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("deleteImageOnDownloads");
1346f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1347f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1348f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1349f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1350f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       DeleteImageOnDownloads) {
1351f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1352f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("deleteImageOnDownloads");
1353f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1354f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1355f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1356f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, DeleteImageOnDrive) {
1357f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/slide_mode.js");
1358f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("deleteImageOnDrive");
1359f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1360f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1361f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1362f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, RotateImageOnDownloads) {
1363f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1364f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("rotateImageOnDownloads");
1365f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1366f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1368f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1369f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       RotateImageOnDownloads) {
1370f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1371f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("rotateImageOnDownloads");
1372f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1373f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1374f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1375f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, RotateImageOnDrive) {
1376f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1377f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("rotateImageOnDrive");
1378f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1379f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1380f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1381f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, CropImageOnDownloads) {
1382f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1383f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("cropImageOnDownloads");
1384f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1385f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1386f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
1388f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                       CropImageOnDownloads) {
1389f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1390f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("cropImageOnDownloads");
1391f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1392f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1393f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
1394f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, CropImageOnDrive) {
1395f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
1396f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  set_test_case_name("cropImageOnDrive");
1397f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  StartTest();
1398f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
1399f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
14006d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, ExposureImageOnDownloads) {
14016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
14026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  set_test_case_name("exposureImageOnDownloads");
14036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  StartTest();
14046d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
14056d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
14066d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTestInGuestMode,
14076d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                       ExposureImageOnDownloads) {
14086d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
14096d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  set_test_case_name("exposureImageOnDownloads");
14106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  StartTest();
14116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
14126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
14136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(GalleryBrowserTest, ExposureImageOnDrive) {
14146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  AddScript("gallery/photo_editor.js");
14156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  set_test_case_name("exposureImageOnDrive");
14166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  StartTest();
14176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}
14186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)
141903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)template<GuestMode M>
142003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)class VideoPlayerBrowserTestBase : public FileManagerBrowserTestBase {
142103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) public:
142203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual GuestMode GetGuestModeParam() const OVERRIDE { return M; }
142303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual const char* GetTestCaseNameParam() const OVERRIDE {
142403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return test_case_name_.c_str();
142503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
142603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
142703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) protected:
142803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
142903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddScript("common/test_util_common.js");
143003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    AddScript("video_player/test_util.js");
143103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    FileManagerBrowserTestBase::SetUp();
143203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
143303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
14341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
14351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    command_line->AppendSwitch(
14361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        chromeos::switches::kEnableVideoPlayerChromecastSupport);
14371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    FileManagerBrowserTestBase::SetUpCommandLine(command_line);
14381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
14391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
144003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual std::string OnMessage(const std::string& name,
144103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                const base::Value* value) OVERRIDE;
144203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
144303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  virtual const char* GetTestManifestName() const OVERRIDE {
144403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return "video_player_test_manifest.json";
144503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
144603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
144703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void AddScript(const std::string& name) {
144803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    scripts_.AppendString(
144903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        "chrome-extension://ljoplibgfehghmibaoaepfagnmbbfiga/" + name);
145003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
145103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
145203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void set_test_case_name(const std::string& name) {
145303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    test_case_name_ = name;
145403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
145503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
145603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) private:
145703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  base::ListValue scripts_;
145803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  std::string test_case_name_;
145903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)};
146003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
146103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)template<GuestMode M>
146203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)std::string VideoPlayerBrowserTestBase<M>::OnMessage(const std::string& name,
146303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)                                                     const base::Value* value) {
146403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  if (name == "getScripts") {
146503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    std::string jsonString;
146603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    base::JSONWriter::Write(&scripts_, &jsonString);
146703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    return jsonString;
146803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  }
146903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  return FileManagerBrowserTestBase::OnMessage(name, value);
147003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
147103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
147203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)typedef VideoPlayerBrowserTestBase<NOT_IN_GUEST_MODE> VideoPlayerBrowserTest;
147303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)typedef VideoPlayerBrowserTestBase<IN_GUEST_MODE>
147403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    VideoPlayerBrowserTestInGuestMode;
147503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
147603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VideoPlayerBrowserTest, OpenSingleVideoOnDownloads) {
147703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddScript("video_player/open_video_files.js");
147803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  set_test_case_name("openSingleVideoOnDownloads");
147903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  StartTest();
148003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
148103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
148203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(VideoPlayerBrowserTest, OpenSingleVideoOnDrive) {
148303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  AddScript("video_player/open_video_files.js");
148403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  set_test_case_name("openSingleVideoOnDrive");
148503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  StartTest();
148603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)}
148703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
1488c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
1489a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)}  // namespace file_manager
1490