Index: chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java |
index ec8851c19b9ae701bfe25f90413af925441e513d..27ef20018abb117406ac1268c329c3ff97c41beb 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/bookmarks/BookmarkUIState.java |
@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.bookmarks; |
import android.net.Uri; |
import android.text.TextUtils; |
+import org.chromium.base.VisibleForTesting; |
import org.chromium.chrome.browser.UrlConstants; |
import org.chromium.components.bookmarks.BookmarkId; |
@@ -20,7 +21,6 @@ class BookmarkUIState { |
static final int STATE_LOADING = 1; |
static final int STATE_ALL_BOOKMARKS = 2; |
static final int STATE_FOLDER = 3; |
- private static final int STATE_INVALID = 0; |
/** |
* One of the STATE_* constants. |
@@ -36,53 +36,48 @@ class BookmarkUIState { |
return state; |
} |
+ /** |
+ * Depending on experiments we run, "all bookmarks" might be redirected to the default folder. |
+ */ |
static BookmarkUIState createAllBookmarksState(BookmarkModel bookmarkModel) { |
- return createStateFromUrl(Uri.parse(UrlConstants.BOOKMARKS_URL), bookmarkModel); |
+ if (!BookmarkUtils.isAllBookmarksViewEnabled()) { |
+ return createFolderState(bookmarkModel.getDefaultFolder(), null); |
+ } |
+ BookmarkUIState state = new BookmarkUIState(); |
+ state.mState = STATE_ALL_BOOKMARKS; |
+ state.mUrl = UrlConstants.BOOKMARKS_URL; |
+ return state; |
} |
- static BookmarkUIState createFolderState(BookmarkId folder, |
- BookmarkModel bookmarkModel) { |
- return createStateFromUrl(createFolderUrl(folder), bookmarkModel); |
+ static BookmarkUIState createFolderState(BookmarkId folder, BookmarkModel bookmarkModel) { |
+ if (folder == null) return createAllBookmarksState(bookmarkModel); |
+ BookmarkUIState state = new BookmarkUIState(); |
+ state.mState = STATE_FOLDER; |
+ state.mUrl = UrlConstants.BOOKMARKS_FOLDER_URL + folder.toString(); |
+ state.mFolder = folder; |
+ return state; |
} |
/** |
- * @see #createStateFromUrl(Uri, BookmarkModel) |
+ * Parses the url and generates the corresponding state. |
*/ |
static BookmarkUIState createStateFromUrl(String url, BookmarkModel bookmarkModel) { |
- return createStateFromUrl(Uri.parse(url), bookmarkModel); |
- } |
- |
- /** |
- * @return A state corresponding to the URI object. If the URI is not valid, |
- * return all_bookmarks. |
- */ |
- static BookmarkUIState createStateFromUrl(Uri uri, BookmarkModel bookmarkModel) { |
- BookmarkUIState state = new BookmarkUIState(); |
- state.mState = STATE_INVALID; |
- state.mUrl = uri.toString(); |
- |
- if (state.mUrl.equals(UrlConstants.BOOKMARKS_URL)) { |
- state.mState = STATE_ALL_BOOKMARKS; |
- } else if (state.mUrl.startsWith(UrlConstants.BOOKMARKS_FOLDER_URL)) { |
- String path = uri.getLastPathSegment(); |
+ if (url.equals(UrlConstants.BOOKMARKS_URL)) { |
+ return createAllBookmarksState(bookmarkModel); |
+ } else if (url.startsWith(UrlConstants.BOOKMARKS_FOLDER_URL)) { |
+ String path = url.substring(UrlConstants.BOOKMARKS_FOLDER_URL.length()); |
if (!path.isEmpty()) { |
- state.mFolder = BookmarkId.getBookmarkIdFromString(path); |
- state.mState = STATE_FOLDER; |
+ BookmarkId folder = BookmarkId.getBookmarkIdFromString(path); |
+ return createFolderState(folder, bookmarkModel); |
} |
} |
- |
- if (!state.isValid(bookmarkModel)) { |
- state.mState = STATE_ALL_BOOKMARKS; |
- state.mUrl = UrlConstants.BOOKMARKS_URL; |
- } |
- |
- return state; |
+ // If this line is reached, the url is not valid. Fall back to all bookmarks. |
+ return createAllBookmarksState(bookmarkModel); |
} |
+ @VisibleForTesting |
static Uri createFolderUrl(BookmarkId folderId) { |
Uri.Builder builder = Uri.parse(UrlConstants.BOOKMARKS_FOLDER_URL).buildUpon(); |
- // Encodes the path and appends it to the base url. A simple appending |
- // does not work because there might be spaces in suffix. |
builder.appendPath(folderId.toString()); |
return builder.build(); |
} |
@@ -100,18 +95,4 @@ class BookmarkUIState { |
BookmarkUIState other = (BookmarkUIState) obj; |
return mState == other.mState && TextUtils.equals(mUrl, other.mUrl); |
} |
- |
- /** |
- * @return Whether this state is valid. |
- */ |
- boolean isValid(BookmarkModel bookmarkModel) { |
- if (mUrl == null || mState == STATE_INVALID) return false; |
- |
- if (mState == STATE_FOLDER) { |
- return mFolder != null && bookmarkModel.doesBookmarkExist(mFolder) |
- && !mFolder.equals(bookmarkModel.getRootFolderId()); |
- } |
- |
- return true; |
- } |
} |