| Index: chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
|
| diff --git a/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc b/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
|
| index 98c6a25d4a10e9e3f6d605cb07ec140ece59f6e2..73a3549cfb596bc9e8038b640d99cff8c15138c7 100644
|
| --- a/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
|
| +++ b/chrome/browser/ui/javascript_dialogs/javascript_dialog_browsertest.cc
|
| @@ -111,3 +111,91 @@ IN_PROC_BROWSER_TEST_F(JavaScriptDialogTest,
|
|
|
| // No crash is good news.
|
| }
|
| +
|
| +class JavaScriptCallbackHelper {
|
| + public:
|
| + JavaScriptDialogTabHelper::DialogClosedCallback GetCallback() {
|
| + return base::Bind(&JavaScriptCallbackHelper::DialogClosed,
|
| + base::Unretained(this));
|
| + }
|
| +
|
| + bool last_success() { return last_success_; }
|
| + base::string16 last_input() { return last_input_; }
|
| +
|
| + private:
|
| + void DialogClosed(bool success, const base::string16& user_input) {
|
| + last_success_ = success;
|
| + last_input_ = user_input;
|
| + }
|
| +
|
| + bool last_success_;
|
| + base::string16 last_input_;
|
| +};
|
| +
|
| +// Tests to make sure HandleJavaScriptDialog works correctly.
|
| +IN_PROC_BROWSER_TEST_F(JavaScriptDialogTest, HandleJavaScriptDialog) {
|
| + content::WebContents* tab =
|
| + browser()->tab_strip_model()->GetActiveWebContents();
|
| + JavaScriptDialogTabHelper* js_helper =
|
| + JavaScriptDialogTabHelper::FromWebContents(tab);
|
| +
|
| + JavaScriptCallbackHelper callback_helper;
|
| + JavaScriptDialogTabHelper::DialogClosedCallback callback =
|
| + callback_helper.GetCallback();
|
| +
|
| + // alert
|
| + bool did_suppress = false;
|
| + js_helper->RunJavaScriptDialog(
|
| + tab, GURL(), content::JAVASCRIPT_DIALOG_TYPE_ALERT, base::string16(),
|
| + base::string16(), callback, &did_suppress);
|
| + ASSERT_TRUE(js_helper->IsShowingDialogForTesting());
|
| + js_helper->HandleJavaScriptDialog(tab, true, nullptr);
|
| + ASSERT_FALSE(js_helper->IsShowingDialogForTesting());
|
| + ASSERT_TRUE(callback_helper.last_success());
|
| + ASSERT_EQ(base::string16(), callback_helper.last_input());
|
| +
|
| + // confirm
|
| + for (auto response : {true, false}) {
|
| + js_helper->RunJavaScriptDialog(
|
| + tab, GURL(), content::JAVASCRIPT_DIALOG_TYPE_CONFIRM, base::string16(),
|
| + base::string16(), callback, &did_suppress);
|
| + ASSERT_TRUE(js_helper->IsShowingDialogForTesting());
|
| + js_helper->HandleJavaScriptDialog(tab, response, nullptr);
|
| + ASSERT_FALSE(js_helper->IsShowingDialogForTesting());
|
| + ASSERT_EQ(response, callback_helper.last_success());
|
| + ASSERT_EQ(base::string16(), callback_helper.last_input());
|
| + }
|
| +
|
| + // prompt, cancel
|
| + js_helper->RunJavaScriptDialog(
|
| + tab, GURL(), content::JAVASCRIPT_DIALOG_TYPE_PROMPT, base::string16(),
|
| + base::string16(), callback, &did_suppress);
|
| + ASSERT_TRUE(js_helper->IsShowingDialogForTesting());
|
| + js_helper->HandleJavaScriptDialog(tab, false, nullptr);
|
| + ASSERT_FALSE(js_helper->IsShowingDialogForTesting());
|
| + ASSERT_FALSE(callback_helper.last_success());
|
| + ASSERT_EQ(base::string16(), callback_helper.last_input());
|
| +
|
| + base::string16 value1 = base::ASCIIToUTF16("abc");
|
| + base::string16 value2 = base::ASCIIToUTF16("123");
|
| +
|
| + // prompt, ok + override
|
| + js_helper->RunJavaScriptDialog(
|
| + tab, GURL(), content::JAVASCRIPT_DIALOG_TYPE_PROMPT, base::string16(),
|
| + value1, callback, &did_suppress);
|
| + ASSERT_TRUE(js_helper->IsShowingDialogForTesting());
|
| + js_helper->HandleJavaScriptDialog(tab, true, &value2);
|
| + ASSERT_FALSE(js_helper->IsShowingDialogForTesting());
|
| + ASSERT_TRUE(callback_helper.last_success());
|
| + ASSERT_EQ(value2, callback_helper.last_input());
|
| +
|
| + // prompt, ok + no override
|
| + js_helper->RunJavaScriptDialog(
|
| + tab, GURL(), content::JAVASCRIPT_DIALOG_TYPE_PROMPT, base::string16(),
|
| + value1, callback, &did_suppress);
|
| + ASSERT_TRUE(js_helper->IsShowingDialogForTesting());
|
| + js_helper->HandleJavaScriptDialog(tab, true, nullptr);
|
| + ASSERT_FALSE(js_helper->IsShowingDialogForTesting());
|
| + ASSERT_TRUE(callback_helper.last_success());
|
| + ASSERT_EQ(value1, callback_helper.last_input());
|
| +}
|
|
|