| Index: chrome/browser/android/provider/chrome_browser_provider.cc
|
| diff --git a/chrome/browser/android/provider/chrome_browser_provider.cc b/chrome/browser/android/provider/chrome_browser_provider.cc
|
| index ef625f143e000db783fad587a02c918af2250566..9e9e03817b4d19715f9997d983f0a92dab285766 100644
|
| --- a/chrome/browser/android/provider/chrome_browser_provider.cc
|
| +++ b/chrome/browser/android/provider/chrome_browser_provider.cc
|
| @@ -27,6 +27,7 @@
|
| #include "chrome/browser/favicon/favicon_service.h"
|
| #include "chrome/browser/favicon/favicon_service_factory.h"
|
| #include "chrome/browser/history/android/sqlite_cursor.h"
|
| +#include "chrome/browser/history/history_service_factory.h"
|
| #include "chrome/browser/history/top_sites.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| @@ -1154,6 +1155,7 @@ bool ChromeBrowserProvider::RegisterChromeBrowserProvider(JNIEnv* env) {
|
|
|
| ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj)
|
| : weak_java_provider_(env, obj),
|
| + history_service_observer_(this),
|
| handling_extensive_changes_(false) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| profile_ = g_browser_process->profile_manager()->GetLastUsedProfile();
|
| @@ -1165,8 +1167,8 @@ ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj)
|
|
|
| // Registers the notifications we are interested.
|
| bookmark_model_->AddObserver(this);
|
| - notification_registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URL_VISITED,
|
| - content::NotificationService::AllSources());
|
| + history_service_observer_.Add(
|
| + HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS));
|
| notification_registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URLS_DELETED,
|
| content::NotificationService::AllSources());
|
| notification_registrar_.Add(this,
|
| @@ -1603,17 +1605,28 @@ void ChromeBrowserProvider::BookmarkModelChanged() {
|
| Java_ChromeBrowserProvider_onBookmarkChanged(env, obj.obj());
|
| }
|
|
|
| +void ChromeBrowserProvider::OnHistoryChanged() {
|
| + JNIEnv* env = AttachCurrentThread();
|
| + ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
|
| + if (obj.is_null())
|
| + return;
|
| + Java_ChromeBrowserProvider_onHistoryChanged(env, obj.obj());
|
| +}
|
| +
|
| +void ChromeBrowserProvider::OnURLVisited(HistoryService* history_service,
|
| + ui::PageTransition transition,
|
| + const history::URLRow& row,
|
| + const history::RedirectList& redirects,
|
| + base::Time visit_time) {
|
| + OnHistoryChanged();
|
| +}
|
| +
|
| void ChromeBrowserProvider::Observe(
|
| int type,
|
| const content::NotificationSource& source,
|
| const content::NotificationDetails& details) {
|
| - if (type == chrome::NOTIFICATION_HISTORY_URL_VISITED ||
|
| - type == chrome::NOTIFICATION_HISTORY_URLS_DELETED) {
|
| - JNIEnv* env = AttachCurrentThread();
|
| - ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
|
| - if (obj.is_null())
|
| - return;
|
| - Java_ChromeBrowserProvider_onHistoryChanged(env, obj.obj());
|
| + if (type == chrome::NOTIFICATION_HISTORY_URLS_DELETED) {
|
| + OnHistoryChanged();
|
| } else if (type ==
|
| chrome::NOTIFICATION_HISTORY_KEYWORD_SEARCH_TERM_UPDATED) {
|
| JNIEnv* env = AttachCurrentThread();
|
|
|