diff options
Diffstat (limited to 'chrome/browser/sync/internal_api/read_node.h')
| -rw-r--r-- | chrome/browser/sync/internal_api/read_node.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/chrome/browser/sync/internal_api/read_node.h b/chrome/browser/sync/internal_api/read_node.h new file mode 100644 index 0000000..9ad9715 --- /dev/null +++ b/chrome/browser/sync/internal_api/read_node.h @@ -0,0 +1,79 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_SYNC_INTERNAL_API_READ_NODE_H_ +#define CHROME_BROWSER_SYNC_INTERNAL_API_READ_NODE_H_ +#pragma once + +#include <string> + +#include "base/basictypes.h" +#include "chrome/browser/sync/internal_api/base_node.h" +#include "chrome/browser/sync/syncable/model_type.h" + +namespace sync_pb { +class AppSpecifics; +class AutofillSpecifics; +class AutofillProfileSpecifics; +class BookmarkSpecifics; +class EntitySpecifics; +class ExtensionSpecifics; +class SessionSpecifics; +class NigoriSpecifics; +class PreferenceSpecifics; +class PasswordSpecificsData; +class ThemeSpecifics; +class TypedUrlSpecifics; +} + +namespace sync_api { + +// ReadNode wraps a syncable::Entry to provide the functionality of a +// read-only BaseNode. +class ReadNode : public BaseNode { + public: + // Create an unpopulated ReadNode on the given transaction. Call some flavor + // of Init to populate the ReadNode with a database entry. + explicit ReadNode(const BaseTransaction* transaction); + virtual ~ReadNode(); + + // A client must use one (and only one) of the following Init variants to + // populate the node. + + // BaseNode implementation. + virtual bool InitByIdLookup(int64 id); + virtual bool InitByClientTagLookup(syncable::ModelType model_type, + const std::string& tag); + + // There is always a root node, so this can't fail. The root node is + // never mutable, so root lookup is only possible on a ReadNode. + void InitByRootLookup(); + + // Each server-created permanent node is tagged with a unique string. + // Look up the node with the particular tag. If it does not exist, + // return false. + bool InitByTagLookup(const std::string& tag); + + // Implementation of BaseNode's abstract virtual accessors. + virtual const syncable::Entry* GetEntry() const; + virtual const BaseTransaction* GetTransaction() const; + + protected: + ReadNode(); + + private: + void* operator new(size_t size); // Node is meant for stack use only. + + // The underlying syncable object which this class wraps. + syncable::Entry* entry_; + + // The sync API transaction that is the parent of this node. + const BaseTransaction* transaction_; + + DISALLOW_COPY_AND_ASSIGN(ReadNode); +}; + +} // namespace sync_api + +#endif // CHROME_BROWSER_SYNC_INTERNAL_API_READ_NODE_H_ |
