Index: content/renderer/media/android/webmediasession_android.cc |
diff --git a/content/renderer/media/android/webmediasession_android.cc b/content/renderer/media/android/webmediasession_android.cc |
index b68e2bbfbc2df26b70f01bfcd4ebe066be36e910..505c24d19f1be82bf74e244b3071851e0abc9218 100644 |
--- a/content/renderer/media/android/webmediasession_android.cc |
+++ b/content/renderer/media/android/webmediasession_android.cc |
@@ -12,7 +12,7 @@ namespace content { |
WebMediaSessionAndroid::WebMediaSessionAndroid( |
RendererMediaSessionManager* session_manager) |
- : session_manager_(session_manager) { |
+ : session_manager_(session_manager), next_request_id_(0) { |
DCHECK(session_manager_); |
session_id_ = session_manager_->RegisterMediaSession(this); |
} |
@@ -22,19 +22,39 @@ WebMediaSessionAndroid::~WebMediaSessionAndroid() { |
} |
void WebMediaSessionAndroid::activate( |
- blink::WebMediaSessionActivateCallback* raw_callback) { |
- NOTIMPLEMENTED(); |
- |
- scoped_ptr<blink::WebMediaSessionActivateCallback> callback(raw_callback); |
- callback->onError(blink::WebMediaSessionError::Activate); |
+ blink::WebMediaSessionActivateCallback* callback) { |
+ int request_id = activation_requests_.Add(callback); |
+ session_manager_->Activate(session_id_, request_id); |
} |
void WebMediaSessionAndroid::deactivate( |
- blink::WebMediaSessionDeactivateCallback* raw_callback) { |
- NOTIMPLEMENTED(); |
+ blink::WebMediaSessionDeactivateCallback* callback) { |
+ int request_id = deactivation_requests_.Add(callback); |
+ session_manager_->Deactivate(session_id_, request_id); |
+} |
+ |
+void WebMediaSessionAndroid::OnDidActivate(int request_id, bool success) { |
+ blink::WebMediaSessionActivateCallback* callback = |
+ activation_requests_.Lookup(request_id); |
+ if (!callback) |
philipj_slow
2015/12/04 14:01:04
Will this be possible if the GC problem is fixed?
davve
2015/12/04 14:52:55
Same as other issue. As long as we have unittests
|
+ return; |
+ |
+ if (success) |
+ callback->onSuccess(); |
+ else |
+ callback->onError( |
+ blink::WebMediaSessionError(blink::WebMediaSessionError::Activate)); |
+ activation_requests_.Remove(request_id); |
+} |
+ |
+void WebMediaSessionAndroid::OnDidDeactivate(int request_id) { |
+ blink::WebMediaSessionDeactivateCallback* callback = |
+ deactivation_requests_.Lookup(request_id); |
+ if (!callback) |
+ return; |
- scoped_ptr<blink::WebMediaSessionDeactivateCallback> callback(raw_callback); |
callback->onSuccess(); |
+ deactivation_requests_.Remove(request_id); |
} |
} // namespace content |