Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(132)

Side by Side Diff: chrome/browser/android/history_report/history_report_jni_bridge.cc

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/android/history_report/history_report_jni_bridge.h"
6 #include <vector>
7
8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h"
10 #include "base/bind.h"
11 #include "chrome/browser/android/history_report/data_observer.h"
12 #include "chrome/browser/android/history_report/data_provider.h"
13 #include "chrome/browser/android/history_report/delta_file_commons.h"
14 #include "chrome/browser/android/history_report/delta_file_service.h"
15 #include "chrome/browser/android/history_report/usage_report_util.h"
16 #include "chrome/browser/android/history_report/usage_reports_buffer_service.h"
17 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
18 #include "chrome/browser/browser_process.h"
19 #include "chrome/browser/history/history_service_factory.h"
20 #include "chrome/browser/profiles/profile.h"
21 #include "chrome/browser/profiles/profile_manager.h"
22 #include "components/bookmarks/browser/bookmark_model.h"
23 #include "components/history/core/browser/history_service.h"
24 #include "content/public/browser/browser_thread.h"
25 #include "jni/HistoryReportJniBridge_jni.h"
26
27 namespace history_report {
28
29 static jlong Init(JNIEnv* env, jobject obj) {
30 HistoryReportJniBridge* bridge = new HistoryReportJniBridge(env, obj);
31 return reinterpret_cast<intptr_t>(bridge);
32 }
33
34 bool RegisterHistoryReportJniBridge(JNIEnv* env) {
35 return RegisterNativesImpl(env);
36 }
37
38 HistoryReportJniBridge::HistoryReportJniBridge(JNIEnv* env, jobject obj)
39 : weak_java_provider_(env, obj) {
40 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
41 Profile* profile = g_browser_process->profile_manager()->
42 GetLastUsedProfile()->GetOriginalProfile();
43
44 delta_file_service_.reset(new DeltaFileService(profile->GetPath()));
45 usage_reports_buffer_service_.reset(
46 new UsageReportsBufferService(profile->GetPath()));
47 usage_reports_buffer_service_->Init();
48 bookmark_model_.reset(BookmarkModelFactory::GetForProfile(profile));
49 base::Callback<void(void)> on_change = base::Bind(
50 &history_report::HistoryReportJniBridge::NotifyDataChanged,
51 base::Unretained(this));
52 base::Callback<void(void)> on_clear = base::Bind(
53 &history_report::HistoryReportJniBridge::NotifyDataCleared,
54 base::Unretained(this));
55 base::Callback<void(void)> stop_reporting = base::Bind(
56 &history_report::HistoryReportJniBridge::StopReporting,
57 base::Unretained(this));
58 history::HistoryService* history_service =
59 HistoryServiceFactory::GetForProfile(profile,
60 ServiceAccessType::EXPLICIT_ACCESS);
61 data_observer_.reset(new DataObserver(on_change,
62 on_clear,
63 stop_reporting,
64 delta_file_service_.get(),
65 usage_reports_buffer_service_.get(),
66 bookmark_model_.get(),
67 history_service));
68 data_provider_.reset(new DataProvider(profile,
69 delta_file_service_.get(),
70 bookmark_model_.get()));
71 }
72
73 HistoryReportJniBridge::~HistoryReportJniBridge() {}
74
75 jlong HistoryReportJniBridge::TrimDeltaFile(JNIEnv* env,
76 jobject obj,
77 jlong seq_no_lower_bound) {
78 return delta_file_service_->Trim(seq_no_lower_bound);
79 }
80
81 base::android::ScopedJavaLocalRef<jobjectArray> HistoryReportJniBridge::Query(
82 JNIEnv* env,
83 jobject obj,
84 jlong last_seq_no,
85 jint limit) {
86 scoped_ptr<std::vector<DeltaFileEntryWithData> > entries =
87 data_provider_->Query(last_seq_no, limit);
88 ScopedJavaLocalRef<jobjectArray> jentries_array =
89 history_report::Java_HistoryReportJniBridge_createDeltaFileEntriesArray(
90 env, entries->size());
91
92 int64 max_seq_no = 0;
93 for (size_t i = 0; i < entries->size(); ++i) {
94 const DeltaFileEntryWithData& entry = (*entries)[i];
95 max_seq_no = max_seq_no < entry.SeqNo() ? entry.SeqNo() : max_seq_no;
96 history_report::Java_HistoryReportJniBridge_setDeltaFileEntry(
97 env,
98 jentries_array.obj(),
99 i,
100 entry.SeqNo(),
101 base::android::ConvertUTF8ToJavaString(env, entry.Type()).Release(),
102 base::android::ConvertUTF8ToJavaString(env, entry.Id()).Release(),
103 base::android::ConvertUTF8ToJavaString(env, entry.Url()).Release(),
104 entry.Score(),
105 base::android::ConvertUTF16ToJavaString(env, entry.Title()).Release(),
106 base::android::ConvertUTF8ToJavaString(env,
107 entry.IndexedUrl()).Release());
108 }
109
110 // Check if all entries from delta file were synced and start reporting usage
111 // if it's true.
112 if (entries->empty() || delta_file_service_->Query(max_seq_no, 1)->empty())
113 StartReporting();
114
115 return jentries_array;
116 }
117
118 base::android::ScopedJavaLocalRef<jobjectArray>
119 HistoryReportJniBridge::GetUsageReportsBatch(JNIEnv* env,
120 jobject obj,
121 jint batch_size) {
122 scoped_ptr<std::vector<UsageReport> > reports =
123 usage_reports_buffer_service_->GetUsageReportsBatch(batch_size);
124 ScopedJavaLocalRef<jobjectArray> jreports_array =
125 history_report::Java_HistoryReportJniBridge_createUsageReportsArray(env,
126 reports->size());
127
128 for (size_t i = 0; i < reports->size(); ++i) {
129 const UsageReport& report = (*reports)[i];
130 std::string key = usage_report_util::ReportToKey(report);
131 history_report::Java_HistoryReportJniBridge_setUsageReport(
132 env,
133 jreports_array.obj(),
134 i,
135 base::android::ConvertUTF8ToJavaString(env, key).Release(),
136 base::android::ConvertUTF8ToJavaString(env, report.id()).Release(),
137 report.timestamp_ms(),
138 report.typed_visit());
139 }
140 return jreports_array;
141 }
142
143 void HistoryReportJniBridge::RemoveUsageReports(JNIEnv* env,
144 jobject obj,
145 jobjectArray& batch) {
146 std::vector<std::string> to_remove;
147 base::android::AppendJavaStringArrayToStringVector(env, batch, &to_remove);
148 usage_reports_buffer_service_->Remove(to_remove);
149 }
150
151 void HistoryReportJniBridge::NotifyDataChanged() {
152 JNIEnv* env = base::android::AttachCurrentThread();
153 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
154 if (!obj.is_null())
155 history_report::Java_HistoryReportJniBridge_onDataChanged(env, obj.obj());
156 }
157
158 void HistoryReportJniBridge::NotifyDataCleared() {
159 JNIEnv* env = base::android::AttachCurrentThread();
160 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
161 if (!obj.is_null())
162 history_report::Java_HistoryReportJniBridge_onDataCleared(env, obj.obj());
163 }
164
165 void HistoryReportJniBridge::StopReporting() {
166 JNIEnv* env = base::android::AttachCurrentThread();
167 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
168 if (!obj.is_null())
169 history_report::Java_HistoryReportJniBridge_stopReportingTask(env,
170 obj.obj());
171 }
172
173 void HistoryReportJniBridge::StartReporting() {
174 JNIEnv* env = base::android::AttachCurrentThread();
175 ScopedJavaLocalRef<jobject> obj = weak_java_provider_.get(env);
176 if (!obj.is_null())
177 history_report::Java_HistoryReportJniBridge_startReportingTask(env,
178 obj.obj());
179 }
180
181 jboolean HistoryReportJniBridge::AddHistoricVisitsToUsageReportsBuffer(
182 JNIEnv* env,
183 jobject obj) {
184 data_provider_->StartVisitMigrationToUsageBuffer(
185 usage_reports_buffer_service_.get());
186 // TODO(nileshagrawal): Return true when actually done,
187 // or callback on success.
188 return true;
189 }
190
191 base::android::ScopedJavaLocalRef<jstring> HistoryReportJniBridge::Dump(
192 JNIEnv* env,
193 jobject obj) {
194 std::string dump;
195 dump.append(delta_file_service_->Dump());
196 dump.append(usage_reports_buffer_service_->Dump());
197 return base::android::ConvertUTF8ToJavaString(env, dump);
198 }
199
200 } // namespace history_report
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698