| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/presentation/presentation_dispatcher.h" | 5 #include "content/renderer/presentation/presentation_dispatcher.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "content/public/common/presentation_constants.h" | 14 #include "content/public/common/presentation_constants.h" |
| 15 #include "content/public/renderer/render_frame.h" | 15 #include "content/public/renderer/render_frame.h" |
| 16 #include "content/renderer/presentation/presentation_connection_client.h" | 16 #include "content/renderer/presentation/presentation_connection_client.h" |
| 17 #include "services/shell/public/cpp/interface_provider.h" | 17 #include "services/shell/public/cpp/interface_provider.h" |
| 18 #include "third_party/WebKit/public/platform/WebString.h" | 18 #include "third_party/WebKit/public/platform/WebString.h" |
| 19 #include "third_party/WebKit/public/platform/WebURL.h" | 19 #include "third_party/WebKit/public/platform/WebVector.h" |
| 20 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nAvailabilityObserver.h" | 20 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nAvailabilityObserver.h" |
| 21 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nController.h" | 21 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nController.h" |
| 22 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nError.h" | 22 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio
nError.h" |
| 23 #include "third_party/WebKit/public/platform/modules/presentation/presentation.m
ojom.h" | 23 #include "third_party/WebKit/public/platform/modules/presentation/presentation.m
ojom.h" |
| 24 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 24 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 25 #include "url/gurl.h" | 25 #include "url/gurl.h" |
| 26 | 26 |
| 27 namespace { | 27 namespace { |
| 28 | 28 |
| 29 blink::WebPresentationError::ErrorType GetWebPresentationErrorTypeFromMojo( | 29 blink::WebPresentationError::ErrorType GetWebPresentationErrorTypeFromMojo( |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 blink::WebPresentationController* controller) { | 93 blink::WebPresentationController* controller) { |
| 94 // There shouldn't be any swapping from one non-null controller to another. | 94 // There shouldn't be any swapping from one non-null controller to another. |
| 95 DCHECK(controller != controller_ && (!controller || !controller_)); | 95 DCHECK(controller != controller_ && (!controller || !controller_)); |
| 96 controller_ = controller; | 96 controller_ = controller; |
| 97 // The controller is set to null when the frame is about to be detached. | 97 // The controller is set to null when the frame is about to be detached. |
| 98 // Nothing is listening for screen availability anymore but the Mojo service | 98 // Nothing is listening for screen availability anymore but the Mojo service |
| 99 // will know about the frame being detached anyway. | 99 // will know about the frame being detached anyway. |
| 100 } | 100 } |
| 101 | 101 |
| 102 void PresentationDispatcher::startSession( | 102 void PresentationDispatcher::startSession( |
| 103 const blink::WebString& presentationUrl, | 103 const blink::WebVector<blink::WebString>& presentationUrls, |
| 104 blink::WebPresentationConnectionClientCallbacks* callback) { | 104 blink::WebPresentationConnectionClientCallbacks* callback) { |
| 105 DCHECK(callback); | 105 DCHECK(callback); |
| 106 ConnectToPresentationServiceIfNeeded(); | 106 ConnectToPresentationServiceIfNeeded(); |
| 107 | 107 |
| 108 std::vector<std::string> urls(presentationUrls.size()); |
| 109 std::transform(presentationUrls.begin(), presentationUrls.end(), urls.begin(), |
| 110 [](const blink::WebString& url) { return url.utf8(); }); |
| 111 |
| 108 // The dispatcher owns the service so |this| will be valid when | 112 // The dispatcher owns the service so |this| will be valid when |
| 109 // OnSessionCreated() is called. |callback| needs to be alive and also needs | 113 // OnSessionCreated() is called. |callback| needs to be alive and also needs |
| 110 // to be destroyed so we transfer its ownership to the mojo callback. | 114 // to be destroyed so we transfer its ownership to the mojo callback. |
| 111 presentation_service_->StartSession( | 115 presentation_service_->StartSession( |
| 112 presentationUrl.utf8(), | 116 urls, base::Bind(&PresentationDispatcher::OnSessionCreated, |
| 113 base::Bind(&PresentationDispatcher::OnSessionCreated, | 117 base::Unretained(this), base::Owned(callback))); |
| 114 base::Unretained(this), | |
| 115 base::Owned(callback))); | |
| 116 } | 118 } |
| 117 | 119 |
| 118 void PresentationDispatcher::joinSession( | 120 void PresentationDispatcher::joinSession( |
| 119 const blink::WebString& presentationUrl, | 121 const blink::WebVector<blink::WebString>& presentationUrls, |
| 120 const blink::WebString& presentationId, | 122 const blink::WebString& presentationId, |
| 121 blink::WebPresentationConnectionClientCallbacks* callback) { | 123 blink::WebPresentationConnectionClientCallbacks* callback) { |
| 122 DCHECK(callback); | 124 DCHECK(callback); |
| 123 ConnectToPresentationServiceIfNeeded(); | 125 ConnectToPresentationServiceIfNeeded(); |
| 124 | 126 |
| 127 std::vector<std::string> urls(presentationUrls.size()); |
| 128 std::transform(presentationUrls.begin(), presentationUrls.end(), urls.begin(), |
| 129 [](const blink::WebString& url) { return url.utf8(); }); |
| 130 |
| 125 // The dispatcher owns the service so |this| will be valid when | 131 // The dispatcher owns the service so |this| will be valid when |
| 126 // OnSessionCreated() is called. |callback| needs to be alive and also needs | 132 // OnSessionCreated() is called. |callback| needs to be alive and also needs |
| 127 // to be destroyed so we transfer its ownership to the mojo callback. | 133 // to be destroyed so we transfer its ownership to the mojo callback. |
| 128 presentation_service_->JoinSession( | 134 presentation_service_->JoinSession( |
| 129 presentationUrl.utf8(), | 135 urls, presentationId.utf8(), |
| 130 presentationId.utf8(), | |
| 131 base::Bind(&PresentationDispatcher::OnSessionCreated, | 136 base::Bind(&PresentationDispatcher::OnSessionCreated, |
| 132 base::Unretained(this), | 137 base::Unretained(this), base::Owned(callback))); |
| 133 base::Owned(callback))); | |
| 134 } | 138 } |
| 135 | 139 |
| 136 void PresentationDispatcher::sendString( | 140 void PresentationDispatcher::sendString( |
| 137 const blink::WebString& presentationUrl, | 141 const blink::WebString& presentationUrl, |
| 138 const blink::WebString& presentationId, | 142 const blink::WebString& presentationId, |
| 139 const blink::WebString& message) { | 143 const blink::WebString& message) { |
| 140 if (message.utf8().size() > kMaxPresentationSessionMessageSize) { | 144 if (message.utf8().size() > kMaxPresentationSessionMessageSize) { |
| 141 // TODO(crbug.com/459008): Limit the size of individual messages to 64k | 145 // TODO(crbug.com/459008): Limit the size of individual messages to 64k |
| 142 // for now. Consider throwing DOMException or splitting bigger messages | 146 // for now. Consider throwing DOMException or splitting bigger messages |
| 143 // into smaller chunks later. | 147 // into smaller chunks later. |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 auto status_it = availability_status_.find(availability_url); | 287 auto status_it = availability_status_.find(availability_url); |
| 284 if (status_it == availability_status_.end()) { | 288 if (status_it == availability_status_.end()) { |
| 285 DLOG(WARNING) << "Stop listening for availability for unknown URL " | 289 DLOG(WARNING) << "Stop listening for availability for unknown URL " |
| 286 << availability_url; | 290 << availability_url; |
| 287 return; | 291 return; |
| 288 } | 292 } |
| 289 status_it->second->availability_observers.erase(observer); | 293 status_it->second->availability_observers.erase(observer); |
| 290 UpdateListeningState(status_it->second.get()); | 294 UpdateListeningState(status_it->second.get()); |
| 291 } | 295 } |
| 292 | 296 |
| 293 void PresentationDispatcher::setDefaultPresentationUrl( | 297 void PresentationDispatcher::setDefaultPresentationUrls( |
| 294 const blink::WebString& url) { | 298 const blink::WebVector<blink::WebString>& presentationUrls) { |
| 295 ConnectToPresentationServiceIfNeeded(); | 299 ConnectToPresentationServiceIfNeeded(); |
| 296 presentation_service_->SetDefaultPresentationURL(url.utf8()); | 300 |
| 301 std::vector<std::string> urls(presentationUrls.size()); |
| 302 std::transform(presentationUrls.begin(), presentationUrls.end(), urls.begin(), |
| 303 [](const blink::WebString& url) { return url.utf8(); }); |
| 304 presentation_service_->SetDefaultPresentationUrls(urls); |
| 297 } | 305 } |
| 298 | 306 |
| 299 void PresentationDispatcher::DidCommitProvisionalLoad( | 307 void PresentationDispatcher::DidCommitProvisionalLoad( |
| 300 bool is_new_navigation, | 308 bool is_new_navigation, |
| 301 bool is_same_page_navigation) { | 309 bool is_same_page_navigation) { |
| 302 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 310 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
| 303 // If not top-level navigation. | 311 // If not top-level navigation. |
| 304 if (frame->parent() || is_same_page_navigation) | 312 if (frame->parent() || is_same_page_navigation) |
| 305 return; | 313 return; |
| 306 | 314 |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 527 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( | 535 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( |
| 528 const std::string& availability_url) | 536 const std::string& availability_url) |
| 529 : url(availability_url), | 537 : url(availability_url), |
| 530 last_known_availability(false), | 538 last_known_availability(false), |
| 531 listening_state(ListeningState::INACTIVE) {} | 539 listening_state(ListeningState::INACTIVE) {} |
| 532 | 540 |
| 533 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { | 541 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { |
| 534 } | 542 } |
| 535 | 543 |
| 536 } // namespace content | 544 } // namespace content |
| OLD | NEW |