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

Unified Diff: chrome/browser/extensions/api/bookmarks/bookmarks_api.cc

Issue 338593002: Set metainfo ID for enhanced bookmarks extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: add comments for hash values Created 6 years, 6 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: chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
diff --git a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
index 2d59d6286b42ed1aed30691067677f1eb1028885..979781bc289e0512dde76b60b5cfed3e86adcbe6 100644
--- a/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
+++ b/chrome/browser/extensions/api/bookmarks/bookmarks_api.cc
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <algorithm>
+
#include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h"
#include "base/bind.h"
@@ -13,6 +15,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/prefs/pref_service.h"
+#include "base/rand_util.h"
#include "base/sha1.h"
#include "base/stl_util.h"
#include "base/strings/string16.h"
@@ -44,7 +47,9 @@
#include "content/public/browser/web_contents.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_function_dispatcher.h"
+#include "extensions/browser/extension_registry.h"
#include "extensions/browser/quota_service.h"
+#include "extensions/common/permissions/permissions_data.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
@@ -96,6 +101,56 @@ base::FilePath GetDefaultFilepathForBookmarkExport() {
return default_path.Append(filename);
}
+bool IsEnhancedBookmarksExtensionActive(Profile* profile) {
+ static const char *enhanced_extension_hashes[] = {
+ "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
+ "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
+ "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
+ };
+ const ExtensionSet& extensions =
+ ExtensionRegistry::Get(profile)->enabled_extensions();
+ for (ExtensionSet::const_iterator it = extensions.begin();
+ it != extensions.end(); ++it) {
+ const Extension* extension = *it;
+ if (extension->permissions_data()->HasAPIPermission(
+ APIPermission::kBookmarkManagerPrivate)) {
+ std::string hash = base::SHA1HashString(extension->id());
+ hash = base::HexEncode(hash.c_str(), hash.length());
+ for (size_t i = 0; i < arraysize(enhanced_extension_hashes); i++)
+ if (hash == enhanced_extension_hashes[i])
+ return true;
+ }
+ }
+ return false;
+}
+
+std::string ToBase36(int64 value) {
+ DCHECK(value >= 0);
+ std::string str;
+ while (value > 0) {
+ int digit = value % 36;
+ value /= 36;
+ str += (digit < 10 ? '0' + digit : 'a' + digit - 10);
+ }
+ std::reverse(str.begin(), str.end());
+ return str;
+}
+
+// Generate a metadata ID based on a the current time and a random number for
+// enhanced bookmarks, to be assigned pre-sync.
+std::string GenerateEnhancedBookmarksID(bool is_folder) {
+ static const char bookmark_prefix[] = "cc_";
+ static const char folder_prefix[] = "cf_";
+ // Use [0..range_mid) for bookmarks, [range_mid..2*range_mid) for folders.
+ int range_mid = 36*36*36*36 / 2;
+ int rand = base::RandInt(0, range_mid - 1);
+ int64 unix_epoch_time_in_ms =
+ (base::Time::Now() - base::Time::UnixEpoch()).InMilliseconds();
+ return std::string(is_folder ? folder_prefix : bookmark_prefix) +
+ ToBase36(is_folder ? range_mid + rand : rand) +
+ ToBase36(unix_epoch_time_in_ms);
+}
+
} // namespace
bool BookmarksFunction::RunAsync() {
@@ -288,6 +343,18 @@ void BookmarkEventRouter::BookmarkNodeMoved(BookmarkModel* model,
bookmarks::OnMoved::Create(base::Int64ToString(node->id()), move_info));
}
+void BookmarkEventRouter::OnWillAddBookmarkNode(BookmarkModel* model,
+ BookmarkNode* node) {
+ // TODO(wittman): Remove this once extension hooks are in place to allow the
+ // enhanced bookmarks extension to manage all bookmark creation code
+ // paths. See http://crbug.com/383557.
+ if (IsEnhancedBookmarksExtensionActive(Profile::FromBrowserContext(
+ browser_context_))) {
+ static const char key[] = "stars.id";
+ node->SetMetaInfo(key, GenerateEnhancedBookmarksID(node->is_folder()));
+ }
+}
+
void BookmarkEventRouter::BookmarkNodeAdded(BookmarkModel* model,
const BookmarkNode* parent,
int index) {
« no previous file with comments | « chrome/browser/extensions/api/bookmarks/bookmarks_api.h ('k') | components/bookmarks/browser/bookmark_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698