How to get Chrome History & Bookmarks in Android Marshmallow (API>=23)?

user1406716 picture user1406716 · Nov 2, 2015 · Viewed 10.4k times · Source

Till API Level 22 (i.e. till Lollipop), there has been a way to read History and Bookmarks from the Chrome app (as shown in this thread) using the permission com.android.browser.permission.READ_HISTORY_BOOKMARKS.

Now, in Android API=23 Marshmallow, since the entire Browser Bookmark system has been removed in Marshmallow (changes here), the above method does not work anymore.

Here is the thread that shows why this is not possible anymore.

In my research so far, I have not found good news. Google has definitely killed the System Bookmarks feature(here & here), question is if Chrome Browser would be exposing it in any manner?

Is there a replacement / way to read Bookmarks and History from Chrome (even Chrome specific would answer this question) going forward in Android Marshmallow?

Answer

j__m picture j__m · Nov 7, 2016

Contrary to the cited documentation, com.android.browser.permission.READ_HISTORY_BOOKMARKS is still defined by the framework, and can still be obtained by apps. Unfortunately, on Marshmallow and later, Chrome checks for a different permission, one that regular apps aren't allowed to obtain. For compatibility reasons, when that permission check inevitably fails, Chrome returns zero rows instead of throwing a SecurityException.

You can see the source code here:

query() calls hasReadAccess(), which calls hasPermission("com.android.browser.permission.READ_HISTORY_BOOKMARKS"), which on API >= M ignores the permission argument and instead checks for com.android.chrome.permission.READ_WRITE_BOOKMARK_FOLDERS. This permission is limited to system apps and apps signed with Google's key.