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

Side by Side Diff: chrome/browser/ui/cocoa/tabs/tab_strip_controller_unittest.mm

Issue 1827083004: UI: Rename MediaState to AlertState (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-tab-indicator
Patch Set: Keep gypi ordered Created 4 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <Cocoa/Cocoa.h> 5 #import <Cocoa/Cocoa.h>
6 6
7 #include "base/bind_helpers.h" 7 #include "base/bind_helpers.h"
8 #include "base/mac/scoped_nsautorelease_pool.h" 8 #include "base/mac/scoped_nsautorelease_pool.h"
9 #include "chrome/browser/media/media_capture_devices_dispatcher.h" 9 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
10 #include "chrome/browser/media/media_stream_capture_indicator.h" 10 #include "chrome/browser/media/media_stream_capture_indicator.h"
(...skipping 12 matching lines...) Expand all
23 #include "content/public/browser/web_contents.h" 23 #include "content/public/browser/web_contents.h"
24 #include "content/public/common/media_stream_request.h" 24 #include "content/public/common/media_stream_request.h"
25 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
26 #import "testing/gtest_mac.h" 26 #import "testing/gtest_mac.h"
27 #include "testing/platform_test.h" 27 #include "testing/platform_test.h"
28 #include "ui/events/test/cocoa_test_event_utils.h" 28 #include "ui/events/test/cocoa_test_event_utils.h"
29 29
30 using content::SiteInstance; 30 using content::SiteInstance;
31 using content::WebContents; 31 using content::WebContents;
32 32
33 @interface TabStripControllerForMediaTesting : TabStripController { 33 @interface TabStripControllerForAlertTesting : TabStripController {
34 // Keeps media state of tabs in browser for testing purpose. 34 // Keeps alert state of tabs in browser for testing purpose.
35 std::map<content::WebContents*, TabMediaState> contentsMediaStateMaps_; 35 std::map<content::WebContents*, TabAlertState> contentsAlertStateMaps_;
36 } 36 }
37 @end 37 @end
38 38
39 @implementation TabStripControllerForMediaTesting 39 @implementation TabStripControllerForAlertTesting
40 // Returns the media state of each tab from the map we are keeping. 40 // Returns the alert state of each tab from the map we are keeping.
41 - (TabMediaState)mediaStateForContents:(content::WebContents*)contents { 41 - (TabAlertState)alertStateForContents:(content::WebContents*)contents {
42 return contentsMediaStateMaps_[contents]; 42 return contentsAlertStateMaps_[contents];
43 } 43 }
44 44
45 - (void)setMediaStateForContents:(content::WebContents*)contents 45 - (void)setAlertStateForContents:(content::WebContents*)contents
46 withMediaState:(TabMediaState)media_state { 46 withAlertState:(TabAlertState)alert_state {
47 contentsMediaStateMaps_[contents] = media_state; 47 contentsAlertStateMaps_[contents] = alert_state;
48 } 48 }
49 49
50 @end 50 @end
51 51
52 @interface TestTabStripControllerDelegate 52 @interface TestTabStripControllerDelegate
53 : NSObject<TabStripControllerDelegate> { 53 : NSObject<TabStripControllerDelegate> {
54 } 54 }
55 @end 55 @end
56 56
57 @implementation TestTabStripControllerDelegate 57 @implementation TestTabStripControllerDelegate
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 150
151 void TearDown() override { 151 void TearDown() override {
152 // The call to CocoaTest::TearDown() deletes the Browser and TabStripModel 152 // The call to CocoaTest::TearDown() deletes the Browser and TabStripModel
153 // objects, so we first have to delete the controller, which refers to them. 153 // objects, so we first have to delete the controller, which refers to them.
154 controller_.reset(); 154 controller_.reset();
155 model_ = NULL; 155 model_ = NULL;
156 CocoaProfileTest::TearDown(); 156 CocoaProfileTest::TearDown();
157 } 157 }
158 158
159 // Return a derived TabStripController. 159 // Return a derived TabStripController.
160 TabStripControllerForMediaTesting* InitTabStripControllerForMediaTesting() { 160 TabStripControllerForAlertTesting* InitTabStripControllerForAlertTesting() {
161 TabStripControllerForMediaTesting* c = 161 TabStripControllerForAlertTesting* c =
162 [[TabStripControllerForMediaTesting alloc] 162 [[TabStripControllerForAlertTesting alloc]
163 initWithView:static_cast<TabStripView*>(tab_strip_.get()) 163 initWithView:static_cast<TabStripView*>(tab_strip_.get())
164 switchView:switch_view_.get() 164 switchView:switch_view_.get()
165 browser:browser() 165 browser:browser()
166 delegate:controller_delegate_.get()]; 166 delegate:controller_delegate_.get()];
167 return c; 167 return c;
168 } 168 }
169 169
170 TabView* CreateTab() { 170 TabView* CreateTab() {
171 SiteInstance* instance = SiteInstance::Create(profile()); 171 SiteInstance* instance = SiteInstance::Create(profile());
172 WebContents* web_contents = WebContents::Create( 172 WebContents* web_contents = WebContents::Create(
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 TEST_F(TabStripControllerTest, CorrectTitleAndToolTipTextFromSetTabTitle) { 274 TEST_F(TabStripControllerTest, CorrectTitleAndToolTipTextFromSetTabTitle) {
275 using content::MediaStreamDevice; 275 using content::MediaStreamDevice;
276 using content::MediaStreamDevices; 276 using content::MediaStreamDevices;
277 using content::MediaStreamUI; 277 using content::MediaStreamUI;
278 278
279 TabView* const tab = CreateTab(); 279 TabView* const tab = CreateTab();
280 TabController* const tabController = [tab controller]; 280 TabController* const tabController = [tab controller];
281 WebContents* const contents = model_->GetActiveWebContents(); 281 WebContents* const contents = model_->GetActiveWebContents();
282 282
283 // Initially, tab title and tooltip text are equivalent. 283 // Initially, tab title and tooltip text are equivalent.
284 EXPECT_EQ(TAB_MEDIA_STATE_NONE, 284 EXPECT_EQ(TabAlertState::NONE,
285 chrome::GetTabMediaStateForContents(contents)); 285 chrome::GetTabAlertStateForContents(contents));
286 [controller_ setTabTitle:tabController withContents:contents]; 286 [controller_ setTabTitle:tabController withContents:contents];
287 NSString* const baseTitle = [tabController title]; 287 NSString* const baseTitle = [tabController title];
288 EXPECT_NSEQ(baseTitle, [tabController toolTip]); 288 EXPECT_NSEQ(baseTitle, [tabController toolTip]);
289 289
290 // Simulate the start of tab video capture. Tab title remains the same, but 290 // Simulate the start of tab video capture. Tab title remains the same, but
291 // the tooltip text should include the following appended: 1) a line break; 291 // the tooltip text should include the following appended: 1) a line break;
292 // 2) a non-empty string with a localized description of the media state. 292 // 2) a non-empty string with a localized description of the alert state.
293 scoped_refptr<MediaStreamCaptureIndicator> indicator = 293 scoped_refptr<MediaStreamCaptureIndicator> indicator =
294 MediaCaptureDevicesDispatcher::GetInstance()-> 294 MediaCaptureDevicesDispatcher::GetInstance()->
295 GetMediaStreamCaptureIndicator(); 295 GetMediaStreamCaptureIndicator();
296 const MediaStreamDevice dummyVideoCaptureDevice( 296 const MediaStreamDevice dummyVideoCaptureDevice(
297 content::MEDIA_TAB_VIDEO_CAPTURE, "dummy_id", "dummy name"); 297 content::MEDIA_TAB_VIDEO_CAPTURE, "dummy_id", "dummy name");
298 scoped_ptr<MediaStreamUI> streamUi(indicator->RegisterMediaStream( 298 scoped_ptr<MediaStreamUI> streamUi(indicator->RegisterMediaStream(
299 contents, MediaStreamDevices(1, dummyVideoCaptureDevice))); 299 contents, MediaStreamDevices(1, dummyVideoCaptureDevice)));
300 streamUi->OnStarted(base::Bind(&base::DoNothing)); 300 streamUi->OnStarted(base::Bind(&base::DoNothing));
301 EXPECT_EQ(TAB_MEDIA_STATE_CAPTURING, 301 EXPECT_EQ(TabAlertState::TAB_CAPTURING,
302 chrome::GetTabMediaStateForContents(contents)); 302 chrome::GetTabAlertStateForContents(contents));
303 [controller_ setTabTitle:tabController withContents:contents]; 303 [controller_ setTabTitle:tabController withContents:contents];
304 EXPECT_NSEQ(baseTitle, [tabController title]); 304 EXPECT_NSEQ(baseTitle, [tabController title]);
305 NSString* const toolTipText = [tabController toolTip]; 305 NSString* const toolTipText = [tabController toolTip];
306 if ([baseTitle length] > 0) { 306 if ([baseTitle length] > 0) {
307 EXPECT_TRUE(NSEqualRanges(NSMakeRange(0, [baseTitle length]), 307 EXPECT_TRUE(NSEqualRanges(NSMakeRange(0, [baseTitle length]),
308 [toolTipText rangeOfString:baseTitle])); 308 [toolTipText rangeOfString:baseTitle]));
309 EXPECT_TRUE(NSEqualRanges(NSMakeRange([baseTitle length], 1), 309 EXPECT_TRUE(NSEqualRanges(NSMakeRange([baseTitle length], 1),
310 [toolTipText rangeOfString:@"\n"])); 310 [toolTipText rangeOfString:@"\n"]));
311 EXPECT_LT([baseTitle length] + 1, [toolTipText length]); 311 EXPECT_LT([baseTitle length] + 1, [toolTipText length]);
312 } else { 312 } else {
313 EXPECT_LT(0u, [toolTipText length]); 313 EXPECT_LT(0u, [toolTipText length]);
314 } 314 }
315 315
316 // Simulate the end of tab video capture. Tab title and tooltip should become 316 // Simulate the end of tab video capture. Tab title and tooltip should become
317 // equivalent again. 317 // equivalent again.
318 streamUi.reset(); 318 streamUi.reset();
319 EXPECT_EQ(TAB_MEDIA_STATE_NONE, 319 EXPECT_EQ(TabAlertState::NONE,
320 chrome::GetTabMediaStateForContents(contents)); 320 chrome::GetTabAlertStateForContents(contents));
321 [controller_ setTabTitle:tabController withContents:contents]; 321 [controller_ setTabTitle:tabController withContents:contents];
322 EXPECT_NSEQ(baseTitle, [tabController title]); 322 EXPECT_NSEQ(baseTitle, [tabController title]);
323 EXPECT_NSEQ(baseTitle, [tabController toolTip]); 323 EXPECT_NSEQ(baseTitle, [tabController toolTip]);
324 } 324 }
325 325
326 TEST_F(TabStripControllerTest, TabCloseDuringDrag) { 326 TEST_F(TabStripControllerTest, TabCloseDuringDrag) {
327 TabController* tab; 327 TabController* tab;
328 // The TabController gets autoreleased when created, but is owned by the 328 // The TabController gets autoreleased when created, but is owned by the
329 // tab strip model. Use a ScopedNSAutoreleasePool to get a truly weak ref 329 // tab strip model. Use a ScopedNSAutoreleasePool to get a truly weak ref
330 // to it to test that -maybeStartDrag:forTab: can handle that properly. 330 // to it to test that -maybeStartDrag:forTab: can handle that properly.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 EXPECT_EQ(tab2, value); 375 EXPECT_EQ(tab2, value);
376 376
377 model_->ActivateTabAt(0, false); 377 model_->ActivateTabAt(0, false);
378 EXPECT_TRUE([tab1 controller].selected); 378 EXPECT_TRUE([tab1 controller].selected);
379 EXPECT_FALSE([tab2 controller].selected); 379 EXPECT_FALSE([tab2 controller].selected);
380 value = 380 value =
381 [tab_strip_ accessibilityAttributeValue:NSAccessibilityValueAttribute]; 381 [tab_strip_ accessibilityAttributeValue:NSAccessibilityValueAttribute];
382 EXPECT_EQ(tab1, value); 382 EXPECT_EQ(tab1, value);
383 } 383 }
384 384
385 TEST_F(TabStripControllerTest, CorrectWindowFromUpdateWindowMediaState) { 385 TEST_F(TabStripControllerTest, CorrectWindowFromUpdateWindowAlertState) {
386 controller_.reset(InitTabStripControllerForMediaTesting()); 386 controller_.reset(InitTabStripControllerForAlertTesting());
387 NSWindow* window = [tab_strip_ window]; 387 NSWindow* window = [tab_strip_ window];
388 BrowserWindowController* window_controller = 388 BrowserWindowController* window_controller =
389 [BrowserWindowController browserWindowControllerForWindow:window]; 389 [BrowserWindowController browserWindowControllerForWindow:window];
390 TabStripControllerForMediaTesting* tabStripControllerForTesting = 390 TabStripControllerForAlertTesting* tabStripControllerForTesting =
391 static_cast<TabStripControllerForMediaTesting*>(controller_); 391 static_cast<TabStripControllerForAlertTesting*>(controller_);
392 392
393 TabView* const tab1 = CreateTab(); 393 TabView* const tab1 = CreateTab();
394 TabView* const tab2 = CreateTab(); 394 TabView* const tab2 = CreateTab();
395 395
396 // tab2 should be the selected one. 396 // tab2 should be the selected one.
397 EXPECT_FALSE([tab1 controller].selected); 397 EXPECT_FALSE([tab1 controller].selected);
398 EXPECT_TRUE([tab2 controller].selected); 398 EXPECT_TRUE([tab2 controller].selected);
399 WebContents* const contents_at_tab1 = model_->GetActiveWebContents(); 399 WebContents* const contents_at_tab1 = model_->GetActiveWebContents();
400 400
401 [tabStripControllerForTesting 401 [tabStripControllerForTesting
402 setMediaStateForContents:contents_at_tab1 402 setAlertStateForContents:contents_at_tab1
403 withMediaState:TAB_MEDIA_STATE_AUDIO_PLAYING]; 403 withAlertState:TabAlertState::AUDIO_PLAYING];
404 // Make sure the overriden from base controller correctly handles media 404 // Make sure the overriden from base controller correctly handles alert
405 // status of tabs. 405 // status of tabs.
406 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, 406 EXPECT_EQ(TabAlertState::AUDIO_PLAYING,
407 [controller_ mediaStateForContents:contents_at_tab1]); 407 [controller_ alertStateForContents:contents_at_tab1]);
408 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_AUDIO_PLAYING 408 [controller_ updateWindowAlertState:TabAlertState::AUDIO_PLAYING
409 forWebContents:contents_at_tab1]; 409 forWebContents:contents_at_tab1];
410 // Because we have one tab playing, and the other one's media state is none, 410 // Because we have one tab playing, and the other one's alert state is none,
411 // window media state should be AUDIO_PLAYING. 411 // window alert state should be AUDIO_PLAYING.
412 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, [window_controller mediaState]); 412 EXPECT_EQ(TabAlertState::AUDIO_PLAYING, [window_controller alertState]);
413 413
414 model_->ActivateTabAt(0, false); 414 model_->ActivateTabAt(0, false);
415 // tab1 should be the selected one now. 415 // tab1 should be the selected one now.
416 EXPECT_TRUE([tab1 controller].selected); 416 EXPECT_TRUE([tab1 controller].selected);
417 EXPECT_FALSE([tab2 controller].selected); 417 EXPECT_FALSE([tab2 controller].selected);
418 WebContents* const contents_at_tab0 = model_->GetActiveWebContents(); 418 WebContents* const contents_at_tab0 = model_->GetActiveWebContents();
419 419
420 [tabStripControllerForTesting 420 [tabStripControllerForTesting
421 setMediaStateForContents:contents_at_tab0 421 setAlertStateForContents:contents_at_tab0
422 withMediaState:TAB_MEDIA_STATE_AUDIO_MUTING]; 422 withAlertState:TabAlertState::AUDIO_MUTING];
423 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_AUDIO_MUTING 423 [controller_ updateWindowAlertState:TabAlertState::AUDIO_MUTING
424 forWebContents:contents_at_tab0]; 424 forWebContents:contents_at_tab0];
425 // We have two tabs. One is playing and the other one is muting. The window 425 // We have two tabs. One is playing and the other one is muting. The window
426 // media state should be still AUDIO_PLAYING. 426 // alert state should be still AUDIO_PLAYING.
427 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, [window_controller mediaState]); 427 EXPECT_EQ(TabAlertState::AUDIO_PLAYING, [window_controller alertState]);
428 428
429 [tabStripControllerForTesting 429 [tabStripControllerForTesting
430 setMediaStateForContents:contents_at_tab1 430 setAlertStateForContents:contents_at_tab1
431 withMediaState:TAB_MEDIA_STATE_AUDIO_MUTING]; 431 withAlertState:TabAlertState::AUDIO_MUTING];
432 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_AUDIO_MUTING 432 [controller_ updateWindowAlertState:TabAlertState::AUDIO_MUTING
433 forWebContents:contents_at_tab1]; 433 forWebContents:contents_at_tab1];
434 // Now both tabs are muting, the window media state should be AUDIO_MUTING. 434 // Now both tabs are muting, the window alert state should be AUDIO_MUTING.
435 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_MUTING, [window_controller mediaState]); 435 EXPECT_EQ(TabAlertState::AUDIO_MUTING, [window_controller alertState]);
436 436
437 [tabStripControllerForTesting 437 [tabStripControllerForTesting
438 setMediaStateForContents:contents_at_tab0 438 setAlertStateForContents:contents_at_tab0
439 withMediaState:TAB_MEDIA_STATE_AUDIO_PLAYING]; 439 withAlertState:TabAlertState::AUDIO_PLAYING];
440 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_AUDIO_PLAYING 440 [controller_ updateWindowAlertState:TabAlertState::AUDIO_PLAYING
441 forWebContents:contents_at_tab0]; 441 forWebContents:contents_at_tab0];
442 // Among those tabs which were muting, one is started playing, the window 442 // Among those tabs which were muting, one is started playing, the window
443 // media state should be playing. 443 // alert state should be playing.
444 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_PLAYING, [window_controller mediaState]); 444 EXPECT_EQ(TabAlertState::AUDIO_PLAYING, [window_controller alertState]);
445 445
446 // Mute it again for further testing. 446 // Mute it again for further testing.
447 [tabStripControllerForTesting 447 [tabStripControllerForTesting
448 setMediaStateForContents:contents_at_tab0 448 setAlertStateForContents:contents_at_tab0
449 withMediaState:TAB_MEDIA_STATE_AUDIO_MUTING]; 449 withAlertState:TabAlertState::AUDIO_MUTING];
450 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_AUDIO_MUTING 450 [controller_ updateWindowAlertState:TabAlertState::AUDIO_MUTING
451 forWebContents:contents_at_tab0]; 451 forWebContents:contents_at_tab0];
452 452
453 [tabStripControllerForTesting setMediaStateForContents:contents_at_tab1 453 [tabStripControllerForTesting setAlertStateForContents:contents_at_tab1
454 withMediaState:TAB_MEDIA_STATE_NONE]; 454 withAlertState:TabAlertState::NONE];
455 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_NONE 455 [controller_ updateWindowAlertState:TabAlertState::NONE
456 forWebContents:contents_at_tab1]; 456 forWebContents:contents_at_tab1];
457 // One of the tabs is muting, the other one is none. So window media state 457 // One of the tabs is muting, the other one is none. So window alert state
458 // should be MUTING. 458 // should be MUTING.
459 EXPECT_EQ(TAB_MEDIA_STATE_AUDIO_MUTING, [window_controller mediaState]); 459 EXPECT_EQ(TabAlertState::AUDIO_MUTING, [window_controller alertState]);
460 460
461 [tabStripControllerForTesting setMediaStateForContents:contents_at_tab0 461 [tabStripControllerForTesting setAlertStateForContents:contents_at_tab0
462 withMediaState:TAB_MEDIA_STATE_NONE]; 462 withAlertState:TabAlertState::NONE];
463 [controller_ updateWindowMediaState:TAB_MEDIA_STATE_NONE 463 [controller_ updateWindowAlertState:TabAlertState::NONE
464 forWebContents:contents_at_tab0]; 464 forWebContents:contents_at_tab0];
465 // Neither of tabs playing nor muting, so the window media state should be 465 // Neither of tabs playing nor muting, so the window alert state should be
466 // NONE. 466 // NONE.
467 EXPECT_EQ(TAB_MEDIA_STATE_NONE, [window_controller mediaState]); 467 EXPECT_EQ(TabAlertState::NONE, [window_controller alertState]);
468 } 468 }
469 469
470 } // namespace 470 } // namespace
OLDNEW
« no previous file with comments | « chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm ('k') | chrome/browser/ui/cocoa/tabs/tab_view.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698