Commit 302568a6 authored by Filip Gorski's avatar Filip Gorski Committed by Commit Bot

[Feed] Adding ability to configure feed with variations

* Adding ability to configure values requested by the Feed team, except
  2 that are not available in Configuration class.
* Updating FeedProcessScopeFactory to consume configuration.
* Adding javatests to cover the code.

Bug: 886972
Change-Id: Ib38fe2ea062fa7014ff5e4ecff02150f24e96f67
Reviewed-on: https://chromium-review.googlesource.com/1248121Reviewed-by: default avatarTheresa <twellington@chromium.org>
Commit-Queue: Filip Gorski <fgorski@chromium.org>
Cr-Commit-Position: refs/heads/master@{#595881}
parent abd74fa9
// Copyright 2018 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.feed;
import android.text.TextUtils;
import org.chromium.chrome.browser.ChromeFeatureList;
class FeedConfiguration {
private static final String FEED_SERVER_ENDPOINT = "feed_server_endpoint";
/** Default value for server endpoint. */
public static final String FEED_SERVER_ENDPOINT_DEFAULT =
"https://www.google.com/httpservice/noretry/NowStreamService/FeedQuery";
private static final String FEED_SERVER_METHOD = "feed_server_method";
/** Default value for feed server method. */
public static final String FEED_SERVER_METHOD_DEFAULT = "GET";
private static final String FEED_SERVER_RESPONSE_LENGTH_PREFIXED =
"feed_server_response_length_prefixed";
/** Default value for feed server response length prefixed. */
public static final boolean FEED_SERVER_RESPONSE_LENGTH_PREFIXED_DEFAULT = true;
private static final String LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS =
"logging_immediate_content_threshold_ms";
/** Default value for logging immediate content threshold. */
public static final int LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS_DEFAULT = 1000;
private static final String SESSION_LIFETIME_MS = "session_lifetime_ms";
/** Default value for session lifetime. */
public static final int SESSION_LIFETIME_MS_DEFAULT = 3600000;
private static final String TRIGGER_IMMEDIATE_PAGINATION = "trigger_immediate_pagination";
/** Default value for triggering immediate pagination. */
public static final boolean TRIGGER_IMMEDIATE_PAGINATION_DEFAULT = false;
private static final String VIEW_LOG_THRESHOLD = "view_log_threshold";
/** Default value for logging view threshold. */
public static final double VIEW_LOG_THRESHOLD_DEFAULT = 0.66d;
/** @return Feed server endpoint to use to fetch content suggestions. */
public static String getFeedServerEndpoint() {
String paramValue = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, FEED_SERVER_ENDPOINT);
return TextUtils.isEmpty(paramValue) ? FEED_SERVER_ENDPOINT_DEFAULT : paramValue;
}
/** @return Feed server method to use when fetching content suggestions. */
public static String getFeedServerMethod() {
String paramValue = ChromeFeatureList.getFieldTrialParamByFeature(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, FEED_SERVER_METHOD);
return TextUtils.isEmpty(paramValue) ? FEED_SERVER_METHOD_DEFAULT : paramValue;
}
/** @return Whether server response should be length prefixed. */
public static boolean getFeedServerReponseLengthPrefixed() {
return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS,
FEED_SERVER_RESPONSE_LENGTH_PREFIXED, FEED_SERVER_RESPONSE_LENGTH_PREFIXED_DEFAULT);
}
/**
* @return How long before showing content after opening NTP is no longer considered immediate
* in UMA.
*/
public static long getLoggingImmediateContentThresholdMs() {
return (long) ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS,
LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS,
LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS_DEFAULT);
}
/** @return Time until feed stops restoring the UI. */
public static long getSessionLifetimeMs() {
return (long) ChromeFeatureList.getFieldTrialParamByFeatureAsInt(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, SESSION_LIFETIME_MS,
SESSION_LIFETIME_MS_DEFAULT);
}
/**
* @return Whether UI initially shows "More" button upon reaching the end of known content,
* when server could potentially have more content.
*/
public static boolean getTriggerImmedatePagination() {
return ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, TRIGGER_IMMEDIATE_PAGINATION,
TRIGGER_IMMEDIATE_PAGINATION_DEFAULT);
}
/** @return How much of a card must be on screen to generate a UMA log view. */
public static double getViewLogThreshold() {
return ChromeFeatureList.getFieldTrialParamByFeatureAsDouble(
ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS, VIEW_LOG_THRESHOLD,
VIEW_LOG_THRESHOLD_DEFAULT);
}
}
......@@ -126,7 +126,12 @@ public class FeedProcessScopeFactory {
.put(ConfigKey.FEED_SERVER_HOST, "https://www.google.com")
.put(ConfigKey.FEED_SERVER_PATH_AND_PARAMS,
"/httpservice/noretry/NowStreamService/FeedQuery")
.put(ConfigKey.SESSION_LIFETIME_MS, 300000L)
.put(ConfigKey.SESSION_LIFETIME_MS, FeedConfiguration.getSessionLifetimeMs())
.put(ConfigKey.VIEW_LOG_THRESHOLD, FeedConfiguration.getViewLogThreshold())
.put(ConfigKey.LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS,
FeedConfiguration.getLoggingImmediateContentThresholdMs())
.put(ConfigKey.TRIGGER_IMMEDIATE_PAGINATION,
FeedConfiguration.getTriggerImmedatePagination())
.build();
}
......
......@@ -11,6 +11,7 @@ if (enable_feed_in_chrome) {
feed_java_sources = [
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedAppLifecycle.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedBasicLogging.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedConfiguration.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentBridge.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedContentStorage.java",
"//chrome/android/feed/core/java/src/org/chromium/chrome/browser/feed/FeedImageLoader.java",
......@@ -48,6 +49,7 @@ if (enable_feed_in_chrome) {
feed_test_java_sources = [
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedAppLifecycleTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedConfigurationTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNetworkBridgeConformanceTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedNewTabPageTest.java",
"//chrome/android/javatests/src/org/chromium/chrome/browser/feed/FeedSchedulerBridgeConformanceTest.java",
......
// Copyright 2018 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.feed;
import android.support.test.filters.SmallTest;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.base.test.util.Feature;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.test.ChromeBrowserTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.util.browser.Features;
/** Tests for {@link FeedConfiguration}. */
@SmallTest
@RunWith(ChromeJUnit4ClassRunner.class)
public class FeedConfigurationTest {
@Rule
public final ChromeBrowserTestRule mRule = new ChromeBrowserTestRule();
@Test
@Feature({"Feed"})
@Features.EnableFeatures({ChromeFeatureList.INTEREST_FEED_CONTENT_SUGGESTIONS})
public void testDefaultFeedConfigurationValues() {
Assert.assertEquals(FeedConfiguration.FEED_SERVER_ENDPOINT_DEFAULT,
FeedConfiguration.getFeedServerEndpoint());
Assert.assertEquals(FeedConfiguration.FEED_SERVER_METHOD_DEFAULT,
FeedConfiguration.getFeedServerMethod());
Assert.assertEquals(FeedConfiguration.FEED_SERVER_RESPONSE_LENGTH_PREFIXED_DEFAULT,
FeedConfiguration.getFeedServerReponseLengthPrefixed());
Assert.assertEquals(FeedConfiguration.LOGGING_IMMEDIATE_CONTENT_THRESHOLD_MS_DEFAULT,
FeedConfiguration.getLoggingImmediateContentThresholdMs());
Assert.assertEquals(FeedConfiguration.SESSION_LIFETIME_MS_DEFAULT,
FeedConfiguration.getSessionLifetimeMs());
Assert.assertFalse(FeedConfiguration.getTriggerImmedatePagination());
Assert.assertEquals(FeedConfiguration.VIEW_LOG_THRESHOLD_DEFAULT,
FeedConfiguration.getViewLogThreshold(), 0.001d);
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:feed_server_endpoint/"
+ "https%3A%2F%2Ffeed%2Egoogle%2Ecom%2Fpath"})
public void testFeedServerEndpointParameter() {
Assert.assertEquals(
"https://feed.google.com/path", FeedConfiguration.getFeedServerEndpoint());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:feed_server_method/POST"})
public void testFeedServerMethodParameter() {
Assert.assertEquals("POST", FeedConfiguration.getFeedServerMethod());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:feed_server_response_length_prefixed/false"})
public void testFeedServerResponseLengthPrefixedParameter() {
Assert.assertEquals(false, FeedConfiguration.getFeedServerReponseLengthPrefixed());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:logging_immediate_content_threshold_ms/5000"})
public void testLoggingImmediateContentThresholdMs() {
Assert.assertEquals(5000, FeedConfiguration.getLoggingImmediateContentThresholdMs());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:session_lifetime_ms/60000"})
public void testSessionLifetimeMs() {
Assert.assertEquals(60000, FeedConfiguration.getSessionLifetimeMs());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:trigger_immediate_pagination/true"})
public void testTriggerImmedatePagination() {
Assert.assertTrue(FeedConfiguration.getTriggerImmedatePagination());
}
@Test
@Feature({"Feed"})
@CommandLineFlags.
Add({"enable-features=InterestFeedContentSuggestions<Trial", "force-fieldtrials=Trial/Group",
"force-fieldtrial-params=Trial.Group:view_log_threshold/0.33"})
public void testViewLogThreshold() {
Assert.assertEquals(0.33d, FeedConfiguration.getViewLogThreshold(), 0.001d);
}
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment