Index: chrome/browser/android/history_report/data_observer.cc |
diff --git a/chrome/browser/android/history_report/data_observer.cc b/chrome/browser/android/history_report/data_observer.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2058fdcaed1ae9d85edc5f80937d9d1900cb94da |
--- /dev/null |
+++ b/chrome/browser/android/history_report/data_observer.cc |
@@ -0,0 +1,144 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/android/history_report/data_observer.h" |
+ |
+#include "base/time/time.h" |
+#include "chrome/browser/android/history_report/delta_file_commons.h" |
+#include "chrome/browser/android/history_report/delta_file_service.h" |
+#include "chrome/browser/android/history_report/usage_report_util.h" |
+#include "chrome/browser/android/history_report/usage_reports_buffer_service.h" |
+#include "components/bookmarks/browser/bookmark_model.h" |
+#include "components/history/core/browser/history_service.h" |
+ |
+using bookmarks::BookmarkModel; |
+using bookmarks::BookmarkNode; |
+ |
+namespace history_report { |
+ |
+DataObserver::DataObserver( |
+ base::Callback<void(void)> data_changed_callback, |
+ base::Callback<void(void)> data_cleared_callback, |
+ base::Callback<void(void)> stop_reporting_callback, |
+ DeltaFileService* delta_file_service, |
+ UsageReportsBufferService* usage_reports_buffer_service, |
+ BookmarkModel* bookmark_model, |
+ history::HistoryService* history_service) |
+ : data_changed_callback_(data_changed_callback), |
+ data_cleared_callback_(data_cleared_callback), |
+ stop_reporting_callback_(stop_reporting_callback), |
+ delta_file_service_(delta_file_service), |
+ usage_reports_buffer_service_(usage_reports_buffer_service) { |
+ bookmark_model->AddObserver(this); |
+ history_service->AddObserver(this); |
+} |
+ |
+DataObserver::~DataObserver() {} |
+ |
+void DataObserver::BookmarkModelLoaded(BookmarkModel* model, |
+ bool ids_reassigned) {} |
+ |
+void DataObserver::BookmarkModelBeingDeleted(BookmarkModel* model) {} |
+ |
+void DataObserver::BookmarkNodeMoved(BookmarkModel* model, |
+ const BookmarkNode* old_parent, |
+ int old_index, |
+ const BookmarkNode* new_parent, |
+ int new_index) {} |
+ |
+void DataObserver::BookmarkNodeAdded(BookmarkModel* model, |
+ const BookmarkNode* parent, |
+ int index) { |
+ delta_file_service_->PageAdded(parent->GetChild(index)->url()); |
+ data_changed_callback_.Run(); |
+} |
+ |
+void DataObserver::BookmarkNodeRemoved(BookmarkModel* model, |
+ const BookmarkNode* parent, |
+ int old_index, |
+ const BookmarkNode* node, |
+ const std::set<GURL>& removed_urls) { |
+ DeleteBookmarks(removed_urls); |
+} |
+ |
+void DataObserver::BookmarkAllUserNodesRemoved( |
+ BookmarkModel* model, |
+ const std::set<GURL>& removed_urls) { |
+ DeleteBookmarks(removed_urls); |
+} |
+ |
+void DataObserver::BookmarkNodeChanged(BookmarkModel* model, |
+ const BookmarkNode* node) { |
+ delta_file_service_->PageAdded(node->url()); |
+ data_changed_callback_.Run(); |
+} |
+ |
+void DataObserver::BookmarkNodeFaviconChanged(BookmarkModel* model, |
+ const BookmarkNode* node) {} |
+ |
+void DataObserver::BookmarkNodeChildrenReordered(BookmarkModel* model, |
+ const BookmarkNode* node) {} |
+ |
+void DataObserver::DeleteBookmarks(const std::set<GURL>& removed_urls) { |
+ for (std::set<GURL>::const_iterator it = removed_urls.begin(); |
+ it != removed_urls.end(); |
+ ++it) { |
+ delta_file_service_->PageDeleted(*it); |
+ } |
+ if (!removed_urls.empty()) |
+ data_changed_callback_.Run(); |
+} |
+ |
+void DataObserver::OnURLVisited(history::HistoryService* history_service, |
+ ui::PageTransition transition, |
+ const history::URLRow& row, |
+ const history::RedirectList& redirects, |
+ base::Time visit_time) { |
+ if (row.hidden()) |
+ return; |
+ |
+ delta_file_service_->PageAdded(row.url()); |
+ // TODO(haaawk): check if this is really a data change not just a |
+ // visit of already seen page. |
+ data_changed_callback_.Run(); |
+ std::string id = DeltaFileEntryWithData::UrlToId(row.url().spec()); |
+ usage_reports_buffer_service_->AddVisit( |
+ id, |
+ visit_time.ToJavaTime(), |
+ usage_report_util::IsTypedVisit(transition)); |
+ // We stop any usage reporting to wait for gmscore to query the provider |
+ // for this url. We do not want to report usage for a URL which might |
+ // not be known to gmscore. |
+ stop_reporting_callback_.Run(); |
+} |
+ |
+void DataObserver::OnURLsModified(history::HistoryService* history_service, |
+ const history::URLRows& changed_urls) { |
+ for (const auto& row : changed_urls) { |
+ if (!row.hidden()) |
+ delta_file_service_->PageAdded(row.url()); |
+ } |
+ |
+ data_changed_callback_.Run(); |
+} |
+ |
+void DataObserver::OnURLsDeleted(history::HistoryService* history_service, |
+ bool all_history, |
+ bool expired, |
+ const history::URLRows& deleted_rows, |
+ const std::set<GURL>& favicon_urls) { |
+ if (all_history) { |
+ delta_file_service_->Clear(); |
+ data_cleared_callback_.Run(); |
+ } else { |
+ for (const auto& row : deleted_rows) { |
+ if (!row.hidden()) |
+ delta_file_service_->PageDeleted(row.url()); |
+ } |
+ |
+ data_changed_callback_.Run(); |
+ } |
+} |
+ |
+} // namespace history_report |