diff options
| author | megjablon <megjablon@chromium.org> | 2016-03-01 00:17:21 -0800 |
|---|---|---|
| committer | Commit bot <commit-bot@chromium.org> | 2016-03-01 08:18:32 +0000 |
| commit | 30814b95ba3406d644debb4391cfe1b289d29aa4 (patch) | |
| tree | e02fc6b1e2c1e4be4915f7f757de9ac619a188f1 | |
| parent | 75f25d949020b8518c1df83fc25f732958a0f9a7 (diff) | |
| download | chromium_src-30814b95ba3406d644debb4391cfe1b289d29aa4.zip chromium_src-30814b95ba3406d644debb4391cfe1b289d29aa4.tar.gz chromium_src-30814b95ba3406d644debb4391cfe1b289d29aa4.tar.bz2 | |
AGSA-initiated weblite intents should be rewritten if Chrome can use weblite
When Chrome receives a navigation intent for a page on googleweblight.com,
Chrome should instead navigate to the url specified in the lite_url query
parameter if all of the following are true:
1) The URL specifies a lite_url parameter
2) Data-Saver is enabled in Chrome
3) the LoFi weblite experiment is enabled
4) the scheme of the url in the lite_url param is HTTP
BUG=584085
Review URL: https://codereview.chromium.org/1688603004
Cr-Commit-Position: refs/heads/master@{#378414}
11 files changed, 202 insertions, 18 deletions
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java index 0de17a9..74534b8 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/IntentHandler.java @@ -129,13 +129,13 @@ public class IntentHandler { private static Pair<Integer, String> sPendingReferrer; private static int sReferrerId; + public static final String PACKAGE_GSA = "com.google.android.googlequicksearchbox"; private static final String PACKAGE_GMAIL = "com.google.android.gm"; private static final String PACKAGE_PLUS = "com.google.android.apps.plus"; private static final String PACKAGE_HANGOUTS = "com.google.android.talk"; private static final String PACKAGE_MESSENGER = "com.google.android.apps.messaging"; private static final String PACKAGE_LINE = "jp.naver.line.android"; private static final String PACKAGE_WHATSAPP = "com.whatsapp"; - private static final String PACKAGE_GSA = "com.google.android.googlequicksearchbox"; private static final String FACEBOOK_LINK_PREFIX = "http://m.facebook.com/l.php?"; private static final String TWITTER_LINK_PREFIX = "http://t.co/"; private static final String NEWS_LINK_PREFIX = "http://news.google.com/news/url?"; diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index e331b7e..22a3e5b 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java @@ -231,7 +231,7 @@ public class CustomTabActivity extends ChromeActivity { @Override public void finishNativeInitialization() { - CustomTabsConnection connection = CustomTabsConnection.getInstance(getApplication()); + final CustomTabsConnection connection = CustomTabsConnection.getInstance(getApplication()); // If extra headers have been passed, cancel any current prerender, as // prerendering doesn't support extra headers. if (IntentHandler.getExtraHeadersFromIntent(getIntent()) != null) { @@ -274,6 +274,9 @@ public class CustomTabActivity extends ChromeActivity { mCustomTabContentHandler = new CustomTabContentHandler() { @Override public void loadUrlAndTrackFromTimestamp(LoadUrlParams params, long timestamp) { + if (params.getUrl() != null) { + params.setUrl(connection.overrideUrlIfNecessary(params.getUrl(), mSession)); + } loadUrlInTab(getActivityTab(), params, timestamp); } @@ -317,34 +320,35 @@ public class CustomTabActivity extends ChromeActivity { return true; } }; - DataUseTabUIManager.onCustomTabInitialNavigation(mMainTab, - connection.getClientPackageNameForSession(mSession), - IntentHandler.getUrlFromIntent(getIntent())); + String url = IntentHandler.getUrlFromIntent(getIntent()); + if (url != null) url = connection.overrideUrlIfNecessary(url, mSession); + DataUseTabUIManager.onCustomTabInitialNavigation( + mMainTab, connection.getClientPackageNameForSession(mSession), url); recordClientPackageName(); connection.showSignInToastIfNecessary(mSession, getIntent()); if (mHasCreatedTabEarly) { if (!mMainTab.isLoading()) postDeferredStartupIfNeeded(); } else { - loadUrlInTab(mMainTab, new LoadUrlParams(IntentHandler.getUrlFromIntent(getIntent())), + loadUrlInTab(mMainTab, new LoadUrlParams(url), IntentHandler.getTimestampFromIntent(getIntent())); } super.finishNativeInitialization(); } private Tab createMainTab() { + CustomTabsConnection customTabsConnection = + CustomTabsConnection.getInstance(getApplication()); String url = IntentHandler.getUrlFromIntent(getIntent()); + if (url != null) url = customTabsConnection.overrideUrlIfNecessary(url, mSession); // Get any referrer that has been explicitly set by the app. String referrerUrl = IntentHandler.getReferrerUrlIncludingExtraHeaders(getIntent(), this); if (referrerUrl == null) { - Referrer referrer = CustomTabsConnection.getInstance(getApplication()) - .getReferrerForSession(mSession); + Referrer referrer = customTabsConnection.getReferrerForSession(mSession); if (referrer != null) referrerUrl = referrer.getUrl(); } Tab tab = new Tab(TabIdManager.getInstance().generateValidId(Tab.INVALID_TAB_ID), Tab.INVALID_TAB_ID, false, this, getWindowAndroid(), TabLaunchType.FROM_EXTERNAL_APP, null, null); - CustomTabsConnection customTabsConnection = - CustomTabsConnection.getInstance(getApplication()); tab.setAppAssociatedWith(customTabsConnection.getClientPackageNameForSession(mSession)); WebContents webContents = customTabsConnection.takePrerenderedUrl(mSession, url, referrerUrl); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java index 0b4e14d..5019973 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java @@ -373,6 +373,17 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { } /** + * Returns the url to which the custom tab should navigate. + * + * @param url The original url. + * @param session The Binder object identifying a session. + * @return The url to be used. May be overriden. + */ + public String overrideUrlIfNecessary(String url, IBinder session) { + return url; + } + + /** * @return a spare WebContents, or null. * * This WebContents has already navigated to "about:blank". You have to call diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java index d928530..c11a722 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java @@ -41,6 +41,7 @@ import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor; import org.chromium.chrome.browser.firstrun.FirstRunStatus; import org.chromium.chrome.browser.metrics.StartupMetrics; import org.chromium.chrome.browser.metrics.UmaUtils; +import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; import org.chromium.chrome.browser.ntp.NewTabPage; import org.chromium.chrome.browser.preferences.ChromePreferenceManager; import org.chromium.chrome.browser.preferences.PrefServiceBridge; @@ -585,6 +586,16 @@ public class DocumentActivity extends ChromeActivity { mTab = createActivityTab(asyncParams); } + if (!isIncognito() && asyncParams != null) { + LoadUrlParams loadUrlParams = asyncParams.getLoadUrlParams(); + if (loadUrlParams != null && loadUrlParams.getUrl() != null) { + loadUrlParams.setUrl(DataReductionProxySettings.getInstance() + .maybeRewriteWebliteUrl(loadUrlParams.getUrl())); + } + } + + mTab = createActivityTab(asyncParams); + if (asyncParams != null && asyncParams.getWebContents() != null) { Intent parentIntent = IntentUtils.safeGetParcelableExtra(getIntent(), IntentHandler.EXTRA_PARENT_INTENT); 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 index 569eb7c..5ffe3fd9 100644 --- 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 @@ -5,7 +5,10 @@ package org.chromium.chrome.browser.net.spdyproxy; import android.content.Context; +import android.net.Uri; import android.preference.PreferenceManager; +import android.text.TextUtils; +import android.webkit.URLUtil; import org.chromium.base.ThreadUtils; import org.chromium.base.VisibleForTesting; @@ -55,6 +58,10 @@ public class DataReductionProxySettings { private static final String DATA_REDUCTION_ENABLED_PREF = "BANDWIDTH_REDUCTION_PROXY_ENABLED"; + private static final String WEBLITE_HOSTNAME = "googleweblight.com"; + + private static final String WEBLITE_QUERY_PARAM = "lite_url"; + /** * Returns whether the data reduction proxy is enabled. * @@ -269,6 +276,39 @@ public class DataReductionProxySettings { return map; } + /** + * If the given URL is a WebLite URL and should be overridden because the Data + * Reduction Proxy is on, the user is in the Lo-Fi previews experiment, and the scheme of the + * lite_url param is HTTP, returns the URL contained in the lite_url param. Otherwise returns + * the given URL. + * + * @param url The URL to evaluate. + * @return The URL to be used. Returns null if the URL param is null. + */ + public String maybeRewriteWebliteUrl(String url) { + if (url == null || !URLUtil.isValidUrl(url) || !areLoFiPreviewsEnabled() + || !isDataReductionProxyEnabled()) { + return url; + } + String rewritten = extractUrlFromWebliteQueryParams(url); + if (rewritten == null + || !TextUtils.equals(Uri.parse(rewritten).getScheme(), "http")) { + return url; + } + + return rewritten; + } + + private String extractUrlFromWebliteQueryParams(String url) { + Uri uri = Uri.parse(url); + if (!TextUtils.equals(uri.getHost(), WEBLITE_HOSTNAME)) return null; + return uri.getQueryParameter(WEBLITE_QUERY_PARAM); + } + + private boolean areLoFiPreviewsEnabled() { + return nativeAreLoFiPreviewsEnabled(mNativeDataReductionProxySettings); + } + private native long nativeInit(); private native boolean nativeIsDataReductionProxyAllowed( long nativeDataReductionProxySettingsAndroid); @@ -304,6 +344,8 @@ public class DataReductionProxySettings { long nativeDataReductionProxySettingsAndroid); private native boolean nativeIsDataReductionProxyUnreachable( long nativeDataReductionProxySettingsAndroid); + private native boolean nativeAreLoFiPreviewsEnabled( + long nativeDataReductionProxySettingsAndroid); private native String nativeGetHttpProxyList(long nativeDataReductionProxySettingsAndroid); private native String nativeGetHttpsProxyList(long nativeDataReductionProxySettingsAndroid); private native String nativeGetLastBypassEvent(long nativeDataReductionProxySettingsAndroid); diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java index 2acbb9e..d476c3c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/tabmodel/ChromeTabCreator.java @@ -13,6 +13,7 @@ import org.chromium.chrome.browser.ChromeActivity; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.TabState; import org.chromium.chrome.browser.compositor.layouts.content.TabContentManager; +import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabDelegateFactory; import org.chromium.chrome.browser.tabmodel.TabModel.TabLaunchType; @@ -233,6 +234,13 @@ public class ChromeTabCreator extends TabCreatorManager.TabCreator { String appId, boolean forceNewTab, Intent intent, long intentTimestamp) { assert !mIncognito; boolean isLaunchedFromChrome = TextUtils.equals(appId, mActivity.getPackageName()); + + // If an external app sends an intent for a Weblite URL and the Data Reduction Proxy is + // using Weblite mode, then use the URL in the lite_url parameter if its scheme is HTTP. + // This is used by ChromeTabbedActvity intents so that the user does not receive Weblite + // pages when he or she could be served a Data Reduction Proxy preview page. + if (url != null) url = DataReductionProxySettings.getInstance().maybeRewriteWebliteUrl(url); + if (forceNewTab && !isLaunchedFromChrome) { // We don't associate the tab with that app ID, as it is assumed that if the // application wanted to open this tab as a new tab, it probably does not want it diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java index 8e0ccfe..32cfec2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/TabsOpenedFromExternalAppTest.java @@ -177,8 +177,8 @@ public class TabsOpenedFromExternalAppTest extends ChromeTabbedActivityTestBase * Returns when the URL has been navigated to. * @throws InterruptedException */ - private void launchUrlFromExternalApp(String url, String appId, boolean createNewTab, - Bundle extras) throws InterruptedException { + private void launchUrlFromExternalApp(String url, String expectedUrl, String appId, + boolean createNewTab, Bundle extras) throws InterruptedException { final Intent intent = new Intent(Intent.ACTION_VIEW); if (appId != null) { intent.putExtra(Browser.EXTRA_APPLICATION_ID, appId); @@ -204,12 +204,12 @@ public class TabsOpenedFromExternalAppTest extends ChromeTabbedActivityTestBase } }); } - ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), url); + ChromeTabUtils.waitForTabPageLoaded(getActivity().getActivityTab(), expectedUrl); } private void launchUrlFromExternalApp(String url, String appId, boolean createNewTab) throws InterruptedException { - launchUrlFromExternalApp(url, appId, createNewTab, null); + launchUrlFromExternalApp(url, url, appId, createNewTab, null); } /** @@ -223,7 +223,7 @@ public class TabsOpenedFromExternalAppTest extends ChromeTabbedActivityTestBase startMainActivityFromLauncher(); Bundle extras = new Bundle(); extras.putParcelable(Intent.EXTRA_REFERRER, Uri.parse(ANDROID_APP_REFERRER)); - launchUrlFromExternalApp(url, EXTERNAL_APP_1_ID, true, extras); + launchUrlFromExternalApp(url, url, EXTERNAL_APP_1_ID, true, extras); CriteriaHelper.pollForCriteria( new ReferrerCriteria(getActivity().getActivityTab(), ANDROID_APP_REFERRER), 2000, 200); @@ -241,7 +241,7 @@ public class TabsOpenedFromExternalAppTest extends ChromeTabbedActivityTestBase String referrer = "foobar://totally.legit.referrer"; Bundle extras = new Bundle(); extras.putParcelable(Intent.EXTRA_REFERRER, Uri.parse(referrer)); - launchUrlFromExternalApp(url, EXTERNAL_APP_1_ID, true, extras); + launchUrlFromExternalApp(url, url, EXTERNAL_APP_1_ID, true, extras); CriteriaHelper.pollForCriteria( new ReferrerCriteria(getActivity().getActivityTab(), ""), 2000, 200); } @@ -632,4 +632,41 @@ public class TabsOpenedFromExternalAppTest extends ChromeTabbedActivityTestBase } }); } + + /** + * Tests that a Weblite url from an external app uses the lite_url param when Data Reduction + * Proxy previews are being used. + */ + @MediumTest + @CommandLineFlags.Add({"enable-spdy-proxy-auth", "data-reduction-proxy-lo-fi=always-on", + "enable-data-reduction-proxy-lo-fi-preview"}) + public void testLaunchWebLiteURL() throws InterruptedException { + startMainActivityFromLauncher(); + + String url = mTestServer.getURL("/chrome/test/data/android/about.html"); + + // Launch a first URL from an app. + launchUrlFromExternalApp("http://googleweblight.com/?lite_url=" + url, url, + EXTERNAL_APP_1_ID, false, null); + + assertEquals("Selected tab is not on the right URL.", + url, getActivity().getActivityTab().getUrl()); + } + + /** + * Tests that a Weblite url from an external app does not use the lite_url param when Data + * Reduction Proxy previews are not being used. + */ + @MediumTest + public void testLaunchWebLiteURLNoPreviews() throws InterruptedException { + startMainActivityFromLauncher(); + + String url = "http://googleweblight.com/?lite_url=chrome/test/data/android/about.html"; + + // Launch a first URL from an app. + launchUrlFromExternalApp(url, url, EXTERNAL_APP_1_ID, false, null); + + assertEquals("Selected tab is not on the right URL.", + url, getActivity().getActivityTab().getUrl()); + } } diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTest.java index 67b96e3..1cee057 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTest.java @@ -10,6 +10,7 @@ import android.app.PendingIntent; import android.content.Intent; import android.net.Uri; import android.os.Build; +import android.os.Environment; import android.test.FlakyTest; import android.test.suitebuilder.annotation.MediumTest; import android.text.TextUtils; @@ -17,6 +18,7 @@ import android.view.View; import org.chromium.base.ApplicationStatus; import org.chromium.base.ThreadUtils; +import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.MinAndroidSdkLevel; import org.chromium.base.test.util.UrlUtils; import org.chromium.chrome.browser.ChromeActivity; @@ -26,16 +28,19 @@ import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.ShortcutHelper; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tabmodel.TabModel; +import org.chromium.chrome.browser.tabmodel.TabModelSelector; import org.chromium.chrome.browser.tabmodel.TabModelUtils; import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector; import org.chromium.chrome.browser.tabmodel.document.OffTheRecordDocumentTabModel; import org.chromium.chrome.test.util.ActivityUtils; import org.chromium.chrome.test.util.ApplicationTestUtils; +import org.chromium.chrome.test.util.ChromeTabUtils; import org.chromium.chrome.test.util.DisableInTabbedMode; import org.chromium.content.browser.test.util.Criteria; import org.chromium.content.browser.test.util.CriteriaHelper; import org.chromium.content.browser.test.util.TouchCommon; import org.chromium.content_public.browser.LoadUrlParams; +import org.chromium.net.test.EmbeddedTestServer; import java.lang.ref.WeakReference; import java.util.List; @@ -650,6 +655,53 @@ public class DocumentModeTest extends DocumentModeTestBase { "about:blank", IntentHandler.getUrlFromIntent(lastIntent)); } + /** + * Tests that a Weblite url from an external app uses the lite_url param when Data Reduction + * Proxy previews are being used. + */ + @MediumTest + @CommandLineFlags.Add({"enable-spdy-proxy-auth", "data-reduction-proxy-lo-fi=always-on", + "enable-data-reduction-proxy-lo-fi-preview"}) + public void testLaunchWebLiteURL() throws Exception { + EmbeddedTestServer testServer; + testServer = EmbeddedTestServer.createAndStartFileServer( + getInstrumentation().getContext(), Environment.getExternalStorageDirectory()); + + String url = testServer.getURL("/chrome/test/data/android/about.html"); + Runnable viewIntentRunnable = getViewIntentRunnable(false, + "http://googleweblight.com/?lite_url=" + url); + + // Wait for the Activity to start up. + final DocumentActivity newActivity = ActivityUtils.waitForActivity( + getInstrumentation(), DocumentActivity.class, viewIntentRunnable); + ChromeTabUtils.waitForTabPageLoaded(newActivity.getActivityTab(), (String) null); + + TabModelSelector selector = ChromeApplication.getDocumentTabModelSelector(); + assertEquals(1, selector.getTotalTabCount()); + assertEquals(url, selector.getModel(false).getTabAt(0).getUrl()); + + testServer.stopAndDestroyServer(); + } + + /** + * Tests that a Weblite url from an external app does not use the lite_url param when Data + * Reduction Proxy previews are not being used. + */ + @MediumTest + public void testLaunchWebLiteURLNoPreviews() throws Exception { + String url = "http://googleweblight.com/?lite_url=chrome/test/data/android/about.html"; + Runnable viewIntentRunnable = getViewIntentRunnable(false, url); + + // Wait for the Activity to start up. + final DocumentActivity newActivity = ActivityUtils.waitForActivity( + getInstrumentation(), DocumentActivity.class, viewIntentRunnable); + ChromeTabUtils.waitForTabPageLoaded(newActivity.getActivityTab(), (String) null); + + TabModelSelector selector = ChromeApplication.getDocumentTabModelSelector(); + assertEquals(1, selector.getTotalTabCount()); + assertEquals(url, selector.getModel(false).getTabAt(0).getUrl()); + } + private Intent performNewWindowTest(String url, String title, boolean checkWindowOpenSuccess, String openTitle, boolean waitLongerForOpenedPage) throws Exception { launchViaLaunchDocumentInstance(false, url, title); diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTestBase.java b/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTestBase.java index 4187a70..db64de4 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTestBase.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/document/DocumentModeTestBase.java @@ -83,7 +83,13 @@ public class DocumentModeTestBase extends MultiActivityTestBase { protected int launchViaViewIntent(final boolean incognito, final String url, final String expectedTitle) throws Exception { // Fire the Intent and wait until Chrome is in the foreground. - Runnable runnable = new Runnable() { + return launchUrlViaRunnable( + incognito, getViewIntentRunnable(incognito, url), expectedTitle, false); + } + + /** Creates a runnable that starts a DocumentActivity by using firing a VIEW Intent. */ + protected Runnable getViewIntentRunnable(final boolean incognito, final String url) { + return new Runnable() { @Override public void run() { Runnable runnable = new Runnable() { @@ -105,7 +111,6 @@ public class DocumentModeTestBase extends MultiActivityTestBase { runnable); } }; - return launchUrlViaRunnable(incognito, runnable, expectedTitle, false); } /** Starts a DocumentActivity using {@ref ChromeLauncherActivity.launchDocumentInstance().} */ diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc index 47940ae..514575c 100644 --- a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc +++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.cc @@ -17,6 +17,7 @@ #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_metrics.h" #include "components/data_reduction_proxy/core/browser/data_reduction_proxy_settings.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_event_store.h" +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" #include "components/data_reduction_proxy/core/common/data_reduction_proxy_pref_names.h" #include "jni/DataReductionProxySettings_jni.h" #include "net/proxy/proxy_server.h" @@ -154,6 +155,14 @@ jboolean DataReductionProxySettingsAndroid::IsDataReductionProxyUnreachable( return Settings()->IsDataReductionProxyUnreachable(); } +jboolean DataReductionProxySettingsAndroid::AreLoFiPreviewsEnabled( + JNIEnv* env, + const JavaParamRef<jobject>& obj) { + return data_reduction_proxy::params::IsIncludedInLoFiPreviewFieldTrial() || + (data_reduction_proxy::params::IsLoFiOnViaFlags() && + data_reduction_proxy::params::AreLoFiPreviewsEnabledViaFlags()); +} + // static bool DataReductionProxySettingsAndroid::Register(JNIEnv* env) { return RegisterNativesImpl(env); diff --git a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h index e4a6c6e..d351093 100644 --- a/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h +++ b/chrome/browser/net/spdyproxy/data_reduction_proxy_settings_android.h @@ -96,6 +96,11 @@ class DataReductionProxySettingsAndroid { JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); + // Return if Lo-Fi previews are enabled via a field trial or the command line. + jboolean AreLoFiPreviewsEnabled( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj); + ScopedJavaLocalRef<jstring> GetTokenForAuthChallenge(JNIEnv* env, jobject obj, jstring host, |
