Commit 8bed3c10 authored by Peter E Conn's avatar Peter E Conn Committed by Commit Bot

Read experiment ids from Intent.

This CL builds on:
  https://chromium-review.googlesource.com/c/chromium/src/+/2324172

Change-Id: I5bb5544411ce5e88f8f5dd7dd3fe5aeb2c27f5e5
Bug: 1111941
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2338934
Auto-Submit: Peter Conn <peconn@chromium.org>
Reviewed-by: default avatarAlexei Svitkine <asvitkine@chromium.org>
Reviewed-by: default avatarTommy Nyquist <nyquist@chromium.org>
Reviewed-by: default avatarPeter Beverloo <peter@chromium.org>
Commit-Queue: Peter Conn <peconn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#795887}
parent f13329d9
......@@ -500,4 +500,9 @@ public abstract class BrowserServicesIntentDataProvider {
public int getTwaDisclosureUi() {
return TwaDisclosureUi.DEFAULT;
}
@Nullable
public int[] getGsaExperimentIds() {
return null;
}
}
......@@ -157,6 +157,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
+ "To make locally-built Chrome a first-party app, sign with release-test "
+ "signing keys and run on userdebug devices. See use_signing_keys GN arg.";
private static final String EXPERIMENT_IDS =
"org.chromium.chrome.browser.customtabs.AGA_EXPERIMENT_IDS";
private final Intent mIntent;
private final CustomTabsSessionToken mSession;
private final boolean mIsTrustedIntent;
......@@ -209,6 +212,9 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
private final String mTranslateLanguage;
private final int mDefaultOrientation;
@Nullable
private final int[] mGsaExperimentIds;
/**
* Add extras to customize menu items for opening payment request UI custom tab from Chrome.
*/
......@@ -354,6 +360,8 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
mDefaultOrientation = convertOrientationType(IntentUtils.safeGetIntExtra(intent,
TrustedWebActivityIntentBuilder.EXTRA_SCREEN_ORIENTATION,
ScreenOrientation.DEFAULT));
mGsaExperimentIds = IntentUtils.safeGetIntArrayExtra(intent, EXPERIMENT_IDS);
}
/**
......@@ -857,4 +865,10 @@ public class CustomTabIntentDataProvider extends BrowserServicesIntentDataProvid
return version;
}
@Override
@Nullable
public int[] getGsaExperimentIds() {
return mGsaExperimentIds;
}
}
......@@ -1607,6 +1607,11 @@ public class CustomTabsConnection {
sessionToken, uri, purpose, extras);
}
@VisibleForTesting
public static void setInstanceForTesting(CustomTabsConnection connection) {
sInstance = connection;
}
@NativeMethods
interface Natives {
void createAndStartDetachedResourceRequest(Profile profile, CustomTabsSessionToken session,
......
......@@ -41,6 +41,7 @@ import org.chromium.chrome.browser.dependency_injection.ActivityScope;
import org.chromium.chrome.browser.init.StartupTabPreloader;
import org.chromium.chrome.browser.lifecycle.ActivityLifecycleDispatcher;
import org.chromium.chrome.browser.lifecycle.InflationObserver;
import org.chromium.chrome.browser.metrics.UmaSessionStats;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.RedirectHandlerTabHelper;
......@@ -86,6 +87,8 @@ public class CustomTabActivityTabController implements InflationObserver {
int NUM_ENTRIES = 4;
}
private static final String GSA_STUDY_NAME = "GsaExperiments";
private final Lazy<CustomTabDelegateFactory> mCustomTabDelegateFactory;
private final ChromeActivity<?> mActivity;
private final CustomTabsConnection mConnection;
......@@ -383,6 +386,16 @@ public class CustomTabActivityTabController implements InflationObserver {
}
private Tab createTab() {
// At this point we know native has been loaded, but we haven't kicked off a navigation yet.
// Experiment ids for GSA are normally set a bit later in the process, but this resulted in
// them being absent for the initial request. We set them here early.
int[] experimentIds = mIntentDataProvider.getGsaExperimentIds();
if (experimentIds != null) {
// When ids are set through the intent, we don't want them to override the existing ids.
boolean override = false;
UmaSessionStats.registerExternalExperiment(GSA_STUDY_NAME, experimentIds, override);
}
WebContents webContents = takeWebContents();
// clang-format off
Tab tab = mTabFactory.createTab(webContents, mCustomTabDelegateFactory.get(),
......
......@@ -209,8 +209,16 @@ public class UmaSessionStats {
}
public static void registerExternalExperiment(String fallbackStudyName, int[] experimentIds) {
// TODO(https://crbug.com/1111941): Remove this method once all callers have moved onto
// the overload below.
registerExternalExperiment(fallbackStudyName, experimentIds, true);
}
public static void registerExternalExperiment(
String fallbackStudyName, int[] experimentIds, boolean overrideExistingIds) {
assert isMetricsServiceAvailable();
UmaSessionStatsJni.get().registerExternalExperiment(fallbackStudyName, experimentIds);
UmaSessionStatsJni.get().registerExternalExperiment(
fallbackStudyName, experimentIds, overrideExistingIds);
}
public static void registerSyntheticFieldTrial(String trialName, String groupName) {
......@@ -246,7 +254,8 @@ public class UmaSessionStats {
void updateMetricsServiceState(boolean mayUpload);
void umaResumeSession(long nativeUmaSessionStats, UmaSessionStats caller);
void umaEndSession(long nativeUmaSessionStats, UmaSessionStats caller);
void registerExternalExperiment(String studyName, int[] experimentIds);
void registerExternalExperiment(
String studyName, int[] experimentIds, boolean overrideExistingIds);
void registerSyntheticFieldTrial(String trialName, String groupName);
void recordTabCountPerLoad(int numTabsOpen);
void recordPageLoaded(boolean isDesktopUserAgent);
......
......@@ -112,6 +112,10 @@ public class CustomTabActivityContentTestEnvironment extends TestWatcher {
protected void starting(Description description) {
MockitoAnnotations.initMocks(this);
// There are a number of places that call CustomTabsConnection.getInstance(), which would
// otherwise result in a real CustomTabsConnection being created.
CustomTabsConnection.setInstanceForTesting(connection);
tabFromFactory = prepareTab();
when(intentDataProvider.getIntent()).thenReturn(intent);
......
......@@ -276,7 +276,8 @@ static void JNI_UmaSessionStats_UpdateMetricsServiceState(
static void JNI_UmaSessionStats_RegisterExternalExperiment(
JNIEnv* env,
const JavaParamRef<jstring>& jfallback_study_name,
const JavaParamRef<jintArray>& jexperiment_ids) {
const JavaParamRef<jintArray>& jexperiment_ids,
jboolean override_existing_ids) {
std::string fallback_study_name(
ConvertJavaStringToUTF8(env, jfallback_study_name));
std::vector<int> experiment_ids;
......@@ -286,11 +287,15 @@ static void JNI_UmaSessionStats_RegisterExternalExperiment(
&experiment_ids);
}
auto override_mode =
override_existing_ids
? variations::SyntheticTrialRegistry::kOverrideExistingIds
: variations::SyntheticTrialRegistry::kDoNotOverrideExistingIds;
g_browser_process->metrics_service()
->synthetic_trial_registry()
->RegisterExternalExperiments(
fallback_study_name, experiment_ids,
variations::SyntheticTrialRegistry::kOverrideExistingIds);
->RegisterExternalExperiments(fallback_study_name, experiment_ids,
override_mode);
}
static void JNI_UmaSessionStats_RegisterSyntheticFieldTrial(
......
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