Index: chrome/browser/ui/views/external_protocol_dialog_browsertest.cc |
diff --git a/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..082dd035ab073af3d5edd62672769d5986631314 |
--- /dev/null |
+++ b/chrome/browser/ui/views/external_protocol_dialog_browsertest.cc |
@@ -0,0 +1,172 @@ |
+// Copyright 2017 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. |
+ |
+#include "base/macros.h" |
+#include "base/memory/ptr_util.h" |
+#include "chrome/browser/ui/browser.h" |
+#include "chrome/browser/ui/external_protocol_dialog_delegate.h" |
+#include "chrome/browser/ui/tabs/tab_strip_model.h" |
+#include "chrome/browser/ui/views/external_protocol_dialog.h" |
+#include "chrome/test/base/in_process_browser_test.h" |
+#include "content/public/browser/render_process_host.h" |
+#include "content/public/browser/render_view_host.h" |
+#include "content/public/browser/web_contents.h" |
+#include "ui/views/controls/message_box_view.h" |
+#include "url/gurl.h" |
+ |
+namespace test { |
+ |
+class ExternalProtocolDialogTestApi { |
+ public: |
+ explicit ExternalProtocolDialogTestApi(ExternalProtocolDialog* dialog) |
+ : dialog_(dialog) {} |
+ |
+ void SetCheckBoxSelected(bool checked) { |
+ dialog_->message_box_view_->SetCheckBoxSelected(checked); |
+ } |
+ |
+ private: |
+ ExternalProtocolDialog* dialog_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ExternalProtocolDialogTestApi); |
+}; |
+ |
+} // namespace test |
+ |
+// Wrapper dialog delegate that sets |called|, |accept|, |cancel|, and |
+// |dont_block| bools based on what is called by the ExternalProtocolDialog. |
+class TestExternalProtocolDialogDelegate |
+ : public ExternalProtocolDialogDelegate { |
+ public: |
+ TestExternalProtocolDialogDelegate(const GURL& url, |
+ int render_process_host_id, |
+ int routing_id, |
+ bool* called, |
+ bool* accept, |
+ bool* cancel, |
+ bool* dont_block) |
+ : ExternalProtocolDialogDelegate(url, render_process_host_id, routing_id), |
+ called_(called), |
+ accept_(accept), |
+ cancel_(cancel), |
+ dont_block_(dont_block) {} |
+ |
+ // ExternalProtocolDialogDelegate: |
+ void DoAccept(const GURL& url, bool dont_block) const override { |
+ // Don't call the base impl because it will actually launch |url|. |
+ *called_ = true; |
+ *accept_ = true; |
+ *cancel_ = false; |
+ *dont_block_ = dont_block; |
+ } |
+ |
+ void DoCancel(const GURL& url, bool dont_block) const override { |
+ // Don't call the base impl because it will actually launch |url|. |
+ *called_ = true; |
+ *accept_ = false; |
+ *cancel_ = true; |
+ *dont_block_ = dont_block; |
+ } |
+ |
+ private: |
+ bool* called_; |
+ bool* accept_; |
+ bool* cancel_; |
+ bool* dont_block_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(TestExternalProtocolDialogDelegate); |
+}; |
+ |
+class ExternalProtocolDialogBrowserTest : public InProcessBrowserTest { |
+ public: |
+ ExternalProtocolDialogBrowserTest() {} |
+ |
+ void ShowDialog() { |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ int render_process_host_id = web_contents->GetRenderProcessHost()->GetID(); |
+ int routing_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
+ dialog_ = new ExternalProtocolDialog( |
+ base::MakeUnique<TestExternalProtocolDialogDelegate>( |
+ GURL("telnet://12345"), render_process_host_id, routing_id, |
+ &called_, &accept_, &cancel_, &dont_block_), |
+ render_process_host_id, routing_id); |
+ } |
+ |
+ void SetChecked(bool checked) { |
+ test::ExternalProtocolDialogTestApi(dialog_).SetCheckBoxSelected(checked); |
+ } |
+ |
+ protected: |
+ ExternalProtocolDialog* dialog_ = nullptr; |
+ bool called_ = false; |
+ bool accept_ = false; |
+ bool cancel_ = false; |
+ bool dont_block_ = false; |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ExternalProtocolDialogBrowserTest); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestAccept) { |
+ ShowDialog(); |
+ EXPECT_TRUE(dialog_->Accept()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_TRUE(accept_); |
+ EXPECT_FALSE(cancel_); |
+ EXPECT_FALSE(dont_block_); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, |
+ TestAcceptWithChecked) { |
+ ShowDialog(); |
+ SetChecked(true); |
+ EXPECT_TRUE(dialog_->Accept()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_TRUE(accept_); |
+ EXPECT_FALSE(cancel_); |
+ EXPECT_TRUE(dont_block_); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestCancel) { |
+ ShowDialog(); |
+ EXPECT_TRUE(dialog_->Cancel()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_FALSE(accept_); |
+ EXPECT_TRUE(cancel_); |
+ EXPECT_FALSE(dont_block_); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, |
+ TestCancelWithChecked) { |
+ ShowDialog(); |
+ SetChecked(true); |
+ EXPECT_TRUE(dialog_->Cancel()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_FALSE(accept_); |
+ EXPECT_TRUE(cancel_); |
+ EXPECT_TRUE(dont_block_); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, TestClose) { |
+ // Closing the dialog should always call DoCancel() with |dont_block| = false. |
+ ShowDialog(); |
+ EXPECT_TRUE(dialog_->Close()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_FALSE(accept_); |
+ EXPECT_TRUE(cancel_); |
+ EXPECT_FALSE(dont_block_); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(ExternalProtocolDialogBrowserTest, |
+ TestCloseWithChecked) { |
+ // Closing the dialog should always call DoCancel() with |dont_block| = false. |
+ ShowDialog(); |
+ SetChecked(true); |
+ EXPECT_TRUE(dialog_->Close()); |
+ EXPECT_TRUE(called_); |
+ EXPECT_FALSE(accept_); |
+ EXPECT_TRUE(cancel_); |
+ EXPECT_FALSE(dont_block_); |
+} |