OLD | NEW |
---|---|
(Empty) | |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_ | |
6 #define CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_ | |
7 | |
8 #include "base/android/jni_helper.h" | |
9 #include "base/android/jni_string.h" | |
10 #include "base/android/scoped_java_ref.h" | |
11 #include "base/basictypes.h" | |
12 #include "base/compiler_specific.h" | |
13 #include "base/gtest_prod_util.h" | |
14 #include "base/memory/scoped_ptr.h" | |
15 #include "base/prefs/pref_member.h" | |
16 #include "net/base/network_change_notifier.h" | |
17 #include "net/url_request/url_fetcher_delegate.h" | |
18 | |
19 using base::android::ScopedJavaLocalRef; | |
20 | |
21 class PrefService; | |
22 | |
23 namespace net { | |
24 class URLFetcher; | |
25 } | |
26 | |
27 namespace spdyproxy { | |
28 | |
29 // The number of days of bandwidth usage statistics that are tracked. | |
30 const unsigned int kNumDaysInHistory = 60; | |
31 | |
32 // The number of days of bandwidth usage statistics that are presented. | |
33 const unsigned int kNumDaysInHistorySummary = 30; | |
34 | |
35 COMPILE_ASSERT(kNumDaysInHistorySummary <= kNumDaysInHistory, | |
36 DataReductionProxySettings_summary_too_long); | |
37 | |
38 } // namespace spdyproxy | |
39 | |
40 // Central point for configuring the data reduction proxy on Android. | |
41 // This object lives on the UI thread and all of its methods are expected to | |
42 // be called from there. | |
43 class DataReductionProxySettingsAndroid | |
44 : public net::URLFetcherDelegate, | |
45 public net::NetworkChangeNotifier::IPAddressObserver { | |
46 public: | |
47 DataReductionProxySettingsAndroid(JNIEnv* env, jobject obj); | |
48 virtual ~DataReductionProxySettingsAndroid(); | |
49 | |
50 void InitDataReductionProxySettings(JNIEnv* env, jobject obj); | |
51 | |
52 // Add a host or URL pattern to bypass the proxy, respectively. Wildcards | |
53 // should be compatible with the JavaScript function shExpMatch, which can be | |
54 // used in proxy PAC resolution. These function must only be called before the | |
55 // proxy is used. | |
56 void BypassHostPattern(JNIEnv* env, jobject obj, jstring pattern); | |
57 void BypassURLPattern(JNIEnv* env, jobject obj, jstring pattern); | |
58 | |
59 // Returns true if the data reduction proxy is allowed to be used on this | |
60 // instance of Chrome. This could return false, for example, if this instance | |
61 // is not part of the field trial, or if the proxy name is not configured | |
62 // via gyp. | |
63 jboolean IsDataReductionProxyAllowed(JNIEnv* env, jobject obj); | |
64 | |
65 // Returns true if a screen promoting the data reduction proxy is allowed to | |
66 // be shown. Logic that decides when to show the promo should check its | |
67 // availability. This would return false if not part of a separate field | |
68 // trial that governs the use of the promotion. | |
69 jboolean IsDataReductionProxyPromoAllowed(JNIEnv* env, jobject obj); | |
70 | |
71 // Returns the origin of the data reduction proxy. | |
72 ScopedJavaLocalRef<jstring> GetDataReductionProxyOrigin(JNIEnv* env, | |
73 jobject obj); | |
74 | |
75 // Returns a configuration string for the proxy. | |
76 ScopedJavaLocalRef<jstring> GetDataReductionProxyAuth(JNIEnv* env, | |
77 jobject obj); | |
78 | |
79 // Returns true if the proxy is enabled. | |
80 jboolean IsDataReductionProxyEnabled(JNIEnv* env, jobject obj); | |
81 | |
82 // Returns true if the proxy is managed by an adminstrator's policy. | |
83 jboolean IsDataReductionProxyManaged(JNIEnv* env, jobject obj); | |
84 | |
85 // Enables or disables the data reduction proxy. If a probe URL is available, | |
86 // and a probe request fails at some point, the proxy won't be used until a | |
87 // probe succeeds. | |
88 void SetDataReductionProxyEnabled(JNIEnv* env, jobject obj, jboolean enabled); | |
89 | |
90 // Returns the time in microseconds that the last update was made to the | |
91 // daily original and received content lengths. | |
92 jlong GetDataReductionLastUpdateTime(JNIEnv* env, jobject obj); | |
93 | |
94 // Return a Java |ContentLengths| object containing the total number of bytes | |
95 // of all received content, before and after compression by the data | |
96 // reduction proxy. | |
97 base::android::ScopedJavaLocalRef<jobject> GetContentLengths(JNIEnv* env, | |
98 jobject obj); | |
99 | |
100 // Returns an array containing the total size of all HTTP content that was | |
101 // received over the last |kNumDaysInHistory| before any compression by the | |
102 // data reduction proxy. Each element in the array contains one day of data. | |
103 ScopedJavaLocalRef<jlongArray> GetDailyOriginalContentLengths(JNIEnv* env, | |
104 jobject obj); | |
105 | |
106 // Returning an array containing the aggregate received HTTP content in | |
mef
2013/09/19 20:21:44
nit: Returns
bengr
2013/09/19 20:31:25
Done.
| |
107 // the last |kNumDaysInHistory| days | |
108 ScopedJavaLocalRef<jlongArray> GetDailyReceivedContentLengths(JNIEnv* env, | |
109 jobject obj); | |
110 | |
111 // Registers the native methods to be call from Java. | |
112 static bool Register(JNIEnv* env); | |
113 | |
114 // net::URLFetcherDelegate: | |
115 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; | |
116 | |
117 protected: | |
118 void InitPrefMembers(); | |
119 virtual net::URLFetcher* GetURLFetcher(); | |
120 virtual PrefService* GetOriginalProfilePrefs(); | |
121 virtual PrefService* GetLocalStatePrefs(); | |
122 | |
123 private: | |
124 friend class DataReductionProxySettingsAndroidTest; | |
125 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
126 TestBypassRules); | |
127 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
128 TestResetDataReductionStatistics); | |
129 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
130 TestIsProxyEnabledOrManaged); | |
131 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
132 TestSetProxyPac); | |
133 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
134 TestGetDailyContentLengths); | |
135 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
136 TestContentLengthsInternal); | |
137 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, | |
138 TestMaybeActivateDataReductionProxy); | |
139 | |
140 | |
141 | |
142 // NetworkChangeNotifier::IPAddressObserver: | |
143 virtual void OnIPAddressChanged() OVERRIDE; | |
144 | |
145 void OnProxyEnabledPrefChange(); | |
146 | |
147 void AddDefaultProxyBypassRules(); | |
148 void AddURLPatternToBypass(const std::string& pattern); | |
149 void AddHostPatternToBypass(const std::string& pattern); | |
150 void AddPatternToBypass(const std::string& url_or_host, | |
151 const std::string& pattern); | |
152 void AddHostToBypass(const std::string& host); | |
153 | |
154 void ResetDataReductionStatistics(); | |
155 | |
156 void MaybeActivateDataReductionProxy(bool at_startup); | |
157 void SetProxyPac(bool enable_spdy_proxy, bool at_startup); | |
158 | |
159 ScopedJavaLocalRef<jlongArray> GetDailyContentLengths(JNIEnv* env, | |
160 const char* pref_name); | |
161 void GetContentLengthsInternal(unsigned int days, | |
162 int64* original_content_length, | |
163 int64* received_content_length, | |
164 int64* last_update_time); | |
165 | |
166 // Requests the proxy probe URL, if one is set. If unable to do so, disables | |
167 // the proxy, if enabled. Otherwise enables the proxy if disabled by a probe | |
168 // failure. | |
169 void ProbeWhetherDataReductionProxyIsAvailable(); | |
170 | |
171 std::string GetProxyPacScript(); | |
172 | |
173 std::vector<std::string> bypass_rules_; | |
174 | |
175 // Indicate whether a user has turned on the data reduction proxy previously | |
176 // in this session. | |
177 bool has_turned_on_; | |
178 | |
179 // Indicate whether a user has turned off the data reduction proxy previously | |
180 // in this session. | |
181 bool has_turned_off_; | |
182 | |
183 bool disabled_by_carrier_; | |
184 bool enabled_by_user_; | |
185 | |
186 scoped_ptr<net::URLFetcher> fetcher_; | |
187 BooleanPrefMember spdy_proxy_auth_enabled_; | |
188 | |
189 DISALLOW_COPY_AND_ASSIGN(DataReductionProxySettingsAndroid); | |
190 }; | |
191 | |
192 #endif // CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_ | |
OLD | NEW |