From e439b5f90fbe22d1dc1a358eb01b64bfc2b16931 Mon Sep 17 00:00:00 2001 From: Zakhar Voit Date: Mon, 11 Dec 2023 13:34:53 +0800 Subject: [PATCH] [Chromium] Implement form repost warning dialog Show form repost warning dialog by using the corresponding Chromium method in TabWebContentsDelegate.java. --- .../browser/api/impl/PromptDelegateImpl.java | 24 ++++++++++++++++++- .../wolvic/browser/api/impl/SessionImpl.java | 5 ++++ .../api/impl/TabWebContentsDelegate.java | 14 +++++++++++ 3 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/PromptDelegateImpl.java b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/PromptDelegateImpl.java index a1ebc93287..54e204395e 100644 --- a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/PromptDelegateImpl.java +++ b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/PromptDelegateImpl.java @@ -13,6 +13,7 @@ import org.chromium.wolvic.UserDialogManagerBridge; import com.igalia.wolvic.browser.api.WAllowOrDeny; +import com.igalia.wolvic.browser.api.WResult; import com.igalia.wolvic.browser.api.WSession; import java.util.ArrayList; @@ -23,9 +24,13 @@ class PromptDelegateImpl implements UserDialogManagerBridge.Delegate { private final WSession.PromptDelegate mDelegate; private final SessionImpl mSession; - private static class PromptResponseImpl implements WSession.PromptDelegate.PromptResponse { + public static class PromptResponseImpl implements WSession.PromptDelegate.PromptResponse { public PromptResponseImpl() { } + + public WAllowOrDeny allowOrDeny() { + return WAllowOrDeny.DENY; + } } public PromptDelegateImpl(WSession.PromptDelegate mDelegate, SessionImpl mSession) { @@ -60,6 +65,10 @@ public void onBeforeUnloadDialog(UserDialogManagerBridge.DialogCallback dialogCa mDelegate.onBeforeUnloadPrompt(mSession, new BeforeUnloadPrompt(dialogCallback)); } + public WResult onRepostConfirmWarningDialog() { + return mDelegate.onRepostConfirmPrompt(mSession, new RepostConfirmPrompt()).then(result -> WResult.fromValue((PromptResponseImpl) result)); + } + public static class BasePromptImpl implements WSession.PromptDelegate.BasePrompt { private WSession.PromptDelegate.PromptInstanceDelegate mDelegate; protected boolean mIsCompleted; @@ -208,6 +217,19 @@ public WSession.PromptDelegate.PromptResponse confirm(@Nullable WAllowOrDeny all } } + private static class RepostConfirmPrompt extends BasePromptImpl implements WSession.PromptDelegate.RepostConfirmPrompt { + @NonNull + @Override + public WSession.PromptDelegate.PromptResponse confirm(@Nullable WAllowOrDeny allowOrDeny) { + return new PromptResponseImpl() { + @Override + public WAllowOrDeny allowOrDeny() { + return allowOrDeny; + } + }; + } + } + public class SelectPopupFactory implements SelectPopup.Factory { public SelectPopup.Ui create(Context windowContext, Callback selectionChangedCallback, List items, boolean multiple, int[] selected) { diff --git a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/SessionImpl.java b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/SessionImpl.java index 73db34eb79..be083c9ac2 100644 --- a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/SessionImpl.java +++ b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/SessionImpl.java @@ -348,6 +348,11 @@ public PromptDelegate getPromptDelegate() { return mPromptDelegate == null ? null : mPromptDelegate.getDelegate(); } + @Nullable + public PromptDelegateImpl getChromiumPromptDelegate() { + return mPromptDelegate; + } + @Override public void setSelectionActionDelegate(@Nullable SelectionActionDelegate delegate) { // TODO: Implement bridge diff --git a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java index 7257e195f7..aa693b62e6 100644 --- a/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java +++ b/app/src/common/chromium/com/igalia/wolvic/browser/api/impl/TabWebContentsDelegate.java @@ -3,6 +3,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import com.igalia.wolvic.browser.api.WAllowOrDeny; +import com.igalia.wolvic.browser.api.WResult; import com.igalia.wolvic.browser.api.WSession; import org.chromium.base.task.PostTask; @@ -117,4 +119,16 @@ public void onUpdateUrl(GURL url) { delegate.onLocationChange(mSession, mWebContents.getVisibleUrl().getSpec()); } } + + @Override + public void showRepostFormWarningDialog() { + mSession.getChromiumPromptDelegate().onRepostConfirmWarningDialog().then(result -> { + if (result.allowOrDeny() == WAllowOrDeny.ALLOW) { + mWebContents.getNavigationController().continuePendingReload(); + } else { + mWebContents.getNavigationController().cancelPendingReload(); + } + return WResult.fromValue(null); + }); + } }