• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2012 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 SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_
6 #define SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_
7 
8 #include <string>
9 
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "sync/base/sync_export.h"
13 #include "sync/internal_api/public/base/model_type.h"
14 #include "sync/internal_api/public/base_node.h"
15 
16 namespace syncer {
17 
18 // ReadNode wraps a syncable::Entry to provide the functionality of a
19 // read-only BaseNode.
20 class SYNC_EXPORT ReadNode : public BaseNode {
21  public:
22   // Create an unpopulated ReadNode on the given transaction.  Call some flavor
23   // of Init to populate the ReadNode with a database entry.
24   explicit ReadNode(const BaseTransaction* transaction);
25   virtual ~ReadNode();
26 
27   // A client must use one (and only one) of the following Init variants to
28   // populate the node.
29 
30   // BaseNode implementation.
31   virtual InitByLookupResult InitByIdLookup(int64 id) OVERRIDE;
32   virtual InitByLookupResult InitByClientTagLookup(
33       ModelType model_type,
34       const std::string& tag) OVERRIDE;
35 
36   // There is always a root node, so this can't fail.  The root node is
37   // never mutable, so root lookup is only possible on a ReadNode.
38   void InitByRootLookup();
39 
40   // Returns the type root node, if it exists.  This is usually created by the
41   // server during first sync.  Eventually, we plan to remove support for it
42   // from the protocol and have the client create the node instead.
43   InitByLookupResult InitTypeRoot(ModelType type);
44 
45   // Returns a server-created and unique-server-tagged item.
46   //
47   // This functionality is only useful for bookmarks because only bookmarks
48   // have server-tagged items.  All other server-tagged items are type root
49   // nodes, which should be looked up with InitTypeRoot().
50   InitByLookupResult InitByTagLookupForBookmarks(const std::string& tag);
51 
52   // Implementation of BaseNode's abstract virtual accessors.
53   virtual const syncable::Entry* GetEntry() const OVERRIDE;
54   virtual const BaseTransaction* GetTransaction() const OVERRIDE;
55 
56  protected:
57   ReadNode();
58 
59  private:
60   void* operator new(size_t size);  // Node is meant for stack use only.
61 
62   // The underlying syncable object which this class wraps.
63   syncable::Entry* entry_;
64 
65   // The sync API transaction that is the parent of this node.
66   const BaseTransaction* transaction_;
67 
68   DISALLOW_COPY_AND_ASSIGN(ReadNode);
69 };
70 
71 }  // namespace syncer
72 
73 #endif  // SYNC_INTERNAL_API_PUBLIC_READ_NODE_H_
74