| Index: chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
|
| diff --git a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
|
| index 663d5d9cf1b3efea550be3bc8e51a5b11a121fcc..7b268ed06764960d5ac7c9b5791e91f0d30ac835 100644
|
| --- a/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
|
| +++ b/chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm
|
| @@ -10,19 +10,39 @@
|
| #include "chrome/browser/media/desktop_media_list_observer.h"
|
| #include "chrome/browser/media/fake_desktop_media_list.h"
|
| #import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
|
| +#import "chrome/browser/ui/cocoa/media_picker/desktop_media_picker_item.h"
|
| #include "content/public/test/test_browser_thread_bundle.h"
|
| #include "testing/gtest_mac.h"
|
|
|
| +using content::DesktopMediaID;
|
| +
|
| @interface DesktopMediaPickerController (ExposedForTesting)
|
| -- (IKImageBrowserView*)sourceBrowser;
|
| +- (IKImageBrowserView*)screenBrowser;
|
| +- (IKImageBrowserView*)windowBrowser;
|
| +- (NSTableView*)tabBrowser;
|
| +- (NSSegmentedControl*)sourceTypeControl;
|
| - (NSButton*)shareButton;
|
| - (NSButton*)audioShareCheckbox;
|
| -- (NSArray*)items;
|
| +- (NSArray*)screenItems;
|
| +- (NSArray*)windowItems;
|
| +- (NSArray*)tabItems;
|
| @end
|
|
|
| @implementation DesktopMediaPickerController (ExposedForTesting)
|
| -- (IKImageBrowserView*)sourceBrowser {
|
| - return sourceBrowser_;
|
| +- (IKImageBrowserView*)screenBrowser {
|
| + return screenBrowser_;
|
| +}
|
| +
|
| +- (IKImageBrowserView*)windowBrowser {
|
| + return windowBrowser_;
|
| +}
|
| +
|
| +- (NSTableView*)tabBrowser {
|
| + return tabBrowser_;
|
| +}
|
| +
|
| +- (NSSegmentedControl*)sourceTypeControl {
|
| + return sourceTypeControl_;
|
| }
|
|
|
| - (NSButton*)shareButton {
|
| @@ -37,9 +57,18 @@
|
| return audioShareCheckbox_;
|
| }
|
|
|
| -- (NSArray*)items {
|
| - return items_;
|
| +- (NSArray*)screenItems {
|
| + return screenItems_;
|
| +}
|
| +
|
| +- (NSArray*)windowItems {
|
| + return windowItems_;
|
| }
|
| +
|
| +- (NSArray*)tabItems {
|
| + return tabItems_;
|
| +}
|
| +
|
| @end
|
|
|
| class DesktopMediaPickerControllerTest : public CocoaTest {
|
| @@ -80,8 +109,31 @@ class DesktopMediaPickerControllerTest : public CocoaTest {
|
| return callback_called_;
|
| }
|
|
|
| + void ChangeType(DesktopMediaID::Type sourceType) {
|
| + NSSegmentedControl* control = [controller_ sourceTypeControl];
|
| + [control selectSegmentWithTag:sourceType];
|
| + // [control selectSegmentWithTag] does not trigger handler, so we need to
|
| + // trigger it manually.
|
| + [[control target] performSelector:[control action] withObject:control];
|
| + }
|
| +
|
| + void AddWindow(int id) {
|
| + window_list_->AddSourceByFullMediaID(
|
| + DesktopMediaID(DesktopMediaID::TYPE_WINDOW, id));
|
| + }
|
| +
|
| + void AddScreen(int id) {
|
| + screen_list_->AddSourceByFullMediaID(
|
| + DesktopMediaID(DesktopMediaID::TYPE_SCREEN, id));
|
| + }
|
| +
|
| + void AddTab(int id) {
|
| + tab_list_->AddSourceByFullMediaID(
|
| + DesktopMediaID(DesktopMediaID::TYPE_WEB_CONTENTS, id));
|
| + }
|
| +
|
| protected:
|
| - void OnResult(content::DesktopMediaID source) {
|
| + void OnResult(DesktopMediaID source) {
|
| EXPECT_FALSE(callback_called_);
|
| callback_called_ = true;
|
| source_reported_ = source;
|
| @@ -89,7 +141,7 @@ class DesktopMediaPickerControllerTest : public CocoaTest {
|
|
|
| content::TestBrowserThreadBundle thread_bundle_;
|
| bool callback_called_ = false;
|
| - content::DesktopMediaID source_reported_;
|
| + DesktopMediaID source_reported_;
|
| FakeDesktopMediaList* screen_list_ = nullptr;
|
| FakeDesktopMediaList* window_list_ = nullptr;
|
| FakeDesktopMediaList* tab_list_ = nullptr;
|
| @@ -98,12 +150,13 @@ class DesktopMediaPickerControllerTest : public CocoaTest {
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
|
|
| - window_list_->AddSource(0);
|
| - window_list_->AddSource(1);
|
| - window_list_->SetSourceThumbnail(1);
|
| + AddScreen(0);
|
| + AddScreen(1);
|
| + screen_list_->SetSourceThumbnail(1);
|
|
|
| - NSArray* items = [controller_ items];
|
| + NSArray* items = [controller_ screenItems];
|
| EXPECT_EQ(2U, [items count]);
|
| EXPECT_NSEQ(@"0", [[items objectAtIndex:0] imageTitle]);
|
| EXPECT_EQ(nil, [[items objectAtIndex:0] imageRepresentation]);
|
| @@ -111,19 +164,40 @@ TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
|
| EXPECT_TRUE([[items objectAtIndex:1] imageRepresentation] != nil);
|
| }
|
|
|
| -TEST_F(DesktopMediaPickerControllerTest, ClickShare) {
|
| +TEST_F(DesktopMediaPickerControllerTest, ClickShareScreen) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
| + AddScreen(0);
|
| + screen_list_->SetSourceThumbnail(0);
|
| + AddScreen(1);
|
| + screen_list_->SetSourceThumbnail(1);
|
| +
|
| + EXPECT_EQ(2U, [[controller_ screenItems] count]);
|
| + EXPECT_FALSE([[controller_ shareButton] isEnabled]);
|
| +
|
| + NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:1];
|
| + [[controller_ screenBrowser] setSelectionIndexes:index_set
|
| + byExtendingSelection:NO];
|
| + EXPECT_TRUE([[controller_ shareButton] isEnabled]);
|
| +
|
| + [[controller_ shareButton] performClick:nil];
|
| + EXPECT_TRUE(WaitForCallback());
|
| + EXPECT_EQ(screen_list_->GetSource(1).id, source_reported_);
|
| +}
|
|
|
| - window_list_->AddSource(0);
|
| +TEST_F(DesktopMediaPickerControllerTest, ClickShareWindow) {
|
| + [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WINDOW);
|
| + AddWindow(0);
|
| window_list_->SetSourceThumbnail(0);
|
| - window_list_->AddSource(1);
|
| + AddWindow(1);
|
| window_list_->SetSourceThumbnail(1);
|
|
|
| - EXPECT_EQ(2U, [[controller_ items] count]);
|
| + EXPECT_EQ(2U, [[controller_ windowItems] count]);
|
| EXPECT_FALSE([[controller_ shareButton] isEnabled]);
|
|
|
| - NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1];
|
| - [[controller_ sourceBrowser] setSelectionIndexes:indexSet
|
| + NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:1];
|
| + [[controller_ windowBrowser] setSelectionIndexes:index_set
|
| byExtendingSelection:NO];
|
| EXPECT_TRUE([[controller_ shareButton] isEnabled]);
|
|
|
| @@ -132,57 +206,87 @@ TEST_F(DesktopMediaPickerControllerTest, ClickShare) {
|
| EXPECT_EQ(window_list_->GetSource(1).id, source_reported_);
|
| }
|
|
|
| +TEST_F(DesktopMediaPickerControllerTest, ClickShareTab) {
|
| + [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
| + AddTab(0);
|
| + tab_list_->SetSourceThumbnail(0);
|
| + AddTab(1);
|
| + tab_list_->SetSourceThumbnail(1);
|
| +
|
| + EXPECT_EQ(2U, [[controller_ tabItems] count]);
|
| + EXPECT_FALSE([[controller_ shareButton] isEnabled]);
|
| +
|
| + NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:1];
|
| + [[controller_ tabBrowser] selectRowIndexes:index_set byExtendingSelection:NO];
|
| + EXPECT_TRUE([[controller_ shareButton] isEnabled]);
|
| +
|
| + // Disable audio share here, otherwise the |source_reported_| will be
|
| + // different from original Id, because audio share is by default on.
|
| + [[controller_ audioShareCheckbox] setState:NSOffState];
|
| + [[controller_ shareButton] performClick:nil];
|
| + EXPECT_TRUE(WaitForCallback());
|
| + EXPECT_EQ(tab_list_->GetSource(1).id, source_reported_);
|
| +}
|
| +
|
| TEST_F(DesktopMediaPickerControllerTest, ClickCancel) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WINDOW);
|
|
|
| - window_list_->AddSource(0);
|
| + AddWindow(0);
|
| window_list_->SetSourceThumbnail(0);
|
| - window_list_->AddSource(1);
|
| + AddWindow(1);
|
| window_list_->SetSourceThumbnail(1);
|
|
|
| + NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:1];
|
| + [[controller_ windowBrowser] setSelectionIndexes:index_set
|
| + byExtendingSelection:NO];
|
| [[controller_ cancelButton] performClick:nil];
|
| EXPECT_TRUE(WaitForCallback());
|
| - EXPECT_EQ(content::DesktopMediaID(), source_reported_);
|
| + EXPECT_EQ(DesktopMediaID(), source_reported_);
|
| }
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, CloseWindow) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
|
|
| - window_list_->AddSource(0);
|
| - window_list_->SetSourceThumbnail(0);
|
| - window_list_->AddSource(1);
|
| - window_list_->SetSourceThumbnail(1);
|
| + AddScreen(0);
|
| + screen_list_->SetSourceThumbnail(0);
|
| + AddScreen(1);
|
| + screen_list_->SetSourceThumbnail(1);
|
|
|
| [controller_ close];
|
| EXPECT_TRUE(WaitForCallback());
|
| - EXPECT_EQ(content::DesktopMediaID(), source_reported_);
|
| + EXPECT_EQ(DesktopMediaID(), source_reported_);
|
| }
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, UpdateThumbnail) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
|
|
| - window_list_->AddSource(0);
|
| - window_list_->SetSourceThumbnail(0);
|
| - window_list_->AddSource(1);
|
| - window_list_->SetSourceThumbnail(1);
|
| + AddTab(0);
|
| + tab_list_->SetSourceThumbnail(0);
|
| + AddTab(1);
|
| + tab_list_->SetSourceThumbnail(1);
|
|
|
| - NSArray* items = [controller_ items];
|
| + NSArray* items = [controller_ tabItems];
|
| EXPECT_EQ(2U, [items count]);
|
| NSUInteger version = [[items objectAtIndex:0] imageVersion];
|
|
|
| - window_list_->SetSourceThumbnail(0);
|
| + tab_list_->SetSourceThumbnail(0);
|
| EXPECT_NE(version, [[items objectAtIndex:0] imageVersion]);
|
| }
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, UpdateName) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WINDOW);
|
|
|
| - window_list_->AddSource(0);
|
| + AddWindow(0);
|
| window_list_->SetSourceThumbnail(0);
|
| - window_list_->AddSource(1);
|
| + AddWindow(1);
|
| window_list_->SetSourceThumbnail(1);
|
|
|
| - NSArray* items = [controller_ items];
|
| + NSArray* items = [controller_ windowItems];
|
| EXPECT_EQ(2U, [items count]);
|
| NSUInteger version = [[items objectAtIndex:0] imageVersion];
|
|
|
| @@ -192,24 +296,26 @@ TEST_F(DesktopMediaPickerControllerTest, UpdateName) {
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, RemoveSource) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
|
|
| - window_list_->AddSource(0);
|
| - window_list_->AddSource(1);
|
| - window_list_->AddSource(2);
|
| - window_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
|
| + AddScreen(0);
|
| + AddScreen(1);
|
| + AddScreen(2);
|
| + screen_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
|
|
|
| - NSArray* items = [controller_ items];
|
| + NSArray* items = [controller_ screenItems];
|
| EXPECT_EQ(3U, [items count]);
|
| EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
|
| }
|
|
|
| TEST_F(DesktopMediaPickerControllerTest, MoveSource) {
|
| [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WINDOW);
|
|
|
| - window_list_->AddSource(0);
|
| - window_list_->AddSource(1);
|
| + AddWindow(0);
|
| + AddWindow(1);
|
| window_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
|
| - NSArray* items = [controller_ items];
|
| + NSArray* items = [controller_ windowItems];
|
| EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
|
|
|
| window_list_->MoveSource(1, 0);
|
| @@ -225,35 +331,79 @@ TEST_F(DesktopMediaPickerControllerTest, MoveSource) {
|
| TEST_F(DesktopMediaPickerControllerTest, AudioShareCheckboxState) {
|
| [controller_ showWindow:nil];
|
|
|
| - screen_list_->AddSourceByFullMediaID(
|
| - content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, 0));
|
| - window_list_->AddSourceByFullMediaID(
|
| - content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, 1));
|
| - tab_list_->AddSourceByFullMediaID(
|
| - content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, 2));
|
| + AddScreen(0);
|
| + AddWindow(1);
|
| + AddTab(2);
|
|
|
| NSButton* checkbox = [controller_ audioShareCheckbox];
|
| - EXPECT_EQ(NO, [checkbox isEnabled]);
|
| + EXPECT_EQ(YES, [checkbox isHidden]);
|
| +
|
| + [checkbox setHidden:NO];
|
| + ChangeType(DesktopMediaID::TYPE_WINDOW);
|
| + EXPECT_EQ(YES, [checkbox isHidden]);
|
| +
|
| + [checkbox setHidden:YES];
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
| + EXPECT_EQ(NO, [checkbox isHidden]);
|
| +
|
| + [checkbox setHidden:NO];
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
| + EXPECT_EQ(YES, [checkbox isHidden]);
|
| +}
|
| +
|
| +TEST_F(DesktopMediaPickerControllerTest, TabShareWithAudio) {
|
| + [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
| +
|
| + DesktopMediaID origin_id =
|
| + DesktopMediaID(DesktopMediaID::TYPE_WEB_CONTENTS, 123);
|
| + DesktopMediaID id_with_audio = origin_id;
|
| + id_with_audio.audio_share = true;
|
| +
|
| + tab_list_->AddSourceByFullMediaID(origin_id);
|
|
|
| NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:0];
|
| - [checkbox setEnabled:YES];
|
| - [[controller_ sourceBrowser] setSelectionIndexes:index_set
|
| - byExtendingSelection:NO];
|
| - EXPECT_EQ(NO, [checkbox isEnabled]);
|
| + [[controller_ tabBrowser] selectRowIndexes:index_set byExtendingSelection:NO];
|
| + EXPECT_TRUE([[controller_ shareButton] isEnabled]);
|
|
|
| - index_set = [NSIndexSet indexSetWithIndex:1];
|
| - [checkbox setEnabled:YES];
|
| - [[controller_ sourceBrowser] setSelectionIndexes:index_set
|
| - byExtendingSelection:NO];
|
| - EXPECT_EQ(NO, [checkbox isEnabled]);
|
| + [[controller_ shareButton] performClick:nil];
|
|
|
| - index_set = [NSIndexSet indexSetWithIndex:2];
|
| - [[controller_ sourceBrowser] setSelectionIndexes:index_set
|
| - byExtendingSelection:NO];
|
| - EXPECT_EQ(YES, [checkbox isEnabled]);
|
| + EXPECT_TRUE(WaitForCallback());
|
| + EXPECT_EQ(id_with_audio, source_reported_);
|
| +}
|
|
|
| - index_set = [NSIndexSet indexSet];
|
| - [[controller_ sourceBrowser] setSelectionIndexes:index_set
|
| - byExtendingSelection:NO];
|
| - EXPECT_EQ(NO, [checkbox isEnabled]);
|
| +TEST_F(DesktopMediaPickerControllerTest, TabBrowserFocusAlgorithm) {
|
| + [controller_ showWindow:nil];
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
| + AddTab(0);
|
| + AddTab(1);
|
| + AddTab(2);
|
| + AddTab(3);
|
| +
|
| + NSArray* items = [controller_ tabItems];
|
| + NSTableView* browser = [controller_ tabBrowser];
|
| +
|
| + NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:1];
|
| + [browser selectRowIndexes:index_set byExtendingSelection:NO];
|
| +
|
| + // Move source [0, 1, 2, 3]-->[1, 2, 3, 0]
|
| + tab_list_->MoveSource(0, 3);
|
| + NSUInteger selected_index = [[browser selectedRowIndexes] firstIndex];
|
| + EXPECT_EQ(1, [[items objectAtIndex:selected_index] sourceID].id);
|
| +
|
| + // Move source [1, 2, 3, 0]-->[3, 1, 2, 0]
|
| + tab_list_->MoveSource(2, 0);
|
| + selected_index = [[browser selectedRowIndexes] firstIndex];
|
| + EXPECT_EQ(1, [[items objectAtIndex:selected_index] sourceID].id);
|
| +
|
| + // Remove a source [3, 1, 2, 0]-->[1, 2, 0]
|
| + tab_list_->RemoveSource(0);
|
| + selected_index = [[browser selectedRowIndexes] firstIndex];
|
| + EXPECT_EQ(1, [[items objectAtIndex:selected_index] sourceID].id);
|
| +
|
| + // Change source type back and forth, browser should memorize the selection.
|
| + ChangeType(DesktopMediaID::TYPE_SCREEN);
|
| + ChangeType(DesktopMediaID::TYPE_WEB_CONTENTS);
|
| + selected_index = [[browser selectedRowIndexes] firstIndex];
|
| + EXPECT_EQ(1, [[items objectAtIndex:selected_index] sourceID].id);
|
| }
|
|
|