Commit 8b492779 authored by Jiawei Li's avatar Jiawei Li Committed by Commit Bot

[Chromecast] Use channel-associated MediaLoadDeferrer interface

This CL replaces uses of MediaLoadDeferrer interface with
channel-associated methods. This is used to avoid race conditions
in Chromecast builds because we want to make sure MediaLoad state
is updated before any media element is run.

BUG=internal b/74121154
TEST= media_load_deferrer interface connect correctly

Change-Id: Icc69e62f8fea0b13a2d79f0c52428b480d171823
Reviewed-on: https://chromium-review.googlesource.com/1070492
Commit-Queue: Jiawei Li <lijiawei@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarLuke Halliwell <halliwell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#562503}
parent 3610635d
...@@ -14,6 +14,5 @@ include_rules = [ ...@@ -14,6 +14,5 @@ include_rules = [
"+media/renderers", "+media/renderers",
"+mojo/public", "+mojo/public",
"+services/service_manager/public", "+services/service_manager/public",
"+third_party/blink/public/platform", "+third_party/blink/public",
"+third_party/blink/public/web",
] ]
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/logging.h" #include "base/logging.h"
#include "content/public/renderer/render_frame.h"
#include "mojo/public/cpp/bindings/associated_binding_set.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
namespace chromecast { namespace chromecast {
...@@ -16,9 +19,10 @@ CastMediaLoadDeferrer::CastMediaLoadDeferrer(content::RenderFrame* render_frame) ...@@ -16,9 +19,10 @@ CastMediaLoadDeferrer::CastMediaLoadDeferrer(content::RenderFrame* render_frame)
: content::RenderFrameObserver(render_frame), : content::RenderFrameObserver(render_frame),
content::RenderFrameObserverTracker<CastMediaLoadDeferrer>(render_frame), content::RenderFrameObserverTracker<CastMediaLoadDeferrer>(render_frame),
render_frame_action_blocked_(false) { render_frame_action_blocked_(false) {
registry_.AddInterface( render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
base::BindRepeating(&CastMediaLoadDeferrer::OnMediaLoadDeferrerRequest, base::BindRepeating(
base::Unretained(this))); &CastMediaLoadDeferrer::OnMediaLoadDeferrerAssociatedRequest,
base::Unretained(this)));
} }
CastMediaLoadDeferrer::~CastMediaLoadDeferrer() { CastMediaLoadDeferrer::~CastMediaLoadDeferrer() {
...@@ -30,11 +34,6 @@ void CastMediaLoadDeferrer::OnDestruct() { ...@@ -30,11 +34,6 @@ void CastMediaLoadDeferrer::OnDestruct() {
delete this; delete this;
} }
void CastMediaLoadDeferrer::OnInterfaceRequestForFrame(
const std::string& interface_name,
mojo::ScopedMessagePipeHandle* interface_pipe) {
registry_.TryBindInterface(interface_name, interface_pipe);
}
bool CastMediaLoadDeferrer::RunWhenInForeground(base::OnceClosure closure) { bool CastMediaLoadDeferrer::RunWhenInForeground(base::OnceClosure closure) {
DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
...@@ -66,8 +65,8 @@ void CastMediaLoadDeferrer::UpdateMediaLoadStatus(bool blocked) { ...@@ -66,8 +65,8 @@ void CastMediaLoadDeferrer::UpdateMediaLoadStatus(bool blocked) {
LOG(INFO) << "Render frame actions are unblocked."; LOG(INFO) << "Render frame actions are unblocked.";
} }
void CastMediaLoadDeferrer::OnMediaLoadDeferrerRequest( void CastMediaLoadDeferrer::OnMediaLoadDeferrerAssociatedRequest(
chromecast::shell::mojom::MediaLoadDeferrerRequest request) { chromecast::shell::mojom::MediaLoadDeferrerAssociatedRequest request) {
bindings_.AddBinding(this, std::move(request)); bindings_.AddBinding(this, std::move(request));
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include "chromecast/common/mojom/media_load_deferrer.mojom.h" #include "chromecast/common/mojom/media_load_deferrer.mojom.h"
#include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_frame_observer_tracker.h" #include "content/public/renderer/render_frame_observer_tracker.h"
#include "mojo/public/cpp/bindings/binding_set.h" #include "mojo/public/cpp/bindings/associated_binding_set.h"
#include "services/service_manager/public/cpp/binder_registry.h" #include "services/service_manager/public/cpp/binder_registry.h"
namespace content { namespace content {
...@@ -31,7 +31,6 @@ class CastMediaLoadDeferrer ...@@ -31,7 +31,6 @@ class CastMediaLoadDeferrer
public content::RenderFrameObserverTracker<CastMediaLoadDeferrer> { public content::RenderFrameObserverTracker<CastMediaLoadDeferrer> {
public: public:
explicit CastMediaLoadDeferrer(content::RenderFrame* render_frame); explicit CastMediaLoadDeferrer(content::RenderFrame* render_frame);
~CastMediaLoadDeferrer() override;
// Runs |closure| if the page/frame is switched to foreground. Returns true if // Runs |closure| if the page/frame is switched to foreground. Returns true if
// the running of |closure| is deferred (not yet in foreground); false // the running of |closure| is deferred (not yet in foreground); false
...@@ -39,24 +38,23 @@ class CastMediaLoadDeferrer ...@@ -39,24 +38,23 @@ class CastMediaLoadDeferrer
bool RunWhenInForeground(base::OnceClosure closure); bool RunWhenInForeground(base::OnceClosure closure);
private: private:
~CastMediaLoadDeferrer() override;
// content::RenderFrameObserver implementation: // content::RenderFrameObserver implementation:
void OnDestruct() override; void OnDestruct() override;
void OnInterfaceRequestForFrame(
const std::string& interface_name,
mojo::ScopedMessagePipeHandle* interface_pipe) override;
// MediaLoadDeferrer implementation // MediaLoadDeferrer implementation
void UpdateMediaLoadStatus(bool blocked) override; void UpdateMediaLoadStatus(bool blocked) override;
void OnMediaLoadDeferrerRequest( void OnMediaLoadDeferrerAssociatedRequest(
chromecast::shell::mojom::MediaLoadDeferrerRequest request); chromecast::shell::mojom::MediaLoadDeferrerAssociatedRequest request);
bool render_frame_action_blocked_; bool render_frame_action_blocked_;
std::vector<base::OnceClosure> pending_closures_;
mojo::BindingSet<chromecast::shell::mojom::MediaLoadDeferrer> bindings_; std::vector<base::OnceClosure> pending_closures_;
service_manager::BinderRegistry registry_; mojo::AssociatedBindingSet<chromecast::shell::mojom::MediaLoadDeferrer>
bindings_;
SEQUENCE_CHECKER(sequence_checker_); SEQUENCE_CHECKER(sequence_checker_);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment