• 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 #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