| Index: chrome/browser/media/tab_desktop_media_list_unittest.cc
|
| diff --git a/chrome/browser/media/tab_desktop_media_list_unittest.cc b/chrome/browser/media/tab_desktop_media_list_unittest.cc
|
| deleted file mode 100644
|
| index 80c7a50f39d8b9114b1e8b49c5ca7b69c514a3b0..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/media/tab_desktop_media_list_unittest.cc
|
| +++ /dev/null
|
| @@ -1,362 +0,0 @@
|
| -// 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/tab_desktop_media_list.h"
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/location.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/single_thread_task_runner.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "base/threading/thread_task_runner_handle.h"
|
| -#include "chrome/browser/media/desktop_media_list_observer.h"
|
| -#include "chrome/browser/profiles/profile_manager.h"
|
| -#include "chrome/browser/ui/browser_list.h"
|
| -#include "chrome/browser/ui/tabs/tab_strip_model.h"
|
| -#include "chrome/test/base/scoped_testing_local_state.h"
|
| -#include "chrome/test/base/test_browser_window.h"
|
| -#include "chrome/test/base/testing_browser_process.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "content/public/browser/favicon_status.h"
|
| -#include "content/public/browser/navigation_entry.h"
|
| -#include "content/public/browser/web_contents.h"
|
| -#include "content/public/common/content_switches.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "content/public/test/test_renderer_host.h"
|
| -#include "content/public/test/web_contents_tester.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| -#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
|
| -#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
|
| -#include "chrome/browser/chromeos/settings/cros_settings.h"
|
| -#include "chrome/browser/chromeos/settings/device_settings_service.h"
|
| -#endif // defined(OS_CHROMEOS)
|
| -
|
| -using content::WebContents;
|
| -
|
| -namespace {
|
| -
|
| -static const int kDefaultSourceCount = 2;
|
| -static const int kThumbnailSize = 50;
|
| -
|
| -class UnittestProfileManager : public ::ProfileManagerWithoutInit {
|
| - public:
|
| - explicit UnittestProfileManager(const base::FilePath& user_data_dir)
|
| - : ::ProfileManagerWithoutInit(user_data_dir) {}
|
| -
|
| - protected:
|
| - Profile* CreateProfileHelper(const base::FilePath& file_path) override {
|
| - if (!base::PathExists(file_path)) {
|
| - if (!base::CreateDirectory(file_path))
|
| - return NULL;
|
| - }
|
| - return new TestingProfile(file_path, NULL);
|
| - }
|
| -};
|
| -
|
| -// Create a greyscale image with certain size and grayscale value.
|
| -gfx::Image CreateGrayscaleImage(gfx::Size size, uint8_t greyscale_value) {
|
| - SkBitmap result;
|
| - result.allocN32Pixels(size.width(), size.height(), true);
|
| -
|
| - result.lockPixels();
|
| - uint8_t* pixels_data = reinterpret_cast<uint8_t*>(result.getPixels());
|
| -
|
| - // Set greyscale value for all pixels.
|
| - for (int y = 0; y < result.height(); ++y) {
|
| - for (int x = 0; x < result.width(); ++x) {
|
| - pixels_data[result.rowBytes() * y + x * result.bytesPerPixel()] =
|
| - greyscale_value;
|
| - pixels_data[result.rowBytes() * y + x * result.bytesPerPixel() + 1] =
|
| - greyscale_value;
|
| - pixels_data[result.rowBytes() * y + x * result.bytesPerPixel() + 2] =
|
| - greyscale_value;
|
| - pixels_data[result.rowBytes() * y + x * result.bytesPerPixel() + 3] =
|
| - 0xff;
|
| - }
|
| - }
|
| -
|
| - result.unlockPixels();
|
| -
|
| - return gfx::Image::CreateFrom1xBitmap(result);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -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));
|
| -
|
| - void VerifyAndClearExpectations() {
|
| - testing::Mock::VerifyAndClearExpectations(this);
|
| - }
|
| -};
|
| -
|
| -ACTION_P2(CheckListSize, list, expected_list_size) {
|
| - EXPECT_EQ(expected_list_size, list->GetSourceCount());
|
| -}
|
| -
|
| -ACTION(QuitMessageLoop) {
|
| - base::ThreadTaskRunnerHandle::Get()->PostTask(
|
| - FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
|
| -}
|
| -
|
| -class TabDesktopMediaListTest : public testing::Test {
|
| - protected:
|
| - TabDesktopMediaListTest()
|
| - : local_state_(TestingBrowserProcess::GetGlobal()) {}
|
| -
|
| - void AddWebcontents(int favicon_greyscale) {
|
| - TabStripModel* tab_strip_model = browser_->tab_strip_model();
|
| - ASSERT_TRUE(tab_strip_model);
|
| - std::unique_ptr<WebContents> contents(
|
| - content::WebContentsTester::CreateTestWebContents(
|
| - profile_, content::SiteInstance::Create(profile_)));
|
| - ASSERT_TRUE(contents);
|
| -
|
| - contents->SetLastActiveTime(base::TimeTicks::Now());
|
| -
|
| - // Get or create the transient NavigationEntry and add a title and a
|
| - // favicon to it.
|
| - content::NavigationEntry* entry =
|
| - contents->GetController().GetTransientEntry();
|
| - if (!entry) {
|
| - std::unique_ptr<content::NavigationEntry> entry_new =
|
| - content::NavigationController::CreateNavigationEntry(
|
| - GURL("chrome://blank"), content::Referrer(),
|
| - ui::PAGE_TRANSITION_LINK, false, std::string(), profile_);
|
| -
|
| - contents->GetController().SetTransientEntry(std::move(entry_new));
|
| - entry = contents->GetController().GetTransientEntry();
|
| - }
|
| -
|
| - contents->UpdateTitleForEntry(entry, base::ASCIIToUTF16("Test tab"));
|
| -
|
| - content::FaviconStatus favicon_info;
|
| - favicon_info.image =
|
| - CreateGrayscaleImage(gfx::Size(10, 10), favicon_greyscale);
|
| - entry->GetFavicon() = favicon_info;
|
| -
|
| - contents_array_.push_back(std::move(contents));
|
| - tab_strip_model->AppendWebContents(contents_array_.back().get(), false);
|
| - }
|
| -
|
| - void SetUp() override {
|
| - rvh_test_enabler_.reset(new content::RenderViewHostTestEnabler());
|
| - // Create a new temporary directory, and store the path.
|
| - ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
|
| - TestingBrowserProcess::GetGlobal()->SetProfileManager(
|
| - new UnittestProfileManager(temp_dir_.path()));
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| - base::CommandLine* cl = base::CommandLine::ForCurrentProcess();
|
| - cl->AppendSwitch(switches::kTestType);
|
| - chromeos::WallpaperManager::Initialize();
|
| -#endif
|
| -
|
| - // Create profile.
|
| - ProfileManager* profile_manager = g_browser_process->profile_manager();
|
| - ASSERT_TRUE(profile_manager);
|
| -
|
| - profile_ = profile_manager->GetLastUsedProfileAllowedByPolicy();
|
| - ASSERT_TRUE(profile_);
|
| -
|
| - // Create browser.
|
| - Browser::CreateParams profile_params(profile_);
|
| - browser_ = chrome::CreateBrowserWithTestWindowForParams(&profile_params);
|
| - ASSERT_TRUE(browser_);
|
| - for (int i = 0; i < kDefaultSourceCount; i++) {
|
| - AddWebcontents(i + 1);
|
| - }
|
| - }
|
| -
|
| - void TearDown() override {
|
| - for (auto& contents : contents_array_)
|
| - contents.reset();
|
| - browser_.reset();
|
| - TestingBrowserProcess::GetGlobal()->SetProfileManager(NULL);
|
| - base::RunLoop().RunUntilIdle();
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| - chromeos::WallpaperManager::Shutdown();
|
| -#endif
|
| - rvh_test_enabler_.reset();
|
| - }
|
| -
|
| - void CreateDefaultList() {
|
| - list_.reset(new TabDesktopMediaList());
|
| - list_->SetThumbnailSize(gfx::Size(kThumbnailSize, kThumbnailSize));
|
| -
|
| - // Set update period to reduce the time it takes to run tests.
|
| - // >0 to avoid unit test failure.
|
| - list_->SetUpdatePeriod(base::TimeDelta::FromMilliseconds(1));
|
| - }
|
| -
|
| - void InitializeAndVerify() {
|
| - CreateDefaultList();
|
| -
|
| - // The tabs in media source list are sorted in decreasing time order. The
|
| - // latest one is listed first. However, tabs are added to TabStripModel in
|
| - // increasing time order, the oldest one is added first.
|
| - {
|
| - testing::InSequence dummy;
|
| -
|
| - for (int i = 0; i < kDefaultSourceCount; i++) {
|
| - EXPECT_CALL(observer_, OnSourceAdded(list_.get(), i))
|
| - .WillOnce(CheckListSize(list_.get(), i + 1));
|
| - }
|
| -
|
| - for (int i = 0; i < kDefaultSourceCount - 1; i++) {
|
| - EXPECT_CALL(observer_, OnSourceThumbnailChanged(
|
| - list_.get(), kDefaultSourceCount - 1 - i));
|
| - }
|
| - EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
|
| - .WillOnce(QuitMessageLoop());
|
| - }
|
| -
|
| - list_->StartUpdating(&observer_);
|
| - base::RunLoop().Run();
|
| -
|
| - for (int i = 0; i < kDefaultSourceCount; ++i) {
|
| - EXPECT_EQ(list_->GetSource(i).id.type,
|
| - content::DesktopMediaID::TYPE_WEB_CONTENTS);
|
| - }
|
| -
|
| - observer_.VerifyAndClearExpectations();
|
| - }
|
| -
|
| - // The path to temporary directory used to contain the test operations.
|
| - base::ScopedTempDir temp_dir_;
|
| - ScopedTestingLocalState local_state_;
|
| -
|
| - std::unique_ptr<content::RenderViewHostTestEnabler> rvh_test_enabler_;
|
| - Profile* profile_;
|
| - std::unique_ptr<Browser> browser_;
|
| - std::vector<std::unique_ptr<WebContents>> contents_array_;
|
| -
|
| - // Must be listed before |list_|, so it's destroyed last.
|
| - MockObserver observer_;
|
| - std::unique_ptr<TabDesktopMediaList> list_;
|
| -
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| -
|
| -#if defined(OS_CHROMEOS)
|
| - chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
|
| - chromeos::ScopedTestCrosSettings test_cros_settings_;
|
| - chromeos::ScopedTestUserManager test_user_manager_;
|
| -#endif
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(TabDesktopMediaListTest);
|
| -};
|
| -
|
| -TEST_F(TabDesktopMediaListTest, AddTab) {
|
| - InitializeAndVerify();
|
| -
|
| - AddWebcontents(10);
|
| -
|
| - EXPECT_CALL(observer_, OnSourceAdded(list_.get(), 0))
|
| - .WillOnce(CheckListSize(list_.get(), kDefaultSourceCount + 1));
|
| - EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
|
| - .WillOnce(QuitMessageLoop());
|
| -
|
| - base::RunLoop().Run();
|
| -
|
| - list_.reset();
|
| -}
|
| -
|
| -TEST_F(TabDesktopMediaListTest, RemoveTab) {
|
| - InitializeAndVerify();
|
| -
|
| - TabStripModel* tab_strip_model = browser_->tab_strip_model();
|
| - ASSERT_TRUE(tab_strip_model);
|
| - tab_strip_model->DetachWebContentsAt(kDefaultSourceCount - 1);
|
| -
|
| - EXPECT_CALL(observer_, OnSourceRemoved(list_.get(), 0))
|
| - .WillOnce(
|
| - testing::DoAll(CheckListSize(list_.get(), kDefaultSourceCount - 1),
|
| - QuitMessageLoop()));
|
| -
|
| - base::RunLoop().Run();
|
| -
|
| - list_.reset();
|
| -}
|
| -
|
| -TEST_F(TabDesktopMediaListTest, MoveTab) {
|
| - InitializeAndVerify();
|
| -
|
| - // Swap the two media sources by swap their time stamps.
|
| - TabStripModel* tab_strip_model = browser_->tab_strip_model();
|
| - ASSERT_TRUE(tab_strip_model);
|
| -
|
| - WebContents* contents0 = tab_strip_model->GetWebContentsAt(0);
|
| - ASSERT_TRUE(contents0);
|
| - base::TimeTicks t0 = contents0->GetLastActiveTime();
|
| - WebContents* contents1 = tab_strip_model->GetWebContentsAt(1);
|
| - ASSERT_TRUE(contents1);
|
| - base::TimeTicks t1 = contents1->GetLastActiveTime();
|
| -
|
| - contents0->SetLastActiveTime(t1);
|
| - contents1->SetLastActiveTime(t0);
|
| -
|
| - EXPECT_CALL(observer_, OnSourceMoved(list_.get(), 1, 0))
|
| - .WillOnce(testing::DoAll(CheckListSize(list_.get(), kDefaultSourceCount),
|
| - QuitMessageLoop()));
|
| -
|
| - base::RunLoop().Run();
|
| -
|
| - list_.reset();
|
| -}
|
| -
|
| -TEST_F(TabDesktopMediaListTest, UpdateTitle) {
|
| - InitializeAndVerify();
|
| -
|
| - // Change tab's title.
|
| - TabStripModel* tab_strip_model = browser_->tab_strip_model();
|
| - ASSERT_TRUE(tab_strip_model);
|
| - WebContents* contents =
|
| - tab_strip_model->GetWebContentsAt(kDefaultSourceCount - 1);
|
| - ASSERT_TRUE(contents);
|
| - const content::NavigationController& controller = contents->GetController();
|
| - contents->UpdateTitleForEntry(controller.GetTransientEntry(),
|
| - base::ASCIIToUTF16("New test tab"));
|
| -
|
| - EXPECT_CALL(observer_, OnSourceNameChanged(list_.get(), 0))
|
| - .WillOnce(QuitMessageLoop());
|
| -
|
| - base::RunLoop().Run();
|
| -
|
| - EXPECT_EQ(list_->GetSource(0).name, base::UTF8ToUTF16("New test tab"));
|
| -
|
| - list_.reset();
|
| -}
|
| -
|
| -TEST_F(TabDesktopMediaListTest, UpdateThumbnail) {
|
| - InitializeAndVerify();
|
| -
|
| - // Change tab's favicon.
|
| - TabStripModel* tab_strip_model = browser_->tab_strip_model();
|
| - ASSERT_TRUE(tab_strip_model);
|
| - WebContents* contents =
|
| - tab_strip_model->GetWebContentsAt(kDefaultSourceCount - 1);
|
| - ASSERT_TRUE(contents);
|
| -
|
| - content::FaviconStatus favicon_info;
|
| - favicon_info.image = CreateGrayscaleImage(gfx::Size(10, 10), 100);
|
| - contents->GetController().GetTransientEntry()->GetFavicon() = favicon_info;
|
| -
|
| - EXPECT_CALL(observer_, OnSourceThumbnailChanged(list_.get(), 0))
|
| - .WillOnce(QuitMessageLoop());
|
| -
|
| - base::RunLoop().Run();
|
| -
|
| - list_.reset();
|
| -}
|
|
|