Home | History | Annotate | Download | only in glue
      1 // Copyright (c) 2010 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_GLUE_EXTENSION_SYNC_TRAITS_H_
      6 #define CHROME_BROWSER_SYNC_GLUE_EXTENSION_SYNC_TRAITS_H_
      7 #pragma once
      8 
      9 #include "chrome/browser/sync/syncable/model_type.h"
     10 
     11 class Extension;
     12 struct UninstalledExtensionInfo;
     13 
     14 namespace sync_api {
     15 class BaseNode;
     16 class WriteNode;
     17 }  // namespace sync_api
     18 
     19 namespace sync_pb {
     20 class EntitySpecifics;
     21 class ExtensionSpecifics;
     22 }  // namespace sync_pb
     23 
     24 namespace browser_sync {
     25 
     26 typedef bool (*IsValidAndSyncablePredicate)(const Extension&);
     27 
     28 typedef bool (*ShouldHandleExtensionUninstallPredicate)(
     29     const UninstalledExtensionInfo&);
     30 
     31 // ExtensionSpecificsGetter : BaseNode -> ExtensionSpecifics
     32 typedef const sync_pb::ExtensionSpecifics& (*ExtensionSpecificsGetter)(
     33     const sync_api::BaseNode&);
     34 
     35 // A function that sets the appropriate member of the given BaseNode
     36 // to the given ExtensionSpecifics.
     37 typedef void (*ExtensionSpecificsSetter)(
     38     const sync_pb::ExtensionSpecifics&, sync_api::WriteNode*);
     39 
     40 // A function that tries to retrieve an ExtensionSpecifics from an
     41 // EntitySpecifics.  Returns true and fills in the second argument iff
     42 // successful.
     43 typedef bool (*ExtensionSpecificsEntityGetter)(
     44     const sync_pb::EntitySpecifics&, sync_pb::ExtensionSpecifics*);
     45 
     46 // Represents the properties needed for syncing data types that
     47 // involve extensions (e.g., "real" extensions, apps).
     48 struct ExtensionSyncTraits {
     49   ExtensionSyncTraits(
     50       syncable::ModelType model_type,
     51       IsValidAndSyncablePredicate is_valid_and_syncable,
     52       ShouldHandleExtensionUninstallPredicate
     53           should_handle_extension_uninstall,
     54       const char* root_node_tag,
     55       ExtensionSpecificsGetter extension_specifics_getter,
     56       ExtensionSpecificsSetter extension_specifics_setter,
     57       ExtensionSpecificsEntityGetter extension_specifics_entity_getter);
     58   ~ExtensionSyncTraits();
     59 
     60   // The sync type for the data type.
     61   const syncable::ModelType model_type;
     62   // A checker to make sure that the downloaded extension is valid and
     63   // syncable.
     64   const IsValidAndSyncablePredicate is_valid_and_syncable;
     65   // A checker to know which extension uninstall events to handle.
     66   const ShouldHandleExtensionUninstallPredicate
     67       should_handle_extension_uninstall;
     68   // The tag with which the top-level data type node is marked.
     69   const char* const root_node_tag;
     70   // The function that retrieves a ExtensionSpecifics reference (which
     71   // may be embedded in another specifics object) from a sync node.
     72   const ExtensionSpecificsGetter extension_specifics_getter;
     73   // The function that embeds an ExtensionSpecifics into a sync node.
     74   const ExtensionSpecificsSetter extension_specifics_setter;
     75   // The function that retrieves a ExtensionSpecifics (if possible)
     76   // from an EntitySpecifics.
     77   ExtensionSpecificsEntityGetter extension_specifics_entity_getter;
     78 };
     79 
     80 // Gets traits for extensions sync.
     81 ExtensionSyncTraits GetExtensionSyncTraits();
     82 
     83 // Gets traits for apps sync.
     84 ExtensionSyncTraits GetAppSyncTraits();
     85 
     86 }  // namespace browser_sync
     87 
     88 #endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_SYNC_TRAITS_H_
     89