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

Unified Diff: chrome/browser/media/native_desktop_media_list_unittest.cc

Issue 2307083002: Cleanup: move WebRTC related files from chrome/browser/media to chrome/browser/media/webrtc/ (Closed)
Patch Set: Removed file wrongly resuscitated during rebase Created 4 years, 3 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
« no previous file with comments | « chrome/browser/media/native_desktop_media_list.cc ('k') | chrome/browser/media/output_protection_proxy.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/media/native_desktop_media_list_unittest.cc
diff --git a/chrome/browser/media/native_desktop_media_list_unittest.cc b/chrome/browser/media/native_desktop_media_list_unittest.cc
deleted file mode 100644
index cdc59ebfc7f5376a6dd7038f38955fc2a2046918..0000000000000000000000000000000000000000
--- a/chrome/browser/media/native_desktop_media_list_unittest.cc
+++ /dev/null
@@ -1,517 +0,0 @@
-// Copyright 2013 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/native_desktop_media_list.h"
-
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-#include <vector>
-
-#include "base/location.h"
-#include "base/macros.h"
-#include "base/run_loop.h"
-#include "base/single_thread_task_runner.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/lock.h"
-#include "chrome/browser/media/desktop_media_list_observer.h"
-#include "content/public/test/test_browser_thread.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
-#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
-#include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
-#include "ui/aura/window.h"
-#include "ui/aura/window_tree_host.h"
-#include "ui/views/test/views_test_base.h"
-#include "ui/views/widget/desktop_aura/desktop_native_widget_aura.h"
-#include "ui/views/widget/widget.h"
-
-using content::DesktopMediaID;
-using testing::_;
-using testing::DoAll;
-
-namespace {
-
-// Aura window capture unit tests are not stable in linux. crbug.com/602494 and
-// crbug.com/603823.
-#if defined(OS_WIN)
-#define ENABLE_AURA_WINDOW_TESTS
-#endif
-
-static const int kDefaultWindowCount = 2;
-#if defined(ENABLE_AURA_WINDOW_TESTS)
-static const int kDefaultAuraCount = 1;
-#else
-static const int kDefaultAuraCount = 0;
-#endif
-
-class MockObserver : public DesktopMediaListObserver {
- public:
- MOCK_METHOD2(OnSourceAdded, void(DesktopMediaList* list, int index));
- MOCK_METHOD2(OnSourceRemoved, void(DesktopMediaList* list, int index));
- MOCK_METHOD3(OnSourceMoved,
- void(DesktopMediaList* list, int old_index, int new_index));
- MOCK_METHOD2(OnSourceNameChanged, void(DesktopMediaList* list, int index));
- MOCK_METHOD2(OnSourceThumbnailChanged,
- void(DesktopMediaList* list, int index));
-};
-
-class FakeScreenCapturer : public webrtc::ScreenCapturer {
- public:
- FakeScreenCapturer() {}
- ~FakeScreenCapturer() override {}
-
- // webrtc::ScreenCapturer implementation.
- void Start(Callback* callback) override { callback_ = callback; }
-
- void Capture(const webrtc::DesktopRegion& region) override {
- DCHECK(callback_);
- std::unique_ptr<webrtc::DesktopFrame> frame(
- new webrtc::BasicDesktopFrame(webrtc::DesktopSize(10, 10)));
- memset(frame->data(), 0, frame->stride() * frame->size().height());
- callback_->OnCaptureResult(webrtc::DesktopCapturer::Result::SUCCESS,
- std::move(frame));
- }
-
- bool GetScreenList(ScreenList* screens) override {
- webrtc::ScreenCapturer::Screen screen;
- screen.id = 0;
- screens->push_back(screen);
- return true;
- }
-
- bool SelectScreen(webrtc::ScreenId id) override {
- EXPECT_EQ(0, id);
- return true;
- }
-
- protected:
- Callback* callback_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeScreenCapturer);
-};
-
-class FakeWindowCapturer : public webrtc::WindowCapturer {
- public:
- FakeWindowCapturer()
- : callback_(NULL) {
- }
- ~FakeWindowCapturer() override {}
-
- void SetWindowList(const WindowList& list) {
- base::AutoLock lock(window_list_lock_);
- window_list_ = list;
- }
-
- // Sets |value| thats going to be used to memset() content of the frames
- // generated for |window_id|. By default generated frames are set to zeros.
- void SetNextFrameValue(WindowId window_id, int8_t value) {
- base::AutoLock lock(frame_values_lock_);
- frame_values_[window_id] = value;
- }
-
- // webrtc::WindowCapturer implementation.
- void Start(Callback* callback) override { callback_ = callback; }
-
- void Capture(const webrtc::DesktopRegion& region) override {
- DCHECK(callback_);
-
- base::AutoLock lock(frame_values_lock_);
-
- std::map<WindowId, int8_t>::iterator it =
- frame_values_.find(selected_window_id_);
- int8_t value = (it != frame_values_.end()) ? it->second : 0;
- std::unique_ptr<webrtc::DesktopFrame> frame(
- new webrtc::BasicDesktopFrame(webrtc::DesktopSize(10, 10)));
- memset(frame->data(), value, frame->stride() * frame->size().height());
- callback_->OnCaptureResult(webrtc::DesktopCapturer::Result::SUCCESS,
- std::move(frame));
- }
-
- bool GetWindowList(WindowList* windows) override {
- base::AutoLock lock(window_list_lock_);
- *windows = window_list_;
- return true;
- }
-
- bool SelectWindow(WindowId id) override {
- selected_window_id_ = id;
- return true;
- }
-
- bool BringSelectedWindowToFront() override { return true; }
-
- private:
- Callback* callback_;
- WindowList window_list_;
- base::Lock window_list_lock_;
-
- WindowId selected_window_id_;
-
- // Frames to be captured per window.
- std::map<WindowId, int8_t> frame_values_;
- base::Lock frame_values_lock_;
-
- DISALLOW_COPY_AND_ASSIGN(FakeWindowCapturer);
-};
-
-} // namespace
-
-ACTION_P2(CheckListSize, model, expected_list_size) {
- EXPECT_EQ(expected_list_size, model->GetSourceCount());
-}
-
-ACTION_P(QuitMessageLoop, message_loop) {
- message_loop->task_runner()->PostTask(
- FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
-}
-
-class NativeDesktopMediaListTest : public views::ViewsTestBase {
- public:
- NativeDesktopMediaListTest()
- : ui_thread_(content::BrowserThread::UI, message_loop()) {}
-
- void TearDown() override {
- for (size_t i = 0; i < desktop_widgets_.size(); i++)
- desktop_widgets_[i].reset();
-
- ViewsTestBase::TearDown();
- }
-
- void CreateWithCapturers(bool screen, bool window) {
- webrtc::ScreenCapturer* screen_capturer = nullptr;
- if (screen)
- screen_capturer = new FakeScreenCapturer();
-
- if (window)
- window_capturer_ = new FakeWindowCapturer();
- else
- window_capturer_ = nullptr;
-
- model_.reset(new NativeDesktopMediaList(
- std::unique_ptr<webrtc::ScreenCapturer>(screen_capturer),
- std::unique_ptr<webrtc::WindowCapturer>(window_capturer_)));
-
- // Set update period to reduce the time it takes to run tests.
- model_->SetUpdatePeriod(base::TimeDelta::FromMilliseconds(20));
- }
-
- void AddNativeWindow(int id) {
- webrtc::WindowCapturer::Window window;
- window.id = id;
- window.title = "Test window";
- window_list_.push_back(window);
- }
-
-#if defined(USE_AURA)
- std::unique_ptr<views::Widget> CreateDesktopWidget() {
- std::unique_ptr<views::Widget> widget(new views::Widget);
- views::Widget::InitParams params;
- params.type = views::Widget::InitParams::TYPE_WINDOW_FRAMELESS;
- params.accept_events = false;
- params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
- params.native_widget = new views::DesktopNativeWidgetAura(widget.get());
- params.bounds = gfx::Rect(0, 0, 20, 20);
- widget->Init(params);
- widget->Show();
- return widget;
- }
-
- void AddAuraWindow() {
- webrtc::WindowCapturer::Window window;
- window.title = "Test window";
- // Create a aura native widow through a widget.
- desktop_widgets_.push_back(CreateDesktopWidget());
- // Get the native window's id.
- aura::Window* aura_window = desktop_widgets_.back()->GetNativeWindow();
- gfx::AcceleratedWidget widget =
- aura_window->GetHost()->GetAcceleratedWidget();
-#if defined(OS_WIN)
- window.id = reinterpret_cast<DesktopMediaID::Id>(widget);
-#else
- window.id = widget;
-#endif
- // Get the aura window's id.
- DesktopMediaID aura_id = DesktopMediaID::RegisterAuraWindow(
- DesktopMediaID::TYPE_WINDOW, aura_window);
- native_aura_id_map_[window.id] = aura_id.aura_id;
-
- window_list_.push_back(window);
- }
-
- void RemoveAuraWindow(int index) {
- DCHECK_LT(index, static_cast<int>(desktop_widgets_.size()));
-
- // Get the native window's id.
- aura::Window* aura_window = desktop_widgets_[index]->GetNativeWindow();
- gfx::AcceleratedWidget widget =
- aura_window->GetHost()->GetAcceleratedWidget();
-#if defined(OS_WIN)
- int native_id = reinterpret_cast<DesktopMediaID::Id>(widget);
-#else
- int native_id = widget;
-#endif
- // Remove the widget and assoicate aura window.
- desktop_widgets_.erase(desktop_widgets_.begin() + index);
- // Remove the aura window from the window list.
- size_t i;
- for (i = 0; i < window_list_.size(); i++) {
- if (window_list_[i].id == native_id)
- break;
- }
- DCHECK_LT(i, window_list_.size());
- window_list_.erase(window_list_.begin() + i);
- native_aura_id_map_.erase(native_id);
- }
-
-#endif // defined(USE_AURA)
-
- void AddWindowsAndVerify(bool screen,
- size_t window_count,
- size_t aura_count,
- bool has_view_dialog) {
- // Create model_.
- CreateWithCapturers(screen, window_count > 0);
-
-#if !defined(USE_AURA)
- aura_count = 0;
-#endif
- if (aura_count >= window_count)
- aura_count = window_count - 1;
-
- if (window_count == 0)
- has_view_dialog = false;
-
- // Set up widows.
- size_t aura_window_first_index = window_count - aura_count;
- for (size_t i = 0; i < window_count; ++i) {
- if (i < aura_window_first_index) {
- AddNativeWindow(i + 1);
- } else {
-#if defined(USE_AURA)
- AddAuraWindow();
-#endif
- }
- }
-
- if (window_capturer_)
- window_capturer_->SetWindowList(window_list_);
-
- // Set view dialog window ID as the first window id.
- if (has_view_dialog) {
- DesktopMediaID dialog_window_id(DesktopMediaID::TYPE_WINDOW,
- window_list_[0].id);
- model_->SetViewDialogWindowId(dialog_window_id);
- window_count--;
- aura_window_first_index--;
- }
-
- {
- testing::InSequence dummy;
- size_t source_count = screen ? window_count + 1 : window_count;
- for (size_t i = 0; i < source_count; ++i) {
- EXPECT_CALL(observer_, OnSourceAdded(model_.get(), i))
- .WillOnce(CheckListSize(model_.get(), static_cast<int>(i + 1)));
- }
- for (size_t i = 0; i < source_count - 1; ++i) {
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i));
- }
- EXPECT_CALL(observer_,
- OnSourceThumbnailChanged(model_.get(), source_count - 1))
- .WillOnce(QuitMessageLoop(message_loop()));
- }
- model_->StartUpdating(&observer_);
- base::RunLoop().Run();
-
- if (screen) {
- EXPECT_EQ(model_->GetSource(0).id.type, DesktopMediaID::TYPE_SCREEN);
- EXPECT_EQ(model_->GetSource(0).id.id, 0);
- }
-
- for (size_t i = 0; i < window_count; ++i) {
- size_t source_index = screen ? i + 1 : i;
- EXPECT_EQ(model_->GetSource(source_index).id.type,
- DesktopMediaID::TYPE_WINDOW);
- EXPECT_EQ(model_->GetSource(source_index).name,
- base::UTF8ToUTF16("Test window"));
- int index = has_view_dialog ? i + 1 : i;
- int native_id = window_list_[index].id;
- EXPECT_EQ(model_->GetSource(source_index).id.id, native_id);
-#if defined(USE_AURA)
- if (i >= aura_window_first_index)
- EXPECT_EQ(model_->GetSource(source_index).id.aura_id,
- native_aura_id_map_[native_id]);
-#endif
- }
- testing::Mock::VerifyAndClearExpectations(&observer_);
- }
-
- protected:
- // Must be listed before |model_|, so it's destroyed last.
- MockObserver observer_;
-
- // Owned by |model_|;
- FakeWindowCapturer* window_capturer_;
-
- webrtc::WindowCapturer::WindowList window_list_;
- std::vector<std::unique_ptr<views::Widget>> desktop_widgets_;
- std::map<DesktopMediaID::Id, DesktopMediaID::Id> native_aura_id_map_;
- std::unique_ptr<NativeDesktopMediaList> model_;
-
- content::TestBrowserThread ui_thread_;
-
- DISALLOW_COPY_AND_ASSIGN(NativeDesktopMediaListTest);
-};
-
-TEST_F(NativeDesktopMediaListTest, WindowsOnly) {
- AddWindowsAndVerify(false, kDefaultWindowCount, kDefaultAuraCount, false);
-}
-
-TEST_F(NativeDesktopMediaListTest, ScreenOnly) {
- AddWindowsAndVerify(true, 0, 0, false);
-}
-
-// Verifies that the window specified with SetViewDialogWindowId() is filtered
-// from the results.
-TEST_F(NativeDesktopMediaListTest, Filtering) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, true);
-}
-
-TEST_F(NativeDesktopMediaListTest, AddNativeWindow) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- const int index = kDefaultWindowCount + 1;
- EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index))
- .WillOnce(DoAll(CheckListSize(model_.get(), index + 1),
- QuitMessageLoop(message_loop())));
-
- webrtc::WindowCapturer::Window window;
- AddNativeWindow(index);
- window_capturer_->SetWindowList(window_list_);
-
- base::RunLoop().Run();
-
- EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW);
- EXPECT_EQ(model_->GetSource(index).id.id, index);
-}
-
-#if defined(ENABLE_AURA_WINDOW_TESTS)
-TEST_F(NativeDesktopMediaListTest, AddAuraWindow) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- const int index = kDefaultWindowCount + 1;
- EXPECT_CALL(observer_, OnSourceAdded(model_.get(), index))
- .WillOnce(DoAll(CheckListSize(model_.get(), index + 1),
- QuitMessageLoop(message_loop())));
-
- AddAuraWindow();
- window_capturer_->SetWindowList(window_list_);
-
- message_loop()->Run();
-
- int native_id = window_list_.back().id;
- EXPECT_EQ(model_->GetSource(index).id.type, DesktopMediaID::TYPE_WINDOW);
- EXPECT_EQ(model_->GetSource(index).id.id, native_id);
- EXPECT_EQ(model_->GetSource(index).id.aura_id,
- native_aura_id_map_[native_id]);
-}
-#endif // defined(ENABLE_AURA_WINDOW_TESTS)
-
-TEST_F(NativeDesktopMediaListTest, RemoveNativeWindow) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
- .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount),
- QuitMessageLoop(message_loop())));
-
- window_list_.erase(window_list_.begin());
- window_capturer_->SetWindowList(window_list_);
-
- base::RunLoop().Run();
-}
-
-#if defined(ENABLE_AURA_WINDOW_TESTS)
-TEST_F(NativeDesktopMediaListTest, RemoveAuraWindow) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- int aura_window_start_index = kDefaultWindowCount - kDefaultAuraCount + 1;
- EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), aura_window_start_index))
- .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount),
- QuitMessageLoop(message_loop())));
-
- RemoveAuraWindow(0);
- window_capturer_->SetWindowList(window_list_);
-
- message_loop()->Run();
-}
-#endif // defined(ENABLE_AURA_WINDOW_TESTS)
-
-TEST_F(NativeDesktopMediaListTest, RemoveAllWindows) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- testing::InSequence seq;
- for (int i = 0; i < kDefaultWindowCount - 1; i++) {
- EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
- .WillOnce(CheckListSize(model_.get(), kDefaultWindowCount - i));
- }
- EXPECT_CALL(observer_, OnSourceRemoved(model_.get(), 1))
- .WillOnce(DoAll(CheckListSize(model_.get(), 1),
- QuitMessageLoop(message_loop())));
-
- window_list_.clear();
- window_capturer_->SetWindowList(window_list_);
-
- base::RunLoop().Run();
-}
-
-TEST_F(NativeDesktopMediaListTest, UpdateTitle) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- EXPECT_CALL(observer_, OnSourceNameChanged(model_.get(), 1))
- .WillOnce(QuitMessageLoop(message_loop()));
-
- const std::string kTestTitle = "New Title";
- window_list_[0].title = kTestTitle;
- window_capturer_->SetWindowList(window_list_);
-
- base::RunLoop().Run();
-
- EXPECT_EQ(model_->GetSource(1).name, base::UTF8ToUTF16(kTestTitle));
-}
-
-TEST_F(NativeDesktopMediaListTest, UpdateThumbnail) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- // Aura windows' thumbnails may unpredictably change over time.
- for (size_t i = kDefaultWindowCount - kDefaultAuraCount;
- i < kDefaultWindowCount; ++i) {
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), i + 1))
- .Times(testing::AnyNumber());
- }
-
- EXPECT_CALL(observer_, OnSourceThumbnailChanged(model_.get(), 1))
- .WillOnce(QuitMessageLoop(message_loop()));
-
- // Update frame for the window and verify that we get notification about it.
- window_capturer_->SetNextFrameValue(1, 10);
-
- base::RunLoop().Run();
-}
-
-TEST_F(NativeDesktopMediaListTest, MoveWindow) {
- AddWindowsAndVerify(true, kDefaultWindowCount, kDefaultAuraCount, false);
-
- EXPECT_CALL(observer_, OnSourceMoved(model_.get(), 2, 1))
- .WillOnce(DoAll(CheckListSize(model_.get(), kDefaultWindowCount + 1),
- QuitMessageLoop(message_loop())));
-
- // Swap the two windows.
- webrtc::WindowCapturer::Window temp = window_list_[0];
- window_list_[0] = window_list_[1];
- window_list_[1] = temp;
- window_capturer_->SetWindowList(window_list_);
-
- base::RunLoop().Run();
-}
« no previous file with comments | « chrome/browser/media/native_desktop_media_list.cc ('k') | chrome/browser/media/output_protection_proxy.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698