Commit dea6441d authored by sque's avatar sque Committed by Commit Bot

Rename SingleLogSource to SingleLogFileLogSource

Since there is now a class SingleDebugDaemonLogSource, the old
name "SingleLogSource" is ambiguous. Rename it to indicate that the
logs come from a log file.

Also refactored the use of SingleLogSource in feedbackPrivate API:
- Use the base interface class SystemLogsSource instead, in
  LogSourceAccessManager.
- Convert from feedback_private::LogSource directly to a
  SystemLogSource in SingleLogSourceFactory. Conversion of enums is
  internal to SingleLogSourceFactory.

BUG=733846

Review-Url: https://codereview.chromium.org/2956513004
Cr-Commit-Position: refs/heads/master@{#485283}
parent 538f75da
...@@ -1439,8 +1439,8 @@ source_set("chromeos") { ...@@ -1439,8 +1439,8 @@ source_set("chromeos") {
"system_logs/lsb_release_log_source.h", "system_logs/lsb_release_log_source.h",
"system_logs/single_debug_daemon_log_source.cc", "system_logs/single_debug_daemon_log_source.cc",
"system_logs/single_debug_daemon_log_source.h", "system_logs/single_debug_daemon_log_source.h",
"system_logs/single_log_source.cc", "system_logs/single_log_file_log_source.cc",
"system_logs/single_log_source.h", "system_logs/single_log_file_log_source.h",
"system_logs/touch_log_source.h", "system_logs/touch_log_source.h",
"system_logs/touch_log_source_ozone.cc", "system_logs/touch_log_source_ozone.cc",
"system_logs/touch_log_source_x11.cc", "system_logs/touch_log_source_x11.cc",
...@@ -1870,7 +1870,7 @@ source_set("unit_tests") { ...@@ -1870,7 +1870,7 @@ source_set("unit_tests") {
"system/automatic_reboot_manager_unittest.cc", "system/automatic_reboot_manager_unittest.cc",
"system/device_disabling_manager_unittest.cc", "system/device_disabling_manager_unittest.cc",
"system_logs/single_debug_daemon_log_source_unittest.cc", "system_logs/single_debug_daemon_log_source_unittest.cc",
"system_logs/single_log_source_unittest.cc", "system_logs/single_log_file_log_source_unittest.cc",
"tether/tether_service_unittest.cc", "tether/tether_service_unittest.cc",
"ui/accessibility_focus_ring_controller_unittest.cc", "ui/accessibility_focus_ring_controller_unittest.cc",
"ui/idle_app_name_notification_view_unittest.cc", "ui/idle_app_name_notification_view_unittest.cc",
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/chromeos/system_logs/single_log_source.h" #include "chrome/browser/chromeos/system_logs/single_log_file_log_source.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/files/file_path.h" #include "base/files/file_path.h"
...@@ -34,13 +34,13 @@ const base::Time* g_chrome_start_time_for_test = nullptr; ...@@ -34,13 +34,13 @@ const base::Time* g_chrome_start_time_for_test = nullptr;
// base system log directory path. In the future, if non-file source types are // base system log directory path. In the future, if non-file source types are
// added, this function should return an empty file path. // added, this function should return an empty file path.
base::FilePath GetLogFileSourceRelativeFilePath( base::FilePath GetLogFileSourceRelativeFilePath(
SingleLogSource::SupportedSource source) { SingleLogFileLogSource::SupportedSource source) {
switch (source) { switch (source) {
case SingleLogSource::SupportedSource::kMessages: case SingleLogFileLogSource::SupportedSource::kMessages:
return base::FilePath("messages"); return base::FilePath("messages");
case SingleLogSource::SupportedSource::kUiLatest: case SingleLogFileLogSource::SupportedSource::kUiLatest:
return base::FilePath("ui/ui.LATEST"); return base::FilePath("ui/ui.LATEST");
case SingleLogSource::SupportedSource::kAtrusLog: case SingleLogFileLogSource::SupportedSource::kAtrusLog:
return base::FilePath("atrus.log"); return base::FilePath("atrus.log");
} }
NOTREACHED(); NOTREACHED();
...@@ -134,7 +134,7 @@ size_t GetFirstFileOffsetWithTime(const base::FilePath& path, ...@@ -134,7 +134,7 @@ size_t GetFirstFileOffsetWithTime(const base::FilePath& path,
} // namespace } // namespace
SingleLogSource::SingleLogSource(SupportedSource source_type) SingleLogFileLogSource::SingleLogFileLogSource(SupportedSource source_type)
: SystemLogsSource(GetLogFileSourceRelativeFilePath(source_type).value()), : SystemLogsSource(GetLogFileSourceRelativeFilePath(source_type).value()),
source_type_(source_type), source_type_(source_type),
log_file_dir_path_(kDefaultSystemLogDirPath), log_file_dir_path_(kDefaultSystemLogDirPath),
...@@ -142,15 +142,15 @@ SingleLogSource::SingleLogSource(SupportedSource source_type) ...@@ -142,15 +142,15 @@ SingleLogSource::SingleLogSource(SupportedSource source_type)
file_inode_(0), file_inode_(0),
weak_ptr_factory_(this) {} weak_ptr_factory_(this) {}
SingleLogSource::~SingleLogSource() {} SingleLogFileLogSource::~SingleLogFileLogSource() {}
// static // static
void SingleLogSource::SetChromeStartTimeForTesting( void SingleLogFileLogSource::SetChromeStartTimeForTesting(
const base::Time* start_time) { const base::Time* start_time) {
g_chrome_start_time_for_test = start_time; g_chrome_start_time_for_test = start_time;
} }
void SingleLogSource::Fetch(const SysLogsSourceCallback& callback) { void SingleLogFileLogSource::Fetch(const SysLogsSourceCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!callback.is_null()); DCHECK(!callback.is_null());
...@@ -158,16 +158,17 @@ void SingleLogSource::Fetch(const SysLogsSourceCallback& callback) { ...@@ -158,16 +158,17 @@ void SingleLogSource::Fetch(const SysLogsSourceCallback& callback) {
base::PostTaskWithTraitsAndReply( base::PostTaskWithTraitsAndReply(
FROM_HERE, FROM_HERE,
base::TaskTraits(base::MayBlock(), base::TaskPriority::BACKGROUND), base::TaskTraits(base::MayBlock(), base::TaskPriority::BACKGROUND),
base::Bind(&SingleLogSource::ReadFile, weak_ptr_factory_.GetWeakPtr(), base::Bind(&SingleLogFileLogSource::ReadFile,
weak_ptr_factory_.GetWeakPtr(),
kMaxNumAllowedLogRotationsDuringFileRead, response), kMaxNumAllowedLogRotationsDuringFileRead, response),
base::Bind(callback, base::Owned(response))); base::Bind(callback, base::Owned(response)));
} }
base::FilePath SingleLogSource::GetLogFilePath() const { base::FilePath SingleLogFileLogSource::GetLogFilePath() const {
return base::FilePath(log_file_dir_path_).Append(source_name()); return base::FilePath(log_file_dir_path_).Append(source_name());
} }
void SingleLogSource::ReadFile(size_t num_rotations_allowed, void SingleLogFileLogSource::ReadFile(size_t num_rotations_allowed,
SystemLogsResponse* result) { SystemLogsResponse* result) {
// Attempt to open the file if it was not previously opened. // Attempt to open the file if it was not previously opened.
if (!file_.IsValid()) { if (!file_.IsValid()) {
......
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_SOURCE_H_ #ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_FILE_LOG_SOURCE_H_
#define CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_SOURCE_H_ #define CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_FILE_LOG_SOURCE_H_
#include <stddef.h> #include <stddef.h>
#include <sys/types.h> #include <sys/types.h>
...@@ -21,7 +21,7 @@ class Time; ...@@ -21,7 +21,7 @@ class Time;
namespace system_logs { namespace system_logs {
// Gathers log data from a single source, possibly incrementally. // Gathers log data from a single source, possibly incrementally.
class SingleLogSource : public SystemLogsSource { class SingleLogFileLogSource : public SystemLogsSource {
public: public:
enum class SupportedSource { enum class SupportedSource {
// For /var/log/messages. // For /var/log/messages.
...@@ -34,8 +34,8 @@ class SingleLogSource : public SystemLogsSource { ...@@ -34,8 +34,8 @@ class SingleLogSource : public SystemLogsSource {
kAtrusLog, kAtrusLog,
}; };
explicit SingleLogSource(SupportedSource source); explicit SingleLogFileLogSource(SupportedSource source);
~SingleLogSource() override; ~SingleLogFileLogSource() override;
// During testing, use this to set a custom Chrome start time to override the // During testing, use this to set a custom Chrome start time to override the
// actual start time. Does not take ownership of |start_time|. Call this again // actual start time. Does not take ownership of |start_time|. Call this again
...@@ -46,7 +46,7 @@ class SingleLogSource : public SystemLogsSource { ...@@ -46,7 +46,7 @@ class SingleLogSource : public SystemLogsSource {
void Fetch(const SysLogsSourceCallback& callback) override; void Fetch(const SysLogsSourceCallback& callback) override;
private: private:
friend class SingleLogSourceTest; friend class SingleLogFileLogSourceTest;
// Returns the full path of the log file. // Returns the full path of the log file.
base::FilePath GetLogFilePath() const; base::FilePath GetLogFilePath() const;
...@@ -85,11 +85,11 @@ class SingleLogSource : public SystemLogsSource { ...@@ -85,11 +85,11 @@ class SingleLogSource : public SystemLogsSource {
// For removing PII from log results. // For removing PII from log results.
feedback::AnonymizerTool anonymizer_; feedback::AnonymizerTool anonymizer_;
base::WeakPtrFactory<SingleLogSource> weak_ptr_factory_; base::WeakPtrFactory<SingleLogFileLogSource> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(SingleLogSource); DISALLOW_COPY_AND_ASSIGN(SingleLogFileLogSource);
}; };
} // namespace system_logs } // namespace system_logs
#endif // CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_SOURCE_H_ #endif // CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SINGLE_LOG_FILE_LOG_SOURCE_H_
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/browser/chromeos/system_logs/single_log_source.h" #include "chrome/browser/chromeos/system_logs/single_log_file_log_source.h"
#include <string> #include <string>
...@@ -38,17 +38,17 @@ size_t GetNumLinesInString(const std::string& string) { ...@@ -38,17 +38,17 @@ size_t GetNumLinesInString(const std::string& string) {
} // namespace } // namespace
class SingleLogSourceTest : public ::testing::Test { class SingleLogFileLogSourceTest : public ::testing::Test {
public: public:
SingleLogSourceTest() SingleLogFileLogSourceTest()
: scoped_task_environment_( : scoped_task_environment_(
base::test::ScopedTaskEnvironment::MainThreadType::UI), base::test::ScopedTaskEnvironment::MainThreadType::UI),
num_callback_calls_(0) { num_callback_calls_(0) {
InitializeTestLogDir(); InitializeTestLogDir();
} }
~SingleLogSourceTest() override { ~SingleLogFileLogSourceTest() override {
SingleLogSource::SetChromeStartTimeForTesting(nullptr); SingleLogFileLogSource::SetChromeStartTimeForTesting(nullptr);
} }
protected: protected:
...@@ -72,8 +72,8 @@ class SingleLogSourceTest : public ::testing::Test { ...@@ -72,8 +72,8 @@ class SingleLogSourceTest : public ::testing::Test {
// Initializes the unit under test, |source_| to read a file from the dummy // Initializes the unit under test, |source_| to read a file from the dummy
// system log directory. // system log directory.
void InitializeSource(SingleLogSource::SupportedSource source_type) { void InitializeSource(SingleLogFileLogSource::SupportedSource source_type) {
source_ = base::MakeUnique<SingleLogSource>(source_type); source_ = base::MakeUnique<SingleLogFileLogSource>(source_type);
source_->log_file_dir_path_ = log_dir_.GetPath(); source_->log_file_dir_path_ = log_dir_.GetPath();
log_file_path_ = source_->log_file_dir_path_.Append(source_->source_name()); log_file_path_ = source_->log_file_dir_path_.Append(source_->source_name());
ASSERT_TRUE(base::PathExists(log_file_path_)) << log_file_path_.value(); ASSERT_TRUE(base::PathExists(log_file_path_)) << log_file_path_.value();
...@@ -108,8 +108,8 @@ class SingleLogSourceTest : public ::testing::Test { ...@@ -108,8 +108,8 @@ class SingleLogSourceTest : public ::testing::Test {
// Calls source_.Fetch() to start a logs fetch operation. Passes in // Calls source_.Fetch() to start a logs fetch operation. Passes in
// OnFileRead() as a callback. Runs until Fetch() has completed. // OnFileRead() as a callback. Runs until Fetch() has completed.
void FetchFromSource() { void FetchFromSource() {
source_->Fetch( source_->Fetch(base::Bind(&SingleLogFileLogSourceTest::OnFileRead,
base::Bind(&SingleLogSourceTest::OnFileRead, base::Unretained(this))); base::Unretained(this)));
scoped_task_environment_.RunUntilIdle(); scoped_task_environment_.RunUntilIdle();
} }
...@@ -141,7 +141,7 @@ class SingleLogSourceTest : public ::testing::Test { ...@@ -141,7 +141,7 @@ class SingleLogSourceTest : public ::testing::Test {
content::TestBrowserThreadBundle browser_thread_bundle_; content::TestBrowserThreadBundle browser_thread_bundle_;
// Unit under test. // Unit under test.
std::unique_ptr<SingleLogSource> source_; std::unique_ptr<SingleLogFileLogSource> source_;
// Counts the number of times that |source_| has invoked the callback. // Counts the number of times that |source_| has invoked the callback.
int num_callback_calls_; int num_callback_calls_;
...@@ -156,19 +156,19 @@ class SingleLogSourceTest : public ::testing::Test { ...@@ -156,19 +156,19 @@ class SingleLogSourceTest : public ::testing::Test {
// Path to the dummy log file in |log_dir_|. // Path to the dummy log file in |log_dir_|.
base::FilePath log_file_path_; base::FilePath log_file_path_;
DISALLOW_COPY_AND_ASSIGN(SingleLogSourceTest); DISALLOW_COPY_AND_ASSIGN(SingleLogFileLogSourceTest);
}; };
TEST_F(SingleLogSourceTest, EmptyFile) { TEST_F(SingleLogFileLogSourceTest, EmptyFile) {
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(1, num_callback_calls()); EXPECT_EQ(1, num_callback_calls());
EXPECT_EQ("", latest_response()); EXPECT_EQ("", latest_response());
} }
TEST_F(SingleLogSourceTest, SingleRead) { TEST_F(SingleLogFileLogSourceTest, SingleRead) {
InitializeSource(SingleLogSource::SupportedSource::kUiLatest); InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Hello world!\n")); EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "Hello world!\n"));
FetchFromSource(); FetchFromSource();
...@@ -177,8 +177,8 @@ TEST_F(SingleLogSourceTest, SingleRead) { ...@@ -177,8 +177,8 @@ TEST_F(SingleLogSourceTest, SingleRead) {
EXPECT_EQ("Hello world!\n", latest_response()); EXPECT_EQ("Hello world!\n", latest_response());
} }
TEST_F(SingleLogSourceTest, IncrementalReads) { TEST_F(SingleLogFileLogSourceTest, IncrementalReads) {
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Hello world!\n")); EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "Hello world!\n"));
FetchFromSource(); FetchFromSource();
...@@ -210,11 +210,11 @@ TEST_F(SingleLogSourceTest, IncrementalReads) { ...@@ -210,11 +210,11 @@ TEST_F(SingleLogSourceTest, IncrementalReads) {
file_contents); file_contents);
} }
// The log files read by SingleLogSource are not expected to be overwritten. // The log files read by SingleLogFileLogSource are not expected to be
// This test is just to ensure that the SingleLogSource class is robust enough // overwritten. This test is just to ensure that the SingleLogFileLogSource
// not to break in the event of an overwrite. // class is robust enough not to break in the event of an overwrite.
TEST_F(SingleLogSourceTest, FileOverwrite) { TEST_F(SingleLogFileLogSourceTest, FileOverwrite) {
InitializeSource(SingleLogSource::SupportedSource::kUiLatest); InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "0123456789\n")); EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), "0123456789\n"));
FetchFromSource(); FetchFromSource();
...@@ -249,8 +249,8 @@ TEST_F(SingleLogSourceTest, FileOverwrite) { ...@@ -249,8 +249,8 @@ TEST_F(SingleLogSourceTest, FileOverwrite) {
EXPECT_EQ("yz\n", latest_response()); EXPECT_EQ("yz\n", latest_response());
} }
TEST_F(SingleLogSourceTest, IncompleteLines) { TEST_F(SingleLogFileLogSourceTest, IncompleteLines) {
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "0123456789")); EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "0123456789"));
FetchFromSource(); FetchFromSource();
...@@ -286,8 +286,8 @@ TEST_F(SingleLogSourceTest, IncompleteLines) { ...@@ -286,8 +286,8 @@ TEST_F(SingleLogSourceTest, IncompleteLines) {
EXPECT_EQ("Goodbye world\n", latest_response()); EXPECT_EQ("Goodbye world\n", latest_response());
} }
TEST_F(SingleLogSourceTest, Anonymize) { TEST_F(SingleLogFileLogSourceTest, Anonymize) {
InitializeSource(SingleLogSource::SupportedSource::kUiLatest); InitializeSource(SingleLogFileLogSource::SupportedSource::kUiLatest);
EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"), EXPECT_TRUE(AppendToFile(base::FilePath("ui/ui.LATEST"),
"My MAC address is: 11:22:33:44:55:66\n")); "My MAC address is: 11:22:33:44:55:66\n"));
...@@ -312,8 +312,8 @@ TEST_F(SingleLogSourceTest, Anonymize) { ...@@ -312,8 +312,8 @@ TEST_F(SingleLogSourceTest, Anonymize) {
EXPECT_EQ("Your MAC address is: ab:88:cd:00:00:02\n", latest_response()); EXPECT_EQ("Your MAC address is: ab:88:cd:00:00:02\n", latest_response());
} }
TEST_F(SingleLogSourceTest, HandleLogFileRotation) { TEST_F(SingleLogFileLogSourceTest, HandleLogFileRotation) {
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n")); EXPECT_TRUE(AppendToFile(base::FilePath("messages"), "1st log file\n"));
FetchFromSource(); FetchFromSource();
...@@ -351,13 +351,13 @@ TEST_F(SingleLogSourceTest, HandleLogFileRotation) { ...@@ -351,13 +351,13 @@ TEST_F(SingleLogSourceTest, HandleLogFileRotation) {
EXPECT_EQ("Also no newline here...yet\n", latest_response()); EXPECT_EQ("Also no newline here...yet\n", latest_response());
} }
TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) { TEST_F(SingleLogFileLogSourceTest, ReadRecentLinesFromMessages) {
// Write some lines to messages. Use various timestamp styles. Some lines have // Write some lines to messages. Use various timestamp styles. Some lines have
// timestamps, Some do not. All timestamps are in chronological order. // timestamps, Some do not. All timestamps are in chronological order.
const base::FilePath messages_path = base::FilePath("messages"); const base::FilePath messages_path = base::FilePath("messages");
// All timestamps below include time zone info. Some are EDT (-0400) and // All timestamps below include time zone info. Some are EDT (-0400) and
// others are PDT (-0700). These make sure that SingleLogSource is able to // others are PDT (-0700). These make sure that SingleLogFileLogSource is able
// read various standard timestamp formats. // to read various standard timestamp formats.
EXPECT_TRUE( EXPECT_TRUE(
AppendToFile(messages_path, "13 Jun 2017 15:00:00 -0400 : Alpha\n")); AppendToFile(messages_path, "13 Jun 2017 15:00:00 -0400 : Alpha\n"));
EXPECT_TRUE( EXPECT_TRUE(
...@@ -395,28 +395,28 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) { ...@@ -395,28 +395,28 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) {
// Provide a fake Chrome start time for testing: 15:00 EDT // Provide a fake Chrome start time for testing: 15:00 EDT
base::Time chrome_start_time = first_line_time; base::Time chrome_start_time = first_line_time;
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
// Read from messages. The first line of messages should not have been read. // Read from messages. The first line of messages should not have been read.
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(1, num_callback_calls()); EXPECT_EQ(1, num_callback_calls());
EXPECT_EQ(10U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(10U, GetNumLinesInString(latest_response())) << latest_response();
// Update Chrome start time to: 15:15 EDT // Update Chrome start time to: 15:15 EDT
chrome_start_time += base::TimeDelta::FromMinutes(15); chrome_start_time += base::TimeDelta::FromMinutes(15);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(2, num_callback_calls()); EXPECT_EQ(2, num_callback_calls());
EXPECT_EQ(9U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(9U, GetNumLinesInString(latest_response())) << latest_response();
// Update Chrome start time: 15:45 EDT // Update Chrome start time: 15:45 EDT
chrome_start_time += base::TimeDelta::FromMinutes(30); chrome_start_time += base::TimeDelta::FromMinutes(30);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(3, num_callback_calls()); EXPECT_EQ(3, num_callback_calls());
EXPECT_EQ(5U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(5U, GetNumLinesInString(latest_response())) << latest_response();
...@@ -424,9 +424,9 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) { ...@@ -424,9 +424,9 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) {
// Update Chrome start time: 17:10 EDT // Update Chrome start time: 17:10 EDT
chrome_start_time = first_line_time + base::TimeDelta::FromHours(2) + chrome_start_time = first_line_time + base::TimeDelta::FromHours(2) +
base::TimeDelta::FromMinutes(10); base::TimeDelta::FromMinutes(10);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(4, num_callback_calls()); EXPECT_EQ(4, num_callback_calls());
EXPECT_EQ(4U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(4U, GetNumLinesInString(latest_response())) << latest_response();
...@@ -434,18 +434,18 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) { ...@@ -434,18 +434,18 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) {
// Update Chrome start time: 17:40:00.125 EDT // Update Chrome start time: 17:40:00.125 EDT
chrome_start_time += chrome_start_time +=
base::TimeDelta::FromMinutes(30) + base::TimeDelta::FromMilliseconds(125); base::TimeDelta::FromMinutes(30) + base::TimeDelta::FromMilliseconds(125);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(5, num_callback_calls()); EXPECT_EQ(5, num_callback_calls());
EXPECT_EQ(2U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(2U, GetNumLinesInString(latest_response())) << latest_response();
// Update Chrome start time: 17:40:00.126 EDT // Update Chrome start time: 17:40:00.126 EDT
chrome_start_time += base::TimeDelta::FromMilliseconds(1); chrome_start_time += base::TimeDelta::FromMilliseconds(1);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(6, num_callback_calls()); EXPECT_EQ(6, num_callback_calls());
EXPECT_EQ(1U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(1U, GetNumLinesInString(latest_response())) << latest_response();
...@@ -453,18 +453,18 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) { ...@@ -453,18 +453,18 @@ TEST_F(SingleLogSourceTest, ReadRecentLinesFromMessages) {
// Update Chrome start time: 18:10 EDT // Update Chrome start time: 18:10 EDT
chrome_start_time = first_line_time + base::TimeDelta::FromHours(3) + chrome_start_time = first_line_time + base::TimeDelta::FromHours(3) +
base::TimeDelta::FromMinutes(10); base::TimeDelta::FromMinutes(10);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(7, num_callback_calls()); EXPECT_EQ(7, num_callback_calls());
EXPECT_EQ(1U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(1U, GetNumLinesInString(latest_response())) << latest_response();
// Update Chrome start time: 18:15 EDT // Update Chrome start time: 18:15 EDT
chrome_start_time += base::TimeDelta::FromMinutes(5); chrome_start_time += base::TimeDelta::FromMinutes(5);
SingleLogSource::SetChromeStartTimeForTesting(&chrome_start_time); SingleLogFileLogSource::SetChromeStartTimeForTesting(&chrome_start_time);
InitializeSource(SingleLogSource::SupportedSource::kMessages); InitializeSource(SingleLogFileLogSource::SupportedSource::kMessages);
FetchFromSource(); FetchFromSource();
EXPECT_EQ(8, num_callback_calls()); EXPECT_EQ(8, num_callback_calls());
EXPECT_EQ(0U, GetNumLinesInString(latest_response())) << latest_response(); EXPECT_EQ(0U, GetNumLinesInString(latest_response())) << latest_response();
......
...@@ -18,12 +18,12 @@ namespace extensions { ...@@ -18,12 +18,12 @@ namespace extensions {
namespace { namespace {
using api::feedback_private::LogSource;
using api::feedback_private::ReadLogSourceResult; using api::feedback_private::ReadLogSourceResult;
using api::feedback_private::ReadLogSourceParams; using api::feedback_private::ReadLogSourceParams;
using base::TimeDelta; using base::TimeDelta;
using system_logs::SingleLogSource;
using system_logs::SystemLogsResponse; using system_logs::SystemLogsResponse;
using SupportedSource = system_logs::SingleLogSource::SupportedSource; using system_logs::SystemLogsSource;
std::unique_ptr<KeyedService> ApiResourceManagerTestFactory( std::unique_ptr<KeyedService> ApiResourceManagerTestFactory(
content::BrowserContext* context) { content::BrowserContext* context) {
...@@ -41,12 +41,12 @@ std::string ParamsToJSON(const ReadLogSourceParams& params) { ...@@ -41,12 +41,12 @@ std::string ParamsToJSON(const ReadLogSourceParams& params) {
return params_json_string; return params_json_string;
} }
// A dummy SingleLogSource that does not require real system logs to be // A dummy SystemLogsSource that does not require real system logs to be
// available during testing. // available during testing.
class TestSingleLogSource : public SingleLogSource { class TestSingleLogSource : public SystemLogsSource {
public: public:
explicit TestSingleLogSource(SupportedSource type) explicit TestSingleLogSource(LogSource type)
: SingleLogSource(type), call_count_(0) {} : SystemLogsSource(ToString(type)), call_count_(0) {}
~TestSingleLogSource() override = default; ~TestSingleLogSource() override = default;
...@@ -66,7 +66,7 @@ class TestSingleLogSource : public SingleLogSource { ...@@ -66,7 +66,7 @@ class TestSingleLogSource : public SingleLogSource {
// Do not directly pass the result to the callback, because that's not how // Do not directly pass the result to the callback, because that's not how
// log sources actually work. Instead, simulate the asynchronous operation // log sources actually work. Instead, simulate the asynchronous operation
// of a SingleLogSource by invoking the callback separately. // of a SystemLogsSource by invoking the callback separately.
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(callback, base::Owned(result_map))); FROM_HERE, base::BindOnce(callback, base::Owned(result_map)));
} }
...@@ -74,7 +74,7 @@ class TestSingleLogSource : public SingleLogSource { ...@@ -74,7 +74,7 @@ class TestSingleLogSource : public SingleLogSource {
// Instantiates a new instance of this class. Does not retain ownership. Used // Instantiates a new instance of this class. Does not retain ownership. Used
// to create a Callback that can be used to override the default behavior of // to create a Callback that can be used to override the default behavior of
// SingleLogSourceFactory. // SingleLogSourceFactory.
static std::unique_ptr<SingleLogSource> Create(SupportedSource type) { static std::unique_ptr<SystemLogsSource> Create(LogSource type) {
return base::MakeUnique<TestSingleLogSource>(type); return base::MakeUnique<TestSingleLogSource>(type);
} }
......
...@@ -20,9 +20,7 @@ namespace extensions { ...@@ -20,9 +20,7 @@ namespace extensions {
namespace { namespace {
namespace feedback_private = api::feedback_private; namespace feedback_private = api::feedback_private;
using feedback_private::LogSource;
using SingleLogSource = system_logs::SingleLogSource;
using SupportedSource = system_logs::SingleLogSource::SupportedSource;
using SystemLogsResponse = system_logs::SystemLogsResponse; using SystemLogsResponse = system_logs::SystemLogsResponse;
const int kMaxReadersPerSource = 10; const int kMaxReadersPerSource = 10;
...@@ -40,22 +38,6 @@ base::TimeDelta GetMinTimeBetweenReads() { ...@@ -40,22 +38,6 @@ base::TimeDelta GetMinTimeBetweenReads() {
: base::TimeDelta::FromMilliseconds(kDefaultRateLimitingTimeoutMs); : base::TimeDelta::FromMilliseconds(kDefaultRateLimitingTimeoutMs);
} }
// Converts from feedback_private::LogSource to SupportedSource.
SupportedSource GetSupportedSourceType(LogSource source) {
switch (source) {
case feedback_private::LOG_SOURCE_MESSAGES:
return SupportedSource::kMessages;
case feedback_private::LOG_SOURCE_UILATEST:
return SupportedSource::kUiLatest;
case feedback_private::LOG_SOURCE_NONE:
default:
NOTREACHED() << "Unknown log source type.";
return SingleLogSource::SupportedSource::kMessages;
}
NOTREACHED();
return SingleLogSource::SupportedSource::kMessages;
}
// SystemLogsResponse is a map of strings -> strings. The map value has the // SystemLogsResponse is a map of strings -> strings. The map value has the
// actual log contents, a string containing all lines, separated by newlines. // actual log contents, a string containing all lines, separated by newlines.
// This function extracts the individual lines and converts them into a vector // This function extracts the individual lines and converts them into a vector
...@@ -155,7 +137,7 @@ void LogSourceAccessManager::RemoveSource(const SourceAndExtension& key) { ...@@ -155,7 +137,7 @@ void LogSourceAccessManager::RemoveSource(const SourceAndExtension& key) {
} }
LogSourceAccessManager::SourceAndExtension::SourceAndExtension( LogSourceAccessManager::SourceAndExtension::SourceAndExtension(
api::feedback_private::LogSource source, feedback_private::LogSource source,
const std::string& extension_id) const std::string& extension_id)
: source(source), extension_id(extension_id) {} : source(source), extension_id(extension_id) {}
...@@ -173,8 +155,7 @@ int LogSourceAccessManager::CreateResource(const SourceAndExtension& key) { ...@@ -173,8 +155,7 @@ int LogSourceAccessManager::CreateResource(const SourceAndExtension& key) {
std::unique_ptr<LogSourceResource> new_resource = std::unique_ptr<LogSourceResource> new_resource =
base::MakeUnique<LogSourceResource>( base::MakeUnique<LogSourceResource>(
key.extension_id, key.extension_id,
SingleLogSourceFactory::CreateSingleLogSource( SingleLogSourceFactory::CreateSingleLogSource(key.source),
GetSupportedSourceType(key.source)),
base::Bind(&LogSourceAccessManager::RemoveSource, base::Bind(&LogSourceAccessManager::RemoveSource,
weak_factory_.GetWeakPtr(), key)); weak_factory_.GetWeakPtr(), key));
...@@ -206,7 +187,7 @@ base::TimeTicks LogSourceAccessManager::GetLastExtensionAccessTime( ...@@ -206,7 +187,7 @@ base::TimeTicks LogSourceAccessManager::GetLastExtensionAccessTime(
} }
size_t LogSourceAccessManager::GetNumActiveResourcesForSource( size_t LogSourceAccessManager::GetNumActiveResourcesForSource(
api::feedback_private::LogSource source) const { feedback_private::LogSource source) const {
size_t count = 0; size_t count = 0;
// The stored entries are sorted first by source type, then by extension ID. // The stored entries are sorted first by source type, then by extension ID.
// We can take advantage of this fact to avoid iterating over all elements. // We can take advantage of this fact to avoid iterating over all elements.
......
...@@ -19,10 +19,10 @@ namespace { ...@@ -19,10 +19,10 @@ namespace {
using api::feedback_private::LOG_SOURCE_MESSAGES; using api::feedback_private::LOG_SOURCE_MESSAGES;
using api::feedback_private::LOG_SOURCE_UILATEST; using api::feedback_private::LOG_SOURCE_UILATEST;
using api::feedback_private::LogSource;
using api::feedback_private::ReadLogSourceResult; using api::feedback_private::ReadLogSourceResult;
using api::feedback_private::ReadLogSourceParams; using api::feedback_private::ReadLogSourceParams;
using system_logs::SingleLogSource; using system_logs::SystemLogsSource;
using SupportedSource = system_logs::SingleLogSource::SupportedSource;
std::unique_ptr<KeyedService> ApiResourceManagerTestFactory( std::unique_ptr<KeyedService> ApiResourceManagerTestFactory(
content::BrowserContext* context) { content::BrowserContext* context) {
...@@ -32,11 +32,12 @@ std::unique_ptr<KeyedService> ApiResourceManagerTestFactory( ...@@ -32,11 +32,12 @@ std::unique_ptr<KeyedService> ApiResourceManagerTestFactory(
// Dummy function used as a callback for FetchFromSource(). // Dummy function used as a callback for FetchFromSource().
void OnFetchedFromSource(const ReadLogSourceResult& result) {} void OnFetchedFromSource(const ReadLogSourceResult& result) {}
// A dummy SingleLogSource that does not require real system logs to be // A dummy SystemLogsSource that does not require real system logs to be
// available during testing. Always returns an empty result. // available during testing. Always returns an empty result.
class EmptySingleLogSource : public SingleLogSource { class EmptySingleLogSource : public system_logs::SystemLogsSource {
public: public:
explicit EmptySingleLogSource(SupportedSource type) : SingleLogSource(type) {} explicit EmptySingleLogSource(LogSource type)
: SystemLogsSource(api::feedback_private::ToString(type)) {}
~EmptySingleLogSource() override = default; ~EmptySingleLogSource() override = default;
...@@ -47,7 +48,7 @@ class EmptySingleLogSource : public SingleLogSource { ...@@ -47,7 +48,7 @@ class EmptySingleLogSource : public SingleLogSource {
// Do not directly pass the result to the callback, because that's not how // Do not directly pass the result to the callback, because that's not how
// log sources actually work. Instead, simulate the asynchronous operation // log sources actually work. Instead, simulate the asynchronous operation
// of a SingleLogSource by invoking the callback separately. // of a SystemLogsSource by invoking the callback separately.
base::ThreadTaskRunnerHandle::Get()->PostTask( base::ThreadTaskRunnerHandle::Get()->PostTask(
FROM_HERE, base::BindOnce(callback, base::Owned(result_map))); FROM_HERE, base::BindOnce(callback, base::Owned(result_map)));
} }
...@@ -55,7 +56,7 @@ class EmptySingleLogSource : public SingleLogSource { ...@@ -55,7 +56,7 @@ class EmptySingleLogSource : public SingleLogSource {
// Instantiates a new instance of this class. Does not retain ownership. Used // Instantiates a new instance of this class. Does not retain ownership. Used
// to create a Callback that can be used to override the default behavior of // to create a Callback that can be used to override the default behavior of
// SingleLogSourceFactory. // SingleLogSourceFactory.
static std::unique_ptr<SingleLogSource> Create(SupportedSource type) { static std::unique_ptr<SystemLogsSource> Create(LogSource type) {
return base::MakeUnique<EmptySingleLogSource>(type); return base::MakeUnique<EmptySingleLogSource>(type);
} }
......
...@@ -22,7 +22,7 @@ ApiResourceManager<LogSourceResource>::GetFactoryInstance() { ...@@ -22,7 +22,7 @@ ApiResourceManager<LogSourceResource>::GetFactoryInstance() {
LogSourceResource::LogSourceResource( LogSourceResource::LogSourceResource(
const std::string& extension_id, const std::string& extension_id,
std::unique_ptr<system_logs::SingleLogSource> source, std::unique_ptr<system_logs::SystemLogsSource> source,
base::Closure unregister_callback) base::Closure unregister_callback)
: ApiResource(extension_id), : ApiResource(extension_id),
source_(source.release()), source_(source.release()),
......
...@@ -9,14 +9,14 @@ ...@@ -9,14 +9,14 @@
#include "base/callback_helpers.h" #include "base/callback_helpers.h"
#include "base/macros.h" #include "base/macros.h"
#include "chrome/browser/chromeos/system_logs/single_log_source.h"
#include "chrome/browser/extensions/api/feedback_private/log_source_access_manager.h" #include "chrome/browser/extensions/api/feedback_private/log_source_access_manager.h"
#include "chrome/browser/feedback/system_logs/system_logs_fetcher.h"
#include "extensions/browser/api/api_resource.h" #include "extensions/browser/api/api_resource.h"
#include "extensions/browser/api/api_resource_manager.h" #include "extensions/browser/api/api_resource_manager.h"
namespace extensions { namespace extensions {
// Holds a SingleLogSource object that is used by an extension using the // Holds a SystemLogsSource object that is used by an extension using the
// feedbackPrivate API. // feedbackPrivate API.
class LogSourceResource : public ApiResource { class LogSourceResource : public ApiResource {
public: public:
...@@ -24,18 +24,18 @@ class LogSourceResource : public ApiResource { ...@@ -24,18 +24,18 @@ class LogSourceResource : public ApiResource {
content::BrowserThread::UI; content::BrowserThread::UI;
LogSourceResource(const std::string& extension_id, LogSourceResource(const std::string& extension_id,
std::unique_ptr<system_logs::SingleLogSource> source, std::unique_ptr<system_logs::SystemLogsSource> source,
base::Closure unregister_callback_); base::Closure unregister_callback_);
~LogSourceResource() override; ~LogSourceResource() override;
system_logs::SingleLogSource* GetLogSource() const { return source_.get(); } system_logs::SystemLogsSource* GetLogSource() const { return source_.get(); }
private: private:
friend class ApiResourceManager<LogSourceResource>; friend class ApiResourceManager<LogSourceResource>;
static const char* service_name() { return "LogSourceResource"; } static const char* service_name() { return "LogSourceResource"; }
std::unique_ptr<system_logs::SingleLogSource> source_; std::unique_ptr<system_logs::SystemLogsSource> source_;
// This unregisters the LogSourceResource from a LogSourceAccessManager when // This unregisters the LogSourceResource from a LogSourceAccessManager when
// this resource is cleaned up. Just pass in a base::Closure to the // this resource is cleaned up. Just pass in a base::Closure to the
......
...@@ -5,23 +5,40 @@ ...@@ -5,23 +5,40 @@
#include "chrome/browser/extensions/api/feedback_private/single_log_source_factory.h" #include "chrome/browser/extensions/api/feedback_private/single_log_source_factory.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "chrome/browser/chromeos/system_logs/single_log_file_log_source.h"
namespace extensions { namespace extensions {
namespace { namespace {
using system_logs::SingleLogSource; namespace feedback_private = api::feedback_private;
using system_logs::SingleLogFileLogSource;
using system_logs::SystemLogsSource;
SingleLogSourceFactory::CreateCallback* g_callback = nullptr; SingleLogSourceFactory::CreateCallback* g_callback = nullptr;
} // namespace } // namespace
// static // static
std::unique_ptr<SingleLogSource> SingleLogSourceFactory::CreateSingleLogSource( std::unique_ptr<SystemLogsSource> SingleLogSourceFactory::CreateSingleLogSource(
SingleLogSource::SupportedSource type) { feedback_private::LogSource source_type) {
if (g_callback) if (g_callback)
return g_callback->Run(type); return g_callback->Run(source_type);
return base::MakeUnique<SingleLogSource>(type);
switch (source_type) {
case feedback_private::LOG_SOURCE_MESSAGES:
return base::MakeUnique<system_logs::SingleLogFileLogSource>(
SingleLogFileLogSource::SupportedSource::kMessages);
case feedback_private::LOG_SOURCE_UILATEST:
return base::MakeUnique<system_logs::SingleLogFileLogSource>(
SingleLogFileLogSource::SupportedSource::kUiLatest);
case feedback_private::LOG_SOURCE_NONE:
default:
NOTREACHED() << "Unknown log source type.";
break;
}
return std::unique_ptr<SystemLogsSource>(nullptr);
} }
// static // static
......
...@@ -8,22 +8,23 @@ ...@@ -8,22 +8,23 @@
#include <memory> #include <memory>
#include "base/callback.h" #include "base/callback.h"
#include "chrome/browser/chromeos/system_logs/single_log_source.h" #include "chrome/browser/feedback/system_logs/system_logs_fetcher.h"
#include "chrome/common/extensions/api/feedback_private.h"
namespace extensions { namespace extensions {
// Provides a way to override the creation of a new SingleLogSource during // Provides a way to override the creation of a new Single*LogSource during
// testing. // testing.
class SingleLogSourceFactory { class SingleLogSourceFactory {
public: public:
using CreateCallback = using CreateCallback =
base::Callback<std::unique_ptr<system_logs::SingleLogSource>( base::Callback<std::unique_ptr<system_logs::SystemLogsSource>(
system_logs::SingleLogSource::SupportedSource)>; api::feedback_private::LogSource)>;
// Returns a SingleLogSource with source type of |type|. The caller must take // Returns a Single*LogSource with source type corresponding to |type|. The
// ownership of the returned object. // caller must takeownership of the returned object.
static std::unique_ptr<system_logs::SingleLogSource> CreateSingleLogSource( static std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource(
system_logs::SingleLogSource::SupportedSource type); api::feedback_private::LogSource type);
// Pass in a callback that gets executed instead of the default behavior of // Pass in a callback that gets executed instead of the default behavior of
// CreateSingleLogSource. Does not take ownership of |callback|. When done // CreateSingleLogSource. Does not take ownership of |callback|. When done
......
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