Home | History | Annotate | Download | only in sync
      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 
     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