Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2278)

Unified Diff: chrome/browser/bookmarks/bookmark_codec.h

Issue 99217: Implement ID persistence for bookmarks:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/browser/bookmarks/bookmark_codec.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/bookmarks/bookmark_codec.h
===================================================================
--- chrome/browser/bookmarks/bookmark_codec.h (revision 14989)
+++ chrome/browser/bookmarks/bookmark_codec.h (working copy)
@@ -9,6 +9,7 @@
#ifndef CHROME_BROWSER_BOOKMARKS_BOOKMARK_CODEC_H_
#define CHROME_BROWSER_BOOKMARKS_BOOKMARK_CODEC_H_
+#include <set>
#include <string>
#include "base/basictypes.h"
@@ -20,12 +21,45 @@
class ListValue;
class Value;
+// Utility class to help assign unique integer IDs.
+class UniqueIDGenerator {
+ public:
+ UniqueIDGenerator();
+
+ // Checks whether the given ID can be used as a unique ID or not. If it can,
+ // returns the id itself, otherwise generates a new unique id in a simple way
+ // and returns that.
+ // NOTE that if id is 0, a new unique id is returned.
+ int GetUniqueID(int id);
+
+ // Resets the ID generator to initial state.
+ void Reset();
+
+ // Returns the current maximum.
+ int current_max() const { return current_max_; }
+
+ private:
+ // Maximum value we have seen so far.
+ int current_max_;
+ // All IDs assigned so far.
+ std::set<int> assigned_ids_;
+
+ DISALLOW_COPY_AND_ASSIGN(UniqueIDGenerator);
+};
+
// BookmarkCodec is responsible for encoding/decoding bookmarks into JSON
// values. BookmarkCodec is used by BookmarkService.
class BookmarkCodec {
public:
- BookmarkCodec() {}
+ // Creates an instance of the codec. Encodes/decodes bookmark IDs also if
+ // persist_ids is true. The default constructor will not encode/decode IDs.
+ // During decoding, if persist_ids is true and if the IDs in the file are not
+ // unique, we will reassign IDs to make them unique. There are no guarantees
+ // on how the IDs are reassigned or about doing minimal reassignments to
+ // achieve uniqueness.
+ BookmarkCodec();
+ explicit BookmarkCodec(bool persist_ids);
// Encodes the model to a JSON value. It's up to the caller to delete the
// returned object. This is invoked to encode the contents of the bookmark bar
@@ -62,6 +96,7 @@
static const wchar_t* kOtherBookmarFolderNameKey;
static const wchar_t* kVersionKey;
static const wchar_t* kChecksumKey;
+ static const wchar_t* kIdKey;
static const wchar_t* kTypeKey;
static const wchar_t* kNameKey;
static const wchar_t* kDateAddedKey;
@@ -103,14 +138,21 @@
// instead of taking in a BookmarkNode for efficiency so that we don't convert
// varous data-types to wide strings multiple times - once for serializing
// and once for computing the check-sum.
- void UpdateChecksumWithUrlNode(const std::wstring& title,
+ void UpdateChecksumWithUrlNode(const std::string& id,
+ const std::wstring& title,
const std::wstring& url);
- void UpdateChecksumWithFolderNode(const std::wstring& title);
+ void UpdateChecksumWithFolderNode(const std::string& id,
+ const std::wstring& title);
// Initializes/Finalizes the checksum.
void InitializeChecksum();
void FinalizeChecksum();
+ // Whether to persist IDs or not.
+ bool persist_ids_;
+ // Unique ID generator used during decoding.
+ UniqueIDGenerator id_generator_;
+
// MD5 context used to compute MD5 hash of all bookmark data.
MD5Context md5_context_;
@@ -118,7 +160,6 @@
std::string computed_checksum_;
std::string stored_checksum_;
-
DISALLOW_COPY_AND_ASSIGN(BookmarkCodec);
};
« no previous file with comments | « no previous file | chrome/browser/bookmarks/bookmark_codec.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698