| 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 17ec835b5f3017cb2bf09d6e292e9a2c3798a26b..c9b30d472f9ce084f396aef9d25c2ece26ebb84e 100644
|
| --- a/content/browser/presentation/presentation_service_impl.cc
|
| +++ b/content/browser/presentation/presentation_service_impl.cc
|
| @@ -49,15 +49,15 @@
|
| DCHECK(input->data);
|
| output->type = blink::mojom::PresentationMessageType::ARRAY_BUFFER;
|
| if (pass_ownership) {
|
| - output->data.Swap(input->data.get());
|
| + output->data = std::move(*(input->data));
|
| } else {
|
| - output->data = mojo::Array<uint8_t>::From(*input->data);
|
| + output->data = *(input->data);
|
| }
|
| } else {
|
| // string message
|
| output->type = blink::mojom::PresentationMessageType::TEXT;
|
| if (pass_ownership) {
|
| - output->message.Swap(&input->message);
|
| + output->message = std::move(input->message);
|
| } else {
|
| output->message = input->message;
|
| }
|
| @@ -67,43 +67,47 @@
|
|
|
| std::unique_ptr<PresentationSessionMessage> GetPresentationSessionMessage(
|
| blink::mojom::SessionMessagePtr input) {
|
| - DCHECK(!input.is_null());
|
| std::unique_ptr<content::PresentationSessionMessage> output;
|
| + if (input.is_null())
|
| + return output;
|
| +
|
| switch (input->type) {
|
| case blink::mojom::PresentationMessageType::TEXT: {
|
| - DCHECK(!input->message.is_null());
|
| - DCHECK(input->data.is_null());
|
| - // Return null PresentationSessionMessage if size exceeds.
|
| - if (input->message.size() > content::kMaxPresentationSessionMessageSize)
|
| + // Return nullptr PresentationSessionMessage if invalid (unset |message|,
|
| + // set |data|, or size too large).
|
| + if (input->data || !input->message ||
|
| + input->message->size() > content::kMaxPresentationSessionMessageSize)
|
| return output;
|
|
|
| output.reset(
|
| new PresentationSessionMessage(PresentationMessageType::TEXT));
|
| - input->message.Swap(&output->message);
|
| + output->message = std::move(input->message.value());
|
| return output;
|
| }
|
| case blink::mojom::PresentationMessageType::ARRAY_BUFFER: {
|
| - DCHECK(!input->data.is_null());
|
| - DCHECK(input->message.is_null());
|
| - if (input->data.size() > content::kMaxPresentationSessionMessageSize)
|
| + // Return nullptr PresentationSessionMessage if invalid (unset |data|, set
|
| + // |message|, or size too large).
|
| + if (!input->data || input->message ||
|
| + input->data->size() > content::kMaxPresentationSessionMessageSize)
|
| return output;
|
|
|
| output.reset(new PresentationSessionMessage(
|
| PresentationMessageType::ARRAY_BUFFER));
|
| - output->data.reset(new std::vector<uint8_t>);
|
| - input->data.Swap(output->data.get());
|
| + output->data.reset(
|
| + new std::vector<uint8_t>(std::move(input->data.value())));
|
| return output;
|
| }
|
| case blink::mojom::PresentationMessageType::BLOB: {
|
| - DCHECK(!input->data.is_null());
|
| - DCHECK(input->message.is_null());
|
| - if (input->data.size() > content::kMaxPresentationSessionMessageSize)
|
| + // Return nullptr PresentationSessionMessage if invalid (unset |data|, set
|
| + // |message|, or size too large).
|
| + if (!input->data || input->message ||
|
| + input->data->size() > content::kMaxPresentationSessionMessageSize)
|
| return output;
|
|
|
| output.reset(
|
| new PresentationSessionMessage(PresentationMessageType::BLOB));
|
| - output->data.reset(new std::vector<uint8_t>);
|
| - input->data.Swap(output->data.get());
|
| + output->data.reset(
|
| + new std::vector<uint8_t>(std::move(input->data.value())));
|
| return output;
|
| }
|
| }
|
| @@ -179,37 +183,35 @@
|
| }
|
|
|
| void PresentationServiceImpl::ListenForScreenAvailability(
|
| - const mojo::String& url) {
|
| + const std::string& url) {
|
| DVLOG(2) << "ListenForScreenAvailability " << url;
|
| if (!delegate_) {
|
| client_->OnScreenAvailabilityUpdated(url, false);
|
| return;
|
| }
|
|
|
| - const std::string& availability_url = url.get();
|
| - if (screen_availability_listeners_.count(availability_url))
|
| + if (screen_availability_listeners_.count(url))
|
| return;
|
|
|
| std::unique_ptr<ScreenAvailabilityListenerImpl> listener(
|
| - new ScreenAvailabilityListenerImpl(availability_url, this));
|
| + new ScreenAvailabilityListenerImpl(url, this));
|
| if (delegate_->AddScreenAvailabilityListener(
|
| render_process_id_,
|
| render_frame_id_,
|
| listener.get())) {
|
| - screen_availability_listeners_[availability_url] = std::move(listener);
|
| + screen_availability_listeners_[url] = std::move(listener);
|
| } else {
|
| DVLOG(1) << "AddScreenAvailabilityListener failed. Ignoring request.";
|
| }
|
| }
|
|
|
| void PresentationServiceImpl::StopListeningForScreenAvailability(
|
| - const mojo::String& url) {
|
| + const std::string& url) {
|
| DVLOG(2) << "StopListeningForScreenAvailability " << url;
|
| if (!delegate_)
|
| return;
|
|
|
| - const std::string& availability_url = url.get();
|
| - auto listener_it = screen_availability_listeners_.find(availability_url);
|
| + auto listener_it = screen_availability_listeners_.find(url);
|
| if (listener_it == screen_availability_listeners_.end())
|
| return;
|
|
|
| @@ -218,7 +220,7 @@
|
| screen_availability_listeners_.erase(listener_it);
|
| }
|
|
|
| -void PresentationServiceImpl::StartSession(const mojo::String& presentation_url,
|
| +void PresentationServiceImpl::StartSession(const std::string& presentation_url,
|
| const NewSessionCallback& callback) {
|
| DVLOG(2) << "StartSession";
|
| if (!delegate_) {
|
| @@ -247,8 +249,8 @@
|
| }
|
|
|
| void PresentationServiceImpl::JoinSession(
|
| - const mojo::String& presentation_url,
|
| - const mojo::String& presentation_id,
|
| + const std::string& presentation_url,
|
| + const base::Optional<std::string>& presentation_id,
|
| const NewSessionCallback& callback) {
|
| DVLOG(2) << "JoinSession";
|
| if (!delegate_) {
|
| @@ -265,10 +267,8 @@
|
| return;
|
| }
|
| delegate_->JoinSession(
|
| - render_process_id_,
|
| - render_frame_id_,
|
| - presentation_url,
|
| - presentation_id,
|
| + render_process_id_, render_frame_id_, presentation_url,
|
| + presentation_id.value_or(std::string()),
|
| base::Bind(&PresentationServiceImpl::OnJoinSessionSucceeded,
|
| weak_factory_.GetWeakPtr(), request_session_id),
|
| base::Bind(&PresentationServiceImpl::OnJoinSessionError,
|
| @@ -358,18 +358,17 @@
|
| }
|
|
|
| void PresentationServiceImpl::SetDefaultPresentationURL(
|
| - const mojo::String& url) {
|
| + const std::string& url) {
|
| DVLOG(2) << "SetDefaultPresentationURL";
|
| if (!delegate_)
|
| return;
|
|
|
| - const std::string& new_default_url = url.get();
|
| - if (default_presentation_url_ == new_default_url)
|
| - return;
|
| -
|
| - default_presentation_url_ = new_default_url;
|
| + if (default_presentation_url_ == url)
|
| + return;
|
| +
|
| + default_presentation_url_ = url;
|
| delegate_->SetDefaultPresentationUrl(
|
| - render_process_id_, render_frame_id_, new_default_url,
|
| + render_process_id_, render_frame_id_, url,
|
| base::Bind(&PresentationServiceImpl::OnDefaultPresentationStarted,
|
| weak_factory_.GetWeakPtr()));
|
| }
|
| @@ -406,16 +405,16 @@
|
| }
|
|
|
| void PresentationServiceImpl::CloseConnection(
|
| - const mojo::String& presentation_url,
|
| - const mojo::String& presentation_id) {
|
| + const std::string& presentation_url,
|
| + const std::string& presentation_id) {
|
| DVLOG(2) << "CloseConnection " << presentation_id;
|
| if (delegate_)
|
| delegate_->CloseConnection(render_process_id_, render_frame_id_,
|
| presentation_id);
|
| }
|
|
|
| -void PresentationServiceImpl::Terminate(const mojo::String& presentation_url,
|
| - const mojo::String& presentation_id) {
|
| +void PresentationServiceImpl::Terminate(const std::string& presentation_url,
|
| + const std::string& presentation_id) {
|
| DVLOG(2) << "Terminate " << presentation_id;
|
| if (delegate_)
|
| delegate_->Terminate(render_process_id_, render_frame_id_, presentation_id);
|
| @@ -466,13 +465,15 @@
|
| DCHECK(client_);
|
|
|
| DVLOG(2) << "OnSessionMessages";
|
| - mojo::Array<blink::mojom::SessionMessagePtr> mojoMessages(messages.size());
|
| - for (size_t i = 0; i < messages.size(); ++i)
|
| - mojoMessages[i] = ToMojoSessionMessage(messages[i], pass_ownership);
|
| + std::vector<blink::mojom::SessionMessagePtr> mojo_messages(messages.size());
|
| + std::transform(messages.begin(), messages.end(), mojo_messages.begin(),
|
| + [pass_ownership](PresentationSessionMessage* message) {
|
| + return ToMojoSessionMessage(message, pass_ownership);
|
| + });
|
|
|
| client_->OnSessionMessagesReceived(
|
| blink::mojom::PresentationSessionInfo::From(session),
|
| - std::move(mojoMessages));
|
| + std::move(mojo_messages));
|
| }
|
|
|
| void PresentationServiceImpl::DidNavigateAnyFrame(
|
|
|