Index: chrome/android/java/src/org/chromium/chrome/browser/net/spdyproxy/DataReductionProxySettings.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/net/spdyproxy/DataReductionProxySettings.java b/chrome/android/java/src/org/chromium/chrome/browser/net/spdyproxy/DataReductionProxySettings.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d378b5d9e34e868f9b8ab9bd59c7d364a8b6cc40 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/net/spdyproxy/DataReductionProxySettings.java |
@@ -0,0 +1,202 @@ |
+// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.net.spdyproxy; |
+ |
+import org.chromium.base.CalledByNative; |
+import org.chromium.base.ThreadUtils; |
+ |
+public class DataReductionProxySettings { |
+ |
+ public static class ContentLengths { |
+ private final long mOriginal; |
+ private final long mReceived; |
+ |
+ @CalledByNative("ContentLengths") |
+ public static ContentLengths create(long original, long received) { |
+ return new ContentLengths(original, received); |
+ } |
+ |
+ private ContentLengths(long original, long received) { |
+ mOriginal = original; |
+ mReceived = received; |
+ } |
+ |
+ public long getOriginal() { |
+ return mOriginal; |
+ } |
+ |
+ public long getReceived() { |
+ return mReceived; |
+ } |
+ } |
+ |
+ private static DataReductionProxySettings sSettings; |
+ |
+ public static DataReductionProxySettings getInstance() { |
+ ThreadUtils.assertOnUiThread(); |
+ if (sSettings == null) { |
+ sSettings = new DataReductionProxySettings(); |
+ } |
+ return sSettings; |
+ } |
+ |
+ private final int mNativeDataReductionProxySettings; |
+ |
+ private DataReductionProxySettings() { |
+ // Note that this technically leaks the native object, however, |
+ // DataReductionProxySettings is a singleton that lives forever and there's no clean |
+ // shutdown of Chrome on Android |
+ mNativeDataReductionProxySettings = nativeInit(); |
+ initDataReductionProxySettings(); |
+ } |
+ |
+ /** |
+ * Initializes the data reduction proxy at Chrome startup. |
+ */ |
+ public void initDataReductionProxySettings() { |
+ nativeInitDataReductionProxySettings(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Add a pattern for hosts to bypass. Wildcards should be compatible with the JavaScript |
+ * function shExpMatch, which can be used in proxy PAC resolution. This should be called |
+ * before the proxy is used. |
+ * @param pattern A pattern to match. |
+ */ |
+ public void bypassHostPattern(String pattern) { |
+ nativeBypassHostPattern(mNativeDataReductionProxySettings, pattern); |
+ } |
+ |
+ /** |
+ * Add a pattern for URLs to bypass. Wildcards should be compatible with the JavaScript |
+ * function shExpMatch, which can be used in proxy PAC resolution. This should be called |
+ * before the proxy is used. |
+ * @param pattern A pattern to match. |
+ */ |
+ public void bypassURLPattern(String pattern) { |
+ nativeBypassURLPattern(mNativeDataReductionProxySettings, pattern); |
+ } |
+ |
+ |
+ /** Returns true if the SPDY proxy is allowed to be used. */ |
+ public boolean isDataReductionProxyAllowed() { |
+ return nativeIsDataReductionProxyAllowed(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** Returns true if the SPDY proxy promo is allowed to be shown. */ |
+ public boolean isDataReductionProxyPromoAllowed() { |
+ return nativeIsDataReductionProxyPromoAllowed(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Returns the current data reduction proxy origin. |
+ */ |
+ public String getDataReductionProxyOrigin() { |
+ return nativeGetDataReductionProxyOrigin(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Returns a configuration string for the data reduction proxy. |
+ */ |
+ public String getDataReductionProxyAuth() { |
+ return nativeGetDataReductionProxyAuth(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Sets the preference on whether to enable/disable the SPDY proxy. This will zero out the |
+ * data reduction statistics if this is the first time the SPDY proxy has been enabled. |
+ */ |
+ public void setDataReductionProxyEnabled(boolean enabled) { |
+ nativeSetDataReductionProxyEnabled(mNativeDataReductionProxySettings, enabled); |
+ } |
+ |
+ /** Returns true if the SPDY proxy is enabled. */ |
+ public boolean isDataReductionProxyEnabled() { |
+ return nativeIsDataReductionProxyEnabled(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** Returns true if the SPDY proxy is managed by an administrator's policy. */ |
+ public boolean isDataReductionProxyManaged() { |
+ return nativeIsDataReductionProxyManaged(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Returns the time that the data reduction statistics were last updated. |
+ * @return The last update time in milliseconds since the epoch. |
+ */ |
+ public long getDataReductionLastUpdateTime() { |
+ return nativeGetDataReductionLastUpdateTime(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Returns aggregate original and received content lengths. |
+ * @return The content lengths. |
+ */ |
+ public ContentLengths getContentLengths() { |
+ return nativeGetContentLengths(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Retrieves the history of daily totals of bytes that would have been |
+ * received if no data reducing mechanism had been applied. |
+ * @return The history of daily totals |
+ */ |
+ public long[] getOriginalNetworkStatsHistory() { |
+ return nativeGetDailyOriginalContentLengths(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * Retrieves the history of daily totals of bytes that were received after |
+ * applying a data reducing mechanism. |
+ * @return The history of daily totals |
+ */ |
+ public long[] getReceivedNetworkStatsHistory() { |
+ return nativeGetDailyReceivedContentLengths(mNativeDataReductionProxySettings); |
+ } |
+ |
+ /** |
+ * @return The data reduction settings as a string percentage. |
+ */ |
+ public String getContentLengthPercentSavings() { |
+ ContentLengths length = getContentLengths(); |
+ String percent = "0%"; |
+ if (length.getOriginal() > 0L && length.getOriginal() > length.getReceived()) { |
+ percent = String.format( |
+ "%.0f%%", 100.0 * |
+ (length.getOriginal() - length.getReceived()) / length.getOriginal()); |
+ } |
+ return percent; |
+ } |
+ |
+ private native int nativeInit(); |
+ private native void nativeInitDataReductionProxySettings( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native void nativeBypassHostPattern( |
+ int nativeDataReductionProxySettingsAndroid, String pattern); |
+ private native void nativeBypassURLPattern( |
+ int nativeDataReductionProxySettingsAndroid, String pattern); |
+ private native boolean nativeIsDataReductionProxyAllowed( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native boolean nativeIsDataReductionProxyPromoAllowed( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native String nativeGetDataReductionProxyOrigin( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native String nativeGetDataReductionProxyAuth( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native boolean nativeIsDataReductionProxyEnabled( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native boolean nativeIsDataReductionProxyManaged( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native void nativeSetDataReductionProxyEnabled( |
+ int nativeDataReductionProxySettingsAndroid, boolean enabled); |
+ private native long nativeGetDataReductionLastUpdateTime( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native ContentLengths nativeGetContentLengths( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native long[] nativeGetDailyOriginalContentLengths( |
+ int nativeDataReductionProxySettingsAndroid); |
+ private native long[] nativeGetDailyReceivedContentLengths( |
+ int nativeDataReductionProxySettingsAndroid); |
+} |