Commit 74f69a41 authored by Clemens Arbesser's avatar Clemens Arbesser Committed by Commit Bot

[Autofill Assistant] Tests transitions from trigger to regular scripts.

This CL also allows the onboarding to reuse the previous bottom sheet
content to allow for a smooth transition.

Finally, this CL fixes a potential issue where the bottom bar delegate
was not always correctly set for users who saw the onboarding.

Bug: b/171776026
Change-Id: I747333d80c08860192eae7b8414b5c731bc792ef
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2526068
Commit-Queue: Clemens Arbesser <arbesser@google.com>
Reviewed-by: default avatarSandro Maggi <sandromaggi@google.com>
Cr-Commit-Position: refs/heads/master@{#826702}
parent 9929cabe
......@@ -116,6 +116,7 @@ class AssistantBottomBarCoordinator implements AssistantPeekHeightCoordinator.De
BottomSheetContent currentSheetContent = controller.getCurrentSheetContent();
if (currentSheetContent instanceof AssistantBottomSheetContent) {
mContent = (AssistantBottomSheetContent) currentSheetContent;
mContent.setDelegate(model::getBottomBarDelegate);
} else {
mContent = new AssistantBottomSheetContent(activity, model::getBottomBarDelegate);
}
......
......@@ -50,6 +50,10 @@ public class AssistantBottomSheetContent implements BottomSheetContent {
mContentScrollableView = scrollableView;
}
public void setDelegate(Supplier<AssistantBottomBarDelegate> supplier) {
mBottomBarDelegateSupplier = supplier;
}
public void setPeekModeDisabled(boolean disabled) {
mPeekModeDisabled = disabled;
}
......
......@@ -29,6 +29,7 @@ import org.chromium.chrome.browser.autofill_assistant.overlay.AssistantOverlaySt
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.chrome.browser.customtabs.CustomTabActivity;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetContent;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.widget.scrim.ScrimCoordinator;
import org.chromium.components.embedder_support.util.UrlUtilitiesJni;
......@@ -113,19 +114,25 @@ class AssistantOnboardingCoordinator {
mContext, mBrowserControls, mCompositorViewHolder, mScrimCoordinator, overlayModel);
overlayModel.set(AssistantOverlayModel.STATE, AssistantOverlayState.FULL);
mContent =
new AssistantBottomSheetContent(mContext, () -> new AssistantBottomBarDelegate() {
@Override
public boolean onBackButtonPressed() {
onUserAction(
/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
DropOutReason.ONBOARDING_BACK_BUTTON_CLICKED);
return true;
}
@Override
public void onBottomSheetClosedWithSwipe() {}
});
AssistantBottomBarDelegate delegate = new AssistantBottomBarDelegate() {
@Override
public boolean onBackButtonPressed() {
onUserAction(
/* accept= */ false, callback, OnBoarding.OB_NO_ANSWER,
DropOutReason.ONBOARDING_BACK_BUTTON_CLICKED);
return true;
}
@Override
public void onBottomSheetClosedWithSwipe() {}
};
BottomSheetContent currentSheetContent = mController.getCurrentSheetContent();
if (currentSheetContent instanceof AssistantBottomSheetContent) {
mContent = (AssistantBottomSheetContent) currentSheetContent;
mContent.setDelegate(() -> delegate);
} else {
mContent = new AssistantBottomSheetContent(mContext, () -> delegate);
}
initContent(callback);
}
......
......@@ -30,13 +30,17 @@ import org.junit.runner.RunWith;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.autofill_assistant.R;
import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto;
import org.chromium.chrome.browser.autofill_assistant.proto.ChipIcon;
import org.chromium.chrome.browser.autofill_assistant.proto.ChipProto;
import org.chromium.chrome.browser.autofill_assistant.proto.ChipType;
import org.chromium.chrome.browser.autofill_assistant.proto.DrawableProto;
import org.chromium.chrome.browser.autofill_assistant.proto.Empty;
import org.chromium.chrome.browser.autofill_assistant.proto.GetTriggerScriptsResponseProto;
import org.chromium.chrome.browser.autofill_assistant.proto.PromptProto;
import org.chromium.chrome.browser.autofill_assistant.proto.SelectorProto;
import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto;
import org.chromium.chrome.browser.autofill_assistant.proto.SupportedScriptProto.PresentationProto;
import org.chromium.chrome.browser.autofill_assistant.proto.TriggerScriptConditionProto;
import org.chromium.chrome.browser.autofill_assistant.proto.TriggerScriptConditionsProto;
import org.chromium.chrome.browser.autofill_assistant.proto.TriggerScriptProto;
......@@ -45,6 +49,8 @@ import org.chromium.chrome.browser.autofill_assistant.proto.TriggerScriptUIProto
import org.chromium.chrome.browser.autofill_assistant.proto.TriggerScriptUIProto.TriggerChip;
import org.chromium.chrome.browser.flags.ChromeFeatureList;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.preferences.ChromePreferenceKeys;
import org.chromium.chrome.browser.preferences.SharedPreferencesManager;
import org.chromium.chrome.browser.signin.UnifiedConsentServiceBridge;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.chrome.test.ChromeTabbedActivityTestRule;
......@@ -52,6 +58,9 @@ import org.chromium.chrome.test.util.browser.Features;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.net.test.EmbeddedTestServer;
import java.util.ArrayList;
import java.util.Arrays;
/** Integration tests for trigger scripts. */
@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE})
@RunWith(ChromeJUnit4ClassRunner.class)
......@@ -73,7 +82,12 @@ public class AutofillAssistantTriggerScriptIntegrationTest {
new AutofillAssistantTestServiceRequestSender();
testServiceRequestSender.setNextResponse(/* httpStatus = */ 200, triggerScripts);
testServiceRequestSender.scheduleForInjection();
;
}
private void setupRegularScripts(AutofillAssistantTestScript... scripts) {
AutofillAssistantTestService testService =
new AutofillAssistantTestService(Arrays.asList(scripts));
testService.scheduleForInjection();
}
private void startAutofillAssistantOnTab(String pageToLoad) {
......@@ -242,4 +256,92 @@ public class AutofillAssistantTriggerScriptIntegrationTest {
onView(withId(R.id.progress_bar)).check(matches(not(isDisplayed())));
onView(withId(R.id.step_progress_bar)).check(matches(not(isDisplayed())));
}
@Test
@MediumTest
@Features.EnableFeatures(ChromeFeatureList.AUTOFILL_ASSISTANT_PROACTIVE_HELP)
public void transitionToOnboardingAndRegularScript() throws Exception {
TriggerScriptProto.Builder triggerScript =
TriggerScriptProto
.newBuilder()
/* no trigger condition */
.setUserInterface(createDefaultUI("Trigger script",
/* bubbleMessage = */ "",
/* withProgressBar = */ true));
GetTriggerScriptsResponseProto triggerScripts =
(GetTriggerScriptsResponseProto) GetTriggerScriptsResponseProto.newBuilder()
.addTriggerScripts(triggerScript)
.build();
setupTriggerScripts(triggerScripts);
AutofillAssistantPreferencesUtil.setInitialPreferences(true);
SharedPreferencesManager.getInstance().writeBoolean(
ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, false);
startAutofillAssistantOnTab(TEST_PAGE);
waitUntilViewMatchesCondition(withText("Trigger script"), isCompletelyDisplayed());
ArrayList<ActionProto> list = new ArrayList<>();
list.add((ActionProto) ActionProto.newBuilder()
.setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices(
PromptProto.Choice.newBuilder()))
.build());
AutofillAssistantTestScript script = new AutofillAssistantTestScript(
(SupportedScriptProto) SupportedScriptProto.newBuilder()
.setPath(TEST_PAGE)
.setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip(
ChipProto.newBuilder().setText("Done")))
.build(),
list);
setupRegularScripts(script);
onView(withText("Continue")).perform(click());
// Wait for onboarding.
waitUntilViewMatchesCondition(withId(R.id.button_init_ok), isCompletelyDisplayed());
// Accept onboarding.
onView(withId(R.id.button_init_ok)).perform(click());
waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed());
}
@Test
@MediumTest
@Features.EnableFeatures(ChromeFeatureList.AUTOFILL_ASSISTANT_PROACTIVE_HELP)
public void transitionToRegularScriptWithoutOnboarding() throws Exception {
TriggerScriptProto.Builder triggerScript =
TriggerScriptProto
.newBuilder()
/* no trigger condition */
.setUserInterface(createDefaultUI("Trigger script",
/* bubbleMessage = */ "",
/* withProgressBar = */ true));
GetTriggerScriptsResponseProto triggerScripts =
(GetTriggerScriptsResponseProto) GetTriggerScriptsResponseProto.newBuilder()
.addTriggerScripts(triggerScript)
.build();
setupTriggerScripts(triggerScripts);
AutofillAssistantPreferencesUtil.setInitialPreferences(true);
SharedPreferencesManager.getInstance().writeBoolean(
ChromePreferenceKeys.AUTOFILL_ASSISTANT_ONBOARDING_ACCEPTED, true);
startAutofillAssistantOnTab(TEST_PAGE);
waitUntilViewMatchesCondition(withText("Trigger script"), isCompletelyDisplayed());
ArrayList<ActionProto> list = new ArrayList<>();
list.add((ActionProto) ActionProto.newBuilder()
.setPrompt(PromptProto.newBuilder().setMessage("Prompt").addChoices(
PromptProto.Choice.newBuilder()))
.build());
AutofillAssistantTestScript script = new AutofillAssistantTestScript(
(SupportedScriptProto) SupportedScriptProto.newBuilder()
.setPath(TEST_PAGE)
.setPresentation(PresentationProto.newBuilder().setAutostart(true).setChip(
ChipProto.newBuilder().setText("Done")))
.build(),
list);
setupRegularScripts(script);
onView(withText("Continue")).perform(click());
waitUntilViewMatchesCondition(withText("Prompt"), isCompletelyDisplayed());
}
}
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