Commit 694e4cc5 authored by Clemens Arbesser's avatar Clemens Arbesser Committed by Commit Bot

[Autofill Assistant] Restart lite script on navigation

With this CL, if a user does not make an explicit yes/no choice and
simply navigates away (but stays on the target domain), we will restart
the lite script such that the prompt is shown again the next time the
user visits the trigger site.

Bug: b/162825227
Change-Id: I0e47834c32b16810b9333fba1da8901de3cde2d6
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2364532
Commit-Queue: Clemens Arbesser <arbesser@google.com>
Reviewed-by: default avatarMathias Carlen <mcarlen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#800236}
parent 79814ec8
......@@ -9,10 +9,12 @@ import static org.chromium.chrome.browser.autofill_assistant.AutofillAssistantAr
import androidx.annotation.NonNull;
import org.chromium.base.Callback;
import org.chromium.base.task.PostTask;
import org.chromium.chrome.browser.autofill_assistant.metrics.LiteScriptFinishedState;
import org.chromium.chrome.browser.browser_controls.BrowserControlsStateProvider;
import org.chromium.chrome.browser.compositor.CompositorViewHolder;
import org.chromium.components.browser_ui.bottomsheet.BottomSheetController;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.content_public.browser.WebContents;
import java.util.HashMap;
......@@ -44,7 +46,9 @@ class AutofillAssistantLiteScriptCoordinator {
: returningUserScriptPath;
AutofillAssistantLiteService liteService =
new AutofillAssistantLiteService(mWebContents, usedScriptPath,
finishedState -> handleLiteScriptResult(finishedState, onFinishedCallback));
finishedState
-> handleLiteScriptResult(finishedState, onFinishedCallback,
firstTimeUserScriptPath, returningUserScriptPath));
AutofillAssistantServiceInjector.setServiceToInject(liteService);
Map<String, String> parameters = new HashMap<>();
parameters.put(PARAMETER_TRIGGER_SCRIPT_USED, usedScriptPath);
......@@ -55,39 +59,42 @@ class AutofillAssistantLiteScriptCoordinator {
AutofillAssistantServiceInjector.setServiceToInject(null);
}
private void handleLiteScriptResult(
@LiteScriptFinishedState int finishedState, Callback<Boolean> onFinishedCallback) {
private void handleLiteScriptResult(@LiteScriptFinishedState int finishedState,
Callback<Boolean> onFinishedCallback, String firstTimeUserScriptPath,
String returningUserScriptPath) {
AutofillAssistantMetrics.recordLiteScriptFinished(mWebContents, finishedState);
// TODO(arbesser) restart lite script on LITE_SCRIPT_BROWSE_FAILED_NAVIGATE.
switch (finishedState) {
case LiteScriptFinishedState.LITE_SCRIPT_UNKNOWN_FAILURE:
case LiteScriptFinishedState.LITE_SCRIPT_SERVICE_DELETED:
case LiteScriptFinishedState.LITE_SCRIPT_PATH_MISMATCH:
case LiteScriptFinishedState.LITE_SCRIPT_GET_ACTIONS_FAILED:
case LiteScriptFinishedState.LITE_SCRIPT_GET_ACTIONS_PARSE_ERROR:
case LiteScriptFinishedState.LITE_SCRIPT_UNSAFE_ACTIONS:
case LiteScriptFinishedState.LITE_SCRIPT_INVALID_SCRIPT:
case LiteScriptFinishedState.LITE_SCRIPT_BROWSE_FAILED_NAVIGATE:
case LiteScriptFinishedState.LITE_SCRIPT_BROWSE_FAILED_OTHER:
onFinishedCallback.onResult(false);
return;
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_NAVIGATE:
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_CONDITION_NO_LONGER_TRUE:
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_CLOSE:
AutofillAssistantPreferencesUtil
.incrementAutofillAssistantNumberOfLiteScriptsCanceled();
// fall through
// fall through
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_NAVIGATE:
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_CONDITION_NO_LONGER_TRUE:
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_OTHER:
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_SUCCEEDED:
// The prompt was displayed on screen, hence we mark them as returning user from now
// on.
AutofillAssistantPreferencesUtil.setAutofillAssistantReturningLiteScriptUser();
onFinishedCallback.onResult(false);
return;
case LiteScriptFinishedState.LITE_SCRIPT_PROMPT_SUCCEEDED:
onFinishedCallback.onResult(true);
break;
}
return;
if (finishedState == LiteScriptFinishedState.LITE_SCRIPT_PROMPT_SUCCEEDED) {
onFinishedCallback.onResult(true);
} else if (finishedState
== LiteScriptFinishedState.LITE_SCRIPT_PROMPT_FAILED_CONDITION_NO_LONGER_TRUE) {
// User stayed on domain without making an explicit choice. This will resurface the
// prompt the next time they visit the trigger page (or silently go away if they
// navigate away from target domain).
//
// Note: this needs to be done asynchronously, to give the old controller enough time
// to shut down and detach from the UI.
PostTask.postTask(UiThreadTaskTraits.DEFAULT,
()
-> startLiteScript(firstTimeUserScriptPath, returningUserScriptPath,
onFinishedCallback));
} else {
onFinishedCallback.onResult(false);
}
}
}
}
\ No newline at end of file
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