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> |
| 10 #include <string> |
| 11 #include <unordered_map> |
| 12 #include <vector> |
| 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" |
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 const int BUCKETS_PER_DAY = |
| 44 24 * 60 / data_reduction_proxy::kDataUsageBucketLengthInMinutes; |
| 45 |
| 46 } // namespace |
| 47 |
| 48 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid() |
| 49 : weak_factory_(this) {} |
| 50 |
| 51 DataReductionProxySettingsAndroid::DataReductionProxySettingsAndroid( |
| 52 JNIEnv* env, |
| 53 const base::android::JavaParamRef<jobject>& obj) |
| 54 : weak_factory_(this) { |
| 55 j_settings_obj_.Reset(env, obj); |
33 } | 56 } |
34 | 57 |
35 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { | 58 DataReductionProxySettingsAndroid::~DataReductionProxySettingsAndroid() { |
36 } | 59 } |
37 | 60 |
38 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( | 61 jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyPromoAllowed( |
39 JNIEnv* env, | 62 JNIEnv* env, |
40 const JavaParamRef<jobject>& obj) { | 63 const JavaParamRef<jobject>& obj) { |
41 return Settings()->PromoAllowed(); | 64 return Settings()->PromoAllowed(); |
42 } | 65 } |
(...skipping 16 matching lines...) Expand all Loading... |
59 jboolean enabled) { | 82 jboolean enabled) { |
60 Settings()->SetDataReductionProxyEnabled(enabled); | 83 Settings()->SetDataReductionProxyEnabled(enabled); |
61 } | 84 } |
62 | 85 |
63 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( | 86 jlong DataReductionProxySettingsAndroid::GetDataReductionLastUpdateTime( |
64 JNIEnv* env, | 87 JNIEnv* env, |
65 const JavaParamRef<jobject>& obj) { | 88 const JavaParamRef<jobject>& obj) { |
66 return Settings()->GetDataReductionLastUpdateTime(); | 89 return Settings()->GetDataReductionLastUpdateTime(); |
67 } | 90 } |
68 | 91 |
| 92 void DataReductionProxySettingsAndroid::ClearDataSavingStatistics( |
| 93 JNIEnv* env, |
| 94 const base::android::JavaParamRef<jobject>& obj) { |
| 95 Settings()->ClearDataSavingStatistics(); |
| 96 } |
| 97 |
69 base::android::ScopedJavaLocalRef<jobject> | 98 base::android::ScopedJavaLocalRef<jobject> |
70 DataReductionProxySettingsAndroid::GetContentLengths( | 99 DataReductionProxySettingsAndroid::GetContentLengths( |
71 JNIEnv* env, | 100 JNIEnv* env, |
72 const JavaParamRef<jobject>& obj) { | 101 const JavaParamRef<jobject>& obj) { |
73 int64_t original_content_length; | 102 int64_t original_content_length; |
74 int64_t received_content_length; | 103 int64_t received_content_length; |
75 int64_t last_update_internal; | 104 int64_t last_update_internal; |
76 Settings()->GetContentLengths( | 105 Settings()->GetContentLengths( |
77 data_reduction_proxy::kNumDaysInHistorySummary, | 106 data_reduction_proxy::kNumDaysInHistorySummary, |
78 &original_content_length, | 107 &original_content_length, |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 JNIEnv* env, | 196 JNIEnv* env, |
168 const JavaParamRef<jobject>& obj) { | 197 const JavaParamRef<jobject>& obj) { |
169 data_reduction_proxy::DataReductionProxyEventStore* event_store = | 198 data_reduction_proxy::DataReductionProxyEventStore* event_store = |
170 Settings()->GetEventStore(); | 199 Settings()->GetEventStore(); |
171 if (!event_store) | 200 if (!event_store) |
172 return ConvertUTF8ToJavaString(env, std::string()); | 201 return ConvertUTF8ToJavaString(env, std::string()); |
173 | 202 |
174 return ConvertUTF8ToJavaString(env, event_store->SanitizedLastBypassEvent()); | 203 return ConvertUTF8ToJavaString(env, event_store->SanitizedLastBypassEvent()); |
175 } | 204 } |
176 | 205 |
| 206 void DataReductionProxySettingsAndroid::QueryDataUsage( |
| 207 JNIEnv* env, |
| 208 const JavaParamRef<jobject>& obj, |
| 209 const JavaParamRef<jobject>& j_result_obj, |
| 210 jint num_days) { |
| 211 DCHECK(num_days <= data_reduction_proxy::kDataUsageHistoryNumDays); |
| 212 j_query_result_obj_.Reset(env, j_result_obj); |
| 213 num_day_for_query_ = num_days; |
| 214 Settings() |
| 215 ->data_reduction_proxy_service() |
| 216 ->compression_stats() |
| 217 ->GetHistoricalDataUsage(base::Bind( |
| 218 &DataReductionProxySettingsAndroid::OnQueryDataUsageComplete, |
| 219 weak_factory_.GetWeakPtr())); |
| 220 } |
| 221 |
| 222 void DataReductionProxySettingsAndroid::OnQueryDataUsageComplete( |
| 223 std::unique_ptr<std::vector<data_reduction_proxy::DataUsageBucket>> |
| 224 data_usage) { |
| 225 JNIEnv* env = base::android::AttachCurrentThread(); |
| 226 |
| 227 int data_usage_size = data_usage->size(); |
| 228 int num_buckets_to_display = |
| 229 std::min(num_day_for_query_ * BUCKETS_PER_DAY, data_usage_size); |
| 230 |
| 231 std::unordered_map<std::string, std::unique_ptr<base::DictionaryValue>> |
| 232 per_site_usage_map; |
| 233 |
| 234 // Data usage is sorted chronologically with the last entry corresponding to |
| 235 // |base::Time::Now()|. |
| 236 for (int i = data_usage_size - 1; |
| 237 i >= data_usage_size - num_buckets_to_display; i--) { |
| 238 const auto& data_usage_bucket = data_usage->at(i); |
| 239 for (const auto& connection_usage : data_usage_bucket.connection_usage()) { |
| 240 for (const auto& site_usage : connection_usage.site_usage()) { |
| 241 auto usage = per_site_usage_map.find(site_usage.hostname()); |
| 242 if (usage != per_site_usage_map.end()) { |
| 243 double data_used; |
| 244 double original_size; |
| 245 usage->second->GetDouble("data_used", &data_used); |
| 246 usage->second->GetDouble("original_size", &original_size); |
| 247 usage->second->SetDouble("data_used", |
| 248 data_used + site_usage.data_used()); |
| 249 usage->second->SetDouble("original_size", |
| 250 original_size + site_usage.original_size()); |
| 251 } else { |
| 252 std::unique_ptr<base::DictionaryValue> usageValue = |
| 253 base::MakeUnique<base::DictionaryValue>(); |
| 254 usageValue->SetDouble("data_used", site_usage.data_used()); |
| 255 usageValue->SetDouble("original_size", site_usage.original_size()); |
| 256 per_site_usage_map.insert( |
| 257 std::make_pair(site_usage.hostname(), std::move(usageValue))); |
| 258 } |
| 259 } |
| 260 } |
| 261 } |
| 262 |
| 263 for (const auto& site_bucket : per_site_usage_map) { |
| 264 double data_used; |
| 265 double original_size; |
| 266 site_bucket.second->GetDouble("data_used", &data_used); |
| 267 site_bucket.second->GetDouble("original_size", &original_size); |
| 268 Java_DataReductionProxySettings_createDataUseItemAndAddToList( |
| 269 env, j_query_result_obj_.obj(), |
| 270 ConvertUTF8ToJavaString(env, site_bucket.first), (long)data_used, |
| 271 (long)original_size); |
| 272 } |
| 273 |
| 274 Java_DataReductionProxySettings_onQueryDataUsageComplete( |
| 275 env, j_settings_obj_.obj(), j_query_result_obj_.obj()); |
| 276 |
| 277 j_query_result_obj_.Release(); |
| 278 } |
| 279 |
177 // Used by generated jni code. | 280 // Used by generated jni code. |
178 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { | 281 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
179 return reinterpret_cast<intptr_t>(new DataReductionProxySettingsAndroid()); | 282 return reinterpret_cast<intptr_t>( |
| 283 new DataReductionProxySettingsAndroid(env, obj)); |
180 } | 284 } |
OLD | NEW |