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