15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h"
6a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "base/command_line.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/file_status_observer.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/local_change_processor.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/mock_remote_file_sync_service.h"
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/sync_file_system/sync_file_system_service_factory.h"
152385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/sync_status_code.h"
162385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/syncable_file_system_util.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_version_info.h"
18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h"
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/fileapi/file_system_url.h"
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_manager.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::_;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Eq;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Ne;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Property;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::Return;
2903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)using storage::FileSystemURL;
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using sync_file_system::MockRemoteFileSyncService;
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using sync_file_system::RemoteFileSyncService;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using sync_file_system::SyncFileSystemServiceFactory;
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SyncFileSystemApiTest : public ExtensionApiTest {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SyncFileSystemApiTest()
39e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      : mock_remote_service_(NULL),
40e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        real_minimum_preserved_space_(0),
41e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        real_default_quota_(0) {}
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ExtensionApiTest::SetUpInProcessBrowserTestFixture();
45e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    real_minimum_preserved_space_ =
4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        storage::QuotaManager::kMinimumPreserveForSystem;
4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::QuotaManager::kMinimumPreserveForSystem = 0;
49e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // TODO(calvinlo): Update test code after default quota is made const
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // (http://crbug.com/155488).
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    real_default_quota_ =
5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        storage::QuotaManager::kSyncableStorageDefaultHostQuota;
5403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::QuotaManager::kSyncableStorageDefaultHostQuota = 123456;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::QuotaManager::kMinimumPreserveForSystem =
59e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch        real_minimum_preserved_space_;
6003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)    storage::QuotaManager::kSyncableStorageDefaultHostQuota =
6103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)        real_default_quota_;
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ExtensionApiTest::TearDownInProcessBrowserTestFixture();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE {
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // Must happen after the browser process is created because instantiating
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // the factory will instantiate ExtensionSystemFactory which depends on
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    // ExtensionsBrowserClient setup in BrowserProcessImpl.
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    mock_remote_service_ = new ::testing::NiceMock<MockRemoteFileSyncService>;
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    SyncFileSystemServiceFactory::GetInstance()->set_mock_remote_file_service(
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)        scoped_ptr<RemoteFileSyncService>(mock_remote_service_));
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    ExtensionApiTest::SetUpOnMainThread();
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::testing::NiceMock<MockRemoteFileSyncService>* mock_remote_service() {
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return mock_remote_service_;
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ::testing::NiceMock<MockRemoteFileSyncService>* mock_remote_service_;
81e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  int64 real_minimum_preserved_space_;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int64 real_default_quota_;
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ACTION_P(NotifyOkStateAndCallback, mock_remote_service) {
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mock_remote_service->NotifyRemoteServiceStateUpdated(
872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      sync_file_system::REMOTE_SERVICE_OK, "Test event description.");
882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::MessageLoopProxy::current()->PostTask(
892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      FROM_HERE, base::Bind(arg1, sync_file_system::SYNC_STATUS_OK));
902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ACTION_P2(UpdateRemoteChangeQueue, origin, mock_remote_service) {
932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  *origin = arg0;
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mock_remote_service->NotifyRemoteChangeQueueUpdated(1);
952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ACTION_P5(ReturnWithFakeFileAddedStatus,
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          origin,
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          mock_remote_service,
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_direction,
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_status,
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_action_taken) {
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FileSystemURL mock_url = sync_file_system::CreateSyncableFileSystemURL(
1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      *origin,
1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::FilePath(FILE_PATH_LITERAL("foo.txt")));
1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mock_remote_service->NotifyRemoteChangeQueueUpdated(0);
1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::MessageLoopProxy::current()->PostTask(
1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      FROM_HERE, base::Bind(arg0,
1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            sync_file_system::SYNC_STATUS_OK,
1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                            mock_url));
1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mock_remote_service->NotifyFileStatusChanged(
1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      mock_url, sync_direction, sync_file_status, sync_action_taken);
1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
117e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, GetFileStatus) {
1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/get_file_status"))
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, GetFileStatuses) {
1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Mocking to return IsConflicting() == true only for the path "Conflicting".
1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::FilePath conflicting = base::FilePath::FromUTF8Unsafe("Conflicting");
1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/get_file_statuses"))
1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
129e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, GetUsageAndQuota) {
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(RunExtensionTest("sync_file_system/get_usage_and_quota"))
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, OnFileStatusChanged) {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Mock a pending remote change to be synced.
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL origin;
13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), RegisterOrigin(_, _))
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .WillOnce(UpdateRemoteChangeQueue(&origin, mock_remote_service()));
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_))
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .WillOnce(ReturnWithFakeFileAddedStatus(
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          &origin,
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          mock_remote_service(),
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_FILE_STATUS_SYNCED,
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_ACTION_ADDED,
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL));
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/on_file_status_changed"))
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, OnFileStatusChangedDeleted) {
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Mock a pending remote change to be synced.
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  GURL origin;
15358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), RegisterOrigin(_, _))
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .WillOnce(UpdateRemoteChangeQueue(&origin, mock_remote_service()));
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), ProcessRemoteChange(_))
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .WillOnce(ReturnWithFakeFileAddedStatus(
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          &origin,
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          mock_remote_service(),
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_FILE_STATUS_SYNCED,
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_ACTION_DELETED,
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          sync_file_system::SYNC_DIRECTION_REMOTE_TO_LOCAL));
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest(
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "sync_file_system/on_file_status_changed_deleted"))
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, OnServiceStatusChanged) {
16858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), RegisterOrigin(_, _))
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      .WillOnce(NotifyOkStateAndCallback(mock_remote_service()));
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/on_service_status_changed"))
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, RequestFileSystem) {
17558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  EXPECT_CALL(*mock_remote_service(), RegisterOrigin(_, _)).Times(1);
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/request_file_system"))
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
180e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochIN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, WriteFileThenGetUsage) {
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/write_file_then_get_usage"))
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      << message_;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, ConflictResolutionPolicy) {
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/conflict_resolution_policy"))
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      << message_;
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
190424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SyncFileSystemApiTest, GetServiceStatus) {
191424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  mock_remote_service()->SetServiceState(
192424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      sync_file_system::REMOTE_SERVICE_AUTHENTICATION_REQUIRED);
193424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)  ASSERT_TRUE(RunPlatformAppTest("sync_file_system/get_service_status"))
194424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)      << message_;
195424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)}
196