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

Side by Side Diff: content/browser/media/session/media_session_impl_browsertest.cc

Issue 2612293003: [MediaSession] Don't reset metadata and actions when the session goes uncontrollable (Closed)
Patch Set: rebased Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/media/session/media_session_impl.h" 5 #include "content/browser/media/session/media_session_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <list> 9 #include <list>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/metrics/histogram_samples.h" 14 #include "base/metrics/histogram_samples.h"
15 #include "base/test/histogram_tester.h" 15 #include "base/test/histogram_tester.h"
16 #include "base/test/simple_test_tick_clock.h" 16 #include "base/test/simple_test_tick_clock.h"
17 #include "content/browser/media/session/audio_focus_delegate.h" 17 #include "content/browser/media/session/audio_focus_delegate.h"
18 #include "content/browser/media/session/media_session_service_impl.h" 18 #include "content/browser/media/session/media_session_service_impl.h"
19 #include "content/browser/media/session/mock_media_session_observer.h"
19 #include "content/browser/media/session/mock_media_session_player_observer.h" 20 #include "content/browser/media/session/mock_media_session_player_observer.h"
20 #include "content/public/browser/media_session.h" 21 #include "content/public/browser/media_session.h"
21 #include "content/public/browser/media_session_observer.h"
22 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
23 #include "content/public/test/content_browser_test.h" 23 #include "content/public/test/content_browser_test.h"
24 #include "content/shell/browser/shell.h" 24 #include "content/shell/browser/shell.h"
25 #include "media/base/media_content_type.h" 25 #include "media/base/media_content_type.h"
26 #include "testing/gmock/include/gmock/gmock.h" 26 #include "testing/gmock/include/gmock/gmock.h"
27 27
28 using content::WebContents; 28 using content::WebContents;
29 using content::MediaSession; 29 using content::MediaSession;
30 using content::MediaSessionImpl; 30 using content::MediaSessionImpl;
31 using content::MediaSessionObserver; 31 using content::MediaSessionObserver;
(...skipping 14 matching lines...) Expand all
46 public: 46 public:
47 MockAudioFocusDelegate() { 47 MockAudioFocusDelegate() {
48 ON_CALL(*this, RequestAudioFocus(_)).WillByDefault(::testing::Return(true)); 48 ON_CALL(*this, RequestAudioFocus(_)).WillByDefault(::testing::Return(true));
49 } 49 }
50 50
51 MOCK_METHOD1(RequestAudioFocus, 51 MOCK_METHOD1(RequestAudioFocus,
52 bool(content::AudioFocusManager::AudioFocusType)); 52 bool(content::AudioFocusManager::AudioFocusType));
53 MOCK_METHOD0(AbandonAudioFocus, void()); 53 MOCK_METHOD0(AbandonAudioFocus, void());
54 }; 54 };
55 55
56 class MockMediaSessionObserver : public MediaSessionObserver {
57 public:
58 MockMediaSessionObserver(MediaSession* media_session)
59 : MediaSessionObserver(media_session) {}
60
61 MOCK_METHOD2(MediaSessionStateChanged,
62 void(bool is_controllable, bool is_suspended));
63 MOCK_METHOD0(MediaSessionDestroyed, void());
64 };
65
66 class MockMediaSessionServiceImpl : public content::MediaSessionServiceImpl { 56 class MockMediaSessionServiceImpl : public content::MediaSessionServiceImpl {
67 public: 57 public:
68 explicit MockMediaSessionServiceImpl(content::RenderFrameHost* rfh) 58 explicit MockMediaSessionServiceImpl(content::RenderFrameHost* rfh)
69 : MediaSessionServiceImpl(rfh) {} 59 : MediaSessionServiceImpl(rfh) {}
70 ~MockMediaSessionServiceImpl() override = default; 60 ~MockMediaSessionServiceImpl() override = default;
71 }; 61 };
72 62
73 } // namespace 63 } // namespace
74 64
75 class MediaSessionImplBrowserTest : public content::ContentBrowserTest { 65 class MediaSessionImplBrowserTest : public content::ContentBrowserTest {
76 protected: 66 protected:
77 MediaSessionImplBrowserTest() = default; 67 MediaSessionImplBrowserTest() = default;
78 68
79 void SetUpOnMainThread() override { 69 void SetUpOnMainThread() override {
80 ContentBrowserTest::SetUpOnMainThread(); 70 ContentBrowserTest::SetUpOnMainThread();
81 71
82 media_session_ = MediaSessionImpl::Get(shell()->web_contents()); 72 media_session_ = MediaSessionImpl::Get(shell()->web_contents());
83 mock_media_session_observer_.reset( 73 mock_media_session_observer_.reset(
84 new MockMediaSessionObserver(media_session_)); 74 new content::MockMediaSessionObserver(media_session_));
85 mock_audio_focus_delegate_ = new MockAudioFocusDelegate; 75 mock_audio_focus_delegate_ = new MockAudioFocusDelegate;
86 media_session_->SetDelegateForTests( 76 media_session_->SetDelegateForTests(
87 base::WrapUnique(mock_audio_focus_delegate_)); 77 base::WrapUnique(mock_audio_focus_delegate_));
88 ASSERT_TRUE(media_session_); 78 ASSERT_TRUE(media_session_);
89 } 79 }
90 80
91 void TearDownOnMainThread() override { 81 void TearDownOnMainThread() override {
92 mock_media_session_observer_.reset(); 82 mock_media_session_observer_.reset();
93 media_session_->RemoveAllPlayersForTest(); 83 media_session_->RemoveAllPlayersForTest();
94 mock_media_session_service_.reset(); 84 mock_media_session_service_.reset();
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 146
157 void EnsureMediaSessionService() { 147 void EnsureMediaSessionService() {
158 mock_media_session_service_.reset(new MockMediaSessionServiceImpl( 148 mock_media_session_service_.reset(new MockMediaSessionServiceImpl(
159 shell()->web_contents()->GetMainFrame())); 149 shell()->web_contents()->GetMainFrame()));
160 } 150 }
161 151
162 void SetPlaybackState(blink::mojom::MediaSessionPlaybackState state) { 152 void SetPlaybackState(blink::mojom::MediaSessionPlaybackState state) {
163 mock_media_session_service_->SetPlaybackState(state); 153 mock_media_session_service_->SetPlaybackState(state);
164 } 154 }
165 155
166 MockMediaSessionObserver* mock_media_session_observer() { 156 content::MockMediaSessionObserver* mock_media_session_observer() {
167 return mock_media_session_observer_.get(); 157 return mock_media_session_observer_.get();
168 } 158 }
169 159
170 MockAudioFocusDelegate* mock_audio_focus_delegate() { 160 MockAudioFocusDelegate* mock_audio_focus_delegate() {
171 return mock_audio_focus_delegate_; 161 return mock_audio_focus_delegate_;
172 } 162 }
173 163
174 std::unique_ptr<MediaSessionImpl> CreateDummyMediaSession() { 164 std::unique_ptr<MediaSessionImpl> CreateDummyMediaSession() {
175 return base::WrapUnique<MediaSessionImpl>(new MediaSessionImpl(nullptr)); 165 return base::WrapUnique<MediaSessionImpl>(new MediaSessionImpl(nullptr));
176 } 166 }
177 167
178 MediaSessionUmaHelper* GetMediaSessionUMAHelper() { 168 MediaSessionUmaHelper* GetMediaSessionUMAHelper() {
179 return media_session_->uma_helper_for_test(); 169 return media_session_->uma_helper_for_test();
180 } 170 }
181 171
182 protected: 172 protected:
183 MediaSessionImpl* media_session_; 173 MediaSessionImpl* media_session_;
184 std::unique_ptr<MockMediaSessionObserver> mock_media_session_observer_; 174 std::unique_ptr<content::MockMediaSessionObserver>
175 mock_media_session_observer_;
185 MockAudioFocusDelegate* mock_audio_focus_delegate_; 176 MockAudioFocusDelegate* mock_audio_focus_delegate_;
186 std::unique_ptr<MockMediaSessionServiceImpl> mock_media_session_service_; 177 std::unique_ptr<MockMediaSessionServiceImpl> mock_media_session_service_;
187 178
188 DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest); 179 DISALLOW_COPY_AND_ASSIGN(MediaSessionImplBrowserTest);
189 }; 180 };
190 181
191 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest, 182 IN_PROC_BROWSER_TEST_F(MediaSessionImplBrowserTest,
192 PlayersFromSameObserverDoNotStopEachOtherInSameSession) { 183 PlayersFromSameObserverDoNotStopEachOtherInSameSession) {
193 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>(); 184 auto player_observer = base::MakeUnique<MockMediaSessionPlayerObserver>();
194 185
(...skipping 1220 matching lines...) Expand 10 before | Expand all | Expand 10 after
1415 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent); 1406 StartNewPlayer(player_observer.get(), media::MediaContentType::Persistent);
1416 clock->Advance(base::TimeDelta::FromMilliseconds(1000)); 1407 clock->Advance(base::TimeDelta::FromMilliseconds(1000));
1417 media_session_->Stop(MediaSession::SuspendType::UI); 1408 media_session_->Stop(MediaSession::SuspendType::UI);
1418 1409
1419 std::unique_ptr<base::HistogramSamples> samples( 1410 std::unique_ptr<base::HistogramSamples> samples(
1420 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime")); 1411 tester.GetHistogramSamplesSinceCreation("Media.Session.ActiveTime"));
1421 EXPECT_EQ(2, samples->TotalCount()); 1412 EXPECT_EQ(2, samples->TotalCount());
1422 EXPECT_EQ(1, samples->GetCount(1000)); 1413 EXPECT_EQ(1, samples->GetCount(1000));
1423 EXPECT_EQ(1, samples->GetCount(10000)); 1414 EXPECT_EQ(1, samples->GetCount(10000));
1424 } 1415 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698