Commit 1ff89398 authored by siyua's avatar siyua Committed by Commit Bot

[AF Paradise] Set migration flow step when user navigates away

Currently the credit card icon is visible when flow step is PROMO_BUBBLE
or CREDIT_CARD_ICON. When user navigates away when bubble or credit card
icon is shown, the flow step is not correctly set so the icon will always
show even if the bubble is gone.

Bug: 897998
Change-Id: I8a966cbb76775aaedc8b766306ec6d5c9602c8e7
Reviewed-on: https://chromium-review.googlesource.com/c/1352358Reviewed-by: default avatarEvan Stade <estade@chromium.org>
Reviewed-by: default avatarMichael Wasserman <msw@chromium.org>
Commit-Queue: Siyu An <siyua@chromium.org>
Cr-Commit-Position: refs/heads/master@{#612928}
parent 2fb48e55
...@@ -2306,6 +2306,7 @@ jumbo_split_static_library("ui") { ...@@ -2306,6 +2306,7 @@ jumbo_split_static_library("ui") {
"autofill/local_card_migration_bubble.h", "autofill/local_card_migration_bubble.h",
"autofill/local_card_migration_bubble_controller_impl.cc", "autofill/local_card_migration_bubble_controller_impl.cc",
"autofill/local_card_migration_bubble_controller_impl.h", "autofill/local_card_migration_bubble_controller_impl.h",
"autofill/local_card_migration_controller_observer.h",
"autofill/local_card_migration_dialog.h", "autofill/local_card_migration_dialog.h",
"autofill/local_card_migration_dialog_controller_impl.cc", "autofill/local_card_migration_dialog_controller_impl.cc",
"autofill/local_card_migration_dialog_controller_impl.h", "autofill/local_card_migration_dialog_controller_impl.h",
......
...@@ -66,6 +66,11 @@ void LocalCardMigrationBubbleControllerImpl::ReshowBubble() { ...@@ -66,6 +66,11 @@ void LocalCardMigrationBubbleControllerImpl::ReshowBubble() {
ShowBubbleImplementation(); ShowBubbleImplementation();
} }
void LocalCardMigrationBubbleControllerImpl::AddObserver(
LocalCardMigrationControllerObserver* observer) {
observer_list_.AddObserver(observer);
}
LocalCardMigrationBubble* LocalCardMigrationBubble*
LocalCardMigrationBubbleControllerImpl::local_card_migration_bubble_view() LocalCardMigrationBubbleControllerImpl::local_card_migration_bubble_view()
const { const {
...@@ -117,6 +122,9 @@ void LocalCardMigrationBubbleControllerImpl::DidFinishNavigation( ...@@ -117,6 +122,9 @@ void LocalCardMigrationBubbleControllerImpl::DidFinishNavigation(
// Otherwise, get rid of the bubble and icon. // Otherwise, get rid of the bubble and icon.
local_card_migration_bubble_closure_.Reset(); local_card_migration_bubble_closure_.Reset();
bool bubble_was_visible = local_card_migration_bubble_; bool bubble_was_visible = local_card_migration_bubble_;
for (LocalCardMigrationControllerObserver& observer : observer_list_) {
observer.OnMigrationNoLongerAvailable();
}
if (bubble_was_visible) { if (bubble_was_visible) {
local_card_migration_bubble_->Hide(); local_card_migration_bubble_->Hide();
OnBubbleClosed(); OnBubbleClosed();
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
#include <memory> #include <memory>
#include "base/macros.h" #include "base/macros.h"
#include "base/observer_list.h"
#include "base/timer/elapsed_timer.h" #include "base/timer/elapsed_timer.h"
#include "chrome/browser/ui/autofill/local_card_migration_controller_observer.h"
#include "components/autofill/core/browser/ui/local_card_migration_bubble_controller.h" #include "components/autofill/core/browser/ui/local_card_migration_bubble_controller.h"
#include "content/public/browser/web_contents_observer.h" #include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_contents_user_data.h"
...@@ -35,6 +37,8 @@ class LocalCardMigrationBubbleControllerImpl ...@@ -35,6 +37,8 @@ class LocalCardMigrationBubbleControllerImpl
// Invoked when local card migration icon is clicked. // Invoked when local card migration icon is clicked.
void ReshowBubble(); void ReshowBubble();
void AddObserver(LocalCardMigrationControllerObserver* observer);
// Returns nullptr if no bubble is currently shown. // Returns nullptr if no bubble is currently shown.
LocalCardMigrationBubble* local_card_migration_bubble_view() const; LocalCardMigrationBubble* local_card_migration_bubble_view() const;
...@@ -78,6 +82,9 @@ class LocalCardMigrationBubbleControllerImpl ...@@ -78,6 +82,9 @@ class LocalCardMigrationBubbleControllerImpl
// Boolean to determine if bubble is called from ReshowBubble(). // Boolean to determine if bubble is called from ReshowBubble().
bool is_reshow_ = false; bool is_reshow_ = false;
base::ObserverList<LocalCardMigrationControllerObserver>::Unchecked
observer_list_;
DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationBubbleControllerImpl); DISALLOW_COPY_AND_ASSIGN(LocalCardMigrationBubbleControllerImpl);
}; };
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_CONTROLLER_OBSERVER_H_
#define CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_CONTROLLER_OBSERVER_H_
class LocalCardMigrationControllerObserver {
public:
virtual void OnMigrationNoLongerAvailable() = 0;
protected:
virtual ~LocalCardMigrationControllerObserver() = default;
};
#endif // CHROME_BROWSER_UI_AUTOFILL_LOCAL_CARD_MIGRATION_CONTROLLER_OBSERVER_H_
...@@ -11,13 +11,13 @@ ...@@ -11,13 +11,13 @@
namespace autofill { namespace autofill {
ManageMigrationUiController::ManageMigrationUiController( ManageMigrationUiController::ManageMigrationUiController(
content::WebContents* web_contents) content::WebContents* web_contents) {
: content::WebContentsObserver(web_contents) {
autofill::LocalCardMigrationBubbleControllerImpl::CreateForWebContents( autofill::LocalCardMigrationBubbleControllerImpl::CreateForWebContents(
web_contents); web_contents);
bubble_controller_ = bubble_controller_ =
autofill::LocalCardMigrationBubbleControllerImpl::FromWebContents( autofill::LocalCardMigrationBubbleControllerImpl::FromWebContents(
web_contents); web_contents);
bubble_controller_->AddObserver(this);
autofill::LocalCardMigrationDialogControllerImpl::CreateForWebContents( autofill::LocalCardMigrationDialogControllerImpl::CreateForWebContents(
web_contents); web_contents);
dialog_controller_ = dialog_controller_ =
...@@ -57,7 +57,7 @@ void ManageMigrationUiController::ShowCreditCardIcon( ...@@ -57,7 +57,7 @@ void ManageMigrationUiController::ShowCreditCardIcon(
dialog_controller_->ShowCreditCardIcon(tip_message, migratable_credit_cards); dialog_controller_->ShowCreditCardIcon(tip_message, migratable_credit_cards);
} }
void ManageMigrationUiController::OnUserClickingCreditCardIcon() { void ManageMigrationUiController::OnUserClickedCreditCardIcon() {
switch (flow_step_) { switch (flow_step_) {
case LocalCardMigrationFlowStep::PROMO_BUBBLE: { case LocalCardMigrationFlowStep::PROMO_BUBBLE: {
ReshowBubble(); ReshowBubble();
...@@ -97,6 +97,10 @@ LocalCardMigrationDialog* ManageMigrationUiController::GetDialogView() const { ...@@ -97,6 +97,10 @@ LocalCardMigrationDialog* ManageMigrationUiController::GetDialogView() const {
return dialog_controller_->local_card_migration_dialog_view(); return dialog_controller_->local_card_migration_dialog_view();
} }
void ManageMigrationUiController::OnMigrationNoLongerAvailable() {
flow_step_ = LocalCardMigrationFlowStep::NOT_SHOWN;
}
void ManageMigrationUiController::ReshowBubble() { void ManageMigrationUiController::ReshowBubble() {
if (!bubble_controller_) if (!bubble_controller_)
return; return;
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/ui/autofill/local_card_migration_bubble_controller_impl.h" #include "chrome/browser/ui/autofill/local_card_migration_bubble_controller_impl.h"
#include "chrome/browser/ui/autofill/local_card_migration_controller_observer.h"
#include "chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h" #include "chrome/browser/ui/autofill/local_card_migration_dialog_controller_impl.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/browser/web_contents_user_data.h" #include "content/public/browser/web_contents_user_data.h"
namespace autofill { namespace autofill {
...@@ -40,7 +40,7 @@ enum class LocalCardMigrationFlowStep { ...@@ -40,7 +40,7 @@ enum class LocalCardMigrationFlowStep {
// Controller controls the step of migration flow and is responsible // Controller controls the step of migration flow and is responsible
// for interacting with LocalCardMigrationIconView. // for interacting with LocalCardMigrationIconView.
class ManageMigrationUiController class ManageMigrationUiController
: public content::WebContentsObserver, : public LocalCardMigrationControllerObserver,
public content::WebContentsUserData<ManageMigrationUiController> { public content::WebContentsUserData<ManageMigrationUiController> {
public: public:
~ManageMigrationUiController() override; ~ManageMigrationUiController() override;
...@@ -57,7 +57,7 @@ class ManageMigrationUiController ...@@ -57,7 +57,7 @@ class ManageMigrationUiController
const base::string16& tip_message, const base::string16& tip_message,
const std::vector<MigratableCreditCard>& migratable_credit_cards); const std::vector<MigratableCreditCard>& migratable_credit_cards);
void OnUserClickingCreditCardIcon(); void OnUserClickedCreditCardIcon();
LocalCardMigrationFlowStep GetFlowStep() const; LocalCardMigrationFlowStep GetFlowStep() const;
...@@ -67,6 +67,9 @@ class ManageMigrationUiController ...@@ -67,6 +67,9 @@ class ManageMigrationUiController
LocalCardMigrationDialog* GetDialogView() const; LocalCardMigrationDialog* GetDialogView() const;
// LocalCardMigrationControllerObserver:
void OnMigrationNoLongerAvailable() override;
protected: protected:
explicit ManageMigrationUiController(content::WebContents* web_contents); explicit ManageMigrationUiController(content::WebContents* web_contents);
......
...@@ -879,7 +879,7 @@ void MigrateLocalCards(Browser* browser) { ...@@ -879,7 +879,7 @@ void MigrateLocalCards(Browser* browser) {
autofill::ManageMigrationUiController* controller = autofill::ManageMigrationUiController* controller =
autofill::ManageMigrationUiController::FromWebContents(web_contents); autofill::ManageMigrationUiController::FromWebContents(web_contents);
// Show migration-related Ui when the user clicks the credit card icon. // Show migration-related Ui when the user clicks the credit card icon.
controller->OnUserClickingCreditCardIcon(); controller->OnUserClickedCreditCardIcon();
} }
void Translate(Browser* browser) { void Translate(Browser* browser) {
......
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