Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3401)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java

Issue 2320063003: [Payments] PaymentRequestUI should be dismissed on tab changes (Closed)
Patch Set: Nits Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | chrome/android/java_sources.gni » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
index bffe09046b87801fffd26fd049d4890ee520e562..ae353c0e2cf68353cfe9a94a62c9b88d6fb5662c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/payments/PaymentRequestImpl.java
@@ -14,6 +14,7 @@ import org.chromium.base.Log;
import org.chromium.base.VisibleForTesting;
import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.autofill.PersonalDataManager;
import org.chromium.chrome.browser.autofill.PersonalDataManager.AutofillProfile;
import org.chromium.chrome.browser.favicon.FaviconHelper;
@@ -25,6 +26,13 @@ import org.chromium.chrome.browser.payments.ui.PaymentRequestUI;
import org.chromium.chrome.browser.payments.ui.SectionInformation;
import org.chromium.chrome.browser.payments.ui.ShoppingCart;
import org.chromium.chrome.browser.profiles.Profile;
+import org.chromium.chrome.browser.tab.Tab;
+import org.chromium.chrome.browser.tabmodel.EmptyTabModelObserver;
+import org.chromium.chrome.browser.tabmodel.EmptyTabModelSelectorObserver;
+import org.chromium.chrome.browser.tabmodel.TabModel;
+import org.chromium.chrome.browser.tabmodel.TabModel.TabSelectionType;
+import org.chromium.chrome.browser.tabmodel.TabModelObserver;
+import org.chromium.chrome.browser.tabmodel.TabModelSelectorObserver;
import org.chromium.components.safejson.JsonSanitizer;
import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.WebContents;
@@ -109,8 +117,24 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
private static PaymentRequestServiceObserverForTest sObserverForTest;
+ /** Monitors changes in the TabModelSelector. */
+ private final TabModelSelectorObserver mSelectorObserver = new EmptyTabModelSelectorObserver() {
+ @Override
+ public void onTabModelSelected(TabModel newModel, TabModel oldModel) {
+ onDismiss();
+ }
+ };
+
+ /** Monitors changes in the current TabModel. */
+ private final TabModelObserver mTabModelObserver = new EmptyTabModelObserver() {
+ @Override
+ public void didSelectTab(Tab tab, TabSelectionType type, int lastId) {
+ if (tab == null || tab.getId() != lastId) onDismiss();
+ }
+ };
+
private final Handler mHandler = new Handler();
- private final Activity mContext;
+ private final ChromeActivity mContext;
private final PaymentRequestDismissObserver mDismissObserver;
private final String mMerchantName;
private final String mOrigin;
@@ -178,7 +202,9 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
assert webContents != null;
assert dismissObserver != null;
- mContext = context;
+ assert context instanceof ChromeActivity;
+ mContext = (ChromeActivity) context;
+
mDismissObserver = dismissObserver;
mMerchantName = webContents.getTitle();
// The feature is available only in secure context, so it's OK to not show HTTPS.
@@ -346,6 +372,11 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
mIsShowing = true;
if (disconnectIfNoPaymentMethodsSupported()) return;
+ // Catch any time the user switches tabs. Because the dialog is modal, a user shouldn't be
+ // allowed to switch tabs, which can happen if the user receives an external Intent.
+ mContext.getTabModelSelector().addObserver(mSelectorObserver);
+ mContext.getCurrentTabModel().addObserver(mTabModelObserver);
+
mUI.show();
recordSuccessFunnelHistograms("Shown");
}
@@ -1069,6 +1100,9 @@ public class PaymentRequestImpl implements PaymentRequest, PaymentRequestUI.Clie
}
mPaymentMethodsSection = null;
}
+
+ mContext.getTabModelSelector().removeObserver(mSelectorObserver);
+ mContext.getCurrentTabModel().removeObserver(mTabModelObserver);
}
private void closeClient() {
« no previous file with comments | « no previous file | chrome/android/java_sources.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698