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

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: sclittle comments 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>
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698