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

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: Unittest 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..68241bf8bbbcd70bc7ad297f1d4913e49fde5996 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,44 @@
#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"
+#include "chrome/browser/ui/cocoa/media_picker/desktop_media_picker_item.h"
tapted 2016/06/29 12:46:20 nit: import
qiangchen 2016/06/29 18:15:04 Done.
#include "content/public/test/test_browser_thread_bundle.h"
#include "testing/gtest_mac.h"
tapted 2016/06/29 12:46:20 a `using content::DesktopMediaID` here would proba
qiangchen 2016/06/29 18:15:03 Done.
+#define MAKE_WINDOW_ID(id) \
+ content::DesktopMediaID(content::DesktopMediaID::TYPE_WINDOW, id)
tapted 2016/06/29 12:46:20 This is not a good reason to use macros see http:/
qiangchen 2016/06/29 18:15:04 Done.
+#define MAKE_SCREEN_ID(id) \
+ content::DesktopMediaID(content::DesktopMediaID::TYPE_SCREEN, id)
+#define MAKE_TAB_ID(id) \
+ content::DesktopMediaID(content::DesktopMediaID::TYPE_WEB_CONTENTS, id)
+
@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 +62,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,6 +114,14 @@ class DesktopMediaPickerControllerTest : public CocoaTest {
return callback_called_;
}
+ void ChangeType(content::DesktopMediaID::Type sourceType) {
+ NSSegmentedControl* control = [controller_ sourceTypeControl];
+ [control selectSegmentWithTag:sourceType];
+ // [control selectSegmentWithTag] does not trigger handler, so we need to
+ // trigger it manually.
+ [controller_ performSelector:[control action] withObject:control];
tapted 2016/06/29 12:46:19 nit: controller_ -> [control target]
qiangchen 2016/06/29 18:15:04 Done.
+ }
+
protected:
void OnResult(content::DesktopMediaID source) {
EXPECT_FALSE(callback_called_);
@@ -98,12 +140,13 @@ class DesktopMediaPickerControllerTest : public CocoaTest {
TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_SCREEN);
- window_list_->AddSource(0);
- window_list_->AddSource(1);
- window_list_->SetSourceThumbnail(1);
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(0));
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(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]);
@@ -113,31 +156,32 @@ TEST_F(DesktopMediaPickerControllerTest, ShowAndDismiss) {
TEST_F(DesktopMediaPickerControllerTest, ClickShare) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(0));
+ tab_list_->SetSourceThumbnail(0);
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(1));
+ tab_list_->SetSourceThumbnail(1);
- window_list_->AddSource(0);
- window_list_->SetSourceThumbnail(0);
- window_list_->AddSource(1);
- window_list_->SetSourceThumbnail(1);
-
- EXPECT_EQ(2U, [[controller_ items] count]);
+ EXPECT_EQ(2U, [[controller_ tabItems] count]);
EXPECT_FALSE([[controller_ shareButton] isEnabled]);
NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1];
- [[controller_ sourceBrowser] setSelectionIndexes:indexSet
- byExtendingSelection:NO];
+ [[controller_ tabBrowser] selectRowIndexes:indexSet byExtendingSelection:NO];
EXPECT_TRUE([[controller_ shareButton] isEnabled]);
+ [[controller_ audioShareCheckbox] setState:NSOffState];
tapted 2016/06/29 12:46:19 comment about this?
qiangchen 2016/06/29 18:15:04 Done.
[[controller_ shareButton] performClick:nil];
EXPECT_TRUE(WaitForCallback());
- EXPECT_EQ(window_list_->GetSource(1).id, source_reported_);
+ EXPECT_EQ(tab_list_->GetSource(1).id, source_reported_);
}
tapted 2016/06/29 12:46:19 At a minimum, the ClickShare test should test each
qiangchen 2016/06/29 18:15:04 Done.
TEST_F(DesktopMediaPickerControllerTest, ClickCancel) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_WINDOW);
- window_list_->AddSource(0);
+ window_list_->AddSourceByFullMediaID(MAKE_WINDOW_ID(0));
window_list_->SetSourceThumbnail(0);
- window_list_->AddSource(1);
+ window_list_->AddSourceByFullMediaID(MAKE_WINDOW_ID(1));
window_list_->SetSourceThumbnail(1);
tapted 2016/06/29 12:46:20 Something should get selected here - it's not very
qiangchen 2016/06/29 18:15:04 Done.
[[controller_ cancelButton] performClick:nil];
@@ -147,11 +191,12 @@ TEST_F(DesktopMediaPickerControllerTest, ClickCancel) {
TEST_F(DesktopMediaPickerControllerTest, CloseWindow) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_SCREEN);
- window_list_->AddSource(0);
- window_list_->SetSourceThumbnail(0);
- window_list_->AddSource(1);
- window_list_->SetSourceThumbnail(1);
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(0));
+ screen_list_->SetSourceThumbnail(0);
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(1));
+ screen_list_->SetSourceThumbnail(1);
[controller_ close];
EXPECT_TRUE(WaitForCallback());
@@ -160,29 +205,31 @@ TEST_F(DesktopMediaPickerControllerTest, CloseWindow) {
TEST_F(DesktopMediaPickerControllerTest, UpdateThumbnail) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
tapted 2016/06/29 12:46:19 Does the WebContents type have thumbnails or just
qiangchen 2016/06/29 18:15:04 Just icon, but the way we process it is the same a
- window_list_->AddSource(0);
- window_list_->SetSourceThumbnail(0);
- window_list_->AddSource(1);
- window_list_->SetSourceThumbnail(1);
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(0));
+ tab_list_->SetSourceThumbnail(0);
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(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(content::DesktopMediaID::TYPE_WINDOW);
- window_list_->AddSource(0);
+ window_list_->AddSourceByFullMediaID(MAKE_WINDOW_ID(0));
window_list_->SetSourceThumbnail(0);
- window_list_->AddSource(1);
+ window_list_->AddSourceByFullMediaID(MAKE_WINDOW_ID(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,30 +239,32 @@ TEST_F(DesktopMediaPickerControllerTest, UpdateName) {
TEST_F(DesktopMediaPickerControllerTest, RemoveSource) {
[controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_SCREEN);
- window_list_->AddSource(0);
- window_list_->AddSource(1);
- window_list_->AddSource(2);
- window_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(0));
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(1));
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(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(content::DesktopMediaID::TYPE_WEB_CONTENTS);
- window_list_->AddSource(0);
- window_list_->AddSource(1);
- window_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
- NSArray* items = [controller_ items];
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(0));
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(1));
+ tab_list_->SetSourceName(1, base::ASCIIToUTF16("foo"));
+ NSArray* items = [controller_ tabItems];
EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
- window_list_->MoveSource(1, 0);
+ tab_list_->MoveSource(1, 0);
EXPECT_NSEQ(@"foo", [[items objectAtIndex:0] imageTitle]);
- window_list_->MoveSource(0, 1);
+ tab_list_->MoveSource(0, 1);
EXPECT_NSEQ(@"foo", [[items objectAtIndex:1] imageTitle]);
}
tapted 2016/06/29 12:46:19 the other media types have very different codepath
qiangchen 2016/06/29 18:15:04 Done.
@@ -225,35 +274,78 @@ 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));
+ screen_list_->AddSourceByFullMediaID(MAKE_SCREEN_ID(0));
+ window_list_->AddSourceByFullMediaID(MAKE_WINDOW_ID(1));
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(2));
NSButton* checkbox = [controller_ audioShareCheckbox];
- EXPECT_EQ(NO, [checkbox isEnabled]);
-
- NSIndexSet* index_set = [NSIndexSet indexSetWithIndex:0];
- [checkbox setEnabled:YES];
- [[controller_ sourceBrowser] setSelectionIndexes:index_set
- byExtendingSelection:NO];
- EXPECT_EQ(NO, [checkbox isEnabled]);
-
- index_set = [NSIndexSet indexSetWithIndex:1];
- [checkbox setEnabled:YES];
- [[controller_ sourceBrowser] setSelectionIndexes:index_set
- byExtendingSelection:NO];
- EXPECT_EQ(NO, [checkbox isEnabled]);
-
- index_set = [NSIndexSet indexSetWithIndex:2];
- [[controller_ sourceBrowser] setSelectionIndexes:index_set
- byExtendingSelection:NO];
- EXPECT_EQ(YES, [checkbox isEnabled]);
-
- index_set = [NSIndexSet indexSet];
- [[controller_ sourceBrowser] setSelectionIndexes:index_set
- byExtendingSelection:NO];
- EXPECT_EQ(NO, [checkbox isEnabled]);
+ EXPECT_EQ(YES, [checkbox isHidden]);
+
+ [checkbox setHidden:NO];
+ ChangeType(content::DesktopMediaID::TYPE_WINDOW);
+ EXPECT_EQ(YES, [checkbox isHidden]);
+
+ [checkbox setHidden:YES];
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
+ EXPECT_EQ(NO, [checkbox isHidden]);
+
+ [checkbox setHidden:NO];
+ ChangeType(content::DesktopMediaID::TYPE_SCREEN);
+ EXPECT_EQ(YES, [checkbox isHidden]);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, TabShareWithAudio) {
+ [controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
+
+ content::DesktopMediaID origin_id = MAKE_TAB_ID(123);
+ content::DesktopMediaID id_with_audio = origin_id;
+ id_with_audio.audio_share = true;
tapted 2016/06/29 12:46:19 shouldn't this be in an EXPECT_TRUE after WaitForC
qiangchen 2016/06/29 18:15:04 No. The ID is passed by value. So the local variab
tapted 2016/06/30 00:37:01 Ah, gotcha. It looks kinda like audio_share = true
+
+ tab_list_->AddSourceByFullMediaID(origin_id);
+
+ NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:0];
tapted 2016/06/29 12:46:20 indexSet -> index_set (this doesn't lie between @i
qiangchen 2016/06/29 18:15:04 Done.
+ [[controller_ tabBrowser] selectRowIndexes:indexSet byExtendingSelection:NO];
+ EXPECT_TRUE([[controller_ shareButton] isEnabled]);
+
+ [[controller_ shareButton] performClick:nil];
+
+ EXPECT_TRUE(WaitForCallback());
+ EXPECT_EQ(id_with_audio, source_reported_);
+}
+
+TEST_F(DesktopMediaPickerControllerTest, TabBrowserFocusAlgorithm) {
+ [controller_ showWindow:nil];
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(0));
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(1));
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(2));
+ tab_list_->AddSourceByFullMediaID(MAKE_TAB_ID(3));
+
+ NSArray* items = [controller_ tabItems];
+ NSTableView* browser = [controller_ tabBrowser];
+
+ NSIndexSet* indexSet = [NSIndexSet indexSetWithIndex:1];
tapted 2016/06/29 12:46:19 index_set
qiangchen 2016/06/29 18:15:04 Done.
+ [browser selectRowIndexes:indexSet byExtendingSelection:NO];
+
+ // Move source [0, 1, 2, 3]-->[1, 2, 3, 0]
+ tab_list_->MoveSource(0, 3);
+ NSUInteger selectedIndex = [[browser selectedRowIndexes] firstIndex];
tapted 2016/06/29 12:46:19 selected_index
qiangchen 2016/06/29 18:15:04 Done.
+ EXPECT_EQ(1, [[items objectAtIndex:selectedIndex] sourceID].id);
+
+ // Move source [1, 2, 3, 0]-->[3, 1, 2, 0]
+ tab_list_->MoveSource(2, 0);
+ selectedIndex = [[browser selectedRowIndexes] firstIndex];
+ EXPECT_EQ(1, [[items objectAtIndex:selectedIndex] sourceID].id);
+
+ // Remove a source [3, 1, 2, 0]-->[1, 2, 0]
+ tab_list_->RemoveSource(0);
+ selectedIndex = [[browser selectedRowIndexes] firstIndex];
+ EXPECT_EQ(1, [[items objectAtIndex:selectedIndex] sourceID].id);
+
+ // Change source type back and forth, browser should memorize the selection.
+ ChangeType(content::DesktopMediaID::TYPE_SCREEN);
+ ChangeType(content::DesktopMediaID::TYPE_WEB_CONTENTS);
+ selectedIndex = [[browser selectedRowIndexes] firstIndex];
+ EXPECT_EQ(1, [[items objectAtIndex:selectedIndex] sourceID].id);
}

Powered by Google App Engine
This is Rietveld 408576698