summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-02 01:15:54 +0000
committercramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-02 01:15:54 +0000
commit6d8c77f6752563edb5afe5155ea3471e93ddd553 (patch)
treec92b65174e118433421a940ad766b12f5539da33
parent2502bb9fd8d1b58c67f2cf634cf791c28fe81960 (diff)
downloadchromium_src-6d8c77f6752563edb5afe5155ea3471e93ddd553.zip
chromium_src-6d8c77f6752563edb5afe5155ea3471e93ddd553.tar.gz
chromium_src-6d8c77f6752563edb5afe5155ea3471e93ddd553.tar.bz2
Add support for managed bookmarks in the android new NTP.
These bookmarks can not be edited or deleted. Moved all bookmarks files to chrome/browser/android/bookmarks Moved managed_bookmarks_shim.* to chrome/browser/android/bookmarks BUG=311740 NOTRY=true Review URL: https://codereview.chromium.org/45453005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@232540 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java177
-rw-r--r--chrome/browser/android/bookmarks/bookmarks_bridge.cc (renamed from chrome/browser/android/bookmarks_bridge.cc)109
-rw-r--r--chrome/browser/android/bookmarks/bookmarks_bridge.h (renamed from chrome/browser/android/bookmarks_bridge.h)29
-rw-r--r--chrome/browser/android/bookmarks/managed_bookmarks_shim.cc (renamed from chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.cc)4
-rw-r--r--chrome/browser/android/bookmarks/managed_bookmarks_shim.h (renamed from chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.h)8
-rw-r--r--chrome/browser/android/chrome_jni_registrar.cc2
-rw-r--r--chrome/browser/ui/webui/ntp/android/bookmarks_handler.h2
-rw-r--r--chrome/chrome_browser.gypi6
-rw-r--r--chrome/chrome_browser_ui.gypi2
9 files changed, 276 insertions, 63 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
index 48c7603..f06c945 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/BookmarksBridge.java
@@ -4,6 +4,9 @@
package org.chromium.chrome.browser;
+import android.text.TextUtils;
+import android.util.Log;
+
import org.chromium.base.CalledByNative;
import org.chromium.base.ObserverList;
import org.chromium.chrome.browser.profiles.Profile;
@@ -17,6 +20,14 @@ import java.util.List;
*/
public class BookmarksBridge {
+ // Should mirror constants in chrome/browser/android/bookmarks/bookmarks_bridge.cc
+ public static final int BOOKMARK_TYPE_NORMAL = 0;
+ public static final int BOOKMARK_TYPE_MANAGED = 1;
+ public static final int BOOKMARK_TYPE_PARTNER = 2;
+
+ public static final int INVALID_FOLDER_ID = -2;
+ public static final int ROOT_FOLDER_ID = -1;
+
private final Profile mProfile;
private int mNativeBookmarksBridge;
private boolean mIsNativeBookmarkModelLoaded;
@@ -35,7 +46,7 @@ public class BookmarksBridge {
* @param bookmarksList List holding the fetched bookmarks and details.
*/
@CalledByNative("BookmarksCallback")
- void onBookmarksAvailable(long folderId, List<BookmarkItem> bookmarksList);
+ void onBookmarksAvailable(BookmarkId folderId, List<BookmarkItem> bookmarksList);
/**
* Callback method for fetching the folder hierarchy.
@@ -43,7 +54,7 @@ public class BookmarksBridge {
* @param bookmarksList List holding the fetched folder details.
*/
@CalledByNative("BookmarksCallback")
- void onBookmarksFolderHierarchyAvailable(long folderId,
+ void onBookmarksFolderHierarchyAvailable(BookmarkId folderId,
List<BookmarkItem> bookmarksList);
}
@@ -102,6 +113,12 @@ public class BookmarksBridge {
* update themselves if they were waiting for the update to finish.
*/
void extensiveBookmarkChangesEnded();
+
+ /**
+ * Called when there are changes to the bookmark model that don't trigger any of the other
+ * callback methods. For example, this is called when managed or partner bookmarks change.
+ */
+ void bookmarkModelChanged();
}
/**
@@ -121,6 +138,7 @@ public class BookmarksBridge {
nativeDestroy(mNativeBookmarksBridge);
mNativeBookmarksBridge = 0;
mIsNativeBookmarkModelLoaded = false;
+ mDelayedBookmarkCallbacks.clear();
}
mObservers.clear();
}
@@ -148,7 +166,7 @@ public class BookmarksBridge {
* @param folderId The current folder id.
* @param callback Instance of a callback object.
*/
- public void getBookmarksForFolder(long folderId, BookmarksCallback callback) {
+ public void getBookmarksForFolder(BookmarkId folderId, BookmarksCallback callback) {
if (mIsNativeBookmarkModelLoaded) {
nativeGetBookmarksForFolder(mNativeBookmarksBridge, folderId, callback,
new ArrayList<BookmarkItem>());
@@ -165,7 +183,7 @@ public class BookmarksBridge {
* @param folderId The current folder id.
* @param callback Instance of a callback object.
*/
- public void getCurrentFolderHierarchy(long folderId, BookmarksCallback callback) {
+ public void getCurrentFolderHierarchy(BookmarkId folderId, BookmarksCallback callback) {
if (mIsNativeBookmarkModelLoaded) {
nativeGetCurrentFolderHierarchy(mNativeBookmarksBridge, folderId, callback,
new ArrayList<BookmarkItem>());
@@ -179,7 +197,7 @@ public class BookmarksBridge {
* Deletes a specified bookmark node.
* @param bookmarkId The ID of the bookmark to be deleted.
*/
- public void deleteBookmark(long bookmarkId) {
+ public void deleteBookmark(BookmarkId bookmarkId) {
nativeDeleteBookmark(mNativeBookmarksBridge, bookmarkId);
}
@@ -254,9 +272,17 @@ public class BookmarksBridge {
}
@CalledByNative
- private static BookmarkItem create(long id, String title, String url,
- boolean isFolder, long parentId, boolean isEditable) {
- return new BookmarkItem(id, title, url, isFolder, parentId, isEditable);
+ private void bookmarkModelChanged() {
+ for (BookmarkModelObserver observer : mObservers) {
+ observer.bookmarkModelChanged();
+ }
+ }
+
+ @CalledByNative
+ private static BookmarkItem createBookmarkItem(long id, int type, String title, String url,
+ boolean isFolder, long parentId, int parentIdType, boolean isEditable) {
+ return new BookmarkItem(new BookmarkId(id, type), title, url, isFolder,
+ new BookmarkId(parentId, parentIdType), isEditable);
}
@CalledByNative
@@ -265,30 +291,138 @@ public class BookmarksBridge {
}
private native void nativeGetBookmarksForFolder(int nativeBookmarksBridge,
- long folderId, BookmarksCallback callback,
+ BookmarkId folderId, BookmarksCallback callback,
List<BookmarkItem> bookmarksList);
private native void nativeGetCurrentFolderHierarchy(int nativeBookmarksBridge,
- long folderId, BookmarksCallback callback,
+ BookmarkId folderId, BookmarksCallback callback,
List<BookmarkItem> bookmarksList);
- private native void nativeDeleteBookmark(int nativeBookmarksBridge, long bookmarkId);
+ private native void nativeDeleteBookmark(int nativeBookmarksBridge, BookmarkId bookmarkId);
private native int nativeInit(Profile profile);
private native void nativeDestroy(int nativeBookmarksBridge);
private static native boolean nativeIsEditBookmarksEnabled();
/**
+ * Simple object representing the bookmark id.
+ */
+ public static class BookmarkId {
+ private static final String LOG_TAG = "BookmarkId";
+ private static final char TYPE_MANAGED = 'm';
+ private static final char TYPE_PARTNER = 'p';
+
+ private final long mId;
+ private final int mType;
+
+ public BookmarkId(long id, int type) {
+ mId = id;
+ mType = type;
+ }
+
+ /**
+ * @param c The char representing the type.
+ * @return The Bookmark type from a char representing the type.
+ */
+ private static int getBookmarkTypeFromChar(char c) {
+ switch (c) {
+ case TYPE_MANAGED:
+ return BOOKMARK_TYPE_MANAGED;
+ case TYPE_PARTNER:
+ return BOOKMARK_TYPE_PARTNER;
+ default:
+ return BOOKMARK_TYPE_NORMAL;
+ }
+ }
+
+ /**
+ * @param c The char representing the bookmark type.
+ * @return Whether the char representing the bookmark type is a valid type.
+ */
+ private static boolean isValidBookmarkTypeFromChar(char c) {
+ return (c == TYPE_MANAGED || c == TYPE_PARTNER);
+ }
+
+ /**
+ * @param s The bookmark id string (Eg: m1 for managed bookmark id 1).
+ * @return the Bookmark id from the string which is a concatenation of bookmark type and
+ * the bookmark id.
+ */
+ public static BookmarkId getBookmarkIdFromString(String s) {
+ long id = ROOT_FOLDER_ID;
+ int type = BOOKMARK_TYPE_NORMAL;
+ if (TextUtils.isEmpty(s)) return new BookmarkId(id, type);
+ char folderTypeChar = s.charAt(0);
+ if (isValidBookmarkTypeFromChar(folderTypeChar)) {
+ type = getBookmarkTypeFromChar(folderTypeChar);
+ s = s.substring(1);
+ }
+ try {
+ id = Long.parseLong(s);
+ } catch (NumberFormatException exception) {
+ Log.e(LOG_TAG, "Error parsing url to extract the bookmark folder id.", exception);
+ }
+ return new BookmarkId(id, type);
+ }
+
+ /**
+ * @return The id of the bookmark.
+ */
+ @CalledByNative("BookmarkId")
+ public long getId() {
+ return mId;
+ }
+
+ /**
+ * @return The bookmark type.
+ */
+ @CalledByNative("BookmarkId")
+ public int getType() {
+ return mType;
+ }
+
+ private String getBookmarkTypeString() {
+ switch (mType) {
+ case BOOKMARK_TYPE_MANAGED:
+ return String.valueOf(TYPE_MANAGED);
+ case BOOKMARK_TYPE_PARTNER:
+ return String.valueOf(TYPE_PARTNER);
+ case BOOKMARK_TYPE_NORMAL:
+ default:
+ return "";
+ }
+ }
+
+ @Override
+ public String toString() {
+ return getBookmarkTypeString() + mId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof BookmarkId)) return false;
+ BookmarkId item = (BookmarkId) o;
+ return (item.mId == mId && item.mType == mType);
+ }
+
+ @Override
+ public int hashCode() {
+ return toString().hashCode();
+ }
+ }
+
+ /**
* Simple object representing the bookmark item.
*/
public static class BookmarkItem {
private final String mTitle;
private final String mUrl;
- private final long mId;
+ private final BookmarkId mId;
private final boolean mIsFolder;
- private final long mParentId;
+ private final BookmarkId mParentId;
private final boolean mIsEditable;
- private BookmarkItem(long id, String title, String url, boolean isFolder, long parentId,
- boolean isEditable) {
+
+ private BookmarkItem(BookmarkId id, String title, String url, boolean isFolder,
+ BookmarkId parentId, boolean isEditable) {
mId = id;
mTitle = title;
mUrl = url;
@@ -308,7 +442,7 @@ public class BookmarksBridge {
}
/** @return Id of the bookmark item. */
- public long getId() {
+ public BookmarkId getId() {
return mId;
}
@@ -318,7 +452,7 @@ public class BookmarksBridge {
}
/** @return Parent id of the bookmark item. */
- public long getParentId() {
+ public BookmarkId getParentId() {
return mParentId;
}
@@ -337,12 +471,12 @@ public class BookmarksBridge {
private static final int GET_CURRENT_FOLDER_HIERARCHY = 1;
private final BookmarksCallback mCallback;
- private final long mFolderId;
+ private final BookmarkId mFolderId;
private final int mCallbackMethod;
private final BookmarksBridge mHandler;
- private DelayedBookmarkCallback(long folderId, BookmarksCallback callback, int method,
- BookmarksBridge handler) {
+ private DelayedBookmarkCallback(BookmarkId folderId, BookmarksCallback callback,
+ int method, BookmarksBridge handler) {
mFolderId = folderId;
mCallback = callback;
mCallbackMethod = method;
@@ -353,7 +487,7 @@ public class BookmarksBridge {
* Invoke the callback method.
*/
private void callCallbackMethod() {
- switch(mCallbackMethod) {
+ switch (mCallbackMethod) {
case GET_BOOKMARKS_FOR_FOLDER:
mHandler.getBookmarksForFolder(mFolderId, mCallback);
break;
@@ -361,6 +495,7 @@ public class BookmarksBridge {
mHandler.getCurrentFolderHierarchy(mFolderId, mCallback);
break;
default:
+ assert false;
break;
}
}
diff --git a/chrome/browser/android/bookmarks_bridge.cc b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
index 031e929..c355b49 100644
--- a/chrome/browser/android/bookmarks_bridge.cc
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.cc
@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "chrome/browser/android/bookmarks_bridge.h"
+#include "chrome/browser/android/bookmarks/bookmarks_bridge.h"
#include "base/android/jni_string.h"
#include "base/prefs/pref_service.h"
@@ -22,6 +22,10 @@ using base::android::ScopedJavaLocalRef;
using base::android::ScopedJavaGlobalRef;
using content::BrowserThread;
+// Should mirror constants in BookmarkBridge.java
+static const int kBookmarkTypeNormal = 0;
+static const int kBookmarkTypeManaged = 1;
+
BookmarksBridge::BookmarksBridge(JNIEnv* env,
jobject obj,
jobject j_profile)
@@ -34,10 +38,21 @@ BookmarksBridge::BookmarksBridge(JNIEnv* env,
bookmark_model_->AddObserver(this);
if (bookmark_model_->loaded())
Java_BookmarksBridge_bookmarkModelLoaded(env, obj);
+
+ managed_bookmarks_shim_.reset(new ManagedBookmarksShim(profile->GetPrefs()));
+ managed_bookmarks_shim_->AddObserver(this);
+
+ // Since a sync or import could have started before this class is
+ // initialized, we need to make sure that our initial state is
+ // up to date.
+ if (bookmark_model_->IsDoingExtensiveChanges())
+ ExtensiveBookmarkChangesBeginning(bookmark_model_);
}
BookmarksBridge::~BookmarksBridge() {
bookmark_model_->RemoveObserver(this);
+ if (managed_bookmarks_shim_)
+ managed_bookmarks_shim_->RemoveObserver(this);
}
void BookmarksBridge::Destroy(JNIEnv*, jobject) {
@@ -65,11 +80,21 @@ static jboolean IsEditBookmarksEnabled(JNIEnv* env, jclass clazz) {
void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env,
jobject obj,
- jlong folder_id,
+ jobject j_folder_id_obj,
jobject j_callback_obj,
jobject j_result_obj) {
DCHECK(bookmark_model_->loaded());
- const BookmarkNode* folder = GetFolderNodeFromId(folder_id);
+ long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj);
+ int type = Java_BookmarkId_getType(env, j_folder_id_obj);
+ const BookmarkNode* folder = GetFolderWithFallback(folder_id, type);
+ // If this is the Mobile bookmarks folder then add the "Managed bookmarks"
+ // folder first, so that it's the first entry.
+ if (folder == bookmark_model_->mobile_node() &&
+ managed_bookmarks_shim_->HasManagedBookmarks()) {
+ ExtractBookmarkNodeInformation(
+ managed_bookmarks_shim_->GetManagedBookmarksRoot(),
+ j_result_obj);
+ }
// Get the folder contents
for (int i = 0; i < folder->child_count(); ++i) {
const BookmarkNode* node = folder->GetChild(i);
@@ -77,40 +102,44 @@ void BookmarksBridge::GetBookmarksForFolder(JNIEnv* env,
}
Java_BookmarksCallback_onBookmarksAvailable(
- env, j_callback_obj, folder->id(), j_result_obj);
+ env, j_callback_obj, j_folder_id_obj, j_result_obj);
}
void BookmarksBridge::GetCurrentFolderHierarchy(JNIEnv* env,
jobject obj,
- jlong folder_id,
+ jobject j_folder_id_obj,
jobject j_callback_obj,
jobject j_result_obj) {
DCHECK(bookmark_model_->loaded());
- const BookmarkNode* folder = GetFolderNodeFromId(folder_id);
+ long folder_id = Java_BookmarkId_getId(env, j_folder_id_obj);
+ int type = Java_BookmarkId_getType(env, j_folder_id_obj);
+ const BookmarkNode* folder = GetFolderWithFallback(folder_id, type);
// Get the folder heirarchy
const BookmarkNode* node = folder;
while (node) {
ExtractBookmarkNodeInformation(node, j_result_obj);
- node = node->parent();
+ node = GetParentNode(node);
}
Java_BookmarksCallback_onBookmarksFolderHierarchyAvailable(
- env, j_callback_obj, folder->id(), j_result_obj);
+ env, j_callback_obj, j_folder_id_obj, j_result_obj);
}
void BookmarksBridge::DeleteBookmark(JNIEnv* env,
jobject obj,
- jlong bookmark_id) {
+ jobject j_bookmark_id_obj) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(bookmark_model_->loaded());
- const BookmarkNode* node = bookmark_model_->GetNodeByID(bookmark_id);
+ long bookmark_id = Java_BookmarkId_getId(env, j_bookmark_id_obj);
+ int type = Java_BookmarkId_getType(env, j_bookmark_id_obj);
+ const BookmarkNode* node = GetNodeByID(bookmark_id, type);
if (!IsEditable(node)) {
NOTREACHED();
return;
}
- const BookmarkNode* parent_node = node->parent();
+ const BookmarkNode* parent_node = GetParentNode(node);
bookmark_model_->Remove(parent_node, parent_node->GetIndexOf(node));
}
@@ -118,20 +147,22 @@ ScopedJavaLocalRef<jobject> BookmarksBridge::CreateJavaBookmark(
const BookmarkNode* node) {
JNIEnv* env = AttachCurrentThread();
- const BookmarkNode* parent = node->parent();
+ const BookmarkNode* parent = GetParentNode(node);
int64 parent_id = parent ? parent->id() : -1;
std::string url;
if (node->is_url())
url = node->url().spec();
- return Java_BookmarksBridge_create(
+ return Java_BookmarksBridge_createBookmarkItem(
env,
node->id(),
+ GetBookmarkType(node),
ConvertUTF16ToJavaString(env, node->GetTitle()).obj(),
ConvertUTF8ToJavaString(env, url).obj(),
node->is_folder(),
parent_id,
+ GetBookmarkType(parent),
IsEditable(node));
}
@@ -145,29 +176,59 @@ void BookmarksBridge::ExtractBookmarkNodeInformation(
CreateJavaBookmark(node).obj());
}
-const BookmarkNode* BookmarksBridge::GetFolderNodeFromId(jlong folder_id) {
- const BookmarkNode* folder;
- if (folder_id == -1) {
- folder = bookmark_model_->mobile_node();
+const BookmarkNode* BookmarksBridge::GetNodeByID(long node_id,
+ int type) {
+ const BookmarkNode* node;
+ if (type == kBookmarkTypeManaged) {
+ node = managed_bookmarks_shim_->GetNodeByID(
+ static_cast<int64>(node_id));
} else {
- folder = bookmark_model_->GetNodeByID(
- static_cast<int64>(folder_id));
+ node = bookmark_model_->GetNodeByID(static_cast<int64>(node_id));
}
- if (!folder)
+ return node;
+}
+
+const BookmarkNode* BookmarksBridge::GetFolderWithFallback(
+ long folder_id, int type) {
+ const BookmarkNode* folder = GetNodeByID(folder_id, type);
+ if (!folder || folder->type() == BookmarkNode::URL)
folder = bookmark_model_->mobile_node();
return folder;
}
bool BookmarksBridge::IsEditable(const BookmarkNode* node) const {
return node &&
- (node->type() == BookmarkNode::FOLDER ||
+ (node->type() == BookmarkNode::FOLDER ||
node->type() == BookmarkNode::URL) &&
- IsEditBookmarksEnabled();
+ !managed_bookmarks_shim_->IsManagedBookmark(node) &&
+ IsEditBookmarksEnabled();
+}
+
+const BookmarkNode* BookmarksBridge::GetParentNode(const BookmarkNode* node) {
+ DCHECK(bookmark_model_->loaded());
+ if (node == managed_bookmarks_shim_->GetManagedBookmarksRoot())
+ return bookmark_model_->mobile_node();
+ else
+ return node->parent();
+}
+
+int BookmarksBridge::GetBookmarkType(const BookmarkNode* node) {
+ if (managed_bookmarks_shim_->IsManagedBookmark(node))
+ return kBookmarkTypeManaged;
+ else
+ return kBookmarkTypeNormal;
}
// ------------- Observer-related methods ------------- //
void BookmarksBridge::BookmarkModelChanged() {
+ // Called when there are changes to the bookmark model. It is most
+ // likely changes to either managed or partner bookmarks.
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = weak_java_ref_.get(env);
+ if (obj.is_null())
+ return;
+ Java_BookmarksBridge_bookmarkModelChanged(env, obj.obj());
}
void BookmarksBridge::Loaded(BookmarkModel* model, bool ids_reassigned) {
@@ -273,3 +334,7 @@ void BookmarksBridge::ExtensiveBookmarkChangesEnded(BookmarkModel* model) {
return;
Java_BookmarksBridge_extensiveBookmarkChangesEnded(env, obj.obj());
}
+
+void BookmarksBridge::OnManagedBookmarksChanged() {
+ BookmarkModelChanged();
+}
diff --git a/chrome/browser/android/bookmarks_bridge.h b/chrome/browser/android/bookmarks/bookmarks_bridge.h
index 742edea..3bb5e20 100644
--- a/chrome/browser/android/bookmarks_bridge.h
+++ b/chrome/browser/android/bookmarks/bookmarks_bridge.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_ANDROID_BOOKMARKS_BRIDGE_H_
-#define CHROME_BROWSER_ANDROID_BOOKMARKS_BRIDGE_H_
+#ifndef CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_
+#define CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_
#include <jni.h>
@@ -11,6 +11,7 @@
#include "base/android/jni_helper.h"
#include "base/basictypes.h"
#include "base/compiler_specific.h"
+#include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
#include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
class Profile;
@@ -18,7 +19,8 @@ class Profile;
// The delegate to fetch bookmarks information for the Android native
// bookmark page. This fetches the bookmarks, title, urls, folder
// hierarchy.
-class BookmarksBridge : public BaseBookmarkModelObserver {
+class BookmarksBridge : public BaseBookmarkModelObserver,
+ public ManagedBookmarksShim::Observer {
public:
BookmarksBridge(JNIEnv* env, jobject obj, jobject j_profile);
void Destroy(JNIEnv*, jobject);
@@ -27,19 +29,19 @@ class BookmarksBridge : public BaseBookmarkModelObserver {
void GetBookmarksForFolder(JNIEnv* env,
jobject obj,
- jlong folder_id,
+ jobject j_folder_id_obj,
jobject j_callback_obj,
jobject j_result_obj);
void GetCurrentFolderHierarchy(JNIEnv* env,
jobject obj,
- jlong folder_id,
+ jobject j_folder_id_obj,
jobject j_callback_obj,
jobject j_result_obj);
void DeleteBookmark(JNIEnv* env,
jobject obj,
- jlong bookmark_id);
+ jobject j_bookmark_id_obj);
private:
virtual ~BookmarksBridge();
@@ -49,11 +51,17 @@ class BookmarksBridge : public BaseBookmarkModelObserver {
void ExtractBookmarkNodeInformation(
const BookmarkNode* node,
jobject j_result_obj);
- const BookmarkNode* GetFolderNodeFromId(jlong folder_id);
+ const BookmarkNode* GetNodeByID(long node_id, int type);
+ const BookmarkNode* GetFolderWithFallback(long folder_id, int type);
// Returns true if |node| can be modified by the user.
bool IsEditable(const BookmarkNode* node) const;
+ const BookmarkNode* GetParentNode(const BookmarkNode* node);
+ int GetBookmarkType(const BookmarkNode* node);
// Override BaseBookmarkModelObserver.
+ // Called when there are changes to the bookmark model that don't trigger
+ // any of the other callback methods. For example, this is called when
+ // managed or partner bookmarks change.
virtual void BookmarkModelChanged() OVERRIDE;
virtual void Loaded(BookmarkModel* model, bool ids_reassigned) OVERRIDE;
virtual void BookmarkModelBeingDeleted(BookmarkModel* model) OVERRIDE;
@@ -76,10 +84,15 @@ class BookmarksBridge : public BaseBookmarkModelObserver {
virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE;
virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE;
+ // Override ManagedBookmarksShim::Observer
+ virtual void OnManagedBookmarksChanged() OVERRIDE;
+
JavaObjectWeakGlobalRef weak_java_ref_;
BookmarkModel* bookmark_model_; // weak
+ scoped_ptr<ManagedBookmarksShim> managed_bookmarks_shim_;
+
DISALLOW_COPY_AND_ASSIGN(BookmarksBridge);
};
-#endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BRIDGE_H_
+#endif // CHROME_BROWSER_ANDROID_BOOKMARKS_BOOKMARKS_BRIDGE_H_
diff --git a/chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.cc b/chrome/browser/android/bookmarks/managed_bookmarks_shim.cc
index 84fceb4..2fb6ab6 100644
--- a/chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.cc
+++ b/chrome/browser/android/bookmarks/managed_bookmarks_shim.cc
@@ -1,8 +1,8 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 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.
-#include "chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.h"
+#include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
diff --git a/chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.h b/chrome/browser/android/bookmarks/managed_bookmarks_shim.h
index affb1ce..94955ee 100644
--- a/chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.h
+++ b/chrome/browser/android/bookmarks/managed_bookmarks_shim.h
@@ -1,9 +1,9 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Copyright 2013 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_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
-#define CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
+#ifndef CHROME_BROWSER_ANDROID_BOOKMARKS_MANAGED_BOOKMARKS_SHIM_H_
+#define CHROME_BROWSER_ANDROID_BOOKMARKS_MANAGED_BOOKMARKS_SHIM_H_
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
@@ -53,4 +53,4 @@ class ManagedBookmarksShim {
DISALLOW_COPY_AND_ASSIGN(ManagedBookmarksShim);
};
-#endif // CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_MANAGED_BOOKMARKS_SHIM_H_
+#endif // CHROME_BROWSER_ANDROID_BOOKMARKS_MANAGED_BOOKMARKS_SHIM_H_
diff --git a/chrome/browser/android/chrome_jni_registrar.cc b/chrome/browser/android/chrome_jni_registrar.cc
index fb2774a..425305f 100644
--- a/chrome/browser/android/chrome_jni_registrar.cc
+++ b/chrome/browser/android/chrome_jni_registrar.cc
@@ -7,7 +7,7 @@
#include "base/android/jni_android.h"
#include "base/android/jni_registrar.h"
#include "base/debug/trace_event.h"
-#include "chrome/browser/android/bookmarks_bridge.h"
+#include "chrome/browser/android/bookmarks/bookmarks_bridge.h"
#include "chrome/browser/android/chrome_web_contents_delegate_android.h"
#include "chrome/browser/android/chromium_application.h"
#include "chrome/browser/android/content_view_util.h"
diff --git a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
index d7f0278..55214a1 100644
--- a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
+++ b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h
@@ -7,9 +7,9 @@
#include "base/memory/scoped_ptr.h"
#include "base/values.h"
+#include "chrome/browser/android/bookmarks/managed_bookmarks_shim.h"
#include "chrome/browser/bookmarks/base_bookmark_model_observer.h"
#include "chrome/browser/favicon/favicon_service.h"
-#include "chrome/browser/ui/webui/ntp/android/managed_bookmarks_shim.h"
#include "chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.h"
#include "chrome/common/cancelable_task_tracker.h"
#include "content/public/browser/web_ui_message_handler.h"
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 9590b86..4386064 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -92,8 +92,10 @@
'browser/accessibility/accessibility_events.h',
'browser/accessibility/invert_bubble_prefs.cc',
'browser/accessibility/invert_bubble_prefs.h',
- 'browser/android/bookmarks_bridge.cc',
- 'browser/android/bookmarks_bridge.h',
+ 'browser/android/bookmarks/managed_bookmarks_shim.cc',
+ 'browser/android/bookmarks/managed_bookmarks_shim.h',
+ 'browser/android/bookmarks/bookmarks_bridge.cc',
+ 'browser/android/bookmarks/bookmarks_bridge.h',
'browser/android/chrome_jni_registrar.cc',
'browser/android/chrome_jni_registrar.h',
'browser/android/chrome_startup_flags.cc',
diff --git a/chrome/chrome_browser_ui.gypi b/chrome/chrome_browser_ui.gypi
index db4ee28..15a0d94 100644
--- a/chrome/chrome_browser_ui.gypi
+++ b/chrome/chrome_browser_ui.gypi
@@ -2939,8 +2939,6 @@
'browser/ui/webui/ntp/android/bookmarks_handler.h',
'browser/ui/webui/ntp/android/context_menu_handler.cc',
'browser/ui/webui/ntp/android/context_menu_handler.h',
- 'browser/ui/webui/ntp/android/managed_bookmarks_shim.cc',
- 'browser/ui/webui/ntp/android/managed_bookmarks_shim.h',
'browser/ui/webui/ntp/android/navigation_handler.cc',
'browser/ui/webui/ntp/android/navigation_handler.h',
'browser/ui/webui/ntp/android/new_tab_page_ready_handler.cc',