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..39b2fc5ccd414d08c908c9c1968a0998526e8c4b 100644 |
--- a/chrome/browser/android/provider/chrome_browser_provider.cc |
+++ b/chrome/browser/android/provider/chrome_browser_provider.cc |
@@ -1158,6 +1158,8 @@ ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj) |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
profile_ = g_browser_process->profile_manager()->GetLastUsedProfile(); |
bookmark_model_ = BookmarkModelFactory::GetForProfile(profile_); |
+ history_service_ = |
+ HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS); |
top_sites_ = profile_->GetTopSites(); |
service_.reset(new AndroidHistoryProviderService(profile_)); |
favicon_service_.reset(FaviconServiceFactory::GetForProfile(profile_, |
@@ -1165,8 +1167,7 @@ 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_->AddObserver(this); |
notification_registrar_.Add(this, chrome::NOTIFICATION_HISTORY_URLS_DELETED, |
content::NotificationService::AllSources()); |
notification_registrar_.Add(this, |
@@ -1180,6 +1181,7 @@ ChromeBrowserProvider::ChromeBrowserProvider(JNIEnv* env, jobject obj) |
ChromeBrowserProvider::~ChromeBrowserProvider() { |
bookmark_model_->RemoveObserver(this); |
+ history_service_->RemoveObserver(this); |
Bernhard Bauer
2014/10/15 12:24:52
Maybe you could use a ScopedObserver to take care
sdefresne
2014/10/17 14:32:38
Done.
|
} |
void ChromeBrowserProvider::Destroy(JNIEnv*, jobject) { |
@@ -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(); |