Commit 2716e8e3 authored by gyzhou's avatar gyzhou Committed by Commit bot

This CL adds CombinedDesktopMediaList class and its associated unit tests. It...

This CL adds CombinedDesktopMediaList class and its associated unit tests. It intends to support chrome tab capture for JavaScript API chooseDesktopMedia().

Design document is in
https://docs.google.com/document/d/1zZOiayDzVkuIQ3twEdiE6S-LTXz9fWOGKjbMIsLTcAk/edit#heading=h.cetuprbl19fv

BUG=557222

Review URL: https://codereview.chromium.org/1622733002

Cr-Commit-Position: refs/heads/master@{#372228}
parent 5911df8c
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/media/combined_desktop_media_list.h"
CombinedDesktopMediaList::CombinedDesktopMediaList(
std::vector<scoped_ptr<DesktopMediaList>>& media_lists)
: media_lists_(std::move(media_lists)) {
DCHECK(media_lists_.size());
}
CombinedDesktopMediaList::~CombinedDesktopMediaList() {}
void CombinedDesktopMediaList::SetUpdatePeriod(base::TimeDelta period) {
for (const auto& list : media_lists_)
list->SetUpdatePeriod(period);
}
void CombinedDesktopMediaList::SetThumbnailSize(
const gfx::Size& thumbnail_size) {
for (const auto& list : media_lists_)
list->SetThumbnailSize(thumbnail_size);
}
void CombinedDesktopMediaList::SetViewDialogWindowId(
content::DesktopMediaID dialog_id) {
for (const auto& list : media_lists_)
list->SetViewDialogWindowId(dialog_id);
}
void CombinedDesktopMediaList::StartUpdating(
DesktopMediaListObserver* observer) {
observer_ = observer;
for (const auto& list : media_lists_)
list->StartUpdating(this);
}
int CombinedDesktopMediaList::GetSourceCount() const {
int count = 0;
for (const auto& list : media_lists_)
count += list->GetSourceCount();
return count;
}
const DesktopMediaList::Source& CombinedDesktopMediaList::GetSource(
int index) const {
for (const auto& list : media_lists_) {
int count = list->GetSourceCount();
if (index < count)
return list->GetSource(index);
index -= count;
}
NOTREACHED();
return media_lists_[0]->GetSource(0);
}
void CombinedDesktopMediaList::OnSourceAdded(DesktopMediaList* list,
int index) {
int count = 0;
for (const auto& cur_list : media_lists_) {
if (cur_list.get() == list) {
observer_->OnSourceAdded(this, count + index);
return;
}
count += cur_list->GetSourceCount();
}
NOTREACHED();
}
void CombinedDesktopMediaList::OnSourceRemoved(DesktopMediaList* list,
int index) {
int count = 0;
for (const auto& cur_list : media_lists_) {
if (cur_list.get() == list) {
observer_->OnSourceRemoved(this, count + index);
return;
}
count += cur_list->GetSourceCount();
}
NOTREACHED();
}
void CombinedDesktopMediaList::OnSourceMoved(DesktopMediaList* list,
int old_index,
int new_index) {
int count = 0;
for (const auto& cur_list : media_lists_) {
if (cur_list.get() == list) {
observer_->OnSourceMoved(this, count + old_index, count + new_index);
return;
}
count += cur_list->GetSourceCount();
}
NOTREACHED();
}
void CombinedDesktopMediaList::OnSourceNameChanged(DesktopMediaList* list,
int index) {
int count = 0;
for (const auto& cur_list : media_lists_) {
if (cur_list.get() == list) {
observer_->OnSourceNameChanged(this, count + index);
return;
}
count += cur_list->GetSourceCount();
}
NOTREACHED();
}
void CombinedDesktopMediaList::OnSourceThumbnailChanged(DesktopMediaList* list,
int index) {
int count = 0;
for (const auto& cur_list : media_lists_) {
if (cur_list.get() == list) {
observer_->OnSourceThumbnailChanged(this, count + index);
return;
}
count += cur_list->GetSourceCount();
}
NOTREACHED();
}
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_MEDIA_COMBINED_DESKTOP_MEDIA_LIST_H_
#define CHROME_BROWSER_MEDIA_COMBINED_DESKTOP_MEDIA_LIST_H_
#include <vector>
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/media/desktop_media_list.h"
#include "chrome/browser/media/desktop_media_list_observer.h"
// The combined desktop media list of one or multiple input DesktopMediaLists.
// The combined list is the concatenation of the input lists. The front of
// combined list will be filled with the first input list, then follows with
// the second one and so on.
class CombinedDesktopMediaList : public DesktopMediaList,
public DesktopMediaListObserver {
public:
explicit CombinedDesktopMediaList(
std::vector<scoped_ptr<DesktopMediaList>>& media_lists);
~CombinedDesktopMediaList() override;
// DesktopMediaList interface.
void SetUpdatePeriod(base::TimeDelta period) override;
void SetThumbnailSize(const gfx::Size& thumbnail_size) override;
void SetViewDialogWindowId(content::DesktopMediaID dialog_id) override;
void StartUpdating(DesktopMediaListObserver* observer) override;
int GetSourceCount() const override;
const Source& GetSource(int index) const override;
private:
// DesktopMediaListObserver interface.
void OnSourceAdded(DesktopMediaList* list, int index) override;
void OnSourceRemoved(DesktopMediaList* list, int index) override;
void OnSourceMoved(DesktopMediaList* list,
int old_index,
int new_index) override;
void OnSourceNameChanged(DesktopMediaList* list, int index) override;
void OnSourceThumbnailChanged(DesktopMediaList* list, int index) override;
std::vector<scoped_ptr<DesktopMediaList>> media_lists_;
DesktopMediaListObserver* observer_ = nullptr;
DISALLOW_COPY_AND_ASSIGN(CombinedDesktopMediaList);
};
#endif // CHROME_BROWSER_MEDIA_COMBINED_DESKTOP_MEDIA_LIST_H_
This diff is collapsed.
...@@ -23,11 +23,13 @@ using testing::DoDefault; ...@@ -23,11 +23,13 @@ using testing::DoDefault;
class MockDesktopMediaListObserver : public DesktopMediaListObserver { class MockDesktopMediaListObserver : public DesktopMediaListObserver {
public: public:
MOCK_METHOD1(OnSourceAdded, void(int index)); MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index));
MOCK_METHOD1(OnSourceRemoved, void(int index)); MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index));
MOCK_METHOD2(OnSourceMoved, void(int old_index, int new_index)); MOCK_METHOD3(OnSourceMoved,
MOCK_METHOD1(OnSourceNameChanged, void(int index)); void(DesktopMediaList* list, int old_index, int new_index));
MOCK_METHOD1(OnSourceThumbnailChanged, void(int index)); MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index));
MOCK_METHOD2(OnSourceThumbnailChanged,
void(DesktopMediaList* list, int index));
}; };
class DesktopMediaListAshTest : public ash::test::AshTestBase { class DesktopMediaListAshTest : public ash::test::AshTestBase {
...@@ -57,8 +59,8 @@ ACTION(QuitMessageLoop) { ...@@ -57,8 +59,8 @@ ACTION(QuitMessageLoop) {
TEST_F(DesktopMediaListAshTest, Screen) { TEST_F(DesktopMediaListAshTest, Screen) {
CreateList(DesktopMediaListAsh::SCREENS | DesktopMediaListAsh::WINDOWS); CreateList(DesktopMediaListAsh::SCREENS | DesktopMediaListAsh::WINDOWS);
EXPECT_CALL(observer_, OnSourceAdded(0)); EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
.WillOnce(QuitMessageLoop()) .WillOnce(QuitMessageLoop())
.WillRepeatedly(DoDefault()); .WillRepeatedly(DoDefault());
list_->StartUpdating(&observer_); list_->StartUpdating(&observer_);
...@@ -70,14 +72,14 @@ TEST_F(DesktopMediaListAshTest, OneWindow) { ...@@ -70,14 +72,14 @@ TEST_F(DesktopMediaListAshTest, OneWindow) {
scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
EXPECT_CALL(observer_, OnSourceAdded(0)); EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0));
EXPECT_CALL(observer_, OnSourceAdded(1)); EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 1));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
.Times(AtLeast(1)); .Times(AtLeast(1));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 1))
.WillOnce(QuitMessageLoop()) .WillOnce(QuitMessageLoop())
.WillRepeatedly(DoDefault()); .WillRepeatedly(DoDefault());
EXPECT_CALL(observer_, OnSourceRemoved(1)) EXPECT_CALL(observer_, OnSourceRemoved(list_.get(), 1))
.WillOnce(QuitMessageLoop()); .WillOnce(QuitMessageLoop());
list_->StartUpdating(&observer_); list_->StartUpdating(&observer_);
...@@ -91,8 +93,8 @@ TEST_F(DesktopMediaListAshTest, ScreenOnly) { ...@@ -91,8 +93,8 @@ TEST_F(DesktopMediaListAshTest, ScreenOnly) {
scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
EXPECT_CALL(observer_, OnSourceAdded(0)); EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
.WillOnce(QuitMessageLoop()) .WillOnce(QuitMessageLoop())
.WillRepeatedly(DoDefault()); .WillRepeatedly(DoDefault());
...@@ -112,11 +114,11 @@ TEST_F(DesktopMediaListAshTest, MAYBE_WindowOnly) { ...@@ -112,11 +114,11 @@ TEST_F(DesktopMediaListAshTest, MAYBE_WindowOnly) {
scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(0));
EXPECT_CALL(observer_, OnSourceAdded(0)); EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
.WillOnce(QuitMessageLoop()) .WillOnce(QuitMessageLoop())
.WillRepeatedly(DoDefault()); .WillRepeatedly(DoDefault());
EXPECT_CALL(observer_, OnSourceRemoved(0)) EXPECT_CALL(observer_, OnSourceRemoved(list_.get(), 0))
.WillOnce(QuitMessageLoop()); .WillOnce(QuitMessageLoop());
list_->StartUpdating(&observer_); list_->StartUpdating(&observer_);
......
...@@ -12,9 +12,7 @@ ...@@ -12,9 +12,7 @@
using content::BrowserThread; using content::BrowserThread;
DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period) DesktopMediaListBase::DesktopMediaListBase(base::TimeDelta update_period)
: weak_factory_(this) { : update_period_(update_period), weak_factory_(this) {}
update_period_ = update_period;
}
DesktopMediaListBase::~DesktopMediaListBase() {} DesktopMediaListBase::~DesktopMediaListBase() {}
...@@ -66,7 +64,7 @@ void DesktopMediaListBase::UpdateSourcesList( ...@@ -66,7 +64,7 @@ void DesktopMediaListBase::UpdateSourcesList(
for (size_t i = 0; i < sources_.size(); ++i) { for (size_t i = 0; i < sources_.size(); ++i) {
if (new_source_set.find(sources_[i].id) == new_source_set.end()) { if (new_source_set.find(sources_[i].id) == new_source_set.end()) {
sources_.erase(sources_.begin() + i); sources_.erase(sources_.begin() + i);
observer_->OnSourceRemoved(i); observer_->OnSourceRemoved(this, i);
--i; --i;
} }
} }
...@@ -82,7 +80,7 @@ void DesktopMediaListBase::UpdateSourcesList( ...@@ -82,7 +80,7 @@ void DesktopMediaListBase::UpdateSourcesList(
sources_.insert(sources_.begin() + i, Source()); sources_.insert(sources_.begin() + i, Source());
sources_[i].id = new_sources[i].id; sources_[i].id = new_sources[i].id;
sources_[i].name = new_sources[i].name; sources_[i].name = new_sources[i].name;
observer_->OnSourceAdded(i); observer_->OnSourceAdded(this, i);
} }
} }
} }
...@@ -106,12 +104,12 @@ void DesktopMediaListBase::UpdateSourcesList( ...@@ -106,12 +104,12 @@ void DesktopMediaListBase::UpdateSourcesList(
sources_.erase(sources_.begin() + old_pos); sources_.erase(sources_.begin() + old_pos);
sources_.insert(sources_.begin() + pos, temp); sources_.insert(sources_.begin() + pos, temp);
observer_->OnSourceMoved(old_pos, pos); observer_->OnSourceMoved(this, old_pos, pos);
} }
if (sources_[pos].name != new_sources[pos].name) { if (sources_[pos].name != new_sources[pos].name) {
sources_[pos].name = new_sources[pos].name; sources_[pos].name = new_sources[pos].name;
observer_->OnSourceNameChanged(pos); observer_->OnSourceNameChanged(this, pos);
} }
++pos; ++pos;
} }
...@@ -122,7 +120,7 @@ void DesktopMediaListBase::UpdateSourceThumbnail(content::DesktopMediaID id, ...@@ -122,7 +120,7 @@ void DesktopMediaListBase::UpdateSourceThumbnail(content::DesktopMediaID id,
for (size_t i = 0; i < sources_.size(); ++i) { for (size_t i = 0; i < sources_.size(); ++i) {
if (sources_[i].id == id) { if (sources_[i].id == id) {
sources_[i].thumbnail = image; sources_[i].thumbnail = image;
observer_->OnSourceThumbnailChanged(i); observer_->OnSourceThumbnailChanged(this, i);
break; break;
} }
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
// Thumbnail size is 100*100 pixels // Thumbnail size is 100*100 pixels
static const int kDefaultThumbnailSize = 100; static const int kDefaultThumbnailSize = 100;
// Base class for DesktopMedaiList implementations. Implements logic shared // Base class for DesktopMediaList implementations. Implements logic shared
// between implementations. Specifically it's responsible for keeping current // between implementations. Specifically it's responsible for keeping current
// list of sources and calling the observer when the list changes. // list of sources and calling the observer when the list changes.
class DesktopMediaListBase : public DesktopMediaList { class DesktopMediaListBase : public DesktopMediaList {
......
...@@ -5,15 +5,19 @@ ...@@ -5,15 +5,19 @@
#ifndef CHROME_BROWSER_MEDIA_DESKTOP_MEDIA_LIST_OBSERVER_H_ #ifndef CHROME_BROWSER_MEDIA_DESKTOP_MEDIA_LIST_OBSERVER_H_
#define CHROME_BROWSER_MEDIA_DESKTOP_MEDIA_LIST_OBSERVER_H_ #define CHROME_BROWSER_MEDIA_DESKTOP_MEDIA_LIST_OBSERVER_H_
class DesktopMediaList;
// Interface implemented by the desktop media picker dialog to receive // Interface implemented by the desktop media picker dialog to receive
// notifications about changes in DesktopMediaList. // notifications about changes in DesktopMediaList.
class DesktopMediaListObserver { class DesktopMediaListObserver {
public: public:
virtual void OnSourceAdded(int index) = 0; virtual void OnSourceAdded(DesktopMediaList* list, int index) = 0;
virtual void OnSourceRemoved(int index) = 0; virtual void OnSourceRemoved(DesktopMediaList* list, int index) = 0;
virtual void OnSourceMoved(int old_index, int new_index) = 0; virtual void OnSourceMoved(DesktopMediaList* list,
virtual void OnSourceNameChanged(int index) = 0; int old_index,
virtual void OnSourceThumbnailChanged(int index) = 0; int new_index) = 0;
virtual void OnSourceNameChanged(DesktopMediaList* list, int index) = 0;
virtual void OnSourceThumbnailChanged(DesktopMediaList* list, int index) = 0;
protected: protected:
virtual ~DesktopMediaListObserver() {} virtual ~DesktopMediaListObserver() {}
......
...@@ -17,29 +17,29 @@ void FakeDesktopMediaList::AddSource(int id) { ...@@ -17,29 +17,29 @@ void FakeDesktopMediaList::AddSource(int id) {
source.name = base::Int64ToString16(id); source.name = base::Int64ToString16(id);
sources_.push_back(source); sources_.push_back(source);
observer_->OnSourceAdded(sources_.size() - 1); observer_->OnSourceAdded(this, sources_.size() - 1);
} }
void FakeDesktopMediaList::RemoveSource(int index) { void FakeDesktopMediaList::RemoveSource(int index) {
sources_.erase(sources_.begin() + index); sources_.erase(sources_.begin() + index);
observer_->OnSourceRemoved(index); observer_->OnSourceRemoved(this, index);
} }
void FakeDesktopMediaList::MoveSource(int old_index, int new_index) { void FakeDesktopMediaList::MoveSource(int old_index, int new_index) {
Source source = sources_[old_index]; Source source = sources_[old_index];
sources_.erase(sources_.begin() + old_index); sources_.erase(sources_.begin() + old_index);
sources_.insert(sources_.begin() + new_index, source); sources_.insert(sources_.begin() + new_index, source);
observer_->OnSourceMoved(old_index, new_index); observer_->OnSourceMoved(this, old_index, new_index);
} }
void FakeDesktopMediaList::SetSourceThumbnail(int index) { void FakeDesktopMediaList::SetSourceThumbnail(int index) {
sources_[index].thumbnail = thumbnail_; sources_[index].thumbnail = thumbnail_;
observer_->OnSourceThumbnailChanged(index); observer_->OnSourceThumbnailChanged(this, index);
} }
void FakeDesktopMediaList::SetSourceName(int index, base::string16 name) { void FakeDesktopMediaList::SetSourceName(int index, base::string16 name) {
sources_[index].name = name; sources_[index].name = name;
observer_->OnSourceNameChanged(index); observer_->OnSourceNameChanged(this, index);
} }
void FakeDesktopMediaList::SetUpdatePeriod(base::TimeDelta period) {} void FakeDesktopMediaList::SetUpdatePeriod(base::TimeDelta period) {}
......
...@@ -29,11 +29,13 @@ namespace { ...@@ -29,11 +29,13 @@ namespace {
class MockObserver : public DesktopMediaListObserver { class MockObserver : public DesktopMediaListObserver {
public: public:
MOCK_METHOD1(OnSourceAdded, void(int index)); MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index));
MOCK_METHOD1(OnSourceRemoved, void(int index)); MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index));
MOCK_METHOD2(OnSourceMoved, void(int old_index, int new_index)); MOCK_METHOD3(OnSourceMoved,
MOCK_METHOD1(OnSourceNameChanged, void(int index)); void(DesktopMediaList* list, int old_index, int new_index));
MOCK_METHOD1(OnSourceThumbnailChanged, void(int index)); MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index));
MOCK_METHOD2(OnSourceThumbnailChanged,
void(DesktopMediaList* list, int index));
}; };
class FakeScreenCapturer : public webrtc::ScreenCapturer { class FakeScreenCapturer : public webrtc::ScreenCapturer {
...@@ -175,14 +177,15 @@ class DesktopMediaListTest : public testing::Test { ...@@ -175,14 +177,15 @@ class DesktopMediaListTest : public testing::Test {
testing::InSequence dummy; testing::InSequence dummy;
size_t source_count = window_only ? count : count + 1; size_t source_count = window_only ? count : count + 1;
for (size_t i = 0; i < source_count; ++i) { for (size_t i = 0; i < source_count; ++i) {
EXPECT_CALL(observer_, OnSourceAdded(i)) EXPECT_CALL(observer_, OnSourceAdded(model_.get(), i))
.WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1))); .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1)));
} }
for (size_t i = 0; i < source_count - 1; ++i) { for (size_t i = 0; i < source_count - 1; ++i) {
EXPECT_CALL(observer_, OnSourceThumbnailChanged(i)); EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i));
} }
EXPECT_CALL(observer_, OnSourceThumbnailChanged(source_count - 1)) EXPECT_CALL(observer_,
.WillOnce(QuitMessageLoop(&message_loop_)); OnSourceThumbnailChanged(model_.get(), source_count - 1))
.WillOnce(QuitMessageLoop(&message_loop_));
} }
model_->StartUpdating(&observer_); model_->StartUpdating(&observer_);
message_loop_.Run(); message_loop_.Run();
...@@ -247,10 +250,10 @@ TEST_F(DesktopMediaListTest, ScreenOnly) { ...@@ -247,10 +250,10 @@ TEST_F(DesktopMediaListTest, ScreenOnly) {
{ {
testing::InSequence dummy; testing::InSequence dummy;
EXPECT_CALL(observer_, OnSourceAdded(0)) EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 0))
.WillOnce(CheckListSize(model_.get(), 1)); .WillOnce(CheckListSize(model_.get(), 1));
EXPECT_CALL(observer_, OnSourceThumbnailChanged(0)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 0))
.WillOnce(QuitMessageLoop(&message_loop_)); .WillOnce(QuitMessageLoop(&message_loop_));
} }
model_->StartUpdating(&observer_); model_->StartUpdating(&observer_);
...@@ -263,9 +266,9 @@ TEST_F(DesktopMediaListTest, AddWindow) { ...@@ -263,9 +266,9 @@ TEST_F(DesktopMediaListTest, AddWindow) {
CreateWithDefaultCapturers(); CreateWithDefaultCapturers();
webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false);
EXPECT_CALL(observer_, OnSourceAdded(2)) EXPECT_CALL(observer_, OnSourceAdded(model_.get(), 2))
.WillOnce(DoAll(CheckListSize(model_.get(), 3), .WillOnce(DoAll(CheckListSize(model_.get(), 3),
QuitMessageLoop(&message_loop_))); QuitMessageLoop(&message_loop_)));
webrtc::WindowCapturer::Window window; webrtc::WindowCapturer::Window window;
window.id = 10; // id=0 is invalid. window.id = 10; // id=0 is invalid.
...@@ -283,9 +286,9 @@ TEST_F(DesktopMediaListTest, RemoveWindow) { ...@@ -283,9 +286,9 @@ TEST_F(DesktopMediaListTest, RemoveWindow) {
CreateWithDefaultCapturers(); CreateWithDefaultCapturers();
webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
EXPECT_CALL(observer_, OnSourceRemoved(2)) EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 2))
.WillOnce(DoAll(CheckListSize(model_.get(), 2), .WillOnce(DoAll(CheckListSize(model_.get(), 2),
QuitMessageLoop(&message_loop_))); QuitMessageLoop(&message_loop_)));
list.erase(list.begin() + 1); list.erase(list.begin() + 1);
window_capturer_->SetWindowList(list); window_capturer_->SetWindowList(list);
...@@ -298,11 +301,11 @@ TEST_F(DesktopMediaListTest, RemoveAllWindows) { ...@@ -298,11 +301,11 @@ TEST_F(DesktopMediaListTest, RemoveAllWindows) {
webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
testing::InSequence seq; testing::InSequence seq;
EXPECT_CALL(observer_, OnSourceRemoved(1)) EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
.WillOnce(CheckListSize(model_.get(), 2)); .WillOnce(CheckListSize(model_.get(), 2));
EXPECT_CALL(observer_, OnSourceRemoved(1)) EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
.WillOnce(DoAll(CheckListSize(model_.get(), 1), .WillOnce(DoAll(CheckListSize(model_.get(), 1),
QuitMessageLoop(&message_loop_))); QuitMessageLoop(&message_loop_)));
list.erase(list.begin(), list.end()); list.erase(list.begin(), list.end());
window_capturer_->SetWindowList(list); window_capturer_->SetWindowList(list);
...@@ -314,8 +317,8 @@ TEST_F(DesktopMediaListTest, UpdateTitle) { ...@@ -314,8 +317,8 @@ TEST_F(DesktopMediaListTest, UpdateTitle) {
CreateWithDefaultCapturers(); CreateWithDefaultCapturers();
webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false); webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(1, false);
EXPECT_CALL(observer_, OnSourceNameChanged(1)) EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1))
.WillOnce(QuitMessageLoop(&message_loop_)); .WillOnce(QuitMessageLoop(&message_loop_));
const std::string kTestTitle = "New Title"; const std::string kTestTitle = "New Title";
...@@ -331,8 +334,8 @@ TEST_F(DesktopMediaListTest, UpdateThumbnail) { ...@@ -331,8 +334,8 @@ TEST_F(DesktopMediaListTest, UpdateThumbnail) {
CreateWithDefaultCapturers(); CreateWithDefaultCapturers();
AddWindowsAndVerify(2, false); AddWindowsAndVerify(2, false);
EXPECT_CALL(observer_, OnSourceThumbnailChanged(1)) EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1))
.WillOnce(QuitMessageLoop(&message_loop_)); .WillOnce(QuitMessageLoop(&message_loop_));
// Update frame for the window and verify that we get notification about it. // Update frame for the window and verify that we get notification about it.
window_capturer_->SetNextFrameValue(1, 1); window_capturer_->SetNextFrameValue(1, 1);
...@@ -343,9 +346,9 @@ TEST_F(DesktopMediaListTest, MoveWindow) { ...@@ -343,9 +346,9 @@ TEST_F(DesktopMediaListTest, MoveWindow) {
CreateWithDefaultCapturers(); CreateWithDefaultCapturers();
webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false); webrtc::WindowCapturer::WindowList list = AddWindowsAndVerify(2, false);
EXPECT_CALL(observer_, OnSourceMoved(2, 1)) EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1))
.WillOnce(DoAll(CheckListSize(model_.get(), 3), .WillOnce(DoAll(CheckListSize(model_.get(), 3),
QuitMessageLoop(&message_loop_))); QuitMessageLoop(&message_loop_)));
// Swap the two windows. // Swap the two windows.
webrtc::WindowCapturer::Window temp = list[0]; webrtc::WindowCapturer::Window temp = list[0];
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
#define CHROME_BROWSER_UI_COCOA_MEDIA_PICKER_DESKTOP_MEDIA_PICKER_BRIDGE_H_ #define CHROME_BROWSER_UI_COCOA_MEDIA_PICKER_DESKTOP_MEDIA_PICKER_BRIDGE_H_
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/media/desktop_media_list.h"
#include "chrome/browser/media/desktop_media_list_observer.h" #include "chrome/browser/media/desktop_media_list_observer.h"
// Protocol corresponding to |DesktopMediaListObserver|. // Protocol corresponding to |DesktopMediaListObserver|.
...@@ -26,11 +27,13 @@ class DesktopMediaPickerBridge : public DesktopMediaListObserver { ...@@ -26,11 +27,13 @@ class DesktopMediaPickerBridge : public DesktopMediaListObserver {
~DesktopMediaPickerBridge() override; ~DesktopMediaPickerBridge() override;
// DesktopMediaListObserver overrides. // DesktopMediaListObserver overrides.
void OnSourceAdded(int index) override; void OnSourceAdded(DesktopMediaList* list, int index) override;
void OnSourceRemoved(int index) override; void OnSourceRemoved(DesktopMediaList* list, int index) override;
void OnSourceMoved(int old_index, int new_index) override; void OnSourceMoved(DesktopMediaList* list,
void OnSourceNameChanged(int index) override; int old_index,
void OnSourceThumbnailChanged(int index) override; int new_index) override;
void OnSourceNameChanged(DesktopMediaList* list, int index) override;
void OnSourceThumbnailChanged(DesktopMediaList* list, int index) override;
private: private:
id<DesktopMediaPickerObserver> observer_; // weak; owns this id<DesktopMediaPickerObserver> observer_; // weak; owns this
......
...@@ -12,22 +12,28 @@ DesktopMediaPickerBridge::DesktopMediaPickerBridge( ...@@ -12,22 +12,28 @@ DesktopMediaPickerBridge::DesktopMediaPickerBridge(
DesktopMediaPickerBridge::~DesktopMediaPickerBridge() { DesktopMediaPickerBridge::~DesktopMediaPickerBridge() {
} }
void DesktopMediaPickerBridge::OnSourceAdded(int index) { void DesktopMediaPickerBridge::OnSourceAdded(DesktopMediaList* list,
int index) {
[observer_ sourceAddedAtIndex:index]; [observer_ sourceAddedAtIndex:index];
} }
void DesktopMediaPickerBridge::OnSourceRemoved(int index) { void DesktopMediaPickerBridge::OnSourceRemoved(DesktopMediaList* list,
int index) {
[observer_ sourceRemovedAtIndex:index]; [observer_ sourceRemovedAtIndex:index];
} }
void DesktopMediaPickerBridge::OnSourceMoved(int old_index, int new_index) { void DesktopMediaPickerBridge::OnSourceMoved(DesktopMediaList* list,
int old_index,
int new_index) {
[observer_ sourceMovedFrom:old_index to:new_index]; [observer_ sourceMovedFrom:old_index to:new_index];
} }
void DesktopMediaPickerBridge::OnSourceNameChanged(int index) { void DesktopMediaPickerBridge::OnSourceNameChanged(DesktopMediaList* list,
int index) {
[observer_ sourceNameChangedAtIndex:index]; [observer_ sourceNameChangedAtIndex:index];
} }
void DesktopMediaPickerBridge::OnSourceThumbnailChanged(int index) { void DesktopMediaPickerBridge::OnSourceThumbnailChanged(DesktopMediaList* list,
int index) {
[observer_ sourceThumbnailChangedAtIndex:index]; [observer_ sourceThumbnailChangedAtIndex:index];
} }
...@@ -311,7 +311,7 @@ bool DesktopMediaListView::OnKeyPressed(const ui::KeyEvent& event) { ...@@ -311,7 +311,7 @@ bool DesktopMediaListView::OnKeyPressed(const ui::KeyEvent& event) {
return false; return false;
} }
void DesktopMediaListView::OnSourceAdded(int index) { void DesktopMediaListView::OnSourceAdded(DesktopMediaList* list, int index) {
const DesktopMediaList::Source& source = media_list_->GetSource(index); const DesktopMediaList::Source& source = media_list_->GetSource(index);
DesktopMediaSourceView* source_view = DesktopMediaSourceView* source_view =
new DesktopMediaSourceView(this, source.id); new DesktopMediaSourceView(this, source.id);
...@@ -338,7 +338,7 @@ void DesktopMediaListView::OnSourceAdded(int index) { ...@@ -338,7 +338,7 @@ void DesktopMediaListView::OnSourceAdded(int index) {
} }
} }
void DesktopMediaListView::OnSourceRemoved(int index) { void DesktopMediaListView::OnSourceRemoved(DesktopMediaList* list, int index) {
DesktopMediaSourceView* view = DesktopMediaSourceView* view =
static_cast<DesktopMediaSourceView*>(child_at(index)); static_cast<DesktopMediaSourceView*>(child_at(index));
DCHECK(view); DCHECK(view);
...@@ -356,21 +356,25 @@ void DesktopMediaListView::OnSourceRemoved(int index) { ...@@ -356,21 +356,25 @@ void DesktopMediaListView::OnSourceRemoved(int index) {
parent_->OnMediaListRowsChanged(); parent_->OnMediaListRowsChanged();
} }
void DesktopMediaListView::OnSourceMoved(int old_index, int new_index) { void DesktopMediaListView::OnSourceMoved(DesktopMediaList* list,
int old_index,
int new_index) {
DesktopMediaSourceView* view = DesktopMediaSourceView* view =
static_cast<DesktopMediaSourceView*>(child_at(old_index)); static_cast<DesktopMediaSourceView*>(child_at(old_index));
ReorderChildView(view, new_index); ReorderChildView(view, new_index);
PreferredSizeChanged(); PreferredSizeChanged();
} }
void DesktopMediaListView::OnSourceNameChanged(int index) { void DesktopMediaListView::OnSourceNameChanged(DesktopMediaList* list,
int index) {
const DesktopMediaList::Source& source = media_list_->GetSource(index); const DesktopMediaList::Source& source = media_list_->GetSource(index);
DesktopMediaSourceView* source_view = DesktopMediaSourceView* source_view =
static_cast<DesktopMediaSourceView*>(child_at(index)); static_cast<DesktopMediaSourceView*>(child_at(index));
source_view->SetName(source.name); source_view->SetName(source.name);
} }
void DesktopMediaListView::OnSourceThumbnailChanged(int index) { void DesktopMediaListView::OnSourceThumbnailChanged(DesktopMediaList* list,
int index) {
const DesktopMediaList::Source& source = media_list_->GetSource(index); const DesktopMediaList::Source& source = media_list_->GetSource(index);
DesktopMediaSourceView* source_view = DesktopMediaSourceView* source_view =
static_cast<DesktopMediaSourceView*>(child_at(index)); static_cast<DesktopMediaSourceView*>(child_at(index));
......
...@@ -46,11 +46,13 @@ class DesktopMediaListView : public views::View, ...@@ -46,11 +46,13 @@ class DesktopMediaListView : public views::View,
private: private:
// DesktopMediaList::Observer interface // DesktopMediaList::Observer interface
void OnSourceAdded(int index) override; void OnSourceAdded(DesktopMediaList* list, int index) override;
void OnSourceRemoved(int index) override; void OnSourceRemoved(DesktopMediaList* list, int index) override;
void OnSourceMoved(int old_index, int new_index) override; void OnSourceMoved(DesktopMediaList* list,
void OnSourceNameChanged(int index) override; int old_index,
void OnSourceThumbnailChanged(int index) override; int new_index) override;
void OnSourceNameChanged(DesktopMediaList* list, int index) override;
void OnSourceThumbnailChanged(DesktopMediaList* list, int index) override;
// Accepts whatever happens to be selected right now. // Accepts whatever happens to be selected right now.
void AcceptSelection(); void AcceptSelection();
......
...@@ -346,6 +346,8 @@ ...@@ -346,6 +346,8 @@
'browser/manifest/manifest_icon_downloader.h', 'browser/manifest/manifest_icon_downloader.h',
'browser/manifest/manifest_icon_selector.cc', 'browser/manifest/manifest_icon_selector.cc',
'browser/manifest/manifest_icon_selector.h', 'browser/manifest/manifest_icon_selector.h',
'browser/media/combined_desktop_media_list.cc',
'browser/media/combined_desktop_media_list.h',
'browser/media/desktop_media_list.h', 'browser/media/desktop_media_list.h',
'browser/media/desktop_media_list_base.cc', 'browser/media/desktop_media_list_base.cc',
'browser/media/desktop_media_list_base.h', 'browser/media/desktop_media_list_base.h',
...@@ -377,6 +379,8 @@ ...@@ -377,6 +379,8 @@
'browser/media/midi_permission_context.h', 'browser/media/midi_permission_context.h',
'browser/media/midi_permission_context_factory.cc', 'browser/media/midi_permission_context_factory.cc',
'browser/media/midi_permission_context_factory.h', 'browser/media/midi_permission_context_factory.h',
'browser/media/native_desktop_media_list.cc',
'browser/media/native_desktop_media_list.h',
'browser/media/permission_bubble_media_access_handler.cc', 'browser/media/permission_bubble_media_access_handler.cc',
'browser/media/permission_bubble_media_access_handler.h', 'browser/media/permission_bubble_media_access_handler.h',
'browser/media/router/media_router_feature.cc', 'browser/media/router/media_router_feature.cc',
...@@ -1173,8 +1177,6 @@ ...@@ -1173,8 +1177,6 @@
'browser/importer/profile_writer.h', 'browser/importer/profile_writer.h',
'browser/lifetime/browser_close_manager.cc', 'browser/lifetime/browser_close_manager.cc',
'browser/lifetime/browser_close_manager.h', 'browser/lifetime/browser_close_manager.h',
'browser/media/native_desktop_media_list.cc',
'browser/media/native_desktop_media_list.h',
'browser/media_galleries/fileapi/av_scanning_file_validator.cc', 'browser/media_galleries/fileapi/av_scanning_file_validator.cc',
'browser/media_galleries/fileapi/av_scanning_file_validator.h', 'browser/media_galleries/fileapi/av_scanning_file_validator.h',
'browser/media_galleries/fileapi/device_media_async_file_util.cc', 'browser/media_galleries/fileapi/device_media_async_file_util.cc',
......
...@@ -133,6 +133,7 @@ ...@@ -133,6 +133,7 @@
'browser/manifest/manifest_icon_selector_unittest.cc', 'browser/manifest/manifest_icon_selector_unittest.cc',
'browser/media/media_stream_device_permission_context_unittest.cc', 'browser/media/media_stream_device_permission_context_unittest.cc',
'browser/media/midi_permission_context_unittest.cc', 'browser/media/midi_permission_context_unittest.cc',
'browser/media/native_desktop_media_list_unittest.cc',
'browser/metrics/chrome_browser_main_extra_parts_metrics_unittest.cc', 'browser/metrics/chrome_browser_main_extra_parts_metrics_unittest.cc',
'browser/metrics/chrome_metrics_service_accessor_unittest.cc', 'browser/metrics/chrome_metrics_service_accessor_unittest.cc',
'browser/metrics/perf/perf_provider_chromeos_unittest.cc', 'browser/metrics/perf/perf_provider_chromeos_unittest.cc',
...@@ -1480,7 +1481,7 @@ ...@@ -1480,7 +1481,7 @@
'browser/font_family_cache_unittest.cc', 'browser/font_family_cache_unittest.cc',
'browser/importer/firefox_profile_lock_unittest.cc', 'browser/importer/firefox_profile_lock_unittest.cc',
'browser/importer/profile_writer_unittest.cc', 'browser/importer/profile_writer_unittest.cc',
'browser/media/native_desktop_media_list_unittest.cc', 'browser/media/combined_desktop_media_list_unittest.cc',
'browser/media_galleries/fileapi/native_media_file_util_unittest.cc', 'browser/media_galleries/fileapi/native_media_file_util_unittest.cc',
'browser/media_galleries/gallery_watch_manager_unittest.cc', 'browser/media_galleries/gallery_watch_manager_unittest.cc',
'browser/media_galleries/linux/mtp_device_object_enumerator_unittest.cc', 'browser/media_galleries/linux/mtp_device_object_enumerator_unittest.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment