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

Side by Side Diff: content/renderer/presentation/presentation_dispatcher.cc

Issue 2480293004: Mandate unique_ptr for base::IDMap in IDMapOwnPointer mode. (Closed)
Patch Set: Make changes requested by danakj, fix a few more headers Created 4 years 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 unified diff | Download patch
OLDNEW
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 <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 // There shouldn't be any swapping from one non-null controller to another. 96 // There shouldn't be any swapping from one non-null controller to another.
97 DCHECK(controller != controller_ && (!controller || !controller_)); 97 DCHECK(controller != controller_ && (!controller || !controller_));
98 controller_ = controller; 98 controller_ = controller;
99 // The controller is set to null when the frame is about to be detached. 99 // The controller is set to null when the frame is about to be detached.
100 // Nothing is listening for screen availability anymore but the Mojo service 100 // Nothing is listening for screen availability anymore but the Mojo service
101 // will know about the frame being detached anyway. 101 // will know about the frame being detached anyway.
102 } 102 }
103 103
104 void PresentationDispatcher::startSession( 104 void PresentationDispatcher::startSession(
105 const blink::WebVector<blink::WebURL>& presentationUrls, 105 const blink::WebVector<blink::WebURL>& presentationUrls,
106 blink::WebPresentationConnectionClientCallbacks* callback) { 106 std::unique_ptr<blink::WebPresentationConnectionClientCallbacks> callback) {
107 DCHECK(callback); 107 DCHECK(callback);
108 ConnectToPresentationServiceIfNeeded(); 108 ConnectToPresentationServiceIfNeeded();
109 109
110 std::vector<GURL> urls; 110 std::vector<GURL> urls;
111 for (const auto& url : presentationUrls) 111 for (const auto& url : presentationUrls)
112 urls.push_back(url); 112 urls.push_back(url);
113 113
114 // The dispatcher owns the service so |this| will be valid when 114 // The dispatcher owns the service so |this| will be valid when
115 // OnSessionCreated() is called. |callback| needs to be alive and also needs 115 // OnSessionCreated() is called. |callback| needs to be alive and also needs
116 // to be destroyed so we transfer its ownership to the mojo callback. 116 // to be destroyed so we transfer its ownership to the mojo callback.
117 presentation_service_->StartSession( 117 presentation_service_->StartSession(
118 urls, base::Bind(&PresentationDispatcher::OnSessionCreated, 118 urls, base::Bind(&PresentationDispatcher::OnSessionCreated,
119 base::Unretained(this), base::Owned(callback))); 119 base::Unretained(this), base::Passed(&callback)));
120 } 120 }
121 121
122 void PresentationDispatcher::joinSession( 122 void PresentationDispatcher::joinSession(
123 const blink::WebVector<blink::WebURL>& presentationUrls, 123 const blink::WebVector<blink::WebURL>& presentationUrls,
124 const blink::WebString& presentationId, 124 const blink::WebString& presentationId,
125 blink::WebPresentationConnectionClientCallbacks* callback) { 125 std::unique_ptr<blink::WebPresentationConnectionClientCallbacks> callback) {
126 DCHECK(callback); 126 DCHECK(callback);
127 ConnectToPresentationServiceIfNeeded(); 127 ConnectToPresentationServiceIfNeeded();
128 128
129 std::vector<GURL> urls; 129 std::vector<GURL> urls;
130 for (const auto& url : presentationUrls) 130 for (const auto& url : presentationUrls)
131 urls.push_back(url); 131 urls.push_back(url);
132 132
133 // The dispatcher owns the service so |this| will be valid when 133 // The dispatcher owns the service so |this| will be valid when
134 // OnSessionCreated() is called. |callback| needs to be alive and also needs 134 // OnSessionCreated() is called. |callback| needs to be alive and also needs
135 // to be destroyed so we transfer its ownership to the mojo callback. 135 // to be destroyed so we transfer its ownership to the mojo callback.
136 presentation_service_->JoinSession( 136 presentation_service_->JoinSession(
137 urls, presentationId.utf8(), 137 urls, presentationId.utf8(),
138 base::Bind(&PresentationDispatcher::OnSessionCreated, 138 base::Bind(&PresentationDispatcher::OnSessionCreated,
139 base::Unretained(this), base::Owned(callback))); 139 base::Unretained(this), base::Passed(&callback)));
140 } 140 }
141 141
142 void PresentationDispatcher::sendString(const blink::WebURL& presentationUrl, 142 void PresentationDispatcher::sendString(const blink::WebURL& presentationUrl,
143 const blink::WebString& presentationId, 143 const blink::WebString& presentationId,
144 const blink::WebString& message) { 144 const blink::WebString& message) {
145 if (message.utf8().size() > kMaxPresentationSessionMessageSize) { 145 if (message.utf8().size() > kMaxPresentationSessionMessageSize) {
146 // TODO(crbug.com/459008): Limit the size of individual messages to 64k 146 // TODO(crbug.com/459008): Limit the size of individual messages to 64k
147 // for now. Consider throwing DOMException or splitting bigger messages 147 // for now. Consider throwing DOMException or splitting bigger messages
148 // into smaller chunks later. 148 // into smaller chunks later.
149 LOG(WARNING) << "message size exceeded limit!"; 149 LOG(WARNING) << "message size exceeded limit!";
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 237
238 void PresentationDispatcher::terminateSession( 238 void PresentationDispatcher::terminateSession(
239 const blink::WebURL& presentationUrl, 239 const blink::WebURL& presentationUrl,
240 const blink::WebString& presentationId) { 240 const blink::WebString& presentationId) {
241 ConnectToPresentationServiceIfNeeded(); 241 ConnectToPresentationServiceIfNeeded();
242 presentation_service_->Terminate(presentationUrl, presentationId.utf8()); 242 presentation_service_->Terminate(presentationUrl, presentationId.utf8());
243 } 243 }
244 244
245 void PresentationDispatcher::getAvailability( 245 void PresentationDispatcher::getAvailability(
246 const blink::WebURL& availabilityUrl, 246 const blink::WebURL& availabilityUrl,
247 blink::WebPresentationAvailabilityCallbacks* callbacks) { 247 std::unique_ptr<blink::WebPresentationAvailabilityCallbacks> callbacks) {
248 AvailabilityStatus* status = nullptr; 248 AvailabilityStatus* status = nullptr;
249 auto status_it = availability_status_.find(availabilityUrl); 249 auto status_it = availability_status_.find(availabilityUrl);
250 if (status_it == availability_status_.end()) { 250 if (status_it == availability_status_.end()) {
251 status = new AvailabilityStatus(availabilityUrl); 251 status = new AvailabilityStatus(availabilityUrl);
252 availability_status_[availabilityUrl] = base::WrapUnique(status); 252 availability_status_[availabilityUrl] = base::WrapUnique(status);
253 } else { 253 } else {
254 status = status_it->second.get(); 254 status = status_it->second.get();
255 } 255 }
256 DCHECK(status); 256 DCHECK(status);
257 257
258 if (status->listening_state == ListeningState::ACTIVE) { 258 if (status->listening_state == ListeningState::ACTIVE) {
259 base::ThreadTaskRunnerHandle::Get()->PostTask( 259 base::ThreadTaskRunnerHandle::Get()->PostTask(
260 FROM_HERE, 260 FROM_HERE,
261 base::Bind(&blink::WebPresentationAvailabilityCallbacks::onSuccess, 261 base::Bind(&blink::WebPresentationAvailabilityCallbacks::onSuccess,
262 base::Owned(callbacks), 262 base::Passed(&callbacks), status->last_known_availability));
263 status->last_known_availability));
264 return; 263 return;
265 } 264 }
266 265
267 status->availability_callbacks.Add(callbacks); 266 status->availability_callbacks.Add(std::move(callbacks));
268 UpdateListeningState(status); 267 UpdateListeningState(status);
269 } 268 }
270 269
271 void PresentationDispatcher::startListening( 270 void PresentationDispatcher::startListening(
272 blink::WebPresentationAvailabilityObserver* observer) { 271 blink::WebPresentationAvailabilityObserver* observer) {
273 auto status_it = availability_status_.find(observer->url()); 272 auto status_it = availability_status_.find(observer->url());
274 if (status_it == availability_status_.end()) { 273 if (status_it == availability_status_.end()) {
275 DLOG(WARNING) << "Start listening for availability for unknown URL " 274 DLOG(WARNING) << "Start listening for availability for unknown URL "
276 << GURL(observer->url()); 275 << GURL(observer->url());
277 return; 276 return;
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 return; 376 return;
378 377
379 if (!session_info.is_null()) { 378 if (!session_info.is_null()) {
380 presentation_service_->ListenForSessionMessages(session_info.Clone()); 379 presentation_service_->ListenForSessionMessages(session_info.Clone());
381 controller_->didStartDefaultSession( 380 controller_->didStartDefaultSession(
382 new PresentationConnectionClient(std::move(session_info))); 381 new PresentationConnectionClient(std::move(session_info)));
383 } 382 }
384 } 383 }
385 384
386 void PresentationDispatcher::OnSessionCreated( 385 void PresentationDispatcher::OnSessionCreated(
387 blink::WebPresentationConnectionClientCallbacks* callback, 386 std::unique_ptr<blink::WebPresentationConnectionClientCallbacks> callback,
388 blink::mojom::PresentationSessionInfoPtr session_info, 387 blink::mojom::PresentationSessionInfoPtr session_info,
389 blink::mojom::PresentationErrorPtr error) { 388 blink::mojom::PresentationErrorPtr error) {
390 DCHECK(callback); 389 DCHECK(callback);
391 if (!error.is_null()) { 390 if (!error.is_null()) {
392 DCHECK(session_info.is_null()); 391 DCHECK(session_info.is_null());
393 callback->onError(blink::WebPresentationError( 392 callback->onError(blink::WebPresentationError(
394 GetWebPresentationErrorTypeFromMojo(error->error_type), 393 GetWebPresentationErrorTypeFromMojo(error->error_type),
395 blink::WebString::fromUTF8(error->message))); 394 blink::WebString::fromUTF8(error->message)));
396 return; 395 return;
397 } 396 }
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
547 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( 546 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus(
548 const GURL& availability_url) 547 const GURL& availability_url)
549 : url(availability_url), 548 : url(availability_url),
550 last_known_availability(false), 549 last_known_availability(false),
551 listening_state(ListeningState::INACTIVE) {} 550 listening_state(ListeningState::INACTIVE) {}
552 551
553 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { 552 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() {
554 } 553 }
555 554
556 } // namespace content 555 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/presentation/presentation_dispatcher.h ('k') | content/renderer/push_messaging/push_messaging_dispatcher.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698