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

Unified Diff: chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc

Issue 13467040: Refactor web contents modal dialog manager tests, add shielding test (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add shielding test Created 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc
diff --git a/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc b/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc
index 9fa84044b0b95ff1d7fcee2ba6fb1e268087e048..25736304d6dde054d57b22482f2eb6dd9cec57f7 100644
--- a/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc
+++ b/chrome/browser/ui/web_contents_modal_dialog_manager_unittest.cc
@@ -2,37 +2,22 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/memory/scoped_ptr.h"
#include "chrome/browser/ui/native_web_contents_modal_dialog_manager.h"
#include "chrome/browser/ui/web_contents_modal_dialog_manager.h"
+#include "chrome/common/render_messages.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "content/public/test/mock_render_process_host.h"
#include "content/public/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
using content::BrowserThread;
-class WebContentsModalDialogManagerTest
- : public ChromeRenderViewHostTestHarness {
+class StubNativeManager : public NativeWebContentsModalDialogManager {
public:
- WebContentsModalDialogManagerTest()
- : ChromeRenderViewHostTestHarness(),
- ui_thread_(BrowserThread::UI, &message_loop_) {
- }
-
- virtual void SetUp() {
- ChromeRenderViewHostTestHarness::SetUp();
- WebContentsModalDialogManager::CreateForWebContents(web_contents());
- }
-
- private:
- content::TestBrowserThread ui_thread_;
-};
-
-class NativeWebContentsModalDialogManagerCloseTest
- : public NativeWebContentsModalDialogManager {
- public:
- NativeWebContentsModalDialogManagerCloseTest(
+ StubNativeManager(
NativeWebContentsModalDialogManagerDelegate* delegate)
- : delegate_(delegate) {}
+ : close_count(0), delegate_(delegate) {}
virtual void ManageDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
}
virtual void ShowDialog(NativeWebContentsModalDialog dialog) OVERRIDE {
@@ -49,31 +34,122 @@ class NativeWebContentsModalDialogManagerCloseTest
}
int close_count;
+
+ private:
NativeWebContentsModalDialogManagerDelegate* delegate_;
};
-TEST_F(WebContentsModalDialogManagerTest, WebContentsModalDialogs) {
- WebContentsModalDialogManager* web_contents_modal_dialog_manager =
- WebContentsModalDialogManager::FromWebContents(web_contents());
- WebContentsModalDialogManager::TestApi test_api(
- web_contents_modal_dialog_manager);
+class WebContentsModalDialogManagerTest
+ : public ChromeRenderViewHostTestHarness {
+ public:
+ WebContentsModalDialogManagerTest()
+ : ChromeRenderViewHostTestHarness(),
+ manager_(NULL),
+ test_api_(NULL),
+ native_manager_(NULL),
+ ui_thread_(BrowserThread::UI, &message_loop_) {
+ }
+
+ virtual void SetUp() {
+ ChromeRenderViewHostTestHarness::SetUp();
+ WebContentsModalDialogManager::CreateForWebContents(web_contents());
- NativeWebContentsModalDialogManagerCloseTest* native_manager =
- new NativeWebContentsModalDialogManagerCloseTest(
- web_contents_modal_dialog_manager);
- native_manager->close_count = 0;
+ manager_ = WebContentsModalDialogManager::FromWebContents(web_contents());
+ test_api_.reset(new WebContentsModalDialogManager::TestApi(manager_));
+ native_manager_ = new StubNativeManager(manager_);
+ test_api_->ResetNativeManager(native_manager_);
+ }
- test_api.ResetNativeManager(native_manager);
+ virtual void TearDown() {
+ manager_ = NULL;
+ test_api_.reset();
+ native_manager_ = NULL;
+
+ ChromeRenderViewHostTestHarness::TearDown();
+ }
+
+ protected:
+ static NativeWebContentsModalDialog GenerateFakeDialog() {
+ static int current_id = 0;
- const int kWindowCount = 4;
- for (int i = 0; i < kWindowCount; i++)
// WebContentsModalDialogManager treats the NativeWebContentsModalDialog as
// an opaque type, so creating fake NativeWebContentsModalDialogs using
// reinterpret_cast is valid.
- web_contents_modal_dialog_manager->ShowDialog(
- reinterpret_cast<NativeWebContentsModalDialog>(i));
- EXPECT_EQ(native_manager->close_count, 0);
+ return reinterpret_cast<NativeWebContentsModalDialog>(current_id++);
+ }
+
+ void ExpectShieldingChanged(bool expected_shielded) {
+ typedef ChromeViewMsg_SetVisuallyDeemphasized MsgType;
+
+ const IPC::Message* message =
+ process()->sink().GetUniqueMessageMatching(MsgType::ID);
+ ASSERT_TRUE(message != NULL);
+ MsgType::Param params;
+ MsgType::Read(message, &params);
+ EXPECT_EQ(expected_shielded, params.a); // shielded
+ }
+
+ void ExpectShieldingUnchanged(bool currently_shielded) {
+ typedef ChromeViewMsg_SetVisuallyDeemphasized MsgType;
+
+ const IPC::Message* message =
+ process()->sink().GetUniqueMessageMatching(MsgType::ID);
+ if (message == NULL)
+ return;
+
+ MsgType::Param params;
+ MsgType::Read(message, &params);
+ EXPECT_EQ(currently_shielded, params.a); // shielded
+ }
+
+ WebContentsModalDialogManager* manager_;
+ scoped_ptr<WebContentsModalDialogManager::TestApi> test_api_;
+ StubNativeManager* native_manager_;
+
+ private:
+ content::TestBrowserThread ui_thread_;
+};
+
+TEST_F(WebContentsModalDialogManagerTest, WebContentsModalDialogs) {
+ const int kWindowCount = 4;
+ for (int i = 0; i < kWindowCount; i++)
+ manager_->ShowDialog(GenerateFakeDialog());
+ EXPECT_EQ(0, native_manager_->close_count);
+
+ test_api_->CloseAllDialogs();
+ EXPECT_EQ(kWindowCount, native_manager_->close_count);
+}
+
+// Validate the shielding activation and deactivation in the presence of
+// multiple shielded dialogs.
+TEST_F(WebContentsModalDialogManagerTest, ShowDialogsWithShield) {
+ IPC::TestSink& sink = process()->sink();
+
+ NativeWebContentsModalDialog shieldedDialog1 = GenerateFakeDialog();
+ manager_->ShowDialogWithShield(shieldedDialog1);
+ ExpectShieldingChanged(true);
+ sink.ClearMessages();
+
+ NativeWebContentsModalDialog unshieldedDialog = GenerateFakeDialog();
+ manager_->ShowDialog(unshieldedDialog);
+ ExpectShieldingUnchanged(true);
+ sink.ClearMessages();
+
+ NativeWebContentsModalDialog shieldedDialog2 = GenerateFakeDialog();
+ manager_->ShowDialogWithShield(shieldedDialog2);
+ ExpectShieldingUnchanged(true);
+ sink.ClearMessages();
+
+ // Close dialogs in an order different from the reverse that they were opened.
+ manager_->WillClose(shieldedDialog1);
+ ExpectShieldingUnchanged(true);
+ sink.ClearMessages();
+
+ manager_->WillClose(shieldedDialog2);
+ ExpectShieldingChanged(false);
+ sink.ClearMessages();
- test_api.CloseAllDialogs();
- EXPECT_EQ(native_manager->close_count, kWindowCount);
+ manager_->WillClose(unshieldedDialog);
+ ExpectShieldingUnchanged(false);
+ sink.ClearMessages();
}
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698