Home | History | Annotate | Download | only in glue
      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_GLUE_EXTENSION_UTIL_H_
      6 #define CHROME_BROWSER_SYNC_GLUE_EXTENSION_UTIL_H_
      7 #pragma once
      8 
      9 // This file contains some low-level utility functions used by
     10 // extensions sync.
     11 
     12 #include <string>
     13 
     14 class Extension;
     15 class ExtensionPrefs;
     16 class ExtensionServiceInterface;
     17 struct ExtensionSyncData;
     18 struct UninstalledExtensionInfo;
     19 
     20 namespace sync_pb {
     21 class ExtensionSpecifics;
     22 }  // sync_pb
     23 
     24 namespace browser_sync {
     25 
     26 // Returns whether or not the given extension is one we want to sync.
     27 bool IsExtensionValid(const Extension& extension);
     28 
     29 // Stringifies the given ExtensionSpecifics.
     30 std::string ExtensionSpecificsToString(
     31     const sync_pb::ExtensionSpecifics& specifics);
     32 
     33 // Returns whether or not the values of the given specifics are valid,
     34 // in particular the id, version, and update URL.
     35 bool IsExtensionSpecificsValid(
     36     const sync_pb::ExtensionSpecifics& specifics);
     37 
     38 // Equivalent to DCHECK(IsExtensionSpecificsValid(specifics)) <<
     39 // ExtensionSpecificsToString(specifics);
     40 void DcheckIsExtensionSpecificsValid(
     41     const sync_pb::ExtensionSpecifics& specifics);
     42 
     43 // Returns true iff two ExtensionSpecifics denote the same extension
     44 // state.  Neither |a| nor |b| need to be valid.
     45 bool AreExtensionSpecificsEqual(const sync_pb::ExtensionSpecifics& a,
     46                                 const sync_pb::ExtensionSpecifics& b);
     47 
     48 // Returns true iff the given ExtensionSpecifics is equal to the empty
     49 // ExtensionSpecifics object.  |specifics| does not have to be valid
     50 // and indeed, IsExtensionSpecificsValid(specifics) ->
     51 // !IsExtensionSpecificsUnset(specifics).
     52 bool IsExtensionSpecificsUnset(
     53     const sync_pb::ExtensionSpecifics& specifics);
     54 
     55 // Copies the user properties from |specifics| into |dest_specifics|.
     56 // User properties are properties that are set by the user, i.e. not
     57 // inherent to the extension.  Currently they include |enabled| and
     58 // |incognito_enabled|.  Neither parameter need be valid.
     59 void CopyUserProperties(
     60     const sync_pb::ExtensionSpecifics& specifics,
     61     sync_pb::ExtensionSpecifics* dest_specifics);
     62 
     63 // Copies everything but non-user properties.  Neither parameter need
     64 // be valid.
     65 void CopyNonUserProperties(
     66     const sync_pb::ExtensionSpecifics& specifics,
     67     sync_pb::ExtensionSpecifics* dest_specifics);
     68 
     69 // Returns true iff two ExtensionSpecifics have the same user
     70 // properties.  Neither |a| nor |b| need to be valid.
     71 bool AreExtensionSpecificsUserPropertiesEqual(
     72     const sync_pb::ExtensionSpecifics& a,
     73     const sync_pb::ExtensionSpecifics& b);
     74 
     75 // Returns true iff two ExtensionSpecifics have the same non-user
     76 // properties.  Neither |a| nor |b| need to be valid.
     77 bool AreExtensionSpecificsNonUserPropertiesEqual(
     78     const sync_pb::ExtensionSpecifics& a,
     79     const sync_pb::ExtensionSpecifics& b);
     80 
     81 // Fills |specifics| with information taken from |extension|, which
     82 // must be a syncable extension.  |specifics| will be valid after this
     83 // function is called.
     84 void GetExtensionSpecifics(const Extension& extension,
     85                            const ExtensionServiceInterface& extension_service,
     86                            sync_pb::ExtensionSpecifics* specifics);
     87 
     88 // Merge |specifics| into |merged_specifics|.  Both must be valid and
     89 // have the same ID.  The merge policy is currently to copy the
     90 // non-user properties of |specifics| into |merged_specifics| (and the
     91 // user properties if |merge_user_properties| is set) if |specifics|
     92 // has a more recent or the same version as |merged_specifics|.
     93 void MergeExtensionSpecifics(
     94     const sync_pb::ExtensionSpecifics& specifics,
     95     bool merge_user_properties,
     96     sync_pb::ExtensionSpecifics* merged_specifics);
     97 
     98 // Fills |sync_data| with the data from |specifics|.  Returns true iff
     99 // succesful.
    100 bool GetExtensionSyncData(
    101     const sync_pb::ExtensionSpecifics& specifics,
    102     ExtensionSyncData* sync_data);
    103 
    104 }  // namespace browser_sync
    105 
    106 #endif  // CHROME_BROWSER_SYNC_GLUE_EXTENSION_UTIL_H_
    107