| Index: chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc | 
| diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc | 
| index 3303de24286487c73c67c012bef91f419e97f612..dd52e788c6c634380fed2c5ca9a9966a4076e6e1 100644 | 
| --- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc | 
| +++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.cc | 
| @@ -5,6 +5,7 @@ | 
| #include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h" | 
|  | 
| #include "base/bind.h" | 
| +#include "base/callback.h" | 
| #include "base/feature_list.h" | 
| #include "base/metrics/histogram_macros.h" | 
| #include "chrome/browser/engagement/site_engagement_service.h" | 
| @@ -13,18 +14,15 @@ | 
| #include "chrome/browser/ui/browser_list.h" | 
| #include "chrome/browser/ui/tab_modal_confirm_dialog.h" | 
| #include "chrome/browser/ui/tabs/tab_strip_model.h" | 
| +#include "chrome/common/chrome_features.h" | 
| #include "components/app_modal/javascript_dialog_manager.h" | 
| -#include "content/public/browser/web_contents_delegate.h" | 
|  | 
| DEFINE_WEB_CONTENTS_USER_DATA_KEY(JavaScriptDialogTabHelper); | 
|  | 
| namespace { | 
|  | 
| -const base::Feature kAutoDismissingDialogsFeature{ | 
| -    "AutoDismissingDialogs", base::FEATURE_DISABLED_BY_DEFAULT}; | 
| - | 
| bool IsEnabled() { | 
| -  return base::FeatureList::IsEnabled(kAutoDismissingDialogsFeature); | 
| +  return base::FeatureList::IsEnabled(features::kAutoDismissingDialogs); | 
| } | 
|  | 
| app_modal::JavaScriptDialogManager* AppModalDialogManager() { | 
| @@ -47,6 +45,11 @@ JavaScriptDialogTabHelper::JavaScriptDialogTabHelper( | 
| JavaScriptDialogTabHelper::~JavaScriptDialogTabHelper() { | 
| } | 
|  | 
| +void JavaScriptDialogTabHelper::SetDialogShownCallbackForTesting( | 
| +    base::Closure callback) { | 
| +  dialog_shown_ = callback; | 
| +} | 
| + | 
| void JavaScriptDialogTabHelper::RunJavaScriptDialog( | 
| content::WebContents* alerting_web_contents, | 
| const GURL& origin_url, | 
| @@ -91,21 +94,25 @@ void JavaScriptDialogTabHelper::RunJavaScriptDialog( | 
| CloseDialog(false, false, base::string16()); | 
| } | 
|  | 
| -    parent_web_contents->GetDelegate()->ActivateContents(parent_web_contents); | 
| - | 
| base::string16 title = | 
| AppModalDialogManager()->GetTitle(alerting_web_contents, origin_url); | 
| dialog_callback_ = callback; | 
| -    BrowserList::AddObserver(this); | 
| dialog_ = JavaScriptDialog::Create( | 
| parent_web_contents, alerting_web_contents, title, message_type, | 
| message_text, default_prompt_text, callback); | 
|  | 
| +    BrowserList::AddObserver(this); | 
| + | 
| // Message suppression is something that we don't give the user a checkbox | 
| // for any more. It was useful back in the day when dialogs were app-modal | 
| // and clicking the checkbox was the only way to escape a loop that the page | 
| // was doing, but now the user can just close the page. | 
| *did_suppress_message = false; | 
| + | 
| +    if (!dialog_shown_.is_null()) { | 
| +      dialog_shown_.Run(); | 
| +      dialog_shown_.Reset(); | 
| +    } | 
| } else { | 
| AppModalDialogManager()->RunJavaScriptDialog( | 
| alerting_web_contents, origin_url, message_type, message_text, | 
|  |