Chromium Code Reviews| Index: content/browser/presentation/presentation_service_impl.cc |
| diff --git a/content/browser/presentation/presentation_service_impl.cc b/content/browser/presentation/presentation_service_impl.cc |
| index c9b30d472f9ce084f396aef9d25c2ece26ebb84e..0f7fafe2de25a02d04e6277a1daea8882147a5d9 100644 |
| --- a/content/browser/presentation/presentation_service_impl.cc |
| +++ b/content/browser/presentation/presentation_service_impl.cc |
| @@ -7,9 +7,7 @@ |
| #include <stddef.h> |
| #include <stdint.h> |
| #include <algorithm> |
| -#include <string> |
| #include <utility> |
| -#include <vector> |
| #include "base/logging.h" |
| #include "base/stl_util.h" |
| @@ -183,35 +181,35 @@ void PresentationServiceImpl::SetClient( |
| } |
| void PresentationServiceImpl::ListenForScreenAvailability( |
| - const std::string& url) { |
| - DVLOG(2) << "ListenForScreenAvailability " << url; |
| + url::mojom::UrlPtr url) { |
| + DVLOG(2) << "ListenForScreenAvailability " << url->url; |
| if (!delegate_) { |
| - client_->OnScreenAvailabilityUpdated(url, false); |
| + client_->OnScreenAvailabilityUpdated(std::move(url), false); |
| return; |
| } |
| - if (screen_availability_listeners_.count(url)) |
| + if (screen_availability_listeners_.count(url->url)) |
| return; |
| std::unique_ptr<ScreenAvailabilityListenerImpl> listener( |
| - new ScreenAvailabilityListenerImpl(url, this)); |
| + new ScreenAvailabilityListenerImpl(url->url, this)); |
| if (delegate_->AddScreenAvailabilityListener( |
| render_process_id_, |
| render_frame_id_, |
| listener.get())) { |
| - screen_availability_listeners_[url] = std::move(listener); |
| + screen_availability_listeners_[url->url] = std::move(listener); |
| } else { |
| DVLOG(1) << "AddScreenAvailabilityListener failed. Ignoring request."; |
| } |
| } |
| void PresentationServiceImpl::StopListeningForScreenAvailability( |
| - const std::string& url) { |
| - DVLOG(2) << "StopListeningForScreenAvailability " << url; |
| + url::mojom::UrlPtr url) { |
| + DVLOG(2) << "StopListeningForScreenAvailability " << url->url; |
| if (!delegate_) |
| return; |
| - auto listener_it = screen_availability_listeners_.find(url); |
| + auto listener_it = screen_availability_listeners_.find(url->url); |
| if (listener_it == screen_availability_listeners_.end()) |
| return; |
| @@ -220,8 +218,9 @@ void PresentationServiceImpl::StopListeningForScreenAvailability( |
| screen_availability_listeners_.erase(listener_it); |
| } |
| -void PresentationServiceImpl::StartSession(const std::string& presentation_url, |
| - const NewSessionCallback& callback) { |
| +void PresentationServiceImpl::StartSession( |
| + std::vector<url::mojom::UrlPtr> presentation_urls, |
| + const NewSessionCallback& callback) { |
| DVLOG(2) << "StartSession"; |
| if (!delegate_) { |
| callback.Run( |
| @@ -238,10 +237,16 @@ void PresentationServiceImpl::StartSession(const std::string& presentation_url, |
| return; |
| } |
| + std::vector<std::string> presentation_urls_for_delegate( |
| + presentation_urls.size()); |
| + std::transform(presentation_urls.begin(), presentation_urls.end(), |
| + presentation_urls_for_delegate.begin(), |
| + [](const url::mojom::UrlPtr& url) { return url->url; }); |
| + |
| start_session_request_id_ = GetNextRequestSessionId(); |
| pending_start_session_cb_.reset(new NewSessionCallbackWrapper(callback)); |
| delegate_->StartSession( |
| - render_process_id_, render_frame_id_, presentation_url, |
| + render_process_id_, render_frame_id_, presentation_urls_for_delegate, |
| base::Bind(&PresentationServiceImpl::OnStartSessionSucceeded, |
| weak_factory_.GetWeakPtr(), start_session_request_id_), |
| base::Bind(&PresentationServiceImpl::OnStartSessionError, |
| @@ -249,7 +254,7 @@ void PresentationServiceImpl::StartSession(const std::string& presentation_url, |
| } |
| void PresentationServiceImpl::JoinSession( |
| - const std::string& presentation_url, |
| + std::vector<url::mojom::UrlPtr> presentation_urls, |
| const base::Optional<std::string>& presentation_id, |
| const NewSessionCallback& callback) { |
| DVLOG(2) << "JoinSession"; |
| @@ -261,13 +266,19 @@ void PresentationServiceImpl::JoinSession( |
| return; |
| } |
| + std::vector<std::string> presentation_urls_for_delegate( |
| + presentation_urls.size()); |
| + std::transform(presentation_urls.begin(), presentation_urls.end(), |
| + presentation_urls_for_delegate.begin(), |
| + [](const url::mojom::UrlPtr& url) { return url->url; }); |
| + |
| int request_session_id = RegisterJoinSessionCallback(callback); |
| if (request_session_id == kInvalidRequestSessionId) { |
| InvokeNewSessionCallbackWithError(callback); |
| return; |
| } |
| delegate_->JoinSession( |
| - render_process_id_, render_frame_id_, presentation_url, |
| + render_process_id_, render_frame_id_, presentation_urls_for_delegate, |
| presentation_id.value_or(std::string()), |
| base::Bind(&PresentationServiceImpl::OnJoinSessionSucceeded, |
| weak_factory_.GetWeakPtr(), request_session_id), |
| @@ -357,18 +368,24 @@ bool PresentationServiceImpl::RunAndEraseJoinSessionMojoCallback( |
| return true; |
| } |
| -void PresentationServiceImpl::SetDefaultPresentationURL( |
| - const std::string& url) { |
| - DVLOG(2) << "SetDefaultPresentationURL"; |
| +void PresentationServiceImpl::SetDefaultPresentationUrls( |
| + std::vector<url::mojom::UrlPtr> presentation_urls) { |
| + DVLOG(2) << "SetDefaultPresentationUrls"; |
| if (!delegate_) |
| return; |
| - if (default_presentation_url_ == url) |
| + std::vector<std::string> presentation_urls_for_delegate( |
| + presentation_urls.size()); |
| + std::transform(presentation_urls.begin(), presentation_urls.end(), |
| + presentation_urls_for_delegate.begin(), |
| + [](const url::mojom::UrlPtr& url) { return url->url; }); |
| + |
| + if (default_presentation_urls_ == presentation_urls_for_delegate) |
| return; |
| - default_presentation_url_ = url; |
| - delegate_->SetDefaultPresentationUrl( |
| - render_process_id_, render_frame_id_, url, |
| + default_presentation_urls_ = presentation_urls_for_delegate; |
| + delegate_->SetDefaultPresentationUrls( |
| + render_process_id_, render_frame_id_, presentation_urls_for_delegate, |
| base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted, |
| weak_factory_.GetWeakPtr())); |
| } |
| @@ -405,7 +422,7 @@ void PresentationServiceImpl::OnSendMessageCallback(bool sent) { |
| } |
| void PresentationServiceImpl::CloseConnection( |
| - const std::string& presentation_url, |
| + url::mojom::UrlPtr presentation_url, |
| const std::string& presentation_id) { |
| DVLOG(2) << "CloseConnection " << presentation_id; |
| if (delegate_) |
| @@ -413,7 +430,7 @@ void PresentationServiceImpl::CloseConnection( |
| presentation_id); |
| } |
| -void PresentationServiceImpl::Terminate(const std::string& presentation_url, |
| +void PresentationServiceImpl::Terminate(url::mojom::UrlPtr presentation_url, |
| const std::string& presentation_id) { |
| DVLOG(2) << "Terminate " << presentation_id; |
| if (delegate_) |
| @@ -524,7 +541,7 @@ void PresentationServiceImpl::Reset() { |
| if (delegate_) |
| delegate_->Reset(render_process_id_, render_frame_id_); |
| - default_presentation_url_.clear(); |
| + default_presentation_urls_.clear(); |
| screen_availability_listeners_.clear(); |
| @@ -582,12 +599,16 @@ std::string PresentationServiceImpl::ScreenAvailabilityListenerImpl |
| void PresentationServiceImpl::ScreenAvailabilityListenerImpl |
| ::OnScreenAvailabilityChanged(bool available) { |
| - service_->client_->OnScreenAvailabilityUpdated(availability_url_, available); |
| + url::mojom::UrlPtr url = url::mojom::Url::New(); |
| + url->url = availability_url_; |
| + service_->client_->OnScreenAvailabilityUpdated(std::move(url), available); |
|
dcheng
2016/08/26 18:13:33
Since this is typemapped, I think you should be ab
|
| } |
| void PresentationServiceImpl::ScreenAvailabilityListenerImpl |
| ::OnScreenAvailabilityNotSupported() { |
| - service_->client_->OnScreenAvailabilityNotSupported(availability_url_); |
| + url::mojom::UrlPtr url = url::mojom::Url::New(); |
| + url->url = availability_url_; |
| + service_->client_->OnScreenAvailabilityNotSupported(std::move(url)); |
| } |
| PresentationServiceImpl::NewSessionCallbackWrapper |