Chromium Code Reviews| Index: chrome/browser/ui/views/payments/payment_request_dialog_view.cc | 
| diff --git a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc | 
| index 60b397579f8cd27e5aa089008602534e8992d4bd..a6b28a81d415bdb8e12aa12840c60a7f49c094eb 100644 | 
| --- a/chrome/browser/ui/views/payments/payment_request_dialog_view.cc | 
| +++ b/chrome/browser/ui/views/payments/payment_request_dialog_view.cc | 
| @@ -161,6 +161,15 @@ void PaymentRequestDialogView::ViewHierarchyChanged( | 
| const ViewHierarchyChangedDetails& details) { | 
| // When a view that is associated with a controller is removed from this | 
| // view's descendants, dispose of the controller. | 
| + | 
| + // DO NOT SUBMIT Note to reviewer: When we are here, I believe the View is | 
| 
 
Mathieu
2017/02/14 21:23:54
See this comment
 
 | 
| + // still valid and not yet destroyed. Line 176 destroys the controller, which | 
| + // is problematic when the View does get destroyed (see comment in | 
| + // credit_card_editor_view_controller.h). Can we get notified *after* a View | 
| + // has been destroyed? Can WidgetObserver observe the view's widget through | 
| + // OnWidgetDestroyed, so that |details.child->GetWidget()| could become the | 
| + // key to |controller_map_|? I'm not familiar with GetWidget() enough to know | 
| + // whether observing the Widget is equivalent to observing the View. | 
| 
 
sky
2017/02/14 23:19:24
Is the only way you get here if the ViewStack remo
 
 | 
| if (!details.is_add && | 
| controller_map_.find(details.child) != controller_map_.end()) { | 
| DCHECK(!details.move_view); |