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

Side by Side Diff: content/browser/media/android/browser_media_session_manager_browsertest.cc

Issue 2015433003: Implement MediaMetadata artwork in content (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed Dale's comments Created 4 years, 5 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/command_line.h"
6 #include "base/strings/utf_string_conversions.h"
7 #include "content/browser/media/android/browser_media_session_manager.h"
8 #include "content/browser/media/android/media_web_contents_observer_android.h"
9 #include "content/public/browser/web_contents.h"
10 #include "content/public/common/content_switches.h"
11 #include "content/public/test/browser_test_utils.h"
12 #include "content/public/test/content_browser_test.h"
13 #include "content/public/test/test_utils.h"
14 #include "content/shell/browser/shell.h"
15 #include "testing/gmock/include/gmock/gmock.h"
16
17 using ::testing::_;
18 using ::testing::InSequence;
19
20 namespace content {
21
22 namespace {
23
24 // Beware that the artwork is being sanitize-checked, thus might be removed if
25 // it's invalid.
26 std::string SET_METADATA_SCRIPT1 =
27 "var audio = document.createElement(\'audio\');"
28 "audio.session = new MediaSession();"
29 "audio.session.metadata = new MediaMetadata({"
30 "title: 'title1', artist: 'artist1', album: 'album1',"
31 "artwork: [{src: 'http://foo.com/bar.png', type: 'image/png', sizes: '128x12 8'}]});";
32
33 std::string SET_METADATA_SCRIPT2 =
34 "var audio = document.createElement(\'audio\');"
35 "audio.session = new MediaSession();"
36 "audio.session.metadata = new MediaMetadata({"
37 "title: 'title2', artist: 'artist2', album: 'album2',"
38 "artwork: [{src: 'http://foo.com/bar.jpg', type: 'image/jpeg', sizes: 'any'} ]});";
39
40 } // anonymous namespace
41
42 class MockBrowserMediaSessionManager : public BrowserMediaSessionManager {
43 public:
44 MockBrowserMediaSessionManager(RenderFrameHost* render_frame_host)
45 : BrowserMediaSessionManager(render_frame_host) {}
46
47 MOCK_METHOD2(OnActiveate, void(int session_id, int request_id));
48 MOCK_METHOD2(OnDeactiveate, void(int session_id, int request_id));
49 MOCK_METHOD2(OnSetMetadata, void(int session_id,
50 const MediaMetadata& metadata));
51
52 private:
53 DISALLOW_COPY_AND_ASSIGN(MockBrowserMediaSessionManager);
54 };
55
56 class BrowserMediaSessionManagerBrowserTest : public ContentBrowserTest {
57 public:
58 BrowserMediaSessionManagerBrowserTest() = default;
59 ~BrowserMediaSessionManagerBrowserTest() override = default;
60
61 protected:
62 void SetUpOnMainThread() override {
63 ContentBrowserTest::SetUpOnMainThread();
64 web_contents_ = shell()->web_contents();
65 browser_media_session_manager_ =
66 new MockBrowserMediaSessionManager(web_contents_->GetMainFrame());
67 MediaWebContentsObserverAndroid::FromWebContents(web_contents_)
68 ->SetMediaSessionManagerForTest(
69 web_contents_->GetMainFrame(),
70 browser_media_session_manager_);
71 shell()->LoadURL(GURL("about:blank"));
72
73 ON_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
74 .WillByDefault(Invoke(
75 this, &BrowserMediaSessionManagerBrowserTest::OnSetMetadata));
76 }
77
78 void SetUpCommandLine(base::CommandLine* command_line) override {
79 command_line->AppendSwitchASCII(
80 switches::kEnableBlinkFeatures, "MediaSession");
81 }
82
83 void OnSetMetadata(int session_id, const MediaMetadata& metadata) {
84 received_metadata_ = metadata;
85 message_loop_runner_->Quit();
86 }
87
88 WebContents* web_contents_;
89 MockBrowserMediaSessionManager* browser_media_session_manager_;
90 scoped_refptr<MessageLoopRunner> message_loop_runner_;
91 MediaMetadata received_metadata_;
92 };
93
94 IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
95 TestMetadataPropagated) {
96 MediaMetadata expected;
97 expected.title = base::ASCIIToUTF16("title1");
98 expected.artist = base::ASCIIToUTF16("artist1");
99 expected.album = base::ASCIIToUTF16("album1");
100 MediaMetadata::Artwork artwork;
101 artwork.src = GURL("http://foo.com/bar.png");
102 artwork.type = base::NullableString16(base::ASCIIToUTF16("image/png"), false);
103 artwork.sizes.push_back(gfx::Size(128, 128));
104 expected.artwork.push_back(artwork);
105
106 message_loop_runner_ = new MessageLoopRunner();
107 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
108 .Times(1);
109 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
110 SET_METADATA_SCRIPT1));
111 message_loop_runner_->Run();
112 }
113
114 IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
115 TestSetMetadataTwice) {
116 // Make expectations ordered.
117 InSequence s;
118
119 MediaMetadata expected;
120 expected.title = base::ASCIIToUTF16("title2");
121 expected.artist = base::ASCIIToUTF16("artist2");
122 expected.album = base::ASCIIToUTF16("album2");
123 MediaMetadata::Artwork artwork;
124 artwork.src = GURL("http://foo.com/bar.jpg");
125 artwork.type = base::NullableString16(
126 base::ASCIIToUTF16("image/jpeg"), false);
127 artwork.sizes.push_back(gfx::Size(0, 0));
128 expected.artwork.push_back(artwork);
129
130 // Set metadata for the first time.
131 message_loop_runner_ = new MessageLoopRunner();
132 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
133 .Times(1);
134 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
135 SET_METADATA_SCRIPT1));
136 message_loop_runner_->Run();
137
138 // Set metadata for the second time.
139 message_loop_runner_ = new MessageLoopRunner();
140 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
141 .Times(1);
142 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
143 SET_METADATA_SCRIPT2));
144 message_loop_runner_->Run();
145 }
146
147 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698