mock_remote_file_sync_service.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_BROWSER_SYNC_FILE_SYSTEM_MOCK_REMOTE_FILE_SYNC_SERVICE_H_
6#define CHROME_BROWSER_SYNC_FILE_SYSTEM_MOCK_REMOTE_FILE_SYNC_SERVICE_H_
7
8#include <map>
9
10#include "base/memory/scoped_ptr.h"
11#include "base/observer_list.h"
12#include "chrome/browser/sync_file_system/file_status_observer.h"
13#include "chrome/browser/sync_file_system/mock_local_change_processor.h"
14#include "chrome/browser/sync_file_system/remote_change_processor.h"
15#include "chrome/browser/sync_file_system/remote_file_sync_service.h"
16#include "googleurl/src/gurl.h"
17#include "testing/gmock/include/gmock/gmock.h"
18#include "webkit/fileapi/syncable/sync_callbacks.h"
19#include "webkit/fileapi/syncable/sync_direction.h"
20#include "webkit/fileapi/syncable/sync_file_metadata.h"
21
22namespace sync_file_system {
23
24class MockRemoteFileSyncService : public RemoteFileSyncService {
25 public:
26  static const char kServiceName[];
27
28  MockRemoteFileSyncService();
29  virtual ~MockRemoteFileSyncService();
30
31  // RemoteFileSyncService overrides.
32  MOCK_METHOD1(AddServiceObserver,
33               void(RemoteFileSyncService::Observer* observer));
34  MOCK_METHOD1(AddFileStatusObserver,
35               void(FileStatusObserver* observer));
36  MOCK_METHOD2(RegisterOriginForTrackingChanges,
37               void(const GURL& origin, const SyncStatusCallback& callback));
38  MOCK_METHOD2(UnregisterOriginForTrackingChanges,
39               void(const GURL& origin, const SyncStatusCallback& callback));
40  MOCK_METHOD2(EnableOriginForTrackingChanges,
41               void(const GURL& origin, const SyncStatusCallback& callback));
42  MOCK_METHOD2(DisableOriginForTrackingChanges,
43               void(const GURL& origin, const SyncStatusCallback& callback));
44  MOCK_METHOD2(UninstallOrigin,
45               void(const GURL& origin, const SyncStatusCallback& callback));
46  MOCK_METHOD1(ProcessRemoteChange,
47               void(const SyncFileCallback& callback));
48  MOCK_METHOD1(SetRemoteChangeProcessor,
49               void(RemoteChangeProcessor* processor));
50  MOCK_METHOD0(GetLocalChangeProcessor, LocalChangeProcessor*());
51  MOCK_METHOD1(IsConflicting, bool(const fileapi::FileSystemURL& url));
52  MOCK_METHOD2(GetRemoteFileMetadata,
53               void(const fileapi::FileSystemURL& url,
54                    const SyncFileMetadataCallback& callback));
55  MOCK_CONST_METHOD0(GetCurrentState,
56                     RemoteServiceState());
57  MOCK_CONST_METHOD0(GetServiceName, const char*());
58  MOCK_METHOD1(SetSyncEnabled, void(bool));
59  MOCK_METHOD1(SetConflictResolutionPolicy,
60               SyncStatusCode(ConflictResolutionPolicy));
61  MOCK_CONST_METHOD0(GetConflictResolutionPolicy,
62                     ConflictResolutionPolicy());
63
64  // Send notifications to the observers.
65  // Can be used in the mock implementation.
66  void NotifyRemoteChangeQueueUpdated(int64 pending_changes);
67  void NotifyRemoteServiceStateUpdated(
68      RemoteServiceState state,
69      const std::string& description);
70  void NotifyFileStatusChanged(
71      const fileapi::FileSystemURL& url,
72      SyncFileStatus sync_status,
73      SyncAction action_taken,
74      SyncDirection direction);
75
76  // Sets conflict file information.  The information is returned by
77  // the default action for GetRemoteConflictFileInfo.
78  void add_conflict_file(const fileapi::FileSystemURL& url,
79                         const SyncFileMetadata& metadata) {
80    conflict_file_urls_[url.origin()].insert(url);
81    conflict_file_metadata_[url] = metadata;
82  }
83
84  void reset_conflict_files() {
85    conflict_file_urls_.clear();
86    conflict_file_metadata_.clear();
87  }
88
89 private:
90  typedef std::map<GURL, fileapi::FileSystemURLSet> OriginToURLSetMap;
91  typedef std::map<fileapi::FileSystemURL, SyncFileMetadata,
92                   fileapi::FileSystemURL::Comparator> FileMetadataMap;
93
94  void AddServiceObserverStub(Observer* observer);
95  void AddFileStatusObserverStub(FileStatusObserver* observer);
96  void RegisterOriginForTrackingChangesStub(
97      const GURL& origin, const SyncStatusCallback& callback);
98  void UnregisterOriginForTrackingChangesStub(
99      const GURL& origin, const SyncStatusCallback& callback);
100  void DeleteOriginDirectoryStub(
101      const GURL& origin, const SyncStatusCallback& callback);
102  void ProcessRemoteChangeStub(const SyncFileCallback& callback);
103  void GetRemoteFileMetadataStub(
104      const fileapi::FileSystemURL& url,
105      const SyncFileMetadataCallback& callback);
106  SyncStatusCode SetConflictResolutionPolicyStub(
107      ConflictResolutionPolicy policy);
108  ConflictResolutionPolicy GetConflictResolutionPolicyStub() const;
109
110  OriginToURLSetMap conflict_file_urls_;
111  FileMetadataMap conflict_file_metadata_;
112
113  // For default implementation.
114  ::testing::NiceMock<MockLocalChangeProcessor> mock_local_change_processor_;
115
116  ObserverList<Observer> service_observers_;
117  ObserverList<FileStatusObserver> file_status_observers_;
118
119  ConflictResolutionPolicy conflict_resolution_policy_;
120
121  DISALLOW_COPY_AND_ASSIGN(MockRemoteFileSyncService);
122};
123
124}  // namespace sync_file_system
125
126#endif  // CHROME_BROWSER_SYNC_FILE_SYSTEM_MOCK_REMOTE_FILE_SYNC_SERVICE_H_
127