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 #include "chrome/browser/sync/abstract_profile_sync_service_test.h"
      6 
      7 #include "chrome/browser/sync/engine/syncapi.h"
      8 #include "chrome/browser/sync/glue/autofill_model_associator.h"
      9 #include "chrome/browser/sync/glue/autofill_profile_model_associator.h"
     10 #include "chrome/browser/sync/glue/password_model_associator.h"
     11 #include "chrome/browser/sync/glue/preference_model_associator.h"
     12 #include "chrome/browser/sync/glue/session_model_associator.h"
     13 #include "chrome/browser/sync/glue/typed_url_model_associator.h"
     14 #include "chrome/browser/sync/protocol/sync.pb.h"
     15 #include "chrome/browser/sync/syncable/directory_manager.h"
     16 #include "chrome/browser/sync/syncable/syncable.h"
     17 #include "chrome/browser/sync/test_profile_sync_service.h"
     18 #include "chrome/browser/sync/util/cryptographer.h"
     19 #include "chrome/test/profile_mock.h"
     20 #include "chrome/test/sync/engine/test_id_factory.h"
     21 
     22 using browser_sync::TestIdFactory;
     23 using sync_api::UserShare;
     24 using syncable::BASE_VERSION;
     25 using syncable::CREATE;
     26 using syncable::DirectoryManager;
     27 using syncable::IS_DEL;
     28 using syncable::IS_DIR;
     29 using syncable::IS_UNAPPLIED_UPDATE;
     30 using syncable::IS_UNSYNCED;
     31 using syncable::ModelType;
     32 using syncable::MutableEntry;
     33 using syncable::SERVER_IS_DIR;
     34 using syncable::SERVER_VERSION;
     35 using syncable::SPECIFICS;
     36 using syncable::ScopedDirLookup;
     37 using syncable::UNIQUE_SERVER_TAG;
     38 using syncable::UNITTEST;
     39 using syncable::WriteTransaction;
     40 
     41 const std::string ProfileSyncServiceTestHelper::GetTagForType(
     42     ModelType model_type) {
     43   switch (model_type) {
     44     case syncable::AUTOFILL:
     45       return browser_sync::kAutofillTag;
     46     case syncable::AUTOFILL_PROFILE:
     47       return browser_sync::kAutofillProfileTag;
     48     case syncable::PREFERENCES:
     49       return browser_sync::kPreferencesTag;
     50     case syncable::PASSWORDS:
     51       return browser_sync::kPasswordTag;
     52     case syncable::NIGORI:
     53       return browser_sync::kNigoriTag;
     54     case syncable::TYPED_URLS:
     55       return browser_sync::kTypedUrlTag;
     56     case syncable::SESSIONS:
     57       return browser_sync::kSessionsTag;
     58     case syncable::BOOKMARKS:
     59       return "google_chrome_bookmarks";
     60     default:
     61       NOTREACHED();
     62   }
     63   return std::string();
     64 }
     65 
     66 bool ProfileSyncServiceTestHelper::CreateRoot(
     67     ModelType model_type, UserShare* user_share,
     68     TestIdFactory* ids) {
     69   DirectoryManager* dir_manager = user_share->dir_manager.get();
     70 
     71   ScopedDirLookup dir(dir_manager, user_share->name);
     72   if (!dir.good())
     73     return false;
     74 
     75   std::string tag_name = GetTagForType(model_type);
     76 
     77   WriteTransaction wtrans(dir, UNITTEST, __FILE__, __LINE__);
     78   MutableEntry node(&wtrans,
     79                     CREATE,
     80                     wtrans.root_id(),
     81                     tag_name);
     82   node.Put(UNIQUE_SERVER_TAG, tag_name);
     83   node.Put(IS_DIR, true);
     84   node.Put(SERVER_IS_DIR, false);
     85   node.Put(IS_UNSYNCED, false);
     86   node.Put(IS_UNAPPLIED_UPDATE, false);
     87   node.Put(SERVER_VERSION, 20);
     88   node.Put(BASE_VERSION, 20);
     89   node.Put(IS_DEL, false);
     90   node.Put(syncable::ID, ids->MakeServer(tag_name));
     91   sync_pb::EntitySpecifics specifics;
     92   syncable::AddDefaultExtensionValue(model_type, &specifics);
     93   node.Put(SPECIFICS, specifics);
     94 
     95   return true;
     96 }
     97 
     98 AbstractProfileSyncServiceTest::AbstractProfileSyncServiceTest()
     99     : ui_thread_(BrowserThread::UI, &message_loop_) {}
    100 
    101 AbstractProfileSyncServiceTest::~AbstractProfileSyncServiceTest() {}
    102 
    103 bool AbstractProfileSyncServiceTest::CreateRoot(ModelType model_type) {
    104   return ProfileSyncServiceTestHelper::CreateRoot(
    105       model_type,
    106       service_->GetUserShare(),
    107       service_->id_factory());
    108 }
    109 
    110 CreateRootTask::CreateRootTask(
    111     AbstractProfileSyncServiceTest* test, ModelType model_type)
    112     : test_(test), model_type_(model_type), success_(false) {
    113 }
    114 
    115 CreateRootTask::~CreateRootTask() {}
    116 void CreateRootTask::Run() {
    117   success_ = test_->CreateRoot(model_type_);
    118 }
    119 
    120 bool CreateRootTask::success() {
    121   return success_;
    122 }
    123