• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_TEST_PROFILE_SYNC_SERVICE_H_
6 #define CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "chrome/browser/sync/glue/data_type_manager_impl.h"
12 #include "chrome/browser/sync/js_backend.h"
13 #include "chrome/browser/sync/profile_sync_service.h"
14 #include "chrome/test/profile_mock.h"
15 #include "chrome/test/sync/engine/test_id_factory.h"
16 #include "testing/gmock/include/gmock/gmock.h"
17 
18 class Profile;
19 class Task;
20 class TestProfileSyncService;
21 
ACTION(ReturnNewDataTypeManager)22 ACTION(ReturnNewDataTypeManager) {
23   return new browser_sync::DataTypeManagerImpl(arg0, arg1);
24 }
25 
26 namespace browser_sync {
27 
28 // Mocks out the SyncerThread operations (Pause/Resume) since no thread is
29 // running in these tests, and allows tests to provide a task on construction
30 // to set up initial nodes to mock out an actual server initial sync
31 // download.
32 class SyncBackendHostForProfileSyncTest
33     : public SyncBackendHost, public JsBackend {
34  public:
35   // |synchronous_init| causes initialization to block until the syncapi has
36   //     completed setting itself up and called us back.
37   SyncBackendHostForProfileSyncTest(
38       Profile* profile,
39       bool set_initial_sync_ended_on_init,
40       bool synchronous_init);
41   virtual ~SyncBackendHostForProfileSyncTest();
42 
43   MOCK_METHOD1(RequestNudge, void(const tracked_objects::Location&));
44 
45   virtual void ConfigureDataTypes(
46       const DataTypeController::TypeMap& data_type_controllers,
47       const syncable::ModelTypeSet& types,
48       CancelableTask* ready_task);
49 
50   // Called when a nudge comes in.
51   void SimulateSyncCycleCompletedInitialSyncEnded(
52       const tracked_objects::Location&);
53 
54   virtual sync_api::HttpPostProviderFactory* MakeHttpBridgeFactory(
55       net::URLRequestContextGetter* getter);
56 
57   virtual void InitCore(const Core::DoInitializeOptions& options);
58 
59   virtual JsBackend* GetJsBackend();
60 
61   // JsBackend implementation.
62   virtual void SetParentJsEventRouter(JsEventRouter* router);
63   virtual void RemoveParentJsEventRouter();
64   virtual const JsEventRouter* GetParentJsEventRouter() const;
65   // Fires an event identical to the message unless the message has
66   // "delay" as a prefix, in which case a task to fire the identical
67   // event is posted instead.
68   virtual void ProcessMessage(const std::string& name, const JsArgList& args,
69                               const JsEventHandler* sender);
70 
71   virtual void StartConfiguration(Callback0::Type* callback);
72 
73   static void SetDefaultExpectationsForWorkerCreation(ProfileMock* profile);
74 
75   static void SetHistoryServiceExpectations(ProfileMock* profile);
76 
77  private:
78   bool synchronous_init_;
79 };
80 
81 }  // namespace browser_sync
82 
83 class TestProfileSyncService : public ProfileSyncService {
84  public:
85   // |initial_condition_setup_task| can be used to populate nodes
86   // before the OnBackendInitialized callback fires.
87   TestProfileSyncService(ProfileSyncFactory* factory,
88                          Profile* profile,
89                          const std::string& test_user,
90                          bool synchronous_backend_initialization,
91                          Task* initial_condition_setup_task);
92 
93   virtual ~TestProfileSyncService();
94 
95   void SetInitialSyncEndedForEnabledTypes();
96 
97   virtual void OnBackendInitialized();
98 
99   virtual void Observe(NotificationType type,
100                        const NotificationSource& source,
101                        const NotificationDetails& details);
102 
103   // If this is called, configuring data types will require a syncer
104   // nudge.
105   void dont_set_initial_sync_ended_on_init();
106   void set_synchronous_sync_configuration();
107 
108   browser_sync::TestIdFactory* id_factory();
109 
110   // Override of ProfileSyncService::GetBackendForTest() with a more
111   // specific return type (since C++ supports covariant return types)
112   // that is made public.
113   virtual browser_sync::SyncBackendHostForProfileSyncTest*
114       GetBackendForTest();
115 
116  protected:
117   virtual void CreateBackend();
118 
119  private:
120   // When testing under ChromiumOS, this method must not return an empty
121   // value value in order for the profile sync service to start.
122   virtual std::string GetLsidForAuthBootstraping();
123 
124   browser_sync::TestIdFactory id_factory_;
125 
126   bool synchronous_backend_initialization_;
127 
128   // Set to true when a mock data type manager is being used and the configure
129   // step is performed synchronously.
130   bool synchronous_sync_configuration_;
131   bool set_expect_resume_expectations_;
132 
133   Task* initial_condition_setup_task_;
134   bool set_initial_sync_ended_on_init_;
135 };
136 
137 
138 
139 #endif  // CHROME_BROWSER_SYNC_TEST_PROFILE_SYNC_SERVICE_H_
140