New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 656563 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Android MediaRouter only (left Chro...
Closed: Nov 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 1
Type: Bug

Blocked on:
issue 656574
issue 658678

Blocking:
issue 581728



Sign in to add a comment

Add media controls to MediaSession

Project Member Reported by zqzh...@chromium.org, Oct 17 2016

Issue description

Tasks:
* Update Blink MediaSession interface.
* Add new mojo service serving from the Blink side.
* Plumbing the controls through jni.
* Show and responding to media controls.
 
Blockedon: 656574
Project Member

Comment 2 by bugdroid1@chromium.org, Oct 19 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1

commit a61be6ec45bcd6e53525509fe4907e62b6bb5ef1
Author: zqzhang <zqzhang@chromium.org>
Date: Wed Oct 19 16:33:25 2016

Add media controls to MediaSession in Blink

This CL add the media control interfaces to Blink MediaSession.

Explainer draft:
https://github.com/WICG/mediasession/blob/master/explainer.md#media-controls

BUG= 656563 

Review-Url: https://chromiumcodereview.appspot.com/2428523002
Cr-Commit-Position: refs/heads/master@{#426220}

[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/core/events/EventTypeNames.in
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/EventTargetModulesFactory.in
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/DEPS
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.h
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.idl
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.cpp
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.h
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.idl

Project Member

Comment 3 by bugdroid1@chromium.org, Oct 19 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1

commit a61be6ec45bcd6e53525509fe4907e62b6bb5ef1
Author: zqzhang <zqzhang@chromium.org>
Date: Wed Oct 19 16:33:25 2016

Add media controls to MediaSession in Blink

This CL add the media control interfaces to Blink MediaSession.

Explainer draft:
https://github.com/WICG/mediasession/blob/master/explainer.md#media-controls

BUG= 656563 

Review-Url: https://chromiumcodereview.appspot.com/2428523002
Cr-Commit-Position: refs/heads/master@{#426220}

[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-navigated-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-navigated-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-and-gced-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/fast/dom/Window/property-access-on-cached-window-after-frame-removed-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/LayoutTests/webexposed/global-interface-listing-expected.txt
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/core/events/EventTypeNames.in
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/EventTargetModulesFactory.in
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/DEPS
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.h
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/MediaSession.idl
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.cpp
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.h
[modify] https://crrev.com/a61be6ec45bcd6e53525509fe4907e62b6bb5ef1/third_party/WebKit/Source/modules/mediasession/NavigatorMediaSession.idl

Project Member

Comment 4 by bugdroid1@chromium.org, Oct 21 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/649f9b868f6783ec9de71c123212b908bf3b232e

commit 649f9b868f6783ec9de71c123212b908bf3b232e
Author: zqzhang <zqzhang@chromium.org>
Date: Fri Oct 21 23:17:31 2016

Adding mojo MediaSessionClient to support media controls

This CL adds MediaSessionClient mojo interface to allow Blink
MediaSession and content::MediaSession communicate for media control
messages.

BUG= 656563 

Review-Url: https://chromiumcodereview.appspot.com/2426653002
Cr-Commit-Position: refs/heads/master@{#426924}

[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/content/browser/media/session/media_session_service_impl.cc
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/content/browser/media/session/media_session_service_impl.h
[add] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/LayoutTests/media/mediasession/mojo/media-control-action-reaches-client.html
[add] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/LayoutTests/media/mediasession/mojo/media-control-set-handler-notifies-service.html
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/utils.js
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/Source/modules/mediasession/DEPS
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/Source/modules/mediasession/MediaSession.h
[modify] https://crrev.com/649f9b868f6783ec9de71c123212b908bf3b232e/third_party/WebKit/public/platform/modules/mediasession/media_session.mojom

Blockedon: 658678
Blocking: 581728
Project Member

Comment 7 by bugdroid1@chromium.org, Nov 3 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/fb90347c0ad1437e9fa674e7c70db9512b570444

commit fb90347c0ad1437e9fa674e7c70db9512b570444
Author: zqzhang <zqzhang@chromium.org>
Date: Thu Nov 03 16:33:54 2016

Adding media controls to MediaNotification

This CL adds new media controls to MediaNotification. The controls are enabled
from the MediaSession API in blink, and is propagated to the browser side
through mojom MediaSessionService. Then we show a corresponding button in media
notification. When the user clicks the button, the event will be propagate back
to the page through mojom MediaSessionClient.

This CL has the following changes:
* Plumb media control messages from content/ to chrome/ Java.
* Add control buttons to MediaNotification

Slides explaining how media controls work:
https://docs.google.com/a/google.com/presentation/d/1jGNB9aT3mbpPszC3SiQnQ70CjVDmH-haomHCrqSVVAw/edit?usp=sharing

Test URL:
http://xxyzzzq.github.io/sandbox/media-session/full-test.html

BUG= 656563 
TEST=MANUAL

Review-Url: https://codereview.chromium.org/2442303002
Cr-Commit-Position: refs/heads/master@{#429614}

[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/BUILD.gn
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_next.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_next.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_previous.png
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/remote/CastNotificationControl.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastSessionImpl.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationInfo.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationListener.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationManager.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/chrome/android/java/strings/android_chrome_strings.grd
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_android.cc
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_android.h
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_impl.cc
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_impl.h
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_service_impl.cc
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/browser/media/session/media_session_service_impl.h
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/public/browser/media_session.h
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/content/public/browser/media_session_observer.h
[modify] https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp

Project Member

Comment 8 by bugdroid1@chromium.org, Nov 3 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/744aa665b7e0d15b7c277283a5a1926e5d778085

commit 744aa665b7e0d15b7c277283a5a1926e5d778085
Author: mathp <mathp@chromium.org>
Date: Thu Nov 03 21:26:02 2016

Revert of Adding new media controls to MediaNotification (patchset #10 id:200001 of https://codereview.chromium.org/2442303002/ )

Reason for revert:
Speculative revert for webview apk test failures:

https://build.chromium.org/p/chromium.linux/builders/Android%20Tests%20%28dbg%29/builds/36922

Original issue's description:
> Adding media controls to MediaNotification
>
> This CL adds new media controls to MediaNotification. The controls are enabled
> from the MediaSession API in blink, and is propagated to the browser side
> through mojom MediaSessionService. Then we show a corresponding button in media
> notification. When the user clicks the button, the event will be propagate back
> to the page through mojom MediaSessionClient.
>
> This CL has the following changes:
> * Plumb media control messages from content/ to chrome/ Java.
> * Add control buttons to MediaNotification
>
> Slides explaining how media controls work:
> https://docs.google.com/a/google.com/presentation/d/1jGNB9aT3mbpPszC3SiQnQ70CjVDmH-haomHCrqSVVAw/edit?usp=sharing
>
> Test URL:
> http://xxyzzzq.github.io/sandbox/media-session/full-test.html
>
> BUG= 656563 
> TEST=MANUAL
>
> Committed: https://crrev.com/fb90347c0ad1437e9fa674e7c70db9512b570444
> Cr-Commit-Position: refs/heads/master@{#429614}

TBR=avayvod@chromium.org,boliu@chromium.org,jam@chromium.org,kenrb@chromium.org,tedchoc@chromium.org,zqzhang@chromium.org
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG= 656563 

Review-Url: https://codereview.chromium.org/2479603003
Cr-Commit-Position: refs/heads/master@{#429697}

[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/BUILD.gn
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_next.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_previous.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_next.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_previous.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_next.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_previous.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_next.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_previous.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_next.png
[delete] https://crrev.com/7bacd498506b1089ec53cddf76152baa4840bc24/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_previous.png
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/remote/CastNotificationControl.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastSessionImpl.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationInfo.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationListener.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationManager.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/chrome/android/java/strings/android_chrome_strings.grd
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_android.cc
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_android.h
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_impl.cc
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_impl.h
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_service_impl.cc
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/browser/media/session/media_session_service_impl.h
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/public/browser/media_session.h
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/content/public/browser/media_session_observer.h
[modify] https://crrev.com/744aa665b7e0d15b7c277283a5a1926e5d778085/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp

Project Member

Comment 9 by bugdroid1@chromium.org, Nov 4 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944

commit 015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944
Author: zqzhang <zqzhang@chromium.org>
Date: Fri Nov 04 12:10:52 2016

Reland "Adding media controls to MediaNotification"

Relanding this CL since it was previously reverted due to a wrong
speculate on the bot.

This CL adds new media controls to MediaNotification. The controls are
enabled from the MediaSession API in blink, and is propagated to the
browser side through mojom MediaSessionService. Then we show a
corresponding button in media notification. When the user clicks the
button, the event will be propagate back to the page through mojom
MediaSessionClient.

This CL has the following changes:
* Plumb media control messages from content/ to chrome/ Java.
* Add control buttons to MediaNotification

Slides explaining how media controls work:
https://docs.google.com/a/google.com/presentation/d/1jGNB9aT3mbpPszC3SiQnQ70CjVDmH-haomHCrqSVVAw/edit?usp=sharing

Test URL:
http://xxyzzzq.github.io/sandbox/media-session/full-test.html

BUG= 656563 
TBR=kenrb@chromium.org, tedchoc@chromium.org, avayvod@chromium.org, jam@chromium.org, boliu@chromium.org
TEST=MANUAL

Review-Url: https://codereview.chromium.org/2469893007
Cr-Commit-Position: refs/heads/master@{#429864}

[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/BUILD.gn
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_next.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-hdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_next.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-mdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xhdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xxhdpi/ic_media_control_skip_previous.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_next.png
[add] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_skip_previous.png
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/remote/CastNotificationControl.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/router/cast/CastSessionImpl.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationInfo.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationListener.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationManager.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaSessionTabHelper.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/chrome/android/java/strings/android_chrome_strings.grd
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_android.cc
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_android.h
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_impl.cc
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_impl.h
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_service_impl.cc
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/browser/media/session/media_session_service_impl.h
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/public/android/java/src/org/chromium/content/browser/MediaSessionImpl.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/public/android/java/src/org/chromium/content_public/browser/MediaSession.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/public/android/java/src/org/chromium/content_public/browser/MediaSessionObserver.java
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/public/browser/media_session.h
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/content/public/browser/media_session_observer.h
[modify] https://crrev.com/015da1aa7fe79abc631ea59ac5ed0e2a7dfb1944/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp

Project Member

Comment 10 by bugdroid1@chromium.org, Nov 4 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/2ad79b35d6c1a054c1f38681deff659cd2f3b00d

commit 2ad79b35d6c1a054c1f38681deff659cd2f3b00d
Author: zqzhang <zqzhang@chromium.org>
Date: Fri Nov 04 17:03:37 2016

[MediaNotification] Listen to previous/next track from Android MediaSession

This CL makes media notification respond to previous/next track
controls from Android MediaSession in addition to the
notification buttons.

BUG= 656563 

Review-Url: https://codereview.chromium.org/2470233008
Cr-Commit-Position: refs/heads/master@{#429921}

[modify] https://crrev.com/2ad79b35d6c1a054c1f38681deff659cd2f3b00d/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationManager.java

Project Member

Comment 11 by bugdroid1@chromium.org, Nov 18 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/d24d2f35eebdcfb9629ffe4641c65b833a1d3135

commit d24d2f35eebdcfb9629ffe4641c65b833a1d3135
Author: zqzhang <zqzhang@chromium.org>
Date: Fri Nov 18 18:43:05 2016

Reordering MediaSessionAction seek backward/forward

The current order of MediaSessionAction is a bit odd since we
have "next track" after "previous track", while "seek backward"
after "seek forward". i.e. "|<" ">|" and ">>" "<<". Reordering
seek backward/forward will make it more natural.

BUG= 656563 

Review-Url: https://codereview.chromium.org/2497493005
Cr-Commit-Position: refs/heads/master@{#433251}

[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/LayoutTests/media/mediasession/mojo/media-control-action-reaches-client.html
[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/LayoutTests/media/mediasession/mojo/media-control-set-handler-notifies-service.html
[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/mediasessionservice-mock.js
[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/LayoutTests/media/mediasession/mojo/resources/utils.js
[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/Source/modules/mediasession/MediaSession.cpp
[modify] https://crrev.com/d24d2f35eebdcfb9629ffe4641c65b833a1d3135/third_party/WebKit/public/platform/modules/mediasession/media_session.mojom

Project Member

Comment 12 by bugdroid1@chromium.org, Nov 30 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/cc56b29ef844962a6bb3e0e75a76a9339030847f

commit cc56b29ef844962a6bb3e0e75a76a9339030847f
Author: zqzhang <zqzhang@chromium.org>
Date: Wed Nov 30 17:11:12 2016

Add seek forward/backward controls in MediaNotification

This CL adds support for MediaSession seekforward and
seekbackward to MediaNotification. On pre-N, a maximum of 3
buttons is shown in BigView to improve the notification
appearance, while it is 5 for N.

BUG= 656563 , 656574 

Review-Url: https://codereview.chromium.org/2498683002
Cr-Commit-Position: refs/heads/master@{#435304}

[modify] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/BUILD.gn
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-hdpi/ic_media_control_fast_forward.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-hdpi/ic_media_control_fast_rewind.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-mdpi/ic_media_control_fast_forward.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-mdpi/ic_media_control_fast_rewind.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xhdpi/ic_media_control_fast_forward.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xhdpi/ic_media_control_fast_rewind.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xxhdpi/ic_media_control_fast_forward.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xxhdpi/ic_media_control_fast_rewind.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_fast_forward.png
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/res/drawable-xxxhdpi/ic_media_control_fast_rewind.png
[modify] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/src/org/chromium/chrome/browser/media/ui/MediaNotificationManager.java
[modify] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java/strings/android_chrome_strings.grd
[modify] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/java_sources.gni
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/junit/src/org/chromium/chrome/browser/media/ui/MediaNotificationButtonComputationTest.java
[add] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/chrome/android/junit/src/org/chromium/chrome/browser/media/ui/OWNERS
[modify] https://crrev.com/cc56b29ef844962a6bb3e0e75a76a9339030847f/third_party/WebKit/public/platform/modules/mediasession/media_session.mojom

Status: Fixed (was: Assigned)

Sign in to add a comment