Index: content/browser/media/android/media_web_contents_observer_android.cc |
diff --git a/content/browser/media/android/media_web_contents_observer_android.cc b/content/browser/media/android/media_web_contents_observer_android.cc |
index aa66741fd92fe0de407e3498f4281d59a11fecfc..b14945bba7f18a6fefe5b94a41cad8250f6b34ef 100644 |
--- a/content/browser/media/android/media_web_contents_observer_android.cc |
+++ b/content/browser/media/android/media_web_contents_observer_android.cc |
@@ -4,6 +4,7 @@ |
#include "content/browser/media/android/media_web_contents_observer_android.h" |
+#include "base/callback.h" |
#include "content/browser/media/android/browser_media_player_manager.h" |
#include "content/browser/media/android/browser_media_session_manager.h" |
#include "content/browser/media/android/media_session.h" |
@@ -199,6 +200,19 @@ bool MediaWebContentsObserverAndroid::OnMessageReceived( |
return OnMediaPlayerSetCdmMessageReceived(msg, render_frame_host); |
} |
+void MediaWebContentsObserverAndroid::CheckFocus( |
+ int render_frame_id, |
+ const base::Closure& on_focus_cb) { |
+ for (const auto& kv : media_session_map_) { |
+ if (kv.first.first->GetRoutingID() == render_frame_id) { |
+ on_focus_cb.Run(); |
+ return; |
+ } |
+ } |
+ |
+ deferred_focus_cbs_[render_frame_id].push_back(on_focus_cb); |
+} |
+ |
void MediaWebContentsObserverAndroid::OnMediaPlayerDelegateMessageReceived( |
const IPC::Message& msg, |
RenderFrameHost* render_frame_host) { |
@@ -316,6 +330,7 @@ void MediaWebContentsObserverAndroid::OnMediaDestroyedNotification( |
RenderFrameHost* render_frame_host, |
int64_t player_cookie) { |
media_session_map_.erase(MediaPlayerId(render_frame_host, player_cookie)); |
+ deferred_focus_cbs_.erase(render_frame_host->GetRoutingID()); |
} |
void MediaWebContentsObserverAndroid::OnMediaPlayingNotification( |
@@ -339,6 +354,14 @@ void MediaWebContentsObserverAndroid::OnMediaPlayingNotification( |
return; |
media_session_map_[id] = std::move(controller); |
+ |
+ // Notify any deferred focus callbacks. |
+ auto it = deferred_focus_cbs_.find(render_frame_host->GetRoutingID()); |
+ if (it != deferred_focus_cbs_.end()) { |
+ for (const auto& cb : it->second) |
+ cb.Run(); |
+ deferred_focus_cbs_.erase(it); |
+ } |
} |
void MediaWebContentsObserverAndroid::OnMediaPausedNotification( |