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

Side by Side Diff: chrome/browser/ui/webui/media_router/media_router_dialog_controller_unittest.cc

Issue 1228863005: [MediaRouter] The minimal change to make everything build on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed the include for MediaRouterDialogControllerImpl Created 5 years, 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/browser_commands.h"
6 #include "chrome/browser/ui/browser_finder.h"
7 #include "chrome/browser/ui/tabs/tab_strip_model.h"
8 #include "chrome/browser/ui/webui/media_router/media_router_dialog_controller.h"
9 #include "chrome/browser/ui/webui/media_router/media_router_test.h"
10 #include "chrome/browser/ui/webui/media_router/media_router_ui.h"
11 #include "content/public/test/browser_test_utils.h"
12
13 using content::WebContents;
14
15 namespace media_router {
16
17 class MediaRouterDialogControllerTest : public MediaRouterTest {
18 public:
19 MediaRouterDialogControllerTest() {}
20 ~MediaRouterDialogControllerTest() override {}
21 void OpenMediaRouterDialog();
22
23 protected:
24 WebContents* initiator_ = nullptr;
25 MediaRouterDialogController* dialog_controller_ = nullptr;
26 WebContents* media_router_dialog_ = nullptr;
27
28 private:
29 DISALLOW_COPY_AND_ASSIGN(MediaRouterDialogControllerTest);
30 };
31
32 void MediaRouterDialogControllerTest::OpenMediaRouterDialog() {
33 // Start with one window with one tab.
34 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
35 EXPECT_EQ(0, browser()->tab_strip_model()->count());
36 chrome::NewTab(browser());
37 EXPECT_EQ(1, browser()->tab_strip_model()->count());
38
39 // Create a reference to initiator contents.
40 initiator_ = browser()->tab_strip_model()->GetActiveWebContents();
41
42 MediaRouterDialogController::CreateForWebContents(initiator_);
43 dialog_controller_ = MediaRouterDialogController::FromWebContents(initiator_);
44 ASSERT_TRUE(dialog_controller_);
45
46 // Get the media router dialog for the initiator.
47 media_router_dialog_ = dialog_controller_->ShowMediaRouterDialog();
48 ASSERT_TRUE(media_router_dialog_);
49
50 // New media router dialog is a constrained window, so the number of
51 // tabs is still 1.
52 EXPECT_EQ(1, browser()->tab_strip_model()->count());
53 EXPECT_NE(initiator_, media_router_dialog_);
54 EXPECT_EQ(media_router_dialog_, dialog_controller_->GetMediaRouterDialog());
55 }
56
57 // Create/Get a media router dialog for initiator.
58 TEST_F(MediaRouterDialogControllerTest, ShowMediaRouterDialog) {
59 OpenMediaRouterDialog();
60
61 // Show media router dialog for the same initiator again.
62 WebContents* same_media_router_dialog =
63 dialog_controller_->ShowMediaRouterDialog();
64
65 // Tab count remains the same.
66 EXPECT_EQ(1, browser()->tab_strip_model()->count());
67
68 // Media router dialog already exists. Calling |ShowMediaRouterDialog| again
69 // should not have created a new media router dialog.
70 EXPECT_EQ(media_router_dialog_, same_media_router_dialog);
71 }
72
73 // Tests multiple media router dialogs exist in the same browser for different
74 // initiators. If a dialog already exists for an initiator, that initiator
75 // gets focused.
76 TEST_F(MediaRouterDialogControllerTest, MultipleMediaRouterDialogs) {
77 // Let's start with one window and two tabs.
78 EXPECT_EQ(1u, chrome::GetTotalBrowserCount());
79 TabStripModel* tab_strip_model = browser()->tab_strip_model();
80 ASSERT_TRUE(tab_strip_model);
81
82 EXPECT_EQ(0, tab_strip_model->count());
83
84 // Create some new initiators.
85 chrome::NewTab(browser());
86 WebContents* web_contents_1 = tab_strip_model->GetActiveWebContents();
87 ASSERT_TRUE(web_contents_1);
88
89 chrome::NewTab(browser());
90 WebContents* web_contents_2 = tab_strip_model->GetActiveWebContents();
91 ASSERT_TRUE(web_contents_2);
92 EXPECT_EQ(2, tab_strip_model->count());
93
94
95 // Create media router dialog for |web_contents_1|.
96 MediaRouterDialogController::CreateForWebContents(web_contents_1);
97 MediaRouterDialogController* dialog_controller_1 =
98 MediaRouterDialogController::FromWebContents(web_contents_1);
99 ASSERT_TRUE(dialog_controller_1);
100
101 WebContents* media_router_dialog_1 =
102 dialog_controller_1->ShowMediaRouterDialog();
103 ASSERT_TRUE(media_router_dialog_1);
104
105 EXPECT_NE(web_contents_1, media_router_dialog_1);
106 EXPECT_EQ(2, tab_strip_model->count());
107
108 // Create media router dialog for |web_contents_2|.
109 MediaRouterDialogController::CreateForWebContents(web_contents_2);
110 MediaRouterDialogController* dialog_controller_2 =
111 MediaRouterDialogController::FromWebContents(web_contents_2);
112 ASSERT_TRUE(dialog_controller_2);
113
114 WebContents* media_router_dialog_2 =
115 dialog_controller_2->ShowMediaRouterDialog();
116 ASSERT_TRUE(media_router_dialog_2);
117
118 EXPECT_NE(web_contents_2, media_router_dialog_2);
119 EXPECT_NE(media_router_dialog_1, media_router_dialog_2);
120
121 // 2 initiators and 2 dialogs exist in the same browser. The dialogs are
122 // constrained in their respective initiators.
123 EXPECT_EQ(2, tab_strip_model->count());
124
125 int tab_1_index = tab_strip_model->GetIndexOfWebContents(web_contents_1);
126 int tab_2_index = tab_strip_model->GetIndexOfWebContents(web_contents_2);
127 int media_router_dialog_1_index =
128 tab_strip_model->GetIndexOfWebContents(media_router_dialog_1);
129 int media_router_dialog_2_index =
130 tab_strip_model->GetIndexOfWebContents(media_router_dialog_2);
131
132 // Constrained dialogs are not in the TabStripModel.
133 EXPECT_EQ(-1, media_router_dialog_1_index);
134 EXPECT_EQ(-1, media_router_dialog_2_index);
135
136 // Since |media_router_dialog_2_index| was the most recently created dialog,
137 // its initiator should have focus.
138 EXPECT_EQ(tab_2_index, tab_strip_model->active_index());
139
140 // When we get the media router dialog for |web_contents_1|,
141 // |media_router_dialog_1| is activated and focused.
142 dialog_controller_1->ShowMediaRouterDialog();
143 EXPECT_EQ(tab_1_index, tab_strip_model->active_index());
144
145 // When we get the media router dialog for |web_contents_2|,
146 // |media_router_dialog_2| is activated and focused.
147 dialog_controller_2->ShowMediaRouterDialog();
148 EXPECT_EQ(tab_2_index, tab_strip_model->active_index());
149 }
150
151 TEST_F(MediaRouterDialogControllerTest, CloseDialogFromWebUI) {
152 OpenMediaRouterDialog();
153
154 // Close the dialog.
155 content::WebContentsDestroyedWatcher watcher(media_router_dialog_);
156
157 content::WebUI* web_ui = media_router_dialog_->GetWebUI();
158 ASSERT_TRUE(web_ui);
159 MediaRouterUI* media_router_ui =
160 static_cast<MediaRouterUI*>(web_ui->GetController());
161 ASSERT_TRUE(media_router_ui);
162 media_router_ui->Close();
163
164 // Blocks until the media router dialog WebContents has been destroyed.
165 watcher.Wait();
166
167 // Still 1 tab in the browser.
168 EXPECT_EQ(1, browser()->tab_strip_model()->count());
169
170 // Entry has been removed.
171 EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
172
173 // Show the media router dialog again, creating a new one.
174 WebContents* media_router_dialog_2 =
175 dialog_controller_->ShowMediaRouterDialog();
176
177 // Still 1 tab in the browser.
178 EXPECT_EQ(1, browser()->tab_strip_model()->count());
179
180 EXPECT_EQ(media_router_dialog_2, dialog_controller_->GetMediaRouterDialog());
181 }
182
183 TEST_F(MediaRouterDialogControllerTest, CloseDialogFromDialogController) {
184 OpenMediaRouterDialog();
185
186 // Close the dialog.
187 content::WebContentsDestroyedWatcher watcher(media_router_dialog_);
188
189 dialog_controller_->CloseMediaRouterDialog();
190
191 // Blocks until the media router dialog WebContents has been destroyed.
192 watcher.Wait();
193
194 // Still 1 tab in the browser.
195 EXPECT_EQ(1, browser()->tab_strip_model()->count());
196
197 // Entry has been removed.
198 EXPECT_FALSE(dialog_controller_->GetMediaRouterDialog());
199 }
200
201 TEST_F(MediaRouterDialogControllerTest, CloseInitiator) {
202 OpenMediaRouterDialog();
203
204 // Close the initiator. This should also close the dialog WebContents.
205 content::WebContentsDestroyedWatcher initiator_watcher(initiator_);
206 content::WebContentsDestroyedWatcher dialog_watcher(media_router_dialog_);
207
208 int initiator_index = browser()->tab_strip_model()
209 ->GetIndexOfWebContents(initiator_);
210 EXPECT_NE(-1, initiator_index);
211 EXPECT_TRUE(browser()->tab_strip_model()->CloseWebContentsAt(
212 initiator_index, TabStripModel::CLOSE_NONE));
213
214 // Blocks until the initiator WebContents has been destroyed.
215 initiator_watcher.Wait();
216 dialog_watcher.Wait();
217
218 // No tabs in the browser.
219 EXPECT_EQ(0, browser()->tab_strip_model()->count());
220
221 // The dialog controller is deleted when the WebContents is closed/destroyed.
222 }
223
224 } // namespace media_router
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698