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 "chrome/browser/net/spdyproxy/data_reduction_proxy_settings.h" 17 18 19 using base::android::ScopedJavaLocalRef; 20 21 22 // Central point for configuring the data reduction proxy on Android. 23 // This object lives on the UI thread and all of its methods are expected to 24 // be called from there. 25 class DataReductionProxySettingsAndroid : public DataReductionProxySettings { 26 public: 27 DataReductionProxySettingsAndroid(JNIEnv* env, jobject obj); 28 // Parameter-free constructor for C++ unit tests. 29 DataReductionProxySettingsAndroid(); 30 31 virtual ~DataReductionProxySettingsAndroid(); 32 33 void InitDataReductionProxySettings(JNIEnv* env, jobject obj); 34 35 void BypassHostPattern(JNIEnv* env, jobject obj, jstring pattern); 36 // Add a URL pattern to bypass the proxy. Wildcards 37 // should be compatible with the JavaScript function shExpMatch, which can be 38 // used in proxy PAC resolution. These functions must only be called before 39 // the proxy is used. 40 void BypassURLPattern(JNIEnv* env, jobject obj, jstring pattern); 41 42 virtual void AddURLPatternToBypass(const std::string& pattern) OVERRIDE; 43 44 // JNI wrapper interfaces to the indentically-named superclass methods. 45 jboolean IsDataReductionProxyAllowed(JNIEnv* env, jobject obj); 46 jboolean IsDataReductionProxyPromoAllowed(JNIEnv* env, jobject obj); 47 ScopedJavaLocalRef<jstring> GetDataReductionProxyOrigin(JNIEnv* env, 48 jobject obj); 49 jboolean IsDataReductionProxyEnabled(JNIEnv* env, jobject obj); 50 jboolean IsDataReductionProxyManaged(JNIEnv* env, jobject obj); 51 void SetDataReductionProxyEnabled(JNIEnv* env, jobject obj, jboolean enabled); 52 53 jlong GetDataReductionLastUpdateTime(JNIEnv* env, jobject obj); 54 ScopedJavaLocalRef<jlongArray> GetDailyOriginalContentLengths(JNIEnv* env, 55 jobject obj); 56 ScopedJavaLocalRef<jlongArray> GetDailyReceivedContentLengths(JNIEnv* env, 57 jobject obj); 58 59 // Return a Java |ContentLengths| object wrapping the results of a call to 60 // DataReductionProxySettings::GetContentLengths. 61 base::android::ScopedJavaLocalRef<jobject> GetContentLengths(JNIEnv* env, 62 jobject obj); 63 64 // Wrapper methods for handling auth challenges. In both of the following, 65 // a net::AuthChallengeInfo object is created from |host| and |realm| and 66 // passed in to the superclass method. 67 jboolean IsAcceptableAuthChallenge(JNIEnv* env, 68 jobject obj, 69 jstring host, 70 jstring realm); 71 72 ScopedJavaLocalRef<jstring> GetTokenForAuthChallenge(JNIEnv* env, 73 jobject obj, 74 jstring host, 75 jstring realm); 76 77 // Registers the native methods to be call from Java. 78 static bool Register(JNIEnv* env); 79 80 protected: 81 // DataReductionProxySettings overrides. 82 virtual void AddDefaultProxyBypassRules() OVERRIDE; 83 84 // Configures the proxy settings by generating a data URL containing a PAC 85 // file. 86 virtual void SetProxyConfigs( 87 bool enabled, bool restricted, bool at_startup) OVERRIDE; 88 89 private: 90 friend class DataReductionProxySettingsAndroidTest; 91 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, 92 TestBypassPACRules); 93 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, 94 TestSetProxyPac); 95 FRIEND_TEST_ALL_PREFIXES(DataReductionProxySettingsAndroidTest, 96 TestGetDailyContentLengths); 97 98 99 ScopedJavaLocalRef<jlongArray> GetDailyContentLengths(JNIEnv* env, 100 const char* pref_name); 101 std::string GetProxyPacScript(bool restricted); 102 103 std::vector<std::string> pac_bypass_rules_; 104 105 DISALLOW_COPY_AND_ASSIGN(DataReductionProxySettingsAndroid); 106 }; 107 108 #endif // CHROME_BROWSER_NET_SPDYPROXY_DATA_REDUCTION_PROXY_SETTINGS_ANDROID_H_ 109