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

Unified Diff: chrome/browser/ui/cocoa/media_picker/desktop_media_picker_controller_unittest.mm

Issue 2072003002: Desktop Capture Picker Window New UI For Mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 4 years, 6 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
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);
}

Powered by Google App Engine
This is Rietveld 408576698