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

Reland "Lazily create UserMediaController"

This is a reland of [1], originally revert in [2], being
suspicious of have caused [3].

The bug was fixed differently [4], and it should be safe to reland
this CL.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/1760407
[2] https://chromium-review.googlesource.com/c/chromium/src/+/1758468
[3] https://crbug.com/995709
[4] https://chromium-review.googlesource.com/c/chromium/src/+/1758471

Original commit message:

  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: I76477b2adfbf4f6b942b066640b4e2d19a7e8e42
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1765489Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarGuido Urdaneta <guidou@chromium.org>
Auto-Submit: Antonio Gomes <tonikitoo@igalia.com>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Cr-Commit-Position: refs/heads/master@{#689463}
parent c56ec6fd
...@@ -29,11 +29,9 @@ namespace blink { ...@@ -29,11 +29,9 @@ namespace blink {
const char UserMediaController::kSupplementName[] = "UserMediaController"; const char UserMediaController::kSupplementName[] = "UserMediaController";
UserMediaController::UserMediaController(LocalFrame& frame, UserMediaController::UserMediaController(LocalFrame& frame)
UserMediaClient* client)
: Supplement<LocalFrame>(frame), : Supplement<LocalFrame>(frame),
ContextLifecycleObserver(frame.GetDocument()), ContextLifecycleObserver(frame.GetDocument()) {}
client_(client) {}
void UserMediaController::Trace(blink::Visitor* visitor) { void UserMediaController::Trace(blink::Visitor* visitor) {
Supplement<LocalFrame>::Trace(visitor); Supplement<LocalFrame>::Trace(visitor);
...@@ -41,13 +39,24 @@ void UserMediaController::Trace(blink::Visitor* visitor) { ...@@ -41,13 +39,24 @@ void UserMediaController::Trace(blink::Visitor* visitor) {
visitor->Trace(client_); visitor->Trace(client_);
} }
UserMediaClient* UserMediaController::Client() {
if (!client_) {
client_ = MakeGarbageCollected<UserMediaClient>(
GetFrame(), GetFrame()->GetTaskRunner(TaskType::kInternalMedia));
}
return client_;
}
void UserMediaController::ContextDestroyed(ExecutionContext*) { void UserMediaController::ContextDestroyed(ExecutionContext*) {
if (!client_)
return;
client_->ContextDestroyed(); client_->ContextDestroyed();
} }
void ProvideUserMediaTo(LocalFrame& frame, UserMediaClient* client) { void ProvideUserMediaTo(LocalFrame& frame) {
UserMediaController::ProvideTo( UserMediaController::ProvideTo(
frame, MakeGarbageCollected<UserMediaController>(frame, client)); frame, MakeGarbageCollected<UserMediaController>(frame));
} }
} // 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&, UserMediaClient*); UserMediaController(LocalFrame&);
void Trace(blink::Visitor*) override; void Trace(blink::Visitor*) override;
UserMediaClient* Client() const { return client_; } UserMediaClient* Client();
void RequestUserMedia(UserMediaRequest*); void RequestUserMedia(UserMediaRequest*);
void CancelUserMediaRequest(UserMediaRequest*); void CancelUserMediaRequest(UserMediaRequest*);
...@@ -70,29 +70,29 @@ class UserMediaController final ...@@ -70,29 +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&, UserMediaClient*); MODULES_EXPORT void ProvideUserMediaTo(LocalFrame&);
} // 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, MakeGarbageCollected<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