• 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 #include "chrome/browser/sync/glue/extension_model_associator.h"
6 
7 #include "base/logging.h"
8 #include "chrome/browser/sync/engine/syncapi.h"
9 #include "chrome/browser/sync/glue/extension_data.h"
10 #include "chrome/browser/sync/glue/extension_sync_traits.h"
11 #include "chrome/browser/sync/glue/extension_sync.h"
12 #include "chrome/browser/sync/profile_sync_service.h"
13 #include "chrome/browser/sync/protocol/extension_specifics.pb.h"
14 #include "chrome/browser/sync/syncable/nigori_util.h"
15 #include "content/browser/browser_thread.h"
16 
17 namespace browser_sync {
18 
ExtensionModelAssociator(const ExtensionSyncTraits & traits,ExtensionServiceInterface * extension_service,sync_api::UserShare * user_share)19 ExtensionModelAssociator::ExtensionModelAssociator(
20     const ExtensionSyncTraits& traits,
21     ExtensionServiceInterface* extension_service,
22     sync_api::UserShare* user_share)
23     : traits_(traits), extension_service_(extension_service),
24       user_share_(user_share) {
25   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
26   DCHECK(extension_service_);
27   DCHECK(user_share_);
28 }
29 
~ExtensionModelAssociator()30 ExtensionModelAssociator::~ExtensionModelAssociator() {
31   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
32 }
33 
AssociateModels()34 bool ExtensionModelAssociator::AssociateModels() {
35   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
36   ExtensionDataMap extension_data_map;
37   if (!SlurpExtensionData(
38           traits_, *extension_service_, user_share_, &extension_data_map)) {
39     return false;
40   }
41   if (!FlushExtensionData(
42           traits_, extension_data_map, extension_service_, user_share_)) {
43     return false;
44   }
45 
46   return true;
47 }
48 
DisassociateModels()49 bool ExtensionModelAssociator::DisassociateModels() {
50   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
51   // Nothing to do.
52   return true;
53 }
54 
SyncModelHasUserCreatedNodes(bool * has_nodes)55 bool ExtensionModelAssociator::SyncModelHasUserCreatedNodes(bool* has_nodes) {
56   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
57   return RootNodeHasChildren(traits_.root_node_tag, user_share_, has_nodes);
58 }
59 
CryptoReadyIfNecessary()60 bool ExtensionModelAssociator::CryptoReadyIfNecessary() {
61   // We only access the cryptographer while holding a transaction.
62   sync_api::ReadTransaction trans(user_share_);
63   const syncable::ModelTypeSet& encrypted_types =
64       GetEncryptedDataTypes(trans.GetWrappedTrans());
65   return encrypted_types.count(traits_.model_type) == 0 ||
66       trans.GetCryptographer()->is_ready();
67 }
68 
69 }  // namespace browser_sync
70