OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/download/download_shelf_controller.h" | 5 #import "chrome/browser/ui/cocoa/download/download_shelf_controller.h" |
6 | 6 |
7 #import <Cocoa/Cocoa.h> | 7 #import <Cocoa/Cocoa.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <utility> | 10 #include <utility> |
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 andReturn:wrappedMockDownload.get()] wrappedMockDownload]; | 164 andReturn:wrappedMockDownload.get()] wrappedMockDownload]; |
165 return [item_controller retain]; | 165 return [item_controller retain]; |
166 } | 166 } |
167 | 167 |
168 TEST_VIEW(DownloadShelfControllerTest, [shelf_ view]); | 168 TEST_VIEW(DownloadShelfControllerTest, [shelf_ view]); |
169 | 169 |
170 // Removing the last download from the shelf should cause it to close | 170 // Removing the last download from the shelf should cause it to close |
171 // immediately. | 171 // immediately. |
172 TEST_F(DownloadShelfControllerTest, AddAndRemoveDownload) { | 172 TEST_F(DownloadShelfControllerTest, AddAndRemoveDownload) { |
173 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 173 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
174 [shelf_ showDownloadShelf:YES | 174 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
175 isUserAction:NO]; | |
176 EXPECT_TRUE([shelf_ isVisible]); | 175 EXPECT_TRUE([shelf_ isVisible]); |
177 EXPECT_TRUE([shelf_ bridge]->IsShowing()); | 176 EXPECT_TRUE([shelf_ bridge]->IsShowing()); |
178 [shelf_ add:item]; | 177 [shelf_ add:item]; |
179 [shelf_ remove:item]; | 178 [shelf_ remove:item]; |
180 EXPECT_FALSE([shelf_ isVisible]); | 179 EXPECT_FALSE([shelf_ isVisible]); |
181 EXPECT_FALSE([shelf_ bridge]->IsShowing()); | 180 EXPECT_FALSE([shelf_ bridge]->IsShowing()); |
182 // The shelf should be closed without scheduling an autoClose. | 181 // The shelf should be closed without scheduling an autoClose. |
183 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 182 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
184 } | 183 } |
185 | 184 |
186 // Test that the shelf doesn't close automatically after a removal if there are | 185 // Test that the shelf doesn't close automatically after a removal if there are |
187 // active download items still on the shelf. | 186 // active download items still on the shelf. |
188 TEST_F(DownloadShelfControllerTest, AddAndRemoveWithActiveItem) { | 187 TEST_F(DownloadShelfControllerTest, AddAndRemoveWithActiveItem) { |
189 base::scoped_nsobject<DownloadItemController> item1(CreateItemController()); | 188 base::scoped_nsobject<DownloadItemController> item1(CreateItemController()); |
190 base::scoped_nsobject<DownloadItemController> item2(CreateItemController()); | 189 base::scoped_nsobject<DownloadItemController> item2(CreateItemController()); |
191 [shelf_ showDownloadShelf:YES | 190 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
192 isUserAction:NO]; | |
193 EXPECT_TRUE([shelf_ isVisible]); | 191 EXPECT_TRUE([shelf_ isVisible]); |
194 [shelf_ add:item1.get()]; | 192 [shelf_ add:item1.get()]; |
195 [shelf_ add:item2.get()]; | 193 [shelf_ add:item2.get()]; |
196 [shelf_ remove:item1.get()]; | 194 [shelf_ remove:item1.get()]; |
197 EXPECT_TRUE([shelf_ isVisible]); | 195 EXPECT_TRUE([shelf_ isVisible]); |
198 [shelf_ remove:item2.get()]; | 196 [shelf_ remove:item2.get()]; |
199 EXPECT_FALSE([shelf_ isVisible]); | 197 EXPECT_FALSE([shelf_ isVisible]); |
200 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 198 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
201 } | 199 } |
202 | 200 |
203 // DownloadShelf::Unhide() should cause the shelf to be displayed if there are | 201 // DownloadShelf::Unhide() should cause the shelf to be displayed if there are |
204 // active downloads on it. | 202 // active downloads on it. |
205 TEST_F(DownloadShelfControllerTest, HideAndUnhide) { | 203 TEST_F(DownloadShelfControllerTest, HideAndUnhide) { |
206 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 204 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
207 [shelf_ showDownloadShelf:YES | 205 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
208 isUserAction:NO]; | |
209 EXPECT_TRUE([shelf_ isVisible]); | 206 EXPECT_TRUE([shelf_ isVisible]); |
210 [shelf_ add:item.get()]; | 207 [shelf_ add:item.get()]; |
211 [shelf_ bridge]->Hide(); | 208 [shelf_ bridge]->Hide(); |
212 EXPECT_FALSE([shelf_ isVisible]); | 209 EXPECT_FALSE([shelf_ isVisible]); |
213 [shelf_ bridge]->Unhide(); | 210 [shelf_ bridge]->Unhide(); |
214 EXPECT_TRUE([shelf_ isVisible]); | 211 EXPECT_TRUE([shelf_ isVisible]); |
215 [shelf_ remove:item.get()]; | 212 [shelf_ remove:item.get()]; |
216 EXPECT_FALSE([shelf_ isVisible]); | 213 EXPECT_FALSE([shelf_ isVisible]); |
217 } | 214 } |
218 | 215 |
219 // DownloadShelf::Unhide() shouldn't cause the shelf to be displayed if all | 216 // DownloadShelf::Unhide() shouldn't cause the shelf to be displayed if all |
220 // active downloads are removed from the shelf while the shelf was hidden. | 217 // active downloads are removed from the shelf while the shelf was hidden. |
221 TEST_F(DownloadShelfControllerTest, HideAutocloseUnhide) { | 218 TEST_F(DownloadShelfControllerTest, HideAutocloseUnhide) { |
222 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 219 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
223 [shelf_ showDownloadShelf:YES | 220 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
224 isUserAction:NO]; | |
225 EXPECT_TRUE([shelf_ isVisible]); | 221 EXPECT_TRUE([shelf_ isVisible]); |
226 [shelf_ add:item.get()]; | 222 [shelf_ add:item.get()]; |
227 [shelf_ bridge]->Hide(); | 223 [shelf_ bridge]->Hide(); |
228 EXPECT_FALSE([shelf_ isVisible]); | 224 EXPECT_FALSE([shelf_ isVisible]); |
229 [shelf_ remove:item.get()]; | 225 [shelf_ remove:item.get()]; |
230 EXPECT_FALSE([shelf_ isVisible]); | 226 EXPECT_FALSE([shelf_ isVisible]); |
231 [shelf_ bridge]->Unhide(); | 227 [shelf_ bridge]->Unhide(); |
232 EXPECT_FALSE([shelf_ isVisible]); | 228 EXPECT_FALSE([shelf_ isVisible]); |
233 } | 229 } |
234 | 230 |
235 // Test of autoclosing behavior after opening a download item. The mouse is on | 231 // Test of autoclosing behavior after opening a download item. The mouse is on |
236 // the download shelf at the time the autoclose is scheduled. | 232 // the download shelf at the time the autoclose is scheduled. |
237 TEST_F(DownloadShelfControllerTest, AutoCloseAfterOpenWithMouseInShelf) { | 233 TEST_F(DownloadShelfControllerTest, AutoCloseAfterOpenWithMouseInShelf) { |
238 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 234 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
239 [shelf_ showDownloadShelf:YES | 235 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
240 isUserAction:NO]; | |
241 EXPECT_TRUE([shelf_ isVisible]); | 236 EXPECT_TRUE([shelf_ isVisible]); |
242 [shelf_ add:item.get()]; | 237 [shelf_ add:item.get()]; |
243 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the | 238 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the |
244 // add: call. | 239 // add: call. |
245 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); | 240 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); |
246 shelf_.get()->cancelAutoCloseCount_ = 0; | 241 shelf_.get()->cancelAutoCloseCount_ = 0; |
247 | 242 |
248 // The mouse enters the shelf. | 243 // The mouse enters the shelf. |
249 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; | 244 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; |
250 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 245 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
(...skipping 15 matching lines...) Expand all Loading... |
266 | 261 |
267 // The mouse enters the shelf again. The autoClose should be cancelled. | 262 // The mouse enters the shelf again. The autoClose should be cancelled. |
268 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; | 263 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; |
269 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); | 264 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); |
270 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); | 265 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); |
271 } | 266 } |
272 | 267 |
273 // Test of autoclosing behavior after opening a download item. | 268 // Test of autoclosing behavior after opening a download item. |
274 TEST_F(DownloadShelfControllerTest, AutoCloseAfterOpenWithMouseOffShelf) { | 269 TEST_F(DownloadShelfControllerTest, AutoCloseAfterOpenWithMouseOffShelf) { |
275 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 270 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
276 [shelf_ showDownloadShelf:YES | 271 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
277 isUserAction:NO]; | |
278 EXPECT_TRUE([shelf_ isVisible]); | 272 EXPECT_TRUE([shelf_ isVisible]); |
279 [shelf_ add:item.get()]; | 273 [shelf_ add:item.get()]; |
280 | 274 |
281 // The download is opened. | 275 // The download is opened. |
282 EXPECT_CALL(*[[item wrappedMockDownload] mockDownload], GetOpened()) | 276 EXPECT_CALL(*[[item wrappedMockDownload] mockDownload], GetOpened()) |
283 .WillRepeatedly(Return(true)); | 277 .WillRepeatedly(Return(true)); |
284 [shelf_ downloadWasOpened:item.get()]; | 278 [shelf_ downloadWasOpened:item.get()]; |
285 | 279 |
286 // The shelf should be closed immediately since the mouse is not over the | 280 // The shelf should be closed immediately since the mouse is not over the |
287 // shelf. | 281 // shelf. |
288 EXPECT_FALSE([shelf_ isVisible]); | 282 EXPECT_FALSE([shelf_ isVisible]); |
289 } | 283 } |
290 | 284 |
291 // Test that if the shelf is closed while an autoClose is pending, the pending | 285 // Test that if the shelf is closed while an autoClose is pending, the pending |
292 // autoClose is cancelled. | 286 // autoClose is cancelled. |
293 TEST_F(DownloadShelfControllerTest, CloseWithPendingAutoClose) { | 287 TEST_F(DownloadShelfControllerTest, CloseWithPendingAutoClose) { |
294 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 288 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
295 [shelf_ showDownloadShelf:YES | 289 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
296 isUserAction:NO]; | |
297 EXPECT_TRUE([shelf_ isVisible]); | 290 EXPECT_TRUE([shelf_ isVisible]); |
298 [shelf_ add:item.get()]; | 291 [shelf_ add:item.get()]; |
299 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the | 292 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the |
300 // add: call. | 293 // add: call. |
301 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); | 294 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); |
302 shelf_.get()->cancelAutoCloseCount_ = 0; | 295 shelf_.get()->cancelAutoCloseCount_ = 0; |
303 | 296 |
304 // The mouse enters the shelf. | 297 // The mouse enters the shelf. |
305 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; | 298 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; |
306 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 299 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
(...skipping 19 matching lines...) Expand all Loading... |
326 [shelf_ remove:item]; | 319 [shelf_ remove:item]; |
327 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); | 320 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); |
328 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); | 321 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); |
329 EXPECT_FALSE([shelf_ isVisible]); | 322 EXPECT_FALSE([shelf_ isVisible]); |
330 } | 323 } |
331 | 324 |
332 // That that the shelf cancels a pending autoClose if a new download item is | 325 // That that the shelf cancels a pending autoClose if a new download item is |
333 // added to it. | 326 // added to it. |
334 TEST_F(DownloadShelfControllerTest, AddItemWithPendingAutoClose) { | 327 TEST_F(DownloadShelfControllerTest, AddItemWithPendingAutoClose) { |
335 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 328 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
336 [shelf_ showDownloadShelf:YES | 329 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
337 isUserAction:NO]; | |
338 EXPECT_TRUE([shelf_ isVisible]); | 330 EXPECT_TRUE([shelf_ isVisible]); |
339 [shelf_ add:item.get()]; | 331 [shelf_ add:item.get()]; |
340 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the | 332 // Expect 2 cancelAutoClose calls: From the showDownloadShelf: call and the |
341 // add: call. | 333 // add: call. |
342 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); | 334 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); |
343 shelf_.get()->cancelAutoCloseCount_ = 0; | 335 shelf_.get()->cancelAutoCloseCount_ = 0; |
344 | 336 |
345 // The mouse enters the shelf. | 337 // The mouse enters the shelf. |
346 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; | 338 [shelf_ mouseEntered:cocoa_test_event_utils::EnterEvent()]; |
347 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 339 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
(...skipping 18 matching lines...) Expand all Loading... |
366 base::scoped_nsobject<DownloadItemController> item2(CreateItemController()); | 358 base::scoped_nsobject<DownloadItemController> item2(CreateItemController()); |
367 [shelf_ add:item.get()]; | 359 [shelf_ add:item.get()]; |
368 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); | 360 EXPECT_EQ(1, shelf_.get()->scheduleAutoCloseCount_); |
369 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); | 361 EXPECT_EQ(1, shelf_.get()->cancelAutoCloseCount_); |
370 EXPECT_TRUE([shelf_ isVisible]); | 362 EXPECT_TRUE([shelf_ isVisible]); |
371 } | 363 } |
372 | 364 |
373 // Test that pending autoClose calls are cancelled when exiting. | 365 // Test that pending autoClose calls are cancelled when exiting. |
374 TEST_F(DownloadShelfControllerTest, CancelAutoCloseOnExit) { | 366 TEST_F(DownloadShelfControllerTest, CancelAutoCloseOnExit) { |
375 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); | 367 base::scoped_nsobject<DownloadItemController> item(CreateItemController()); |
376 [shelf_ showDownloadShelf:YES | 368 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
377 isUserAction:NO]; | |
378 EXPECT_TRUE([shelf_ isVisible]); | 369 EXPECT_TRUE([shelf_ isVisible]); |
379 [shelf_ add:item.get()]; | 370 [shelf_ add:item.get()]; |
380 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 371 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
381 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); | 372 EXPECT_EQ(2, shelf_.get()->cancelAutoCloseCount_); |
382 | 373 |
383 [shelf_ browserWillBeDestroyed]; | 374 [shelf_ browserWillBeDestroyed]; |
384 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); | 375 EXPECT_EQ(0, shelf_.get()->scheduleAutoCloseCount_); |
385 EXPECT_EQ(3, shelf_.get()->cancelAutoCloseCount_); | 376 EXPECT_EQ(3, shelf_.get()->cancelAutoCloseCount_); |
386 shelf_.reset(); | 377 shelf_.reset(); |
387 } | 378 } |
388 | 379 |
389 // The view should not be hidden when the shelf is shown. | 380 // The view should not be hidden when the shelf is shown. |
390 // The view should be hidden after the closing animation. | 381 // The view should be hidden after the closing animation. |
391 // Failing flakily on Mac 10.9, see: crbug.com/687447. | 382 // Failing flakily on Mac 10.9, see: crbug.com/687447. |
392 TEST_F(DownloadShelfControllerTest, DISABLED_ViewVisibility) { | 383 TEST_F(DownloadShelfControllerTest, DISABLED_ViewVisibility) { |
393 [shelf_ showDownloadShelf:YES isUserAction:NO]; | 384 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
394 EXPECT_FALSE([[shelf_ view] isHidden]); | 385 EXPECT_FALSE([[shelf_ view] isHidden]); |
395 | 386 |
396 base::RunLoop run_loop; | 387 base::RunLoop run_loop; |
397 base::RunLoop* const run_loop_ptr = &run_loop; | 388 base::RunLoop* const run_loop_ptr = &run_loop; |
398 | 389 |
399 [shelf_ setCloseAnimationHandler:^{ | 390 [shelf_ setCloseAnimationHandler:^{ |
400 run_loop_ptr->Quit(); | 391 run_loop_ptr->Quit(); |
401 }]; | 392 }]; |
402 [shelf_ showDownloadShelf:NO isUserAction:NO]; | 393 [shelf_ showDownloadShelf:NO isUserAction:NO animate:NO]; |
403 run_loop.Run(); | 394 run_loop.Run(); |
404 EXPECT_TRUE([[shelf_ view] isHidden]); | 395 EXPECT_TRUE([[shelf_ view] isHidden]); |
405 | 396 |
406 [shelf_ showDownloadShelf:YES isUserAction:NO]; | 397 [shelf_ showDownloadShelf:YES isUserAction:NO animate:NO]; |
407 EXPECT_FALSE([[shelf_ view] isHidden]); | 398 EXPECT_FALSE([[shelf_ view] isHidden]); |
408 } | 399 } |
409 | 400 |
410 } // namespace | 401 } // namespace |
OLD | NEW |