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

Side by Side Diff: chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc

Issue 2781323004: Create a new Data Saver settings page that adds the site breakdown (Closed)
Patch Set: move comparator Created 3 years, 8 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
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 =
sclittle 2017/04/06 23:27:43 nit: Change this to constexpr int kBucketsPerDay =
megjablon 2017/04/07 01:20:03 Done.
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
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
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>>
sclittle 2017/04/06 23:27:43 Instead of using DictionaryValue here, you could j
megjablon 2017/04/07 01:20:03 Done.
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;
sclittle 2017/04/06 23:27:43 Using signed ints for indices like this seems a bi
megjablon 2017/04/07 01:20:03 Done.
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);
sclittle 2017/04/06 23:27:43 Why are these doubles? Could they just be int64s?
megjablon 2017/04/07 01:20:02 This is obsolete.
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(
sclittle 2017/04/06 23:27:43 Instead of adding the items one-by-one making a jn
megjablon 2017/04/07 01:20:02 I don't know of a way. I followed the same pattern
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698