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

Unified Diff: chrome/browser/extensions/content_script_apitest.cc

Issue 2784533002: Turn on auto-dismissing dialogs for trunk builds. (Closed)
Patch Set: chromeos Created 3 years, 8 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
Index: chrome/browser/extensions/content_script_apitest.cc
diff --git a/chrome/browser/extensions/content_script_apitest.cc b/chrome/browser/extensions/content_script_apitest.cc
index 839c2f975572093fafc81f3947cf091541478e0a..142433dc90dffb83526005f4818aee01ee22cb17 100644
--- a/chrome/browser/extensions/content_script_apitest.cc
+++ b/chrome/browser/extensions/content_script_apitest.cc
@@ -8,6 +8,7 @@
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
+#include "base/run_loop.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
@@ -18,11 +19,10 @@
#include "chrome/browser/extensions/extension_with_management_policy_apitest.h"
#include "chrome/browser/extensions/test_extension_dir.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/javascript_dialogs/javascript_dialog_tab_helper.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/base/ui_test_utils.h"
-#include "components/app_modal/javascript_dialog_extensions_client.h"
-#include "components/app_modal/javascript_dialog_manager.h"
#include "content/public/browser/javascript_dialog_manager.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/web_contents.h"
@@ -89,107 +89,6 @@ testing::AssertionResult CheckStyleInjection(Browser* browser,
return testing::AssertionSuccess();
}
-class DialogClient;
-
-// A helper class to hijack the dialog manager's ExtensionsClient, so that we
-// know when dialogs are being opened.
-// NOTE: The default implementation of the JavaScriptDialogExtensionsClient
-// doesn't do anything, so it's safe to override it. If, at some stage, this
-// has behavior (like if we move this into app shell), we'll need to update
-// this (by, e.g., making DialogClient a wrapper around the implementation).
-class DialogHelper {
- public:
- explicit DialogHelper(content::WebContents* web_contents);
- ~DialogHelper();
-
- // Notifies the DialogHelper that a dialog was opened. Runs |quit_closure_|,
- // if it is non-null.
- void DialogOpened();
-
- // Closes any active dialogs.
- void CloseDialogs();
-
- void set_quit_closure(const base::Closure& quit_closure) {
- quit_closure_ = quit_closure;
- }
- size_t dialog_count() const { return dialog_count_; }
-
- private:
- // The number of dialogs to appear.
- size_t dialog_count_;
-
- // The WebContents this helper is associated with.
- content::WebContents* web_contents_;
-
- // The dialog manager for |web_contents_|.
- content::JavaScriptDialogManager* dialog_manager_;
-
- // The dialog client override.
- DialogClient* client_;
-
- // The quit closure to run when a dialog appears.
- base::Closure quit_closure_;
-
- DISALLOW_COPY_AND_ASSIGN(DialogHelper);
-};
-
-// The client override for the DialogHelper.
-class DialogClient : public app_modal::JavaScriptDialogExtensionsClient {
- public:
- explicit DialogClient(DialogHelper* helper) : helper_(helper) {}
- ~DialogClient() override {}
-
- void set_helper(DialogHelper* helper) { helper_ = helper; }
-
- private:
- // app_modal::JavaScriptDialogExtensionsClient:
- void OnDialogOpened(content::WebContents* web_contents) override {
- if (helper_)
- helper_->DialogOpened();
- }
- void OnDialogClosed(content::WebContents* web_contents) override {}
- bool GetExtensionName(content::WebContents* web_contents,
- const GURL& origin_url,
- std::string* name_out) override {
- return false;
- }
-
- // The dialog helper to notify of any open dialogs.
- DialogHelper* helper_;
-
- DISALLOW_COPY_AND_ASSIGN(DialogClient);
-};
-
-DialogHelper::DialogHelper(content::WebContents* web_contents)
- : dialog_count_(0),
- web_contents_(web_contents),
- dialog_manager_(nullptr),
- client_(nullptr) {
- app_modal::JavaScriptDialogManager* dialog_manager_impl =
- app_modal::JavaScriptDialogManager::GetInstance();
- client_ = new DialogClient(this);
- dialog_manager_impl->SetExtensionsClient(base::WrapUnique(client_));
-
- dialog_manager_ =
- web_contents_->GetDelegate()->GetJavaScriptDialogManager(web_contents_);
-}
-
-DialogHelper::~DialogHelper() {
- client_->set_helper(nullptr);
-}
-
-void DialogHelper::CloseDialogs() {
- dialog_manager_->CancelDialogs(web_contents_, false);
-}
-
-void DialogHelper::DialogOpened() {
- ++dialog_count_;
- if (!quit_closure_.is_null()) {
- quit_closure_.Run();
- quit_closure_ = base::Closure();
- }
-}
-
// Runs all pending tasks in the renderer associated with |web_contents|, and
// then all pending tasks in the browser process.
// Returns true on success.
@@ -543,9 +442,10 @@ IN_PROC_BROWSER_TEST_P(ContentScriptApiTest, ContentScriptBlockingScript) {
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
- DialogHelper dialog_helper(web_contents);
- base::RunLoop run_loop;
- dialog_helper.set_quit_closure(run_loop.QuitClosure());
+ JavaScriptDialogTabHelper* js_helper =
+ JavaScriptDialogTabHelper::FromWebContents(web_contents);
+ base::RunLoop dialog_wait;
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure());
ExtensionTestMessageListener listener("done", false);
listener.set_extension_id(ext2->id());
@@ -555,12 +455,11 @@ IN_PROC_BROWSER_TEST_P(ContentScriptApiTest, ContentScriptBlockingScript) {
browser(), embedded_test_server()->GetURL("/empty.html"),
WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE);
- run_loop.Run();
+ dialog_wait.Run();
// Right now, the alert dialog is showing and blocking injection of anything
// after it, so the listener shouldn't be satisfied.
EXPECT_FALSE(listener.was_satisfied());
- EXPECT_EQ(1u, dialog_helper.dialog_count());
- dialog_helper.CloseDialogs();
+ js_helper->HandleJavaScriptDialog(web_contents, true, nullptr);
// After closing the dialog, the rest of the scripts should be able to
// inject.
@@ -596,21 +495,22 @@ IN_PROC_BROWSER_TEST_P(ContentScriptApiTest,
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
- DialogHelper dialog_helper(web_contents);
- base::RunLoop run_loop;
- dialog_helper.set_quit_closure(run_loop.QuitClosure());
+ JavaScriptDialogTabHelper* js_helper =
+ JavaScriptDialogTabHelper::FromWebContents(web_contents);
+ base::RunLoop dialog_wait;
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure());
ExtensionTestMessageListener listener("done", false);
listener.set_extension_id(ext2->id());
- // Navitate!
+ // Navigate!
ui_test_utils::NavigateToURLWithDisposition(
browser(), embedded_test_server()->GetURL("/empty.html"),
WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE);
// Now, instead of closing the dialog, just close the tab. Later scripts
// should never get a chance to run (and we shouldn't crash).
- run_loop.Run();
+ dialog_wait.Run();
EXPECT_FALSE(listener.was_satisfied());
EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt(
browser()->tab_strip_model()->active_index(), 0));
@@ -634,22 +534,22 @@ IN_PROC_BROWSER_TEST_P(ContentScriptApiTest,
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
- DialogHelper dialog_helper(web_contents);
- base::RunLoop run_loop;
- dialog_helper.set_quit_closure(run_loop.QuitClosure());
+ JavaScriptDialogTabHelper* js_helper =
+ JavaScriptDialogTabHelper::FromWebContents(web_contents);
+ base::RunLoop dialog_wait;
+ js_helper->SetDialogShownCallbackForTesting(dialog_wait.QuitClosure());
// Navigate!
ui_test_utils::NavigateToURLWithDisposition(
browser(), embedded_test_server()->GetURL("/empty.html"),
WindowOpenDisposition::CURRENT_TAB, ui_test_utils::BROWSER_TEST_NONE);
- run_loop.Run();
+ dialog_wait.Run();
// The extension will have injected at idle, but it should only inject once.
- EXPECT_EQ(1u, dialog_helper.dialog_count());
- dialog_helper.CloseDialogs();
+ js_helper->HandleJavaScriptDialog(web_contents, true, nullptr);
EXPECT_TRUE(RunAllPending(web_contents));
- EXPECT_EQ(1u, dialog_helper.dialog_count());
+ EXPECT_FALSE(js_helper->IsShowingDialogForTesting());
}
// Bug fix for crbug.com/507461.
« no previous file with comments | « chrome/browser/chromeos/login/signin/oauth2_browsertest.cc ('k') | chrome/browser/mouseleave_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698