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

Side by Side Diff: extensions/browser/api/cast_channel/cast_channel_api.cc

Issue 2688463003: [chrome.cast.channel] Remove event logging. (Closed)
Patch Set: Remove errors object when socket is closed Created 3 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/browser/api/cast_channel/cast_channel_api.h" 5 #include "extensions/browser/api/cast_channel/cast_channel_api.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <limits> 10 #include <limits>
11 #include <memory> 11 #include <memory>
12 #include <string> 12 #include <string>
13 #include <utility> 13 #include <utility>
14 14
15 #include "base/json/json_writer.h" 15 #include "base/json/json_writer.h"
16 #include "base/lazy_instance.h" 16 #include "base/lazy_instance.h"
17 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
18 #include "base/strings/string_number_conversions.h" 18 #include "base/strings/string_number_conversions.h"
19 #include "base/time/default_clock.h"
20 #include "base/values.h" 19 #include "base/values.h"
21 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
22 #include "extensions/browser/api/cast_channel/cast_message_util.h" 21 #include "extensions/browser/api/cast_channel/cast_message_util.h"
23 #include "extensions/browser/api/cast_channel/cast_socket.h" 22 #include "extensions/browser/api/cast_channel/cast_socket.h"
24 #include "extensions/browser/api/cast_channel/keep_alive_delegate.h" 23 #include "extensions/browser/api/cast_channel/keep_alive_delegate.h"
25 #include "extensions/browser/api/cast_channel/logger.h" 24 #include "extensions/browser/api/cast_channel/logger.h"
26 #include "extensions/browser/event_router.h" 25 #include "extensions/browser/event_router.h"
27 #include "extensions/common/api/cast_channel/cast_channel.pb.h" 26 #include "extensions/common/api/cast_channel/cast_channel.pb.h"
28 #include "extensions/common/api/cast_channel/logging.pb.h" 27 #include "extensions/common/api/cast_channel/logging.pb.h"
29 #include "net/base/ip_address.h" 28 #include "net/base/ip_address.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 } 101 }
103 102
104 bool IsValidConnectInfoIpAddress(const ConnectInfo& connect_info) { 103 bool IsValidConnectInfoIpAddress(const ConnectInfo& connect_info) {
105 net::IPAddress ip_address; 104 net::IPAddress ip_address;
106 return ip_address.AssignFromIPLiteral(connect_info.ip_address); 105 return ip_address.AssignFromIPLiteral(connect_info.ip_address);
107 } 106 }
108 107
109 } // namespace 108 } // namespace
110 109
111 CastChannelAPI::CastChannelAPI(content::BrowserContext* context) 110 CastChannelAPI::CastChannelAPI(content::BrowserContext* context)
112 : browser_context_(context), 111 : browser_context_(context), logger_(new Logger()) {
113 logger_(new Logger(base::WrapUnique<base::Clock>(new base::DefaultClock),
114 base::Time::UnixEpoch())) {
115 DCHECK(browser_context_); 112 DCHECK(browser_context_);
116 } 113 }
117 114
118 // static 115 // static
119 CastChannelAPI* CastChannelAPI::Get(content::BrowserContext* context) { 116 CastChannelAPI* CastChannelAPI::Get(content::BrowserContext* context) {
120 return BrowserContextKeyedAPIFactory<CastChannelAPI>::Get(context); 117 return BrowserContextKeyedAPIFactory<CastChannelAPI>::Get(context);
121 } 118 }
122 119
123 scoped_refptr<Logger> CastChannelAPI::GetLogger() { 120 scoped_refptr<Logger> CastChannelAPI::GetLogger() {
124 return logger_; 121 return logger_;
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 extension_->id(), *ip_endpoint_, channel_auth_, 310 extension_->id(), *ip_endpoint_, channel_auth_,
314 ExtensionsBrowserClient::Get()->GetNetLog(), 311 ExtensionsBrowserClient::Get()->GetNetLog(),
315 base::TimeDelta::FromMilliseconds(connect_info.timeout.get() 312 base::TimeDelta::FromMilliseconds(connect_info.timeout.get()
316 ? *connect_info.timeout 313 ? *connect_info.timeout
317 : kDefaultConnectTimeoutMillis), 314 : kDefaultConnectTimeoutMillis),
318 liveness_timeout_ > base::TimeDelta(), api_->GetLogger(), 315 liveness_timeout_ > base::TimeDelta(), api_->GetLogger(),
319 connect_info.capabilities.get() ? *connect_info.capabilities 316 connect_info.capabilities.get() ? *connect_info.capabilities
320 : CastDeviceCapability::NONE); 317 : CastDeviceCapability::NONE);
321 } 318 }
322 new_channel_id_ = AddSocket(socket); 319 new_channel_id_ = AddSocket(socket);
323 api_->GetLogger()->LogNewSocketEvent(*socket);
324 320
325 // Construct read delegates. 321 // Construct read delegates.
326 std::unique_ptr<api::cast_channel::CastTransport::Delegate> delegate( 322 std::unique_ptr<api::cast_channel::CastTransport::Delegate> delegate(
327 base::MakeUnique<CastMessageHandler>( 323 base::MakeUnique<CastMessageHandler>(
328 base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr()), socket, 324 base::Bind(&CastChannelAPI::SendEvent, api_->AsWeakPtr()), socket,
329 api_->GetLogger())); 325 api_->GetLogger()));
330 if (socket->keep_alive()) { 326 if (socket->keep_alive()) {
331 // Wrap read delegate in a KeepAliveDelegate for timeout handling. 327 // Wrap read delegate in a KeepAliveDelegate for timeout handling.
332 api::cast_channel::KeepAliveDelegate* keep_alive = 328 api::cast_channel::KeepAliveDelegate* keep_alive =
333 new api::cast_channel::KeepAliveDelegate( 329 new api::cast_channel::KeepAliveDelegate(
334 socket, api_->GetLogger(), std::move(delegate), ping_interval_, 330 socket, api_->GetLogger(), std::move(delegate), ping_interval_,
335 liveness_timeout_); 331 liveness_timeout_);
336 std::unique_ptr<base::Timer> injected_timer = 332 std::unique_ptr<base::Timer> injected_timer =
337 api_->GetInjectedTimeoutTimerForTest(); 333 api_->GetInjectedTimeoutTimerForTest();
338 if (injected_timer) { 334 if (injected_timer) {
339 keep_alive->SetTimersForTest(base::MakeUnique<base::Timer>(false, false), 335 keep_alive->SetTimersForTest(base::MakeUnique<base::Timer>(false, false),
340 std::move(injected_timer)); 336 std::move(injected_timer));
341 } 337 }
342 delegate.reset(keep_alive); 338 delegate.reset(keep_alive);
343 } 339 }
344 340
345 api_->GetLogger()->LogNewSocketEvent(*socket);
346 socket->Connect(std::move(delegate), 341 socket->Connect(std::move(delegate),
347 base::Bind(&CastChannelOpenFunction::OnOpen, this)); 342 base::Bind(&CastChannelOpenFunction::OnOpen, this));
348 } 343 }
349 344
350 void CastChannelOpenFunction::OnOpen(cast_channel::ChannelError result) { 345 void CastChannelOpenFunction::OnOpen(cast_channel::ChannelError result) {
351 DCHECK_CURRENTLY_ON(BrowserThread::IO); 346 DCHECK_CURRENTLY_ON(BrowserThread::IO);
352 VLOG(1) << "Connect finished, OnOpen invoked."; 347 VLOG(1) << "Connect finished, OnOpen invoked.";
353 CastSocket* socket = GetSocket(new_channel_id_); 348 CastSocket* socket = GetSocket(new_channel_id_);
354 if (!socket) { 349 if (!socket) {
355 SetResultFromError(new_channel_id_, result); 350 SetResultFromError(new_channel_id_, result);
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 } else { 413 } else {
419 SetResultFromSocket(*socket); 414 SetResultFromSocket(*socket);
420 } 415 }
421 AsyncWorkCompleted(); 416 AsyncWorkCompleted();
422 } 417 }
423 418
424 CastChannelCloseFunction::CastChannelCloseFunction() { } 419 CastChannelCloseFunction::CastChannelCloseFunction() { }
425 420
426 CastChannelCloseFunction::~CastChannelCloseFunction() { } 421 CastChannelCloseFunction::~CastChannelCloseFunction() { }
427 422
423 bool CastChannelCloseFunction::PrePrepare() {
424 api_ = CastChannelAPI::Get(browser_context());
425 return CastChannelAsyncApiFunction::PrePrepare();
426 }
427
428 bool CastChannelCloseFunction::Prepare() { 428 bool CastChannelCloseFunction::Prepare() {
429 params_ = Close::Params::Create(*args_); 429 params_ = Close::Params::Create(*args_);
430 EXTENSION_FUNCTION_VALIDATE(params_.get()); 430 EXTENSION_FUNCTION_VALIDATE(params_.get());
431 return true; 431 return true;
432 } 432 }
433 433
434 void CastChannelCloseFunction::AsyncWorkStart() { 434 void CastChannelCloseFunction::AsyncWorkStart() {
435 CastSocket* socket = GetSocket(params_->channel.channel_id); 435 CastSocket* socket = GetSocket(params_->channel.channel_id);
436 if (!socket) { 436 if (!socket) {
437 SetResultFromError(params_->channel.channel_id, 437 SetResultFromError(params_->channel.channel_id,
438 cast_channel::CHANNEL_ERROR_INVALID_CHANNEL_ID); 438 cast_channel::CHANNEL_ERROR_INVALID_CHANNEL_ID);
439 AsyncWorkCompleted(); 439 AsyncWorkCompleted();
440 } else { 440 } else {
441 socket->Close(base::Bind(&CastChannelCloseFunction::OnClose, this)); 441 socket->Close(base::Bind(&CastChannelCloseFunction::OnClose, this));
442 } 442 }
443 } 443 }
444 444
445 void CastChannelCloseFunction::OnClose(int result) { 445 void CastChannelCloseFunction::OnClose(int result) {
446 DCHECK_CURRENTLY_ON(BrowserThread::IO); 446 DCHECK_CURRENTLY_ON(BrowserThread::IO);
447 VLOG(1) << "CastChannelCloseFunction::OnClose result = " << result; 447 VLOG(1) << "CastChannelCloseFunction::OnClose result = " << result;
448 int channel_id = params_->channel.channel_id; 448 int channel_id = params_->channel.channel_id;
449 CastSocket* socket = GetSocket(channel_id); 449 CastSocket* socket = GetSocket(channel_id);
450 if (result < 0 || !socket) { 450 if (result < 0 || !socket) {
451 SetResultFromError(channel_id, 451 SetResultFromError(channel_id,
452 cast_channel::CHANNEL_ERROR_SOCKET_ERROR); 452 cast_channel::CHANNEL_ERROR_SOCKET_ERROR);
453 } else { 453 } else {
454 SetResultFromSocket(*socket); 454 SetResultFromSocket(*socket);
455 // This will delete |socket|. 455 // This will delete |socket|.
456 RemoveSocket(channel_id); 456 RemoveSocket(channel_id);
457 api_->GetLogger()->ClearLastErrors(channel_id);
457 } 458 }
458 AsyncWorkCompleted(); 459 AsyncWorkCompleted();
459 } 460 }
460 461
461 CastChannelGetLogsFunction::CastChannelGetLogsFunction() {
462 }
463
464 CastChannelGetLogsFunction::~CastChannelGetLogsFunction() {
465 }
466
467 bool CastChannelGetLogsFunction::PrePrepare() {
468 api_ = CastChannelAPI::Get(browser_context());
469 return CastChannelAsyncApiFunction::PrePrepare();
470 }
471
472 bool CastChannelGetLogsFunction::Prepare() {
473 return true;
474 }
475
476 void CastChannelGetLogsFunction::AsyncWorkStart() {
477 DCHECK(api_);
478
479 size_t length = 0;
480 std::unique_ptr<char[]> out = api_->GetLogger()->GetLogs(&length);
481 if (out.get()) {
482 SetResult(base::MakeUnique<base::BinaryValue>(std::move(out), length));
483 } else {
484 SetError("Unable to get logs.");
485 }
486
487 api_->GetLogger()->Reset();
488
489 AsyncWorkCompleted();
490 }
491
492 CastChannelOpenFunction::CastMessageHandler::CastMessageHandler( 462 CastChannelOpenFunction::CastMessageHandler::CastMessageHandler(
493 const EventDispatchCallback& ui_dispatch_cb, 463 const EventDispatchCallback& ui_dispatch_cb,
494 cast_channel::CastSocket* socket, 464 cast_channel::CastSocket* socket,
495 scoped_refptr<Logger> logger) 465 scoped_refptr<Logger> logger)
496 : ui_dispatch_cb_(ui_dispatch_cb), socket_(socket), logger_(logger) { 466 : ui_dispatch_cb_(ui_dispatch_cb), socket_(socket), logger_(logger) {
497 DCHECK(socket_); 467 DCHECK(socket_);
498 DCHECK(logger_); 468 DCHECK(logger_);
499 } 469 }
500 470
501 CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() { 471 CastChannelOpenFunction::CastMessageHandler::~CastMessageHandler() {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 std::move(results))); 510 std::move(results)));
541 BrowserThread::PostTask( 511 BrowserThread::PostTask(
542 BrowserThread::UI, FROM_HERE, 512 BrowserThread::UI, FROM_HERE,
543 base::Bind(ui_dispatch_cb_, socket_->owner_extension_id(), 513 base::Bind(ui_dispatch_cb_, socket_->owner_extension_id(),
544 base::Passed(std::move(event)))); 514 base::Passed(std::move(event))));
545 } 515 }
546 516
547 void CastChannelOpenFunction::CastMessageHandler::Start() { 517 void CastChannelOpenFunction::CastMessageHandler::Start() {
548 } 518 }
549 519
550 CastChannelSetAuthorityKeysFunction::CastChannelSetAuthorityKeysFunction() {
551 }
552
553 CastChannelSetAuthorityKeysFunction::~CastChannelSetAuthorityKeysFunction() {
554 }
555
556 bool CastChannelSetAuthorityKeysFunction::Prepare() {
557 return true;
558 }
559
560 void CastChannelSetAuthorityKeysFunction::AsyncWorkStart() {
561 // TODO(eroman): crbug.com/601171: Delete this once the API is
562 // removed. It is currently a no-op.
563 AsyncWorkCompleted();
564 }
565
566 } // namespace extensions 520 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698