| Index: third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
|
| diff --git a/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp b/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5e74588549fb9646609c341765c26081cbb95afd
|
| --- /dev/null
|
| +++ b/third_party/WebKit/Source/core/html/HTMLVideoElementTest.cpp
|
| @@ -0,0 +1,145 @@
|
| +// Copyright 2015 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 "core/html/HTMLVideoElement.h"
|
| +
|
| +#include "core/dom/Document.h"
|
| +#include "core/loader/EmptyClients.h"
|
| +#include "core/page/NetworkStateNotifier.h"
|
| +#include "core/testing/DummyPageHolder.h"
|
| +#include "platform/UserGestureIndicator.h"
|
| +#include "platform/testing/UnitTestHelpers.h"
|
| +#include "public/platform/WebMediaPlayer.h"
|
| +#include "public/platform/WebSize.h"
|
| +#include "testing/gmock/include/gmock/gmock.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace blink {
|
| +
|
| +namespace {
|
| +
|
| +class EmptyWebMediaPlayer : public WebMediaPlayer {
|
| +public:
|
| + void load(LoadType, const WebURL&, CORSMode) override { };
|
| + void play() override { };
|
| + void pause() override { };
|
| + bool supportsSave() const override { return false; };
|
| + void seek(double seconds) override { };
|
| + void setRate(double) override { };
|
| + void setVolume(double) override { };
|
| + WebTimeRanges buffered() const override { return WebTimeRanges(); };
|
| + WebTimeRanges seekable() const override { return WebTimeRanges(); };
|
| + void setSinkId(const WebString& sinkId, const WebSecurityOrigin&, WebSetSinkIdCallbacks*) override { };
|
| + bool hasVideo() const override { return false; };
|
| + bool hasAudio() const override { return false; };
|
| + WebSize naturalSize() const override { return WebSize(0, 0); };
|
| + bool paused() const override { return false; };
|
| + bool seeking() const override { return false; };
|
| + double duration() const override { return 0.0; };
|
| + double currentTime() const override { return 0.0; };
|
| + NetworkState networkState() const override { return NetworkStateEmpty; };
|
| + ReadyState readyState() const override { return ReadyStateHaveNothing; };
|
| + bool didLoadingProgress() override { return false; };
|
| + bool hasSingleSecurityOrigin() const override { return true; };
|
| + bool didPassCORSAccessCheck() const override { return true; };
|
| + double mediaTimeForTimeValue(double timeValue) const override { return timeValue; };
|
| + unsigned decodedFrameCount() const override { return 0; };
|
| + unsigned droppedFrameCount() const override { return 0; };
|
| + unsigned audioDecodedByteCount() const override { return 0; };
|
| + unsigned videoDecodedByteCount() const override { return 0; };
|
| + void paint(WebCanvas*, const WebRect&, unsigned char alpha, SkXfermode::Mode) override { };
|
| +};
|
| +
|
| +class MockWebMediaPlayer : public EmptyWebMediaPlayer {
|
| +public:
|
| + MOCK_METHOD1(setBufferingStrategy, void(BufferingStrategy));
|
| +};
|
| +
|
| +class StubFrameLoaderClient : public EmptyFrameLoaderClient {
|
| +public:
|
| + static PassOwnPtrWillBeRawPtr<StubFrameLoaderClient> create()
|
| + {
|
| + return adoptPtrWillBeNoop(new StubFrameLoaderClient);
|
| + }
|
| +
|
| + PassOwnPtr<WebMediaPlayer> createWebMediaPlayer(HTMLMediaElement&, const WebURL&, WebMediaPlayerClient*) override
|
| + {
|
| + return adoptPtr(new MockWebMediaPlayer);
|
| + }
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class HTMLVideoElementTest : public ::testing::Test {
|
| +protected:
|
| + HTMLVideoElementTest()
|
| + : m_dummyPageHolder(DummyPageHolder::create(IntSize(640, 360), nullptr, StubFrameLoaderClient::create()))
|
| + {
|
| + // TODO(sandersd): This should be done by a settings initializer.
|
| + networkStateNotifier().setWebConnection(WebConnectionTypeWifi, 54.0);
|
| + m_video = HTMLVideoElement::create(m_dummyPageHolder->document());
|
| + }
|
| +
|
| + void setSrc(const AtomicString& url)
|
| + {
|
| + m_video->setSrc(url);
|
| + testing::runPendingTasks();
|
| + }
|
| +
|
| + MockWebMediaPlayer* webMediaPlayer()
|
| + {
|
| + return static_cast<MockWebMediaPlayer*>(m_video->webMediaPlayer());
|
| + }
|
| +
|
| + OwnPtr<DummyPageHolder> m_dummyPageHolder;
|
| + RefPtrWillBePersistent<HTMLVideoElement> m_video;
|
| +};
|
| +
|
| +TEST_F(HTMLVideoElementTest, setBufferingStrategy_NonUserPause)
|
| +{
|
| + setSrc("http://foo.bar/");
|
| + MockWebMediaPlayer* player = webMediaPlayer();
|
| + ASSERT_TRUE(player);
|
| +
|
| + // On play, the strategy is set to normal.
|
| + EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Normal));
|
| + m_video->play();
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +
|
| + // On a non-user pause, the strategy is not changed.
|
| + m_video->pause();
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +
|
| + // On play, the strategy is set to normal.
|
| + EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Normal));
|
| + m_video->play();
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +}
|
| +
|
| +TEST_F(HTMLVideoElementTest, setBufferingStrategy_UserPause)
|
| +{
|
| + setSrc("http://foo.bar/");
|
| + MockWebMediaPlayer* player = webMediaPlayer();
|
| + ASSERT_TRUE(player);
|
| +
|
| + // On play, the strategy is set to normal.
|
| + EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Normal));
|
| + m_video->play();
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +
|
| + // On a user pause, the strategy is set to aggressive.
|
| + EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Aggressive));
|
| + {
|
| + UserGestureIndicator gesture(DefinitelyProcessingUserGesture);
|
| + m_video->pause();
|
| + }
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +
|
| + // On play, the strategy is set to normal.
|
| + EXPECT_CALL(*player, setBufferingStrategy(WebMediaPlayer::BufferingStrategy::Normal));
|
| + m_video->play();
|
| + ::testing::Mock::VerifyAndClearExpectations(player);
|
| +}
|
| +
|
| +} // namespace blink
|
|
|