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

Unified Diff: components/enhanced_bookmarks/enhanced_bookmark_model.cc

Issue 476573004: Set version field when changes are made to enhanced bookmarks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Merge with ImageService CL Created 6 years, 3 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
Index: components/enhanced_bookmarks/enhanced_bookmark_model.cc
diff --git a/components/enhanced_bookmarks/metadata_accessor.cc b/components/enhanced_bookmarks/enhanced_bookmark_model.cc
similarity index 45%
rename from components/enhanced_bookmarks/metadata_accessor.cc
rename to components/enhanced_bookmarks/enhanced_bookmark_model.cc
index cfcc9be5efb2bd2c59f596e159e7e63225e7194b..c6222d84cf4e8ee40b28dd6c0b4e241488df6687 100644
--- a/components/enhanced_bookmarks/metadata_accessor.cc
+++ b/components/enhanced_bookmarks/enhanced_bookmark_model.cc
@@ -2,54 +2,44 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "components/enhanced_bookmarks/metadata_accessor.h"
+#include "components/enhanced_bookmarks/enhanced_bookmark_model.h"
#include <iomanip>
+#include <sstream>
#include "base/base64.h"
+#include "base/logging.h"
#include "base/rand_util.h"
#include "components/bookmarks/browser/bookmark_model.h"
+#include "components/bookmarks/browser/bookmark_node.h"
#include "components/enhanced_bookmarks/proto/metadata.pb.h"
-#include "ui/base/models/tree_node_iterator.h"
-
-using namespace image::collections;
+#include "url/gurl.h"
namespace {
+const char* kBookmarkBarId = "f_bookmarks_bar";
+
+const char* kIdKey = "stars.id";
+const char* kImageDataKey = "stars.imageData";
+const char* kNoteKey = "stars.note";
+const char* kPageDataKey = "stars.pageData";
+const char* kVersionKey = "stars.version";
// Helper method for working with bookmark metainfo.
std::string DataForMetaInfoField(const BookmarkNode* node,
const std::string& field) {
- const BookmarkNode::MetaInfoMap* map = node->GetMetaInfoMap();
- if (!map)
- return "";
-
- BookmarkNode::MetaInfoMap::const_iterator it = map->find(field);
- if (it == map->end())
- return "";
+ std::string value;
+ if (!node->GetMetaInfo(field, &value))
+ return std::string();
std::string decoded;
- bool result = base::Base64Decode((*it).second, &decoded);
- if (!result)
- return "";
+ if (!base::Base64Decode(value, &decoded))
+ return std::string();
return decoded;
}
-// Sets a new remote id on a bookmark.
-std::string SetRemoteIdOnBookmark(BookmarkModel* bookmark_model,
- const BookmarkNode* node) {
- // Generate 16 digit hex string random id.
- std::stringstream random_id;
- random_id << std::hex << std::setfill('0') << std::setw(16);
- random_id << base::RandUint64() << base::RandUint64();
- std::string random_id_str = random_id.str();
- bookmark_model->SetNodeMetaInfo(
- node, enhanced_bookmarks::kIdDataKey, random_id_str);
- return random_id_str;
-}
-
// Helper method for working with ImageData_ImageInfo.
-bool PopulateImageData(const ImageData_ImageInfo& info,
+bool PopulateImageData(const image::collections::ImageData_ImageInfo& info,
GURL* out_url,
int* width,
int* height) {
@@ -65,59 +55,118 @@ bool PopulateImageData(const ImageData_ImageInfo& info,
*height = info.height();
return true;
}
-
} // namespace
namespace enhanced_bookmarks {
-const char* kPageDataKey = "stars.pageData";
-const char* kImageDataKey = "stars.imageData";
-const char* kIdDataKey = "stars.id";
-const char* kNoteKey = "stars.note";
+EnhancedBookmarkModel::EnhancedBookmarkModel(BookmarkModel* bookmark_model)
+ : bookmark_model_(bookmark_model), initialized_(false) {
+}
-std::string RemoteIdFromBookmark(BookmarkModel* bookmark_model,
- const BookmarkNode* node) {
- const BookmarkNode::MetaInfoMap* map = node->GetMetaInfoMap();
- if (!map)
- return SetRemoteIdOnBookmark(bookmark_model, node);
+EnhancedBookmarkModel::~EnhancedBookmarkModel() {
+}
- BookmarkNode::MetaInfoMap::const_iterator it = map->find(kIdDataKey);
- if (it == map->end())
- return SetRemoteIdOnBookmark(bookmark_model, node);
+void EnhancedBookmarkModel::Initialize(const std::string& version) {
+ version_ = version;
+ initialized_ = true;
+}
+
+// Moves |node| to |new_parent| and inserts it at the given |index|.
+void EnhancedBookmarkModel::Move(const BookmarkNode* node,
+ const BookmarkNode* new_parent,
+ int index) {
+ // TODO(rfevang): Update meta info placement fields.
+ bookmark_model_->Move(node, new_parent, index);
+}
- DCHECK(it->second.length());
- return it->second;
+// Adds a new folder node at the specified position.
+const BookmarkNode* EnhancedBookmarkModel::AddFolder(
+ const BookmarkNode* parent,
+ int index,
+ const base::string16& title,
+ const BookmarkNode::MetaInfoMap* meta_info) {
+ // TODO(rfevang): Set meta info placement fields.
+ return bookmark_model_->AddFolderWithMetaInfo(
+ parent, index, title, meta_info);
}
-void SetDescriptionForBookmark(BookmarkModel* bookmark_model,
- const BookmarkNode* node,
- const std::string& description) {
- bookmark_model->SetNodeMetaInfo(node, kNoteKey, description);
+// Adds a url at the specified position.
+const BookmarkNode* EnhancedBookmarkModel::AddURL(
+ const BookmarkNode* parent,
+ int index,
+ const base::string16& title,
+ const GURL& url,
+ const base::Time& creation_time,
+ const BookmarkNode::MetaInfoMap* meta_info) {
+ // TODO(rfevang): Set meta info placement fields.
+ return bookmark_model_->AddURLWithCreationTimeAndMetaInfo(
+ parent, index, title, url, creation_time, meta_info);
}
-std::string DescriptionFromBookmark(const BookmarkNode* node) {
- const BookmarkNode::MetaInfoMap* map = node->GetMetaInfoMap();
- if (!map)
- return "";
+std::string EnhancedBookmarkModel::GetRemoteIdForNode(
+ const BookmarkNode* node) {
+ DCHECK(initialized_);
+ if (node == bookmark_model_->bookmark_bar_node())
+ return kBookmarkBarId;
+
+ // Permanent nodes other than the bookmarks bar don't have ids.
+ DCHECK(!bookmark_model_->is_permanent_node(node));
+
+ std::string id;
+ if (!node->GetMetaInfo(kIdKey, &id) || id.empty())
+ return SetRemoteIdForNode(node);
+ return id;
+}
+
+std::string EnhancedBookmarkModel::SetRemoteIdForNode(
Mark 2014/09/03 23:31:16 Hah, you guys have to use the std:: prefix in Chro
Rune Fevang 2014/09/04 01:03:13 Acknowledged.
+ const BookmarkNode* node) {
+ DCHECK(initialized_);
+
+ std::stringstream random_id;
+ // Add prefix depending on whether the node is a folder or not.
+ if (node->is_url())
+ random_id << "ebc_";
Mark 2014/09/03 23:31:16 Nit: These should be top-level constants.
Rune Fevang 2014/09/04 01:03:13 Done.
+ else
+ random_id << "ebf_";
+
+ // Generate 32 digit hex string random suffix.
+ random_id << std::hex << std::setfill('0') << std::setw(16);
+ random_id << base::RandUint64() << base::RandUint64();
Mark 2014/09/03 23:31:16 Base the first rand on time so that you are not in
Rune Fevang 2014/09/04 01:03:13 This function has a comment stating it is safe to
+ std::string random_id_str = random_id.str();
+
+ SetNodeMetaInfo(node, kIdKey, random_id_str);
+ return random_id_str;
+}
+
+void EnhancedBookmarkModel::SetDescriptionForNode(
+ const BookmarkNode* node,
+ const std::string& description) {
+ DCHECK(initialized_);
+ SetNodeMetaInfo(node, kNoteKey, description);
+}
+
+std::string EnhancedBookmarkModel::GetDescriptionForNode(
+ const BookmarkNode* node) {
+ DCHECK(initialized_);
// First, look for a custom note set by the user.
- BookmarkNode::MetaInfoMap::const_iterator it = map->find(kNoteKey);
- if (it != map->end() && it->second != "")
- return it->second;
+ std::string description;
+ if (node->GetMetaInfo(kNoteKey, &description) && !description.empty())
+ return description;
// If none are present, return the snippet.
- return SnippetFromBookmark(node);
+ return GetSnippetForNode(node);
}
-bool SetOriginalImageForBookmark(BookmarkModel* bookmark_model,
- const BookmarkNode* node,
- const GURL& url,
- int width,
- int height) {
+bool EnhancedBookmarkModel::SetOriginalImageForNode(const BookmarkNode* node,
+ const GURL& url,
+ int width,
+ int height) {
+ DCHECK(initialized_);
DCHECK(url.is_valid());
std::string decoded(DataForMetaInfoField(node, kImageDataKey));
- ImageData data;
+ image::collections::ImageData data;
// Try to populate the imageData with the existing data.
if (decoded != "") {
@@ -127,7 +176,8 @@ bool SetOriginalImageForBookmark(BookmarkModel* bookmark_model,
return false;
}
- scoped_ptr<ImageData_ImageInfo> info(new ImageData_ImageInfo);
+ scoped_ptr<image::collections::ImageData_ImageInfo> info(
+ new image::collections::ImageData_ImageInfo);
info->set_url(url.spec());
info->set_width(width);
info->set_height(height);
@@ -140,21 +190,22 @@ bool SetOriginalImageForBookmark(BookmarkModel* bookmark_model,
std::string encoded;
base::Base64Encode(output, &encoded);
- bookmark_model->SetNodeMetaInfo(node, kImageDataKey, encoded);
+ SetNodeMetaInfo(node, kImageDataKey, encoded);
// Ensure that the bookmark has a stars.id, to trigger the server processing.
- RemoteIdFromBookmark(bookmark_model, node);
+ GetRemoteIdForNode(node);
return true;
}
-bool OriginalImageFromBookmark(const BookmarkNode* node,
- GURL* url,
- int* width,
- int* height) {
+bool EnhancedBookmarkModel::GetOriginalImageForNode(const BookmarkNode* node,
+ GURL* url,
+ int* width,
+ int* height) {
+ DCHECK(initialized_);
std::string decoded(DataForMetaInfoField(node, kImageDataKey));
if (decoded == "")
return false;
- ImageData data;
+ image::collections::ImageData data;
bool result = data.ParseFromString(decoded);
if (!result)
return false;
@@ -165,15 +216,16 @@ bool OriginalImageFromBookmark(const BookmarkNode* node,
return PopulateImageData(data.original_info(), url, width, height);
}
-bool ThumbnailImageFromBookmark(const BookmarkNode* node,
- GURL* url,
- int* width,
- int* height) {
+bool EnhancedBookmarkModel::GetThumbnailImageForNode(const BookmarkNode* node,
+ GURL* url,
+ int* width,
+ int* height) {
+ DCHECK(initialized_);
std::string decoded(DataForMetaInfoField(node, kImageDataKey));
if (decoded == "")
return false;
- ImageData data;
+ image::collections::ImageData data;
bool result = data.ParseFromString(decoded);
if (!result)
return false;
@@ -184,19 +236,46 @@ bool ThumbnailImageFromBookmark(const BookmarkNode* node,
return PopulateImageData(data.thumbnail_info(), url, width, height);
}
-std::string SnippetFromBookmark(const BookmarkNode* node) {
+std::string EnhancedBookmarkModel::GetSnippetForNode(const BookmarkNode* node) {
+ DCHECK(initialized_);
std::string decoded(DataForMetaInfoField(node, kPageDataKey));
- if (decoded == "")
+ if (decoded.empty())
return decoded;
- PageData data;
+ image::collections::PageData data;
bool result = data.ParseFromString(decoded);
if (!result)
- return "";
+ return std::string();
return data.snippet();
}
+std::string EnhancedBookmarkModel::GetVersionForNode(const BookmarkNode* node) {
+ DCHECK(initialized_);
+ std::string version;
+ if (!node->GetMetaInfo(kVersionKey, &version))
+ return std::string();
+ return version;
+}
+
+void EnhancedBookmarkModel::SetNodeMetaInfo(const BookmarkNode* node,
+ const std::string& field,
+ const std::string& value) {
+ BookmarkNode::MetaInfoMap meta_info;
+ const BookmarkNode::MetaInfoMap* old_meta_info = node->GetMetaInfoMap();
+ if (old_meta_info)
+ meta_info.insert(old_meta_info->begin(), old_meta_info->end());
+
+ // Don't update anything if the value to set is already there.
+ BookmarkNode::MetaInfoMap::iterator it = meta_info.find(field);
+ if (it != meta_info.end() && it->second == value)
+ return;
+
+ meta_info[field] = value;
+ meta_info[kVersionKey] = version_;
+ bookmark_model_->SetNodeMetaInfoMap(node, meta_info);
+}
+
bool SetAllImagesForBookmark(BookmarkModel* bookmark_model,
const BookmarkNode* node,
const GURL& image_url,
@@ -208,7 +287,7 @@ bool SetAllImagesForBookmark(BookmarkModel* bookmark_model,
DCHECK(image_url.is_valid() || image_url.is_empty());
DCHECK(thumbnail_url.is_valid() || thumbnail_url.is_empty());
std::string decoded(DataForMetaInfoField(node, kImageDataKey));
- ImageData data;
+ image::collections::ImageData data;
// Try to populate the imageData with the existing data.
if (decoded != "") {
@@ -223,7 +302,8 @@ bool SetAllImagesForBookmark(BookmarkModel* bookmark_model,
} else {
// Regardless of whether an image info exists, we make a new one.
// Intentially make a raw pointer.
- ImageData_ImageInfo* info = new ImageData_ImageInfo;
+ image::collections::ImageData_ImageInfo* info =
+ new image::collections::ImageData_ImageInfo;
info->set_url(image_url.spec());
info->set_width(image_width);
info->set_height(image_height);
@@ -236,7 +316,8 @@ bool SetAllImagesForBookmark(BookmarkModel* bookmark_model,
} else {
// Regardless of whether an image info exists, we make a new one.
// Intentially make a raw pointer.
- ImageData_ImageInfo* info = new ImageData_ImageInfo;
+ image::collections::ImageData_ImageInfo* info =
+ new image::collections::ImageData_ImageInfo;
info->set_url(thumbnail_url.spec());
info->set_width(thumbnail_width);
info->set_height(thumbnail_height);

Powered by Google App Engine
This is Rietveld 408576698