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

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

Issue 2471263003: [Presentation API] (4th)(1-UA blink side) Add WebPresentationConnection and WebPresentationConnecti… (Closed)
Patch Set: resolving code review comments from Derek Created 3 years, 11 months 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 <string> 7 #include <string>
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 "base/threading/thread_task_runner_handle.h" 14 #include "base/threading/thread_task_runner_handle.h"
15 #include "content/public/common/presentation_constants.h" 15 #include "content/public/common/presentation_constants.h"
16 #include "content/public/renderer/render_frame.h" 16 #include "content/public/renderer/render_frame.h"
17 #include "content/renderer/presentation/presentation_connection_proxy.h"
17 #include "mojo/public/cpp/bindings/type_converter.h" 18 #include "mojo/public/cpp/bindings/type_converter.h"
18 #include "services/service_manager/public/cpp/interface_provider.h" 19 #include "services/service_manager/public/cpp/interface_provider.h"
19 #include "third_party/WebKit/public/platform/WebString.h" 20 #include "third_party/WebKit/public/platform/WebString.h"
20 #include "third_party/WebKit/public/platform/WebURL.h" 21 #include "third_party/WebKit/public/platform/WebURL.h"
21 #include "third_party/WebKit/public/platform/WebVector.h" 22 #include "third_party/WebKit/public/platform/WebVector.h"
22 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nAvailabilityObserver.h" 23 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nAvailabilityObserver.h"
24 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnection.h"
25 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nConnectionCallbacks.h"
23 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nController.h" 26 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nController.h"
24 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nError.h" 27 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nError.h"
25 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nReceiver.h" 28 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nReceiver.h"
26 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nSessionInfo.h" 29 #include "third_party/WebKit/public/platform/modules/presentation/WebPresentatio nSessionInfo.h"
27 #include "third_party/WebKit/public/platform/modules/presentation/presentation.m ojom.h" 30 #include "third_party/WebKit/public/platform/modules/presentation/presentation.m ojom.h"
28 #include "third_party/WebKit/public/web/WebLocalFrame.h" 31 #include "third_party/WebKit/public/web/WebLocalFrame.h"
29 #include "url/gurl.h" 32 #include "url/gurl.h"
30 33
31 namespace mojo { 34 namespace mojo {
32 35
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 } 96 }
94 } 97 }
95 98
96 } // namespace 99 } // namespace
97 100
98 namespace content { 101 namespace content {
99 102
100 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame) 103 PresentationDispatcher::PresentationDispatcher(RenderFrame* render_frame)
101 : RenderFrameObserver(render_frame), 104 : RenderFrameObserver(render_frame),
102 controller_(nullptr), 105 controller_(nullptr),
103 binding_(this) { 106 receiver_(nullptr),
104 } 107 binding_(this) {}
105 108
106 PresentationDispatcher::~PresentationDispatcher() { 109 PresentationDispatcher::~PresentationDispatcher() {
107 // Controller should be destroyed before the dispatcher when frame is 110 // Controller should be destroyed before the dispatcher when frame is
108 // destroyed. 111 // destroyed.
109 DCHECK(!controller_); 112 DCHECK(!controller_);
110 } 113 }
111 114
112 void PresentationDispatcher::setController( 115 void PresentationDispatcher::setController(
113 blink::WebPresentationController* controller) { 116 blink::WebPresentationController* controller) {
114 // There shouldn't be any swapping from one non-null controller to another. 117 // There shouldn't be any swapping from one non-null controller to another.
115 DCHECK(controller != controller_ && (!controller || !controller_)); 118 DCHECK(controller != controller_ && (!controller || !controller_));
116 controller_ = controller; 119 controller_ = controller;
117 // The controller is set to null when the frame is about to be detached. 120 // The controller is set to null when the frame is about to be detached.
118 // Nothing is listening for screen availability anymore but the Mojo service 121 // Nothing is listening for screen availability anymore but the Mojo service
119 // will know about the frame being detached anyway. 122 // will know about the frame being detached anyway.
120 } 123 }
121 124
122 void PresentationDispatcher::startSession( 125 void PresentationDispatcher::startSession(
123 const blink::WebVector<blink::WebURL>& presentationUrls, 126 const blink::WebVector<blink::WebURL>& presentationUrls,
124 std::unique_ptr<blink::WebPresentationConnectionCallback> callback) { 127 std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback) {
125 DCHECK(callback); 128 DCHECK(callback);
126 ConnectToPresentationServiceIfNeeded(); 129 ConnectToPresentationServiceIfNeeded();
127 130
128 std::vector<GURL> urls; 131 std::vector<GURL> urls;
129 for (const auto& url : presentationUrls) 132 for (const auto& url : presentationUrls)
130 urls.push_back(url); 133 urls.push_back(url);
131 134
132 // The dispatcher owns the service so |this| will be valid when 135 // The dispatcher owns the service so |this| will be valid when
133 // OnSessionCreated() is called. |callback| needs to be alive and also needs 136 // OnSessionCreated() is called. |callback| needs to be alive and also needs
134 // to be destroyed so we transfer its ownership to the mojo callback. 137 // to be destroyed so we transfer its ownership to the mojo callback.
135 presentation_service_->StartSession( 138 presentation_service_->StartSession(
136 urls, base::Bind(&PresentationDispatcher::OnSessionCreated, 139 urls, base::Bind(&PresentationDispatcher::OnSessionCreated,
137 base::Unretained(this), base::Passed(&callback))); 140 base::Unretained(this), base::Passed(&callback)));
138 } 141 }
139 142
140 void PresentationDispatcher::joinSession( 143 void PresentationDispatcher::joinSession(
141 const blink::WebVector<blink::WebURL>& presentationUrls, 144 const blink::WebVector<blink::WebURL>& presentationUrls,
142 const blink::WebString& presentationId, 145 const blink::WebString& presentationId,
143 std::unique_ptr<blink::WebPresentationConnectionCallback> callback) { 146 std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback) {
144 DCHECK(callback); 147 DCHECK(callback);
145 ConnectToPresentationServiceIfNeeded(); 148 ConnectToPresentationServiceIfNeeded();
146 149
147 std::vector<GURL> urls; 150 std::vector<GURL> urls;
148 for (const auto& url : presentationUrls) 151 for (const auto& url : presentationUrls)
149 urls.push_back(url); 152 urls.push_back(url);
150 153
151 // The dispatcher owns the service so |this| will be valid when 154 // The dispatcher owns the service so |this| will be valid when
152 // OnSessionCreated() is called. |callback| needs to be alive and also needs 155 // OnSessionCreated() is called. |callback| needs to be alive and also needs
153 // to be destroyed so we transfer its ownership to the mojo callback. 156 // to be destroyed so we transfer its ownership to the mojo callback.
154 presentation_service_->JoinSession( 157 presentation_service_->JoinSession(
155 urls, presentationId.utf8(), 158 urls, presentationId.utf8(),
156 base::Bind(&PresentationDispatcher::OnSessionCreated, 159 base::Bind(&PresentationDispatcher::OnSessionCreated,
157 base::Unretained(this), base::Passed(&callback))); 160 base::Unretained(this), base::Passed(&callback)));
158 } 161 }
159 162
160 void PresentationDispatcher::sendString(const blink::WebURL& presentationUrl, 163 void PresentationDispatcher::sendString(
161 const blink::WebString& presentationId, 164 const blink::WebURL& presentationUrl,
162 const blink::WebString& message) { 165 const blink::WebString& presentationId,
166 const blink::WebString& message,
167 const blink::WebPresentationConnectionProxy* connection_proxy) {
163 if (message.utf8().size() > kMaxPresentationConnectionMessageSize) { 168 if (message.utf8().size() > kMaxPresentationConnectionMessageSize) {
164 // TODO(crbug.com/459008): Limit the size of individual messages to 64k 169 // TODO(crbug.com/459008): Limit the size of individual messages to 64k
165 // for now. Consider throwing DOMException or splitting bigger messages 170 // for now. Consider throwing DOMException or splitting bigger messages
166 // into smaller chunks later. 171 // into smaller chunks later.
167 LOG(WARNING) << "message size exceeded limit!"; 172 LOG(WARNING) << "message size exceeded limit!";
168 return; 173 return;
169 } 174 }
170 175
171 message_request_queue_.push(base::WrapUnique( 176 message_request_queue_.push(base::WrapUnique(CreateSendTextMessageRequest(
172 CreateSendTextMessageRequest(presentationUrl, presentationId, message))); 177 presentationUrl, presentationId, message, connection_proxy)));
173 // Start processing request if only one in the queue. 178 // Start processing request if only one in the queue.
174 if (message_request_queue_.size() == 1) 179 if (message_request_queue_.size() == 1)
175 DoSendMessage(message_request_queue_.front().get()); 180 DoSendMessage(message_request_queue_.front().get());
176 } 181 }
177 182
178 void PresentationDispatcher::sendArrayBuffer( 183 void PresentationDispatcher::sendArrayBuffer(
179 const blink::WebURL& presentationUrl, 184 const blink::WebURL& presentationUrl,
180 const blink::WebString& presentationId, 185 const blink::WebString& presentationId,
181 const uint8_t* data, 186 const uint8_t* data,
182 size_t length) { 187 size_t length,
188 const blink::WebPresentationConnectionProxy* connection_proxy) {
183 DCHECK(data); 189 DCHECK(data);
184 if (length > kMaxPresentationConnectionMessageSize) { 190 if (length > kMaxPresentationConnectionMessageSize) {
185 // TODO(crbug.com/459008): Same as in sendString(). 191 // TODO(crbug.com/459008): Same as in sendString().
186 LOG(WARNING) << "data size exceeded limit!"; 192 LOG(WARNING) << "data size exceeded limit!";
187 return; 193 return;
188 } 194 }
189 195
190 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( 196 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest(
191 presentationUrl, presentationId, 197 presentationUrl, presentationId,
192 blink::mojom::PresentationMessageType::BINARY, data, length))); 198 blink::mojom::PresentationMessageType::BINARY, data, length,
199 connection_proxy)));
193 // Start processing request if only one in the queue. 200 // Start processing request if only one in the queue.
194 if (message_request_queue_.size() == 1) 201 if (message_request_queue_.size() == 1)
195 DoSendMessage(message_request_queue_.front().get()); 202 DoSendMessage(message_request_queue_.front().get());
196 } 203 }
197 204
198 void PresentationDispatcher::sendBlobData( 205 void PresentationDispatcher::sendBlobData(
199 const blink::WebURL& presentationUrl, 206 const blink::WebURL& presentationUrl,
200 const blink::WebString& presentationId, 207 const blink::WebString& presentationId,
201 const uint8_t* data, 208 const uint8_t* data,
202 size_t length) { 209 size_t length,
210 const blink::WebPresentationConnectionProxy* connection_proxy) {
203 DCHECK(data); 211 DCHECK(data);
204 if (length > kMaxPresentationConnectionMessageSize) { 212 if (length > kMaxPresentationConnectionMessageSize) {
205 // TODO(crbug.com/459008): Same as in sendString(). 213 // TODO(crbug.com/459008): Same as in sendString().
206 LOG(WARNING) << "data size exceeded limit!"; 214 LOG(WARNING) << "data size exceeded limit!";
207 return; 215 return;
208 } 216 }
209 217
210 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest( 218 message_request_queue_.push(base::WrapUnique(CreateSendBinaryMessageRequest(
211 presentationUrl, presentationId, 219 presentationUrl, presentationId,
212 blink::mojom::PresentationMessageType::BINARY, data, length))); 220 blink::mojom::PresentationMessageType::BINARY, data, length,
221 connection_proxy)));
213 // Start processing request if only one in the queue. 222 // Start processing request if only one in the queue.
214 if (message_request_queue_.size() == 1) 223 if (message_request_queue_.size() == 1)
215 DoSendMessage(message_request_queue_.front().get()); 224 DoSendMessage(message_request_queue_.front().get());
216 } 225 }
217 226
218 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) { 227 void PresentationDispatcher::DoSendMessage(SendMessageRequest* request) {
219 ConnectToPresentationServiceIfNeeded(); 228 ConnectToPresentationServiceIfNeeded();
220 229
221 presentation_service_->SendConnectionMessage( 230 presentation_service_->SendConnectionMessage(
222 std::move(request->session_info), std::move(request->message), 231 std::move(request->session_info), std::move(request->message),
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 UpdateListeningState(status); 403 UpdateListeningState(status);
395 } 404 }
396 405
397 void PresentationDispatcher::OnDefaultSessionStarted( 406 void PresentationDispatcher::OnDefaultSessionStarted(
398 blink::mojom::PresentationSessionInfoPtr session_info) { 407 blink::mojom::PresentationSessionInfoPtr session_info) {
399 if (!controller_) 408 if (!controller_)
400 return; 409 return;
401 410
402 if (!session_info.is_null()) { 411 if (!session_info.is_null()) {
403 presentation_service_->ListenForConnectionMessages(session_info.Clone()); 412 presentation_service_->ListenForConnectionMessages(session_info.Clone());
404 controller_->didStartDefaultSession( 413 auto* connection = controller_->didStartDefaultSession(
405 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info)); 414 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
415 auto* controller_connection_proxy =
416 new ControllerConnectionProxy(connection);
417 connection->bindProxy(base::WrapUnique(controller_connection_proxy));
406 } 418 }
407 } 419 }
408 420
409 void PresentationDispatcher::OnSessionCreated( 421 void PresentationDispatcher::OnSessionCreated(
410 std::unique_ptr<blink::WebPresentationConnectionCallback> callback, 422 std::unique_ptr<blink::WebPresentationConnectionCallbacks> callback,
411 blink::mojom::PresentationSessionInfoPtr session_info, 423 blink::mojom::PresentationSessionInfoPtr session_info,
412 blink::mojom::PresentationErrorPtr error) { 424 blink::mojom::PresentationErrorPtr error) {
413 DCHECK(callback); 425 DCHECK(callback);
414 if (!error.is_null()) { 426 if (!error.is_null()) {
415 DCHECK(session_info.is_null()); 427 DCHECK(session_info.is_null());
416 callback->onError(blink::WebPresentationError( 428 callback->onError(blink::WebPresentationError(
417 GetWebPresentationErrorTypeFromMojo(error->error_type), 429 GetWebPresentationErrorTypeFromMojo(error->error_type),
418 blink::WebString::fromUTF8(error->message))); 430 blink::WebString::fromUTF8(error->message)));
419 return; 431 return;
420 } 432 }
421 433
422 DCHECK(!session_info.is_null()); 434 DCHECK(!session_info.is_null());
423 presentation_service_->ListenForConnectionMessages(session_info.Clone()); 435 presentation_service_->ListenForConnectionMessages(session_info.Clone());
424 callback->onSuccess( 436 callback->onSuccess(
425 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info)); 437 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
438
439 auto* connection = callback->getConnection();
440 DCHECK(connection);
441 auto* controller_connection_proxy = new ControllerConnectionProxy(connection);
442 connection->bindProxy(base::WrapUnique(controller_connection_proxy));
426 } 443 }
427 444
428 void PresentationDispatcher::OnReceiverConnectionAvailable( 445 void PresentationDispatcher::OnReceiverConnectionAvailable(
429 blink::mojom::PresentationSessionInfoPtr session_info, 446 blink::mojom::PresentationSessionInfoPtr session_info,
430 blink::mojom::PresentationConnectionPtr, 447 blink::mojom::PresentationConnectionPtr controller_connection_ptr,
431 blink::mojom::PresentationConnectionRequest) { 448 blink::mojom::PresentationConnectionRequest receiver_connection_request) {
432 if (receiver_) { 449 DCHECK(receiver_);
433 receiver_->onReceiverConnectionAvailable( 450 // Bind receiver_connection_proxy with PresentationConnection in receiver
434 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info)); 451 // page.
435 } 452 auto* connection = receiver_->onReceiverConnectionAvailable(
453 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info));
454 auto* receiver_connection_proxy = new ReceiverConnectionProxy(connection);
455 connection->bindProxy(base::WrapUnique(receiver_connection_proxy));
456
457 receiver_connection_proxy->Bind(std::move(receiver_connection_request));
458 receiver_connection_proxy->BindTargetConnection(
459 std::move(controller_connection_ptr));
436 } 460 }
437 461
438 void PresentationDispatcher::OnConnectionStateChanged( 462 void PresentationDispatcher::OnConnectionStateChanged(
439 blink::mojom::PresentationSessionInfoPtr session_info, 463 blink::mojom::PresentationSessionInfoPtr session_info,
440 blink::mojom::PresentationConnectionState state) { 464 blink::mojom::PresentationConnectionState state) {
441 if (!controller_) 465 if (!controller_)
442 return; 466 return;
443 467
444 controller_->didChangeSessionState( 468 controller_->didChangeSessionState(
445 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info), 469 mojo::ConvertTo<blink::WebPresentationSessionInfo>(session_info),
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
514 status->listening_state = ListeningState::WAITING; 538 status->listening_state = ListeningState::WAITING;
515 presentation_service_->ListenForScreenAvailability(status->url); 539 presentation_service_->ListenForScreenAvailability(status->url);
516 } else { 540 } else {
517 status->listening_state = ListeningState::INACTIVE; 541 status->listening_state = ListeningState::INACTIVE;
518 presentation_service_->StopListeningForScreenAvailability(status->url); 542 presentation_service_->StopListeningForScreenAvailability(status->url);
519 } 543 }
520 } 544 }
521 545
522 PresentationDispatcher::SendMessageRequest::SendMessageRequest( 546 PresentationDispatcher::SendMessageRequest::SendMessageRequest(
523 blink::mojom::PresentationSessionInfoPtr session_info, 547 blink::mojom::PresentationSessionInfoPtr session_info,
524 blink::mojom::ConnectionMessagePtr message) 548 blink::mojom::ConnectionMessagePtr message,
525 : session_info(std::move(session_info)), message(std::move(message)) {} 549 const blink::WebPresentationConnectionProxy* connection_proxy)
550 : session_info(std::move(session_info)),
551 message(std::move(message)),
552 connection_proxy(connection_proxy) {}
526 553
527 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {} 554 PresentationDispatcher::SendMessageRequest::~SendMessageRequest() {}
528 555
529 // static 556 // static
530 PresentationDispatcher::SendMessageRequest* 557 PresentationDispatcher::SendMessageRequest*
531 PresentationDispatcher::CreateSendTextMessageRequest( 558 PresentationDispatcher::CreateSendTextMessageRequest(
532 const blink::WebURL& presentationUrl, 559 const blink::WebURL& presentationUrl,
533 const blink::WebString& presentationId, 560 const blink::WebString& presentationId,
534 const blink::WebString& message) { 561 const blink::WebString& message,
562 const blink::WebPresentationConnectionProxy* connection_proxy) {
535 blink::mojom::PresentationSessionInfoPtr session_info = 563 blink::mojom::PresentationSessionInfoPtr session_info =
536 blink::mojom::PresentationSessionInfo::New(); 564 blink::mojom::PresentationSessionInfo::New();
537 session_info->url = presentationUrl; 565 session_info->url = presentationUrl;
538 session_info->id = presentationId.utf8(); 566 session_info->id = presentationId.utf8();
539 567
540 blink::mojom::ConnectionMessagePtr session_message = 568 blink::mojom::ConnectionMessagePtr session_message =
541 blink::mojom::ConnectionMessage::New(); 569 blink::mojom::ConnectionMessage::New();
542 session_message->type = blink::mojom::PresentationMessageType::TEXT; 570 session_message->type = blink::mojom::PresentationMessageType::TEXT;
543 session_message->message = message.utf8(); 571 session_message->message = message.utf8();
544 return new SendMessageRequest(std::move(session_info), 572 return new SendMessageRequest(std::move(session_info),
545 std::move(session_message)); 573 std::move(session_message), connection_proxy);
546 } 574 }
547 575
548 // static 576 // static
549 PresentationDispatcher::SendMessageRequest* 577 PresentationDispatcher::SendMessageRequest*
550 PresentationDispatcher::CreateSendBinaryMessageRequest( 578 PresentationDispatcher::CreateSendBinaryMessageRequest(
551 const blink::WebURL& presentationUrl, 579 const blink::WebURL& presentationUrl,
552 const blink::WebString& presentationId, 580 const blink::WebString& presentationId,
553 blink::mojom::PresentationMessageType type, 581 blink::mojom::PresentationMessageType type,
554 const uint8_t* data, 582 const uint8_t* data,
555 size_t length) { 583 size_t length,
584 const blink::WebPresentationConnectionProxy* connection_proxy) {
556 blink::mojom::PresentationSessionInfoPtr session_info = 585 blink::mojom::PresentationSessionInfoPtr session_info =
557 blink::mojom::PresentationSessionInfo::New(); 586 blink::mojom::PresentationSessionInfo::New();
558 session_info->url = presentationUrl; 587 session_info->url = presentationUrl;
559 session_info->id = presentationId.utf8(); 588 session_info->id = presentationId.utf8();
560 589
561 blink::mojom::ConnectionMessagePtr session_message = 590 blink::mojom::ConnectionMessagePtr session_message =
562 blink::mojom::ConnectionMessage::New(); 591 blink::mojom::ConnectionMessage::New();
563 session_message->type = type; 592 session_message->type = type;
564 session_message->data = std::vector<uint8_t>(data, data + length); 593 session_message->data = std::vector<uint8_t>(data, data + length);
565 return new SendMessageRequest(std::move(session_info), 594 return new SendMessageRequest(std::move(session_info),
566 std::move(session_message)); 595 std::move(session_message), connection_proxy);
567 } 596 }
568 597
569 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus( 598 PresentationDispatcher::AvailabilityStatus::AvailabilityStatus(
570 const GURL& availability_url) 599 const GURL& availability_url)
571 : url(availability_url), 600 : url(availability_url),
572 last_known_availability(false), 601 last_known_availability(false),
573 listening_state(ListeningState::INACTIVE) {} 602 listening_state(ListeningState::INACTIVE) {}
574 603
575 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() { 604 PresentationDispatcher::AvailabilityStatus::~AvailabilityStatus() {
576 } 605 }
577 606
578 } // namespace content 607 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698