17dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch// Copyright 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)
57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_SYNC_OPERATION_RESOLVER_H_
67dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#define CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_SYNC_OPERATION_RESOLVER_H_
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/gtest_prod_util.h"
92385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/file_change.h"
102385ea399aae016c0806a4f9ef3c9cfe3d2a39dfBen Murdoch#include "chrome/browser/sync_file_system/sync_file_type.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/sync_file_system/sync_operation_type.h"
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace sync_file_system {
14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DriveMetadata;
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class FileChange;
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class LocalSyncOperationResolver {
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
20b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // |remote_file_change| is non-null when we have a remote change for the file,
21b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  // and |drive_metadata| is also non-null when we have metadata.
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType Resolve(
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const FileChange& local_file_change,
24b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change,
25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const DriveMetadata* drive_metadata);
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForAddOrUpdateFile(
29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change,
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SyncFileType remote_file_type_in_metadata);
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForAddOrUpdateFileInConflict(
32b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change);
337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForAddDirectory(
34b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change,
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SyncFileType remote_file_type_in_metadata);
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForAddDirectoryInConflict();
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForDelete(
38b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change,
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      SyncFileType remote_file_type_in_metadata);
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  static SyncOperationType ResolveForDeleteInConflict(
41b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)      const FileChange* remote_file_change);
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           ResolveForAddOrUpdateFile);
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           ResolveForAddOrUpdateFileInConflict);
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           ResolveForAddDirectory);
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                           ResolveForAddDirectoryInConflict);
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                           ResolveForDelete);
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  FRIEND_TEST_ALL_PREFIXES(LocalSyncOperationResolverTest,
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                           ResolveForDeleteInConflict);
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace sync_file_system
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_DRIVE_BACKEND_LOCAL_SYNC_OPERATION_RESOLVER_H_
60