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

Unified 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, 6 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/media/android/browser_media_session_manager_browsertest.cc
diff --git a/content/browser/media/android/browser_media_session_manager_browsertest.cc b/content/browser/media/android/browser_media_session_manager_browsertest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..74fc667d96489f1e7fdeaf96812677d3dbc93e79
--- /dev/null
+++ b/content/browser/media/android/browser_media_session_manager_browsertest.cc
@@ -0,0 +1,151 @@
+// 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 "base/command_line.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/browser/media/android/browser_media_session_manager.h"
+#include "content/browser/media/android/media_web_contents_observer_android.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/common/content_switches.h"
+#include "content/public/test/browser_test_utils.h"
+#include "content/public/test/content_browser_test.h"
+#include "content/public/test/test_utils.h"
+#include "content/shell/browser/shell.h"
+#include "testing/gmock/include/gmock/gmock.h"
+
+#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
+
+using ::testing::_;
+using ::testing::InSequence;
+
+namespace content {
+
+namespace {
+
+// Beware that the artwork is being sanitize-checked, thus might be removed if
+// it's invalid.
+std::string SET_METADATA_SCRIPT1 =
+ "var audio = document.createElement(\'audio\');"
+ "audio.session = new MediaSession();"
+ "audio.session.metadata = new MediaMetadata({"
+ "title: 'title1', artist: 'artist1', album: 'album1',"
+ "artwork: [{src: 'http://foo.com/bar.png', type: 'image/png', sizes: '128x128'}]});";
+
+std::string SET_METADATA_SCRIPT2 =
+ "var audio = document.createElement(\'audio\');"
+ "audio.session = new MediaSession();"
+ "audio.session.metadata = new MediaMetadata({"
+ "title: 'title2', artist: 'artist2', album: 'album2',"
+ "artwork: [{src: 'http://foo.com/bar.jpg', type: 'image/jpeg', sizes: 'any'}]});";
+
+} // anonymous namespace
+
+class MockBrowserMediaSessionManager : public BrowserMediaSessionManager {
+ public:
+ MockBrowserMediaSessionManager(RenderFrameHost* render_frame_host)
+ : BrowserMediaSessionManager(render_frame_host) {}
+
+ MOCK_METHOD2(OnActiveate, void(int session_id, int request_id));
+ MOCK_METHOD2(OnDeactiveate, void(int session_id, int request_id));
+ MOCK_METHOD2(OnSetMetadata, void(int session_id,
+ const MediaMetadata& metadata));
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(MockBrowserMediaSessionManager);
+};
+
+class BrowserMediaSessionManagerBrowserTest : public ContentBrowserTest {
+ public:
+ BrowserMediaSessionManagerBrowserTest() = default;
+ ~BrowserMediaSessionManagerBrowserTest() override = default;
+
+ protected:
+ void SetUpOnMainThread() override {
+ ContentBrowserTest::SetUpOnMainThread();
+ web_contents_ = shell()->web_contents();
+ browser_media_session_manager_ =
+ new MockBrowserMediaSessionManager(web_contents_->GetMainFrame());
+ MediaWebContentsObserverAndroid::FromWebContents(web_contents_)
+ ->SetMediaSessionManagerForTest(
+ web_contents_->GetMainFrame(),
+ browser_media_session_manager_);
+ shell()->LoadURL(GURL("about:blank"));
+
+ ON_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
+ .WillByDefault(Invoke(
+ this, &BrowserMediaSessionManagerBrowserTest::OnSetMetadata));
+ }
+
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ command_line->AppendSwitchASCII(
+ switches::kEnableBlinkFeatures, "MediaSession");
+ }
+
+ void OnSetMetadata(int session_id, const MediaMetadata& metadata) {
+ received_metadata_ = metadata;
+ message_loop_runner_->Quit();
+ }
+
+ WebContents* web_contents_;
+ MockBrowserMediaSessionManager* browser_media_session_manager_;
+ scoped_refptr<MessageLoopRunner> message_loop_runner_;
+ MediaMetadata received_metadata_;
+};
+
+IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
+ TestMetadataPropagated) {
+ MediaMetadata expected;
+ expected.title = base::ASCIIToUTF16("title1");
+ expected.artist = base::ASCIIToUTF16("artist1");
+ expected.album = base::ASCIIToUTF16("album1");
+ MediaMetadata::Artwork artwork;
+ artwork.src = GURL("http://foo.com/bar.png");
+ artwork.type = base::NullableString16(base::ASCIIToUTF16("image/png"), false);
+ artwork.sizes.push_back(gfx::Size(128, 128));
+ expected.artwork.push_back(artwork);
+
+ message_loop_runner_ = new MessageLoopRunner();
+ EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
+ .Times(1);
+ ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
+ SET_METADATA_SCRIPT1));
+ message_loop_runner_->Run();
+}
+
+IN_PROC_BROWSER_TEST_F(BrowserMediaSessionManagerBrowserTest,
+ TestSetMetadataTwice) {
+ // Make expectations ordered.
+ InSequence s;
+
+ MediaMetadata expected;
+ expected.title = base::ASCIIToUTF16("title2");
+ expected.artist = base::ASCIIToUTF16("artist2");
+ expected.album = base::ASCIIToUTF16("album2");
+ MediaMetadata::Artwork artwork;
+ artwork.src = GURL("http://foo.com/bar.jpg");
+ artwork.type = base::NullableString16(
+ base::ASCIIToUTF16("image/jpeg"), false);
+ artwork.sizes.push_back(gfx::Size(0, 0));
+ expected.artwork.push_back(artwork);
+
+ // Set metadata for the first time.
+ message_loop_runner_ = new MessageLoopRunner();
+ EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, _))
+ .Times(1);
+ ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
+ SET_METADATA_SCRIPT1));
+ message_loop_runner_->Run();
+
+ // Set metadata for the second time.
+ message_loop_runner_ = new MessageLoopRunner();
+ EXPECT_CALL(*browser_media_session_manager_, OnSetMetadata(_, expected))
+ .Times(1);
+ ASSERT_TRUE(ExecuteScript(web_contents_->GetMainFrame(),
+ SET_METADATA_SCRIPT2));
+ message_loop_runner_->Run();
+}
+
+} // namespace content
+
+#endif // defined(OS_ANDROID)

Powered by Google App Engine
This is Rietveld 408576698