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(); |