Commit ab7e4e69 authored by Antonio Gomes's avatar Antonio Gomes Committed by Commit Bot

Lazily create UserMediaController

This CL addressed guidou's remark on [1], that
was accidentally left off when splitting the CL into
smaller pieces.

[1] https://crrev.com/c/1757490/4/third_party/blink/renderer/modules/modules_initializer.cc#185

BUG=704136
R=guidou@chromium.org, haraken@chromium.org

Change-Id: Ie46cc5eeb9963dc54538d122b0c922a5ec5c4e3c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1760407Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Kentaro Hara <haraken@chromium.org>
Auto-Submit: Antonio Gomes <tonikitoo@igalia.com>
Cr-Commit-Position: refs/heads/master@{#688302}
parent b2a1c8fe
...@@ -29,27 +29,33 @@ namespace blink { ...@@ -29,27 +29,33 @@ namespace blink {
const char UserMediaController::kSupplementName[] = "UserMediaController"; const char UserMediaController::kSupplementName[] = "UserMediaController";
UserMediaController::UserMediaController( UserMediaController::UserMediaController(LocalFrame& frame)
LocalFrame& frame,
std::unique_ptr<UserMediaClient> client)
: Supplement<LocalFrame>(frame), : Supplement<LocalFrame>(frame),
ContextLifecycleObserver(frame.GetDocument()), ContextLifecycleObserver(frame.GetDocument()) {}
client_(std::move(client)) {}
void UserMediaController::Trace(blink::Visitor* visitor) { void UserMediaController::Trace(blink::Visitor* visitor) {
Supplement<LocalFrame>::Trace(visitor); Supplement<LocalFrame>::Trace(visitor);
ContextLifecycleObserver::Trace(visitor); ContextLifecycleObserver::Trace(visitor);
} }
UserMediaClient* UserMediaController::Client() {
if (!client_) {
client_ = std::make_unique<UserMediaClient>(
GetFrame(), GetFrame()->GetTaskRunner(TaskType::kInternalMedia));
}
return client_.get();
}
void UserMediaController::ContextDestroyed(ExecutionContext*) { void UserMediaController::ContextDestroyed(ExecutionContext*) {
if (!client_)
return;
client_->ContextDestroyed(); client_->ContextDestroyed();
} }
void ProvideUserMediaTo(LocalFrame& frame, void ProvideUserMediaTo(LocalFrame& frame) {
std::unique_ptr<UserMediaClient> client) {
UserMediaController::ProvideTo( UserMediaController::ProvideTo(
frame, frame, MakeGarbageCollected<UserMediaController>(frame));
MakeGarbageCollected<UserMediaController>(frame, std::move(client)));
} }
} // namespace blink } // namespace blink
...@@ -46,10 +46,10 @@ class UserMediaController final ...@@ -46,10 +46,10 @@ class UserMediaController final
public: public:
static const char kSupplementName[]; static const char kSupplementName[];
UserMediaController(LocalFrame&, std::unique_ptr<UserMediaClient>); UserMediaController(LocalFrame&);
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
UserMediaClient* Client() const { return client_.get(); } UserMediaClient* Client();
void RequestUserMedia(UserMediaRequest*); void RequestUserMedia(UserMediaRequest*);
void CancelUserMediaRequest(UserMediaRequest*); void CancelUserMediaRequest(UserMediaRequest*);
...@@ -70,30 +70,29 @@ class UserMediaController final ...@@ -70,30 +70,29 @@ class UserMediaController final
}; };
inline void UserMediaController::RequestUserMedia(UserMediaRequest* request) { inline void UserMediaController::RequestUserMedia(UserMediaRequest* request) {
client_->RequestUserMedia(request); Client()->RequestUserMedia(request);
has_requested_user_media_ = true; has_requested_user_media_ = true;
} }
inline void UserMediaController::CancelUserMediaRequest( inline void UserMediaController::CancelUserMediaRequest(
UserMediaRequest* request) { UserMediaRequest* request) {
client_->CancelUserMediaRequest(WebUserMediaRequest(request)); Client()->CancelUserMediaRequest(WebUserMediaRequest(request));
} }
inline void UserMediaController::ApplyConstraints( inline void UserMediaController::ApplyConstraints(
ApplyConstraintsRequest* request) { ApplyConstraintsRequest* request) {
client_->ApplyConstraints(WebApplyConstraintsRequest(request)); Client()->ApplyConstraints(WebApplyConstraintsRequest(request));
} }
inline void UserMediaController::StopTrack(MediaStreamComponent* track) { inline void UserMediaController::StopTrack(MediaStreamComponent* track) {
client_->StopTrack(WebMediaStreamTrack(track)); Client()->StopTrack(WebMediaStreamTrack(track));
} }
inline bool UserMediaController::HasRequestedUserMedia() { inline bool UserMediaController::HasRequestedUserMedia() {
return has_requested_user_media_; return has_requested_user_media_;
} }
MODULES_EXPORT void ProvideUserMediaTo(LocalFrame&, MODULES_EXPORT void ProvideUserMediaTo(LocalFrame&);
std::unique_ptr<UserMediaClient>);
} // namespace blink } // namespace blink
......
...@@ -181,9 +181,7 @@ void ModulesInitializer::InstallSupplements(LocalFrame& frame) const { ...@@ -181,9 +181,7 @@ void ModulesInitializer::InstallSupplements(LocalFrame& frame) const {
DCHECK(client); DCHECK(client);
ProvidePushMessagingClientTo( ProvidePushMessagingClientTo(
frame, MakeGarbageCollected<PushMessagingClient>(frame)); frame, MakeGarbageCollected<PushMessagingClient>(frame));
ProvideUserMediaTo( ProvideUserMediaTo(frame);
frame, std::make_unique<UserMediaClient>(
&frame, frame.GetTaskRunner(TaskType::kInternalMedia)));
ProvideLocalFileSystemTo(frame, std::make_unique<LocalFileSystemClient>()); ProvideLocalFileSystemTo(frame, std::make_unique<LocalFileSystemClient>());
ScreenOrientationControllerImpl::ProvideTo(frame); ScreenOrientationControllerImpl::ProvideTo(frame);
......
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