Index: content/browser/media/media_web_contents_observer.h |
diff --git a/content/browser/media/media_web_contents_observer.h b/content/browser/media/media_web_contents_observer.h |
index d902dc9608d40b80ac856590de24396884c16d09..6dcbfc186909c8f8ada54279e2d209d0792a9d14 100644 |
--- a/content/browser/media/media_web_contents_observer.h |
+++ b/content/browser/media/media_web_contents_observer.h |
@@ -11,6 +11,7 @@ |
#include <set> |
#include <vector> |
+#include "base/callback_forward.h" |
#include "base/macros.h" |
#include "base/memory/scoped_ptr.h" |
#include "content/common/content_export.h" |
@@ -47,6 +48,26 @@ class CONTENT_EXPORT MediaWebContentsObserver : public WebContentsObserver { |
return !!video_power_save_blocker_; |
} |
+ // Executes |focus_cb| on the calling thread once the given render frame has |
+ // audio focus. Clients are responsible for invalidating |focus_cb| if their |
+ // lifetime changes or the callback is unnecessary. |
+ // |
+ // This call does not request focus, it only waits for a focus request for the |
+ // given render frame to be approved. The focus request must be initiated via |
+ // the WebMediaPlayerDelegate interface in the renderer. |
+ // |
+ // Focus is never denied, only delayed until the underlying platform approves |
+ // the request. |focus_cb| may never be called if the given render frame goes |
+ // away. Callers are expected to have their own monitoring for such events in |
+ // order to properly handle the lack of a callback. |
+ static void WaitForAudioFocusAsync(int render_process_id, |
+ int render_frame_id, |
+ const base::Closure& focus_cb); |
+ |
+ protected: |
+ virtual void WaitForAudioFocusAsyncInternal(int render_frame_id, |
+ const base::Closure& focus_cb); |
+ |
private: |
void OnMediaDestroyed(RenderFrameHost* render_frame_host, int delegate_id); |
void OnMediaPaused(RenderFrameHost* render_frame_host, |