Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(542)

Unified Diff: third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp

Issue 2782373002: Remove MediaControls methods needed for the Cast button (Closed)
Patch Set: Fixed MediaControlsImplTest Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
diff --git a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
index ef8247b2c1f7b60369358ce584701c5aeaedc6f4..69d9cf45e421af2e1fc77304f2ca060b435626c5 100644
--- a/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
+++ b/third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.cpp
@@ -14,6 +14,7 @@
#include "core/html/HTMLMediaElement.h"
#include "core/probe/CoreProbes.h"
#include "modules/EventTargetModules.h"
+#include "modules/remoteplayback/AvailabilityCallbackWrapper.h"
#include "platform/MemoryCoordinator.h"
#include "platform/UserGestureIndicator.h"
@@ -86,28 +87,7 @@ ScriptPromise RemotePlayback::watchAvailability(
return promise;
}
- int id;
- do {
- id = GetExecutionContext()->CircularSequentialID();
- } while (
- !availability_callbacks_
- .insert(id, TraceWrapperMember<RemotePlaybackAvailabilityCallback>(
- this, callback))
- .is_new_entry);
-
- // Report the current availability via the callback.
- // TODO(yuryu): Wrapping notifyInitialAvailability with WTF::Closure as
- // InspectorInstrumentation requires a globally unique pointer to track tasks.
- // We can remove the wrapper if InspectorInstrumentation returns a task id.
- std::unique_ptr<WTF::Closure> task = WTF::Bind(
- &RemotePlayback::NotifyInitialAvailability, WrapPersistent(this), id);
- probe::AsyncTaskScheduled(GetExecutionContext(), "watchAvailabilityCallback",
- task.get());
- TaskRunnerHelper::Get(TaskType::kMediaElementEvent, GetExecutionContext())
- ->PostTask(BLINK_FROM_HERE,
- WTF::Bind(RunNotifyInitialAvailabilityTask,
- WrapPersistent(GetExecutionContext()),
- WTF::Passed(std::move(task))));
+ int id = WatchAvailabilityInternal(new AvailabilityCallbackWrapper(callback));
// TODO(avayvod): Currently the availability is tracked for each media element
// as soon as it's created, we probably want to limit that to when the
@@ -130,15 +110,12 @@ ScriptPromise RemotePlayback::cancelWatchAvailability(ScriptState* script_state,
return promise;
}
- auto iter = availability_callbacks_.find(id);
- if (iter == availability_callbacks_.end()) {
+ if (!CancelWatchAvailabilityInternal(id)) {
resolver->Reject(DOMException::Create(
kNotFoundError, "A callback with the given id is not found."));
return promise;
}
- availability_callbacks_.erase(iter);
-
resolver->Resolve();
return promise;
}
@@ -200,13 +177,8 @@ ScriptPromise RemotePlayback::prompt(ScriptState* script_state) {
return promise;
}
- if (state_ == WebRemotePlaybackState::kDisconnected) {
- prompt_promise_resolver_ = resolver;
- media_element_->RequestRemotePlayback();
- } else {
- prompt_promise_resolver_ = resolver;
- media_element_->RequestRemotePlaybackControl();
- }
+ prompt_promise_resolver_ = resolver;
+ PromptInternal();
return promise;
}
@@ -220,13 +192,54 @@ bool RemotePlayback::HasPendingActivity() const {
prompt_promise_resolver_;
}
+void RemotePlayback::PromptInternal() {
+ if (state_ == WebRemotePlaybackState::kDisconnected)
+ media_element_->RequestRemotePlayback();
+ else
+ media_element_->RequestRemotePlaybackControl();
+}
+
+int RemotePlayback::WatchAvailabilityInternal(
+ AvailabilityCallbackWrapper* callback) {
+ int id;
+ do {
+ id = GetExecutionContext()->CircularSequentialID();
+ } while (!availability_callbacks_
+ .insert(id, TraceWrapperMember<AvailabilityCallbackWrapper>(
+ this, callback))
+ .is_new_entry);
+
+ // Report the current availability via the callback.
+ // TODO(yuryu): Wrapping notifyInitialAvailability with WTF::Closure as
+ // InspectorInstrumentation requires a globally unique pointer to track tasks.
+ // We can remove the wrapper if InspectorInstrumentation returns a task id.
+ std::unique_ptr<WTF::Closure> task = WTF::Bind(
+ &RemotePlayback::NotifyInitialAvailability, WrapPersistent(this), id);
+ probe::AsyncTaskScheduled(GetExecutionContext(), "watchAvailabilityCallback",
+ task.get());
+ TaskRunnerHelper::Get(TaskType::kMediaElementEvent, GetExecutionContext())
+ ->PostTask(BLINK_FROM_HERE,
+ WTF::Bind(RunNotifyInitialAvailabilityTask,
+ WrapPersistent(GetExecutionContext()),
+ WTF::Passed(std::move(task))));
+ return id;
+}
+
+bool RemotePlayback::CancelWatchAvailabilityInternal(int id) {
+ auto iter = availability_callbacks_.find(id);
+ if (iter == availability_callbacks_.end())
+ return false;
+ availability_callbacks_.erase(iter);
+ return true;
+}
+
void RemotePlayback::NotifyInitialAvailability(int callback_id) {
// May not find the callback if the website cancels it fast enough.
auto iter = availability_callbacks_.find(callback_id);
if (iter == availability_callbacks_.end())
return;
- iter->value->call(this, RemotePlaybackAvailable());
+ iter->value->Run(this, RemotePlaybackAvailable());
}
void RemotePlayback::StateChanged(WebRemotePlaybackState state) {
@@ -278,7 +291,7 @@ void RemotePlayback::AvailabilityChanged(
return;
for (auto& callback : availability_callbacks_.Values())
- callback->call(this, new_availability);
+ callback->Run(this, new_availability);
}
void RemotePlayback::PromptCancelled() {
@@ -315,9 +328,8 @@ DEFINE_TRACE(RemotePlayback) {
}
DEFINE_TRACE_WRAPPERS(RemotePlayback) {
- for (auto callback : availability_callbacks_.Values()) {
+ for (auto callback : availability_callbacks_.Values())
visitor->TraceWrappers(callback);
- }
EventTargetWithInlineData::TraceWrappers(visitor);
}
« no previous file with comments | « third_party/WebKit/Source/modules/remoteplayback/RemotePlayback.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698