Commit e30e427b authored by mfoltz's avatar mfoltz Committed by Commit bot

Ignore uninteresting events when recording the last errors to report

back via chrome.cast.channel.onError.

BUG=410109

Review URL: https://codereview.chromium.org/580923002

Cr-Commit-Position: refs/heads/master@{#299367}
parent d65f7058
......@@ -4,6 +4,8 @@
#include "extensions/browser/api/cast_channel/logger.h"
#include <string>
#include "base/strings/string_util.h"
#include "base/time/tick_clock.h"
#include "extensions/browser/api/cast_channel/cast_auth_util.h"
......@@ -98,6 +100,25 @@ scoped_ptr<char[]> Compress(const std::string& input, size_t* length) {
return out.Pass();
}
// Propagate any error fields set in |event| to |last_errors|. If any error
// field in |event| is set, then also set |last_errors->event_type|.
void MaybeSetLastErrors(const SocketEvent& event, LastErrors* last_errors) {
if (event.has_net_return_value() &&
event.net_return_value() < net::ERR_IO_PENDING) {
last_errors->net_return_value = event.net_return_value();
last_errors->event_type = event.type();
}
if (event.has_challenge_reply_error_type()) {
last_errors->challenge_reply_error_type =
event.challenge_reply_error_type();
last_errors->event_type = event.type();
}
if (event.has_nss_error_code()) {
last_errors->nss_error_code = event.nss_error_code();
last_errors->event_type = event.type();
}
}
} // namespace
Logger::AggregatedSocketEventLog::AggregatedSocketEventLog() {
......@@ -287,19 +308,9 @@ AggregatedSocketEvent& Logger::LogSocketEvent(int channel_id,
socket_events.pop_front();
log_.set_num_evicted_socket_events(log_.num_evicted_socket_events() + 1);
}
socket_events.push_back(socket_event);
it->second->last_errors.event_type = socket_event.type();
if (socket_event.has_net_return_value()) {
it->second->last_errors.net_return_value = socket_event.net_return_value();
}
if (socket_event.has_challenge_reply_error_type()) {
it->second->last_errors.challenge_reply_error_type =
socket_event.challenge_reply_error_type();
}
if (socket_event.has_nss_error_code())
it->second->last_errors.nss_error_code = socket_event.nss_error_code();
MaybeSetLastErrors(socket_event, &(it->second->last_errors));
return it->second->aggregated_socket_event;
}
......@@ -356,5 +367,5 @@ LastErrors Logger::GetLastErrors(int channel_id) const {
}
} // namespace cast_channel
} // namespace api
} // namespace core_api
} // namespace extensions
......@@ -2,10 +2,13 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <string>
#include "base/test/simple_test_tick_clock.h"
#include "extensions/browser/api/cast_channel/cast_auth_util.h"
#include "extensions/browser/api/cast_channel/logger.h"
#include "extensions/browser/api/cast_channel/logger_util.h"
#include "net/base/net_errors.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/zlib/zlib.h"
......@@ -112,7 +115,7 @@ TEST_F(CastChannelLoggerTest, BasicLogging) {
LastErrors last_errors = logger_->GetLastErrors(2);
EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY);
EXPECT_EQ(last_errors.net_return_value, 0);
EXPECT_EQ(last_errors.net_return_value, net::OK);
EXPECT_EQ(last_errors.challenge_reply_error_type,
proto::CHALLENGE_REPLY_ERROR_NSS_CERT_PARSING_FAILED);
EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode);
......@@ -182,6 +185,60 @@ TEST_F(CastChannelLoggerTest, BasicLogging) {
}
}
TEST_F(CastChannelLoggerTest, LogLastErrorEvents) {
// Net return value is set to an error
logger_->LogSocketEventWithRv(
1, EventType::TCP_SOCKET_CONNECT, net::ERR_CONNECTION_FAILED);
LastErrors last_errors = logger_->GetLastErrors(1);
EXPECT_EQ(last_errors.event_type, proto::TCP_SOCKET_CONNECT);
EXPECT_EQ(last_errors.net_return_value, net::ERR_CONNECTION_FAILED);
// Challenge reply error set
clock_->Advance(base::TimeDelta::FromMicroseconds(1));
AuthResult auth_result = AuthResult::Create(
"Some error", AuthResult::ErrorType::ERROR_PEER_CERT_EMPTY);
logger_->LogSocketChallengeReplyEvent(2, auth_result);
last_errors = logger_->GetLastErrors(2);
EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY);
EXPECT_EQ(last_errors.challenge_reply_error_type,
proto::CHALLENGE_REPLY_ERROR_PEER_CERT_EMPTY);
// Logging a non-error event does not set the LastErrors for the channel.
clock_->Advance(base::TimeDelta::FromMicroseconds(1));
logger_->LogSocketEventWithRv(3, EventType::TCP_SOCKET_CONNECT, net::OK);
last_errors = logger_->GetLastErrors(3);
EXPECT_EQ(last_errors.event_type, proto::EVENT_TYPE_UNKNOWN);
EXPECT_EQ(last_errors.net_return_value, net::OK);
EXPECT_EQ(last_errors.challenge_reply_error_type,
proto::CHALLENGE_REPLY_ERROR_NONE);
EXPECT_EQ(last_errors.nss_error_code, 0);
// Now log a challenge reply error with NSS error code. LastErrors will be
// set.
clock_->Advance(base::TimeDelta::FromMicroseconds(1));
auth_result = AuthResult::CreateWithNSSError(
"Some error",
AuthResult::ErrorType::ERROR_WRONG_PAYLOAD_TYPE,
kTestNssErrorCode);
logger_->LogSocketChallengeReplyEvent(3, auth_result);
last_errors = logger_->GetLastErrors(3);
EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY);
EXPECT_EQ(last_errors.challenge_reply_error_type,
proto::CHALLENGE_REPLY_ERROR_WRONG_PAYLOAD_TYPE);
EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode);
// Logging a non-error event does not change the LastErrors for the channel.
clock_->Advance(base::TimeDelta::FromMicroseconds(1));
logger_->LogSocketEventWithRv(3, EventType::TCP_SOCKET_CONNECT, net::OK);
last_errors = logger_->GetLastErrors(3);
EXPECT_EQ(last_errors.event_type, proto::AUTH_CHALLENGE_REPLY);
EXPECT_EQ(last_errors.challenge_reply_error_type,
proto::CHALLENGE_REPLY_ERROR_WRONG_PAYLOAD_TYPE);
EXPECT_EQ(last_errors.nss_error_code, kTestNssErrorCode);
}
TEST_F(CastChannelLoggerTest, LogSocketReadWrite) {
logger_->LogSocketEventWithRv(1, EventType::SOCKET_READ, 50);
clock_->Advance(base::TimeDelta::FromMicroseconds(1));
......@@ -274,5 +331,5 @@ TEST_F(CastChannelLoggerTest, Reset) {
}
} // namespace cast_channel
} // namespace api
} // namespace core_api
} // namespace extensions
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment