OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h" | 5 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include <algorithm> | |
sclittle
2017/04/07 20:44:16
nit: remove unnecessary include
megjablon
2017/04/08 01:52:57
Done.
| |
10 #include <string> | |
11 #include <unordered_map> | |
sclittle
2017/04/07 20:44:16
nit: remove unnecessary include
megjablon
2017/04/08 01:52:57
Done.
| |
12 #include <vector> | |
sclittle
2017/04/07 20:44:16
nit: Move this include to the .h file
megjablon
2017/04/08 01:52:57
Done.
| |
13 | |
9 #include "base/android/jni_android.h" | 14 #include "base/android/jni_android.h" |
10 #include "base/android/jni_string.h" | 15 #include "base/android/jni_string.h" |
16 #include "base/time/time.h" | |
sclittle
2017/04/07 20:44:16
nit: Is this include necessary?
megjablon
2017/04/08 01:52:57
Done.
| |
11 #include "base/values.h" | 17 #include "base/values.h" |
12 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" | 18 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" |
13 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h" | 19 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact ory.h" |
14 #include "chrome/browser/profiles/profile.h" | 20 #include "chrome/browser/profiles/profile.h" |
15 #include "chrome/browser/profiles/profile_manager.h" | 21 #include "chrome/browser/profiles/profile_manager.h" |
16 #include "chrome/common/pref_names.h" | 22 #include "chrome/common/pref_names.h" |
23 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_comp ression_stats.h" | |
17 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metr ics.h" | 24 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metr ics.h" |
25 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_serv ice.h" | |
18 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_sett ings.h" | 26 #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_sett ings.h" |
27 #include "components/data_reduction_proxy/core/browser/data_usage_store.h" | |
19 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _store.h" | 28 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event _store.h" |
20 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h" | 29 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_param s.h" |
21 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_ names.h" | 30 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_ names.h" |
22 #include "jni/DataReductionProxySettings_jni.h" | 31 #include "jni/DataReductionProxySettings_jni.h" |
23 #include "net/proxy/proxy_server.h" | 32 #include "net/proxy/proxy_server.h" |
24 #include "url/gurl.h" | 33 #include "url/gurl.h" |
25 | 34 |
26 | 35 |
27 using base::android::ConvertUTF8ToJavaString; | 36 using base::android::ConvertUTF8ToJavaString; |
28 using base::android::JavaParamRef; | 37 using base::android::JavaParamRef; |
29 using base::android::ScopedJavaLocalRef; | 38 using base::android::ScopedJavaLocalRef; |
30 using data_reduction_proxy::DataReductionProxySettings; | 39 using data_reduction_proxy::DataReductionProxySettings; |
31 | 40 |
32 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid() { | 41 namespace { |
42 | |
43 constexpr int kBucketsPerDay = | |
sclittle
2017/04/07 20:44:16
minor style nit: I'd recommend explicitly making t
megjablon
2017/04/08 01:52:57
Done.
| |
44 24 * 60 / data_reduction_proxy::kDataUsageBucketLengthInMinutes; | |
45 | |
46 struct DataUsageForHost { | |
47 DataUsageForHost() : data_used(0), original_size(0) {} | |
48 | |
49 int64_t data_used; | |
50 int64_t original_size; | |
51 }; | |
52 | |
53 } // namespace | |
54 | |
55 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid() | |
56 : weak_factory_(this) {} | |
57 | |
58 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid( | |
59 JNIEnv* env, | |
60 const base::android::JavaParamRef<jobject>& obj) | |
61 : weak_factory_(this) { | |
62 j_settings_obj_.Reset(env, obj); | |
33 } | 63 } |
34 | 64 |
35 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { | 65 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { |
36 } | 66 } |
37 | 67 |
38 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( | 68 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( |
39 JNIEnv* env, | 69 JNIEnv* env, |
40 const JavaParamRef<jobject>& obj) { | 70 const JavaParamRef<jobject>& obj) { |
41 return Settings()->PromoAllowed(); | 71 return Settings()->PromoAllowed(); |
42 } | 72 } |
(...skipping 16 matching lines...) Expand all Loading... | |
59 jboolean enabled) { | 89 jboolean enabled) { |
60 Settings()->SetDataReductionProxyEnabled(enabled); | 90 Settings()->SetDataReductionProxyEnabled(enabled); |
61 } | 91 } |
62 | 92 |
63 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( | 93 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( |
64 JNIEnv* env, | 94 JNIEnv* env, |
65 const JavaParamRef<jobject>& obj) { | 95 const JavaParamRef<jobject>& obj) { |
66 return Settings()->GetDataReductionLastUpdateTime(); | 96 return Settings()->GetDataReductionLastUpdateTime(); |
67 } | 97 } |
68 | 98 |
99 void DataReductionProxySettingsAndroid::ClearDataSavingStatistics( | |
100 JNIEnv* env, | |
101 const base::android::JavaParamRef<jobject>& obj) { | |
102 Settings()->ClearDataSavingStatistics(); | |
103 } | |
104 | |
69 base::android::ScopedJavaLocalRef<jobject> | 105 base::android::ScopedJavaLocalRef<jobject> |
70 DataReductionProxySettingsAndroid::GetContentLengths( | 106 DataReductionProxySettingsAndroid::GetContentLengths( |
71 JNIEnv* env, | 107 JNIEnv* env, |
72 const JavaParamRef<jobject>& obj) { | 108 const JavaParamRef<jobject>& obj) { |
73 int64_t original_content_length; | 109 int64_t original_content_length; |
74 int64_t received_content_length; | 110 int64_t received_content_length; |
75 int64_t last_update_internal; | 111 int64_t last_update_internal; |
76 Settings()->GetContentLengths( | 112 Settings()->GetContentLengths( |
77 data_reduction_proxy::kNumDaysInHistorySummary, | 113 data_reduction_proxy::kNumDaysInHistorySummary, |
78 &original_content_length, | 114 &original_content_length, |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
167 JNIEnv* env, | 203 JNIEnv* env, |
168 const JavaParamRef<jobject>& obj) { | 204 const JavaParamRef<jobject>& obj) { |
169 data_reduction_proxy::DataReductionProxyEventStore* event_store = | 205 data_reduction_proxy::DataReductionProxyEventStore* event_store = |
170 Settings()->GetEventStore(); | 206 Settings()->GetEventStore(); |
171 if (!event_store) | 207 if (!event_store) |
172 return ConvertUTF8ToJavaString(env, std::string()); | 208 return ConvertUTF8ToJavaString(env, std::string()); |
173 | 209 |
174 return ConvertUTF8ToJavaString(env, event_store->SanitizedLastBypassEvent()); | 210 return ConvertUTF8ToJavaString(env, event_store->SanitizedLastBypassEvent()); |
175 } | 211 } |
176 | 212 |
213 void DataReductionProxySettingsAndroid::QueryDataUsage( | |
214 JNIEnv* env, | |
215 const JavaParamRef<jobject>& obj, | |
216 const JavaParamRef<jobject>& j_result_obj, | |
217 jint num_days) { | |
218 DCHECK(num_days <= data_reduction_proxy::kDataUsageHistoryNumDays); | |
219 j_query_result_obj_.Reset(env, j_result_obj); | |
220 num_day_for_query_ = num_days; | |
221 Settings() | |
222 ->data_reduction_proxy_service() | |
223 ->compression_stats() | |
224 ->GetHistoricalDataUsage(base::Bind( | |
225 &DataReductionProxySettingsAndroid::OnQueryDataUsageComplete, | |
226 weak_factory_.GetWeakPtr())); | |
227 } | |
228 | |
229 void DataReductionProxySettingsAndroid::OnQueryDataUsageComplete( | |
230 std::unique_ptr<std::vector<data_reduction_proxy::DataUsageBucket>> | |
231 data_usage) { | |
232 JNIEnv* env = base::android::AttachCurrentThread(); | |
233 | |
234 std::map<base::StringPiece, DataUsageForHost> per_site_usage_map; | |
sclittle
2017/04/07 20:44:16
nit: Could you add includes for <map> and base/str
megjablon
2017/04/08 01:52:57
I've gotten too use to Eclipse taking care of this
| |
235 | |
236 // Data usage is sorted chronologically with the last entry corresponding to | |
237 // |base::Time::Now()|. | |
238 const size_t num_buckets_to_display = num_day_for_query_ * kBucketsPerDay; | |
239 for (auto data_usage_it = data_usage->size() > num_buckets_to_display | |
240 ? data_usage->end() - num_buckets_to_display | |
241 : data_usage->begin(); | |
242 data_usage_it != data_usage->end(); ++data_usage_it) { | |
243 for (const auto& connection_usage : (*data_usage_it).connection_usage()) { | |
sclittle
2017/04/07 20:44:16
micro style nit: you could use data_usage_it->conn
megjablon
2017/04/08 01:52:57
Done.
| |
244 for (const auto& site_usage : connection_usage.site_usage()) { | |
245 DataUsageForHost& usage = per_site_usage_map[site_usage.hostname()]; | |
246 usage.data_used += site_usage.data_used(); | |
247 usage.original_size += site_usage.original_size(); | |
248 } | |
249 } | |
250 } | |
251 | |
252 for (const auto& site_bucket : per_site_usage_map) { | |
253 Java_DataReductionProxySettings_createDataUseItemAndAddToList( | |
sclittle
2017/04/07 20:44:16
In order to send all the counts at once instead of
megjablon
2017/04/08 01:52:57
I'm not a huge fan of this option. It doesn't seem
sclittle
2017/04/11 00:36:19
Acknowledged.
| |
254 env, j_query_result_obj_.obj(), | |
255 ConvertUTF8ToJavaString(env, site_bucket.first), | |
256 (long)site_bucket.second.data_used, | |
sclittle
2017/04/07 20:44:16
Do you need to cast these to long here? |long| in
megjablon
2017/04/08 01:52:57
Removed cast. Tried it out and it works as expecte
| |
257 (long)site_bucket.second.original_size); | |
258 } | |
259 | |
gone
2017/04/07 20:21:58
Should you check if either of the java object poin
megjablon
2017/04/08 01:52:57
The Settings object is a singleton. It has the cal
| |
260 Java_DataReductionProxySettings_onQueryDataUsageComplete( | |
261 env, j_settings_obj_.obj(), j_query_result_obj_.obj()); | |
262 | |
263 j_query_result_obj_.Release(); | |
264 } | |
265 | |
177 // Used by generated jni code. | 266 // Used by generated jni code. |
178 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 267 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
179 return reinterpret_cast<intptr_t>(new DataReductionProxySettingsAndroid()); | 268 return reinterpret_cast<intptr_t>( |
269 new DataReductionProxySettingsAndroid(env, obj)); | |
180 } | 270 } |
OLD | NEW |