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

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 reviewers' 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 #if defined(OS_ANDROID)
DaleCurtis 2016/06/29 17:20:20 Should we just not include this file for non-andro
Zhiqiang Zhang (Slow) 2016/06/29 19:16:13 Oops, files with "android" in the pathnames are ex
18
19 using ::testing::_;
20 using ::testing::InSequence;
21
22 namespace content {
23
24 namespace {
25
26 // Beware that the artwork is being sanitize-checked, thus might be removed if
27 // it's invalid.
28 std::string SET_METADATA_SCRIPT1 =
29 "var audio = document.createElement(\'audio\');"
30 "audio.session = new MediaSession();"
31 "audio.session.metadata = new MediaMetadata({"
32 "title: 'title1', artist: 'artist1', album: 'album1',"
33 "artwork: [{src: 'http://foo.com/bar.png', type: 'image/png', sizes: '128x12 8'}]});";
34
35 std::string SET_METADATA_SCRIPT2 =
36 "var audio = document.createElement(\'audio\');"
37 "audio.session = new MediaSession();"
38 "audio.session.metadata = new MediaMetadata({"
39 "title: 'title2', artist: 'artist2', album: 'album2',"
40 "artwork: [{src: 'http://foo.com/bar.jpg', type: 'image/jpeg', sizes: 'any'} ]});";
41
42 } // anonymous namespace
43
44 class MockBrowserMediaSessionManager : public BrowserMediaSessionManager {
45 public:
46 MockBrowserMediaSessionManager(RenderFrameHost* render_frame_host)
47 : BrowserMediaSessionManager(render_frame_host) {}
48
49 MOCK_METHOD2(OnActiveate, void(int session_id, int request_id));
50 MOCK_METHOD2(OnDeactiveate, void(int session_id, int request_id));
51 MOCK_METHOD2(OnSetMetadata, void(int session_id,
52 const MediaMetadata& metadata));
53
54 private:
55 DISALLOW_COPY_AND_ASSIGN(MockBrowserMediaSessionManager);
56 };
57
58 class BrowserMediaSessionManagerBrowserTest : public ContentBrowserTest {
59 public:
60 BrowserMediaSessionManagerBrowserTest() = default;
61 ~BrowserMediaSessionManagerBrowserTest() override = default;
62
63 protected:
64 void SetUpOnMainThread() override {
65 ContentBrowserTest::SetUpOnMainThread();
66 web_contents_ = shell()->web_contents();
67 browser_media_session_manager_ =
68 new MockBrowserMediaSessionManager(web_contents_->GetMainFrame());
69 MediaWebContentsObserverAndroid::FromWebContents(web_contents_)
70 ->SetMediaSessionManagerForTest(
71 web_contents_->GetMainFrame(),
72 browser_media_session_manager_);
73 shell()->LoadURL(GURL("about:blank"));
74
75 ON_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
76 .WillByDefault(Invoke(
77 this, &BrowserMediaSessionManagerBrowserTest::OnSetMetadata));
78 }
79
80 void SetUpCommandLine(base::CommandLine* command_line) override {
81 command_line->AppendSwitchASCII(
82 switches::kEnableBlinkFeatures, "MediaSession");
83 }
84
85 void OnSetMetadata(int session_id, const MediaMetadata& metadata) {
86 received_metadata_ = metadata;
87 message_loop_runner_->Quit();
88 }
89
90 WebContents* web_contents_;
91 MockBrowserMediaSessionManager* browser_media_session_manager_;
92 scoped_refptr<MessageLoopRunner> message_loop_runner_;
93 MediaMetadata received_metadata_;
94 };
95
96 IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
97 TestMetadataPropagated) {
98 MediaMetadata expected;
99 expected.title = base::ASCIIToUTF16("title1");
100 expected.artist = base::ASCIIToUTF16("artist1");
101 expected.album = base::ASCIIToUTF16("album1");
102 MediaMetadata::Artwork artwork;
103 artwork.src = GURL("http://foo.com/bar.png");
104 artwork.type = base::NullableString16(base::ASCIIToUTF16("image/png"), false);
105 artwork.sizes.push_back(gfx::Size(128, 128));
106 expected.artwork.push_back(artwork);
107
108 message_loop_runner_ = new MessageLoopRunner();
109 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
110 .Times(1);
111 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
112 SET_METADATA_SCRIPT1));
113 message_loop_runner_->Run();
114 }
115
116 IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
117 TestSetMetadataTwice) {
118 // Make expectations ordered.
119 InSequence s;
120
121 MediaMetadata expected;
122 expected.title = base::ASCIIToUTF16("title2");
123 expected.artist = base::ASCIIToUTF16("artist2");
124 expected.album = base::ASCIIToUTF16("album2");
125 MediaMetadata::Artwork artwork;
126 artwork.src = GURL("http://foo.com/bar.jpg");
127 artwork.type = base::NullableString16(
128 base::ASCIIToUTF16("image/jpeg"), false);
129 artwork.sizes.push_back(gfx::Size(0, 0));
130 expected.artwork.push_back(artwork);
131
132 // Set metadata for the first time.
133 message_loop_runner_ = new MessageLoopRunner();
134 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
135 .Times(1);
136 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
137 SET_METADATA_SCRIPT1));
138 message_loop_runner_->Run();
139
140 // Set metadata for the second time.
141 message_loop_runner_ = new MessageLoopRunner();
142 EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
143 .Times(1);
144 ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
145 SET_METADATA_SCRIPT2));
146 message_loop_runner_->Run();
147 }
148
149 } // namespace content
150
151 #endif // defined(OS_ANDROID)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698