Commit 827c518a authored by Eric Caruso's avatar Eric Caruso Committed by Commit Bot

feedback: display explainer string for iwlwifi_dump system log

This log is huge and isn't going to make sense for users. Instead
of displaying it directly, we want to show a string explaining
what its contents are.

  there is a one-line message there, check filed feedback to see
  that the whole iwlwifi_dump log is included in system_logs

Bug: 792644
Test: file feedback, check system information dialog and see that
Cq-Include-Trybots: master.tryserver.chromium.linux:closure_compilation
Change-Id: I01048934d348243fd1b127eec0a30b33a6437922
Reviewed-on: https://chromium-review.googlesource.com/738868Reviewed-by: default avatarMichael Giuffrida <michaelpg@chromium.org>
Reviewed-by: default avatarAhmed Fakhry <afakhry@chromium.org>
Reviewed-by: default avatarToni Barzic <tbarzic@chromium.org>
Reviewed-by: default avatarDan Erat <derat@chromium.org>
Commit-Queue: Eric Caruso <ejcaruso@chromium.org>
Cr-Commit-Position: refs/heads/master@{#565434}
parent 2a31b22b
...@@ -5427,6 +5427,9 @@ the Bookmarks menu."> ...@@ -5427,6 +5427,9 @@ the Bookmarks menu.">
<message name="IDS_FEEDBACK_ATTACH_FILE_TO_BIG" desc="Text to display if the file being attached is too big"> <message name="IDS_FEEDBACK_ATTACH_FILE_TO_BIG" desc="Text to display if the file being attached is too big">
Selected file is too big (max size: 3mb). Selected file is too big (max size: 3mb).
</message> </message>
<message name="IDS_FEEDBACK_IWLWIFI_DEBUG_DUMP_EXPLAINER" desc="Displayed in the system information dialog instead of the actual contents of Intel WiFi debug logs, which are too large to display and too obscure and proprietary for users to understand.">
&lt;Four files generated by Intel Wi-Fi firmware: csr.lst, fh_regs.lst, radio_reg.lst, monitor.lst.sysmon. The first three are binary files containing register dumps, and are asserted by Intel to contain no personal or device-identifying information. The last file is an execution trace from the Intel firmware; it has been scrubbed of any personal or device-identifying information, but is too large to display here. These files were generated in response to recent Wi-Fi problems with your device, and will be shared with Intel to help troubleshoot these problems.&gt;
</message>
<message name="IDS_FEEDBACK_PRIVACY_NOTE" desc="Text for the privacy note included with Chrome OS"> <message name="IDS_FEEDBACK_PRIVACY_NOTE" desc="Text for the privacy note included with Chrome OS">
Your Chrome and operating system version will be submitted in addition Your Chrome and operating system version will be submitted in addition
to any information you choose to include above. If you include your email to any information you choose to include above. If you include your email
......
...@@ -1655,6 +1655,8 @@ source_set("chromeos") { ...@@ -1655,6 +1655,8 @@ source_set("chromeos") {
"system_logs/debug_log_writer.h", "system_logs/debug_log_writer.h",
"system_logs/device_event_log_source.cc", "system_logs/device_event_log_source.cc",
"system_logs/device_event_log_source.h", "system_logs/device_event_log_source.h",
"system_logs/iwlwifi_dump_log_source.cc",
"system_logs/iwlwifi_dump_log_source.h",
"system_logs/lsb_release_log_source.cc", "system_logs/lsb_release_log_source.cc",
"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",
......
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/system_logs/iwlwifi_dump_log_source.h"
#include "base/files/file_util.h"
#include "base/task_scheduler/post_task.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_thread.h"
#include "ui/base/l10n/l10n_util.h"
namespace system_logs {
namespace {
constexpr char kIwlwifiDumpKey[] = "iwlwifi_dump";
constexpr char kIwlwifiDumpLocation[] = "/var/log/last_iwlwifi_dump";
std::unique_ptr<SystemLogsResponse> CheckExistenceOnBlockingTaskRunner() {
auto result = std::make_unique<SystemLogsResponse>();
if (base::PathExists(base::FilePath(kIwlwifiDumpLocation))) {
result->emplace(
kIwlwifiDumpKey,
l10n_util::GetStringUTF8(IDS_FEEDBACK_IWLWIFI_DEBUG_DUMP_EXPLAINER));
}
return result;
}
std::unique_ptr<SystemLogsResponse> ReadDumpOnBlockingTaskRunner() {
auto result = std::make_unique<SystemLogsResponse>();
std::string contents;
if (base::ReadFileToString(base::FilePath(kIwlwifiDumpLocation), &contents))
result->emplace(kIwlwifiDumpKey, std::move(contents));
return result;
}
} // namespace
IwlwifiDumpChecker::IwlwifiDumpChecker()
: SystemLogsSource("IwlwifiDumpChecker") {}
IwlwifiDumpChecker::~IwlwifiDumpChecker() = default;
void IwlwifiDumpChecker::Fetch(SysLogsSourceCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!callback.is_null());
base::PostTaskWithTraitsAndReplyWithResult(
FROM_HERE,
base::TaskTraits(base::MayBlock(), base::TaskPriority::BACKGROUND),
base::BindOnce(&CheckExistenceOnBlockingTaskRunner),
base::BindOnce(std::move(callback)));
}
IwlwifiDumpLogSource::IwlwifiDumpLogSource()
: SystemLogsSource("IwlwifiDump") {}
IwlwifiDumpLogSource::~IwlwifiDumpLogSource() = default;
void IwlwifiDumpLogSource::Fetch(SysLogsSourceCallback callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
DCHECK(!callback.is_null());
base::PostTaskWithTraitsAndReplyWithResult(
FROM_HERE,
base::TaskTraits(base::MayBlock(), base::TaskPriority::BACKGROUND),
base::BindOnce(&ReadDumpOnBlockingTaskRunner),
base::BindOnce(std::move(callback)));
}
bool ContainsIwlwifiLogs(FeedbackCommon::SystemLogsMap* sys_logs) {
return sys_logs->count(kIwlwifiDumpKey);
}
void MergeIwlwifiLogs(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
system_logs::SysLogsFetcherCallback callback,
std::unique_ptr<system_logs::SystemLogsResponse> fetched_iwlwifi_response) {
if (fetched_iwlwifi_response->count(kIwlwifiDumpKey)) {
(*original_sys_logs)[kIwlwifiDumpKey] =
std::move(fetched_iwlwifi_response->at(kIwlwifiDumpKey));
}
std::move(callback).Run(std::move(original_sys_logs));
}
} // namespace system_logs
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_IWLWIFI_DUMP_LOG_SOURCE_H_
#define CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_IWLWIFI_DUMP_LOG_SOURCE_H_
#include <memory>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "components/feedback/system_logs/system_logs_fetcher.h"
#include "components/feedback/system_logs/system_logs_source.h"
namespace system_logs {
// The classes here are used to attach debug dump information from
// Intel Wi-Fi NICs that will be produced when those NICs have issues
// such as firmware crashes. This information will be used to help
// diagnose Wi-Fi issues.
// This logs source is used to check for the existence of the Wi-Fi
// debug dump. It will place an explainer string in the system logs
// map if it finds the dump.
class IwlwifiDumpChecker : public SystemLogsSource {
public:
IwlwifiDumpChecker();
~IwlwifiDumpChecker() override;
// system_logs::SystemLogsSource:
void Fetch(SysLogsSourceCallback callback) override;
private:
DISALLOW_COPY_AND_ASSIGN(IwlwifiDumpChecker);
};
// Fetches information from the /var/log/last_iwlwifi_dump file, if
// the explainer string is present in the passed-in logs map.
class IwlwifiDumpLogSource : public SystemLogsSource {
public:
IwlwifiDumpLogSource();
~IwlwifiDumpLogSource() override;
// system_logs::SystemLogsSource:
void Fetch(SysLogsSourceCallback callback) override;
private:
DISALLOW_COPY_AND_ASSIGN(IwlwifiDumpLogSource);
};
// Checks to see if |sys_logs| contains the iwlwifi logs key.
bool ContainsIwlwifiLogs(FeedbackCommon::SystemLogsMap* sys_logs);
// This should be passed as a callback to the fetcher that will fetch logs
// from the IwlwifiDumpLogSource above. It will merge the
// |fetched_iwlwifi_response| into the |original_sys_logs| and call the
// |callback| with that result.
void MergeIwlwifiLogs(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
system_logs::SysLogsFetcherCallback callback,
std::unique_ptr<system_logs::SystemLogsResponse> fetched_iwlwifi_response);
} // namespace system_logs
#endif // CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_IWLWIFI_DUMP_LOG_SOURCE_H_
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/system_logs/iwlwifi_dump_log_source.h"
#include "chrome/browser/chromeos/system_logs/single_debug_daemon_log_source.h" #include "chrome/browser/chromeos/system_logs/single_debug_daemon_log_source.h"
#include "chrome/browser/chromeos/system_logs/single_log_file_log_source.h" #include "chrome/browser/chromeos/system_logs/single_log_file_log_source.h"
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
...@@ -162,6 +163,24 @@ ChromeFeedbackPrivateDelegate::CreateSingleLogSource( ...@@ -162,6 +163,24 @@ ChromeFeedbackPrivateDelegate::CreateSingleLogSource(
return nullptr; return nullptr;
} }
} }
void ChromeFeedbackPrivateDelegate::FetchAndMergeIwlwifiDumpLogsIfPresent(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
content::BrowserContext* context,
system_logs::SysLogsFetcherCallback callback) const {
if (!original_sys_logs ||
!system_logs::ContainsIwlwifiLogs(original_sys_logs.get())) {
std::move(callback).Run(std::move(original_sys_logs));
return;
}
system_logs::SystemLogsFetcher* fetcher =
new system_logs::SystemLogsFetcher(true /* scrub_data */);
fetcher->AddSource(std::make_unique<system_logs::IwlwifiDumpLogSource>());
fetcher->Fetch(base::BindOnce(&system_logs::MergeIwlwifiLogs,
std::move(original_sys_logs),
std::move(callback)));
}
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
std::string ChromeFeedbackPrivateDelegate::GetSignedInUserEmail( std::string ChromeFeedbackPrivateDelegate::GetSignedInUserEmail(
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef CHROME_BROWSER_EXTENSIONS_API_FEEDBACK_PRIVATE_CHROME_FEEDBACK_PRIVATE_DELEGATE_H_ #ifndef CHROME_BROWSER_EXTENSIONS_API_FEEDBACK_PRIVATE_CHROME_FEEDBACK_PRIVATE_DELEGATE_H_
#define CHROME_BROWSER_EXTENSIONS_API_FEEDBACK_PRIVATE_CHROME_FEEDBACK_PRIVATE_DELEGATE_H_ #define CHROME_BROWSER_EXTENSIONS_API_FEEDBACK_PRIVATE_CHROME_FEEDBACK_PRIVATE_DELEGATE_H_
#include "components/feedback/feedback_common.h"
#include "extensions/browser/api/feedback_private/feedback_private_delegate.h" #include "extensions/browser/api/feedback_private/feedback_private_delegate.h"
#include "base/macros.h" #include "base/macros.h"
...@@ -25,6 +26,10 @@ class ChromeFeedbackPrivateDelegate : public FeedbackPrivateDelegate { ...@@ -25,6 +26,10 @@ class ChromeFeedbackPrivateDelegate : public FeedbackPrivateDelegate {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource( std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource(
api::feedback_private::LogSource source_type) const override; api::feedback_private::LogSource source_type) const override;
void FetchAndMergeIwlwifiDumpLogsIfPresent(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
content::BrowserContext* context,
system_logs::SysLogsFetcherCallback callback) const override;
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
std::string GetSignedInUserEmail( std::string GetSignedInUserEmail(
content::BrowserContext* context) const override; content::BrowserContext* context) const override;
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include "chrome/browser/chromeos/system_logs/dbus_log_source.h" #include "chrome/browser/chromeos/system_logs/dbus_log_source.h"
#include "chrome/browser/chromeos/system_logs/debug_daemon_log_source.h" #include "chrome/browser/chromeos/system_logs/debug_daemon_log_source.h"
#include "chrome/browser/chromeos/system_logs/device_event_log_source.h" #include "chrome/browser/chromeos/system_logs/device_event_log_source.h"
#include "chrome/browser/chromeos/system_logs/iwlwifi_dump_log_source.h"
#include "chrome/browser/chromeos/system_logs/lsb_release_log_source.h" #include "chrome/browser/chromeos/system_logs/lsb_release_log_source.h"
#include "chrome/browser/chromeos/system_logs/touch_log_source.h" #include "chrome/browser/chromeos/system_logs/touch_log_source.h"
#endif #endif
...@@ -33,6 +34,7 @@ SystemLogsFetcher* BuildChromeSystemLogsFetcher() { ...@@ -33,6 +34,7 @@ SystemLogsFetcher* BuildChromeSystemLogsFetcher() {
fetcher->AddSource(std::make_unique<CommandLineLogSource>()); fetcher->AddSource(std::make_unique<CommandLineLogSource>());
fetcher->AddSource(std::make_unique<DBusLogSource>()); fetcher->AddSource(std::make_unique<DBusLogSource>());
fetcher->AddSource(std::make_unique<DeviceEventLogSource>()); fetcher->AddSource(std::make_unique<DeviceEventLogSource>());
fetcher->AddSource(std::make_unique<IwlwifiDumpChecker>());
fetcher->AddSource(std::make_unique<LsbReleaseLogSource>()); fetcher->AddSource(std::make_unique<LsbReleaseLogSource>());
fetcher->AddSource(std::make_unique<TouchLogSource>()); fetcher->AddSource(std::make_unique<TouchLogSource>());
......
...@@ -269,11 +269,11 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() { ...@@ -269,11 +269,11 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() {
const FeedbackInfo& feedback_info = params->feedback; const FeedbackInfo& feedback_info = params->feedback;
// Populate feedback data. // Populate feedback data.
FeedbackPrivateDelegate* delegate =
ExtensionsAPIClient::Get()->GetFeedbackPrivateDelegate();
scoped_refptr<FeedbackData> feedback_data = scoped_refptr<FeedbackData> feedback_data =
base::MakeRefCounted<FeedbackData>( base::MakeRefCounted<FeedbackData>(
ExtensionsAPIClient::Get() delegate->GetFeedbackUploaderForContext(browser_context()));
->GetFeedbackPrivateDelegate()
->GetFeedbackUploaderForContext(browser_context()));
feedback_data->set_context(browser_context()); feedback_data->set_context(browser_context());
feedback_data->set_description(feedback_info.description); feedback_data->set_description(feedback_info.description);
...@@ -309,6 +309,23 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() { ...@@ -309,6 +309,23 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() {
sys_logs->emplace(info.key, info.value); sys_logs->emplace(info.key, info.value);
} }
#if defined(OS_CHROMEOS)
delegate->FetchAndMergeIwlwifiDumpLogsIfPresent(
std::move(sys_logs), browser_context(),
base::Bind(&FeedbackPrivateSendFeedbackFunction::OnAllLogsFetched, this,
feedback_data, feedback_info.send_histograms));
#else
OnAllLogsFetched(feedback_data, feedback_info.send_histograms,
std::move(sys_logs));
#endif // defined(OS_CHROMEOS)
return RespondLater();
}
void FeedbackPrivateSendFeedbackFunction::OnAllLogsFetched(
scoped_refptr<FeedbackData> feedback_data,
bool send_histograms,
std::unique_ptr<system_logs::SystemLogsResponse> sys_logs) {
feedback_data->SetAndCompressSystemInfo(std::move(sys_logs)); feedback_data->SetAndCompressSystemInfo(std::move(sys_logs));
FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance() FeedbackService* service = FeedbackPrivateAPI::GetFactoryInstance()
...@@ -316,7 +333,7 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() { ...@@ -316,7 +333,7 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() {
->GetService(); ->GetService();
DCHECK(service); DCHECK(service);
if (feedback_info.send_histograms) { if (send_histograms) {
auto histograms = std::make_unique<std::string>(); auto histograms = std::make_unique<std::string>();
*histograms = *histograms =
base::StatisticsRecorder::ToJSON(base::JSON_VERBOSITY_LEVEL_FULL); base::StatisticsRecorder::ToJSON(base::JSON_VERBOSITY_LEVEL_FULL);
...@@ -328,8 +345,6 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() { ...@@ -328,8 +345,6 @@ ExtensionFunction::ResponseAction FeedbackPrivateSendFeedbackFunction::Run() {
feedback_data, feedback_data,
base::Bind(&FeedbackPrivateSendFeedbackFunction::OnCompleted, this, base::Bind(&FeedbackPrivateSendFeedbackFunction::OnCompleted, this,
GetLandingPageType(feedback_data->user_email()))); GetLandingPageType(feedback_data->user_email())));
return RespondLater();
} }
void FeedbackPrivateSendFeedbackFunction::OnCompleted( void FeedbackPrivateSendFeedbackFunction::OnCompleted(
......
...@@ -7,12 +7,17 @@ ...@@ -7,12 +7,17 @@
#include <memory> #include <memory>
#include "base/memory/ref_counted.h"
#include "components/feedback/system_logs/system_logs_source.h" #include "components/feedback/system_logs/system_logs_source.h"
#include "extensions/browser/browser_context_keyed_api_factory.h" #include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/browser/extension_function.h" #include "extensions/browser/extension_function.h"
#include "extensions/common/api/feedback_private.h" #include "extensions/common/api/feedback_private.h"
#include "ui/gfx/geometry/rect.h" #include "ui/gfx/geometry/rect.h"
namespace feedback {
class FeedbackData;
} // namespace feedback
namespace extensions { namespace extensions {
class FeedbackService; class FeedbackService;
...@@ -133,6 +138,10 @@ class FeedbackPrivateSendFeedbackFunction : public UIThreadExtensionFunction { ...@@ -133,6 +138,10 @@ class FeedbackPrivateSendFeedbackFunction : public UIThreadExtensionFunction {
ResponseAction Run() override; ResponseAction Run() override;
private: private:
void OnAllLogsFetched(
scoped_refptr<feedback::FeedbackData> feedback_data,
bool send_histograms,
std::unique_ptr<FeedbackCommon::SystemLogsMap> sys_logs);
void OnCompleted(api::feedback_private::LandingPageType type, bool success); void OnCompleted(api::feedback_private::LandingPageType type, bool success);
}; };
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef EXTENSIONS_BROWSER_API_FEEDBACK_PRIVATE_FEEDBACK_PRIVATE_DELEGATE_H_ #ifndef EXTENSIONS_BROWSER_API_FEEDBACK_PRIVATE_FEEDBACK_PRIVATE_DELEGATE_H_
#define EXTENSIONS_BROWSER_API_FEEDBACK_PRIVATE_FEEDBACK_PRIVATE_DELEGATE_H_ #define EXTENSIONS_BROWSER_API_FEEDBACK_PRIVATE_FEEDBACK_PRIVATE_DELEGATE_H_
#include "components/feedback/feedback_common.h"
#include "components/feedback/system_logs/system_logs_fetcher.h"
#include "extensions/common/api/feedback_private.h" #include "extensions/common/api/feedback_private.h"
#include <memory> #include <memory>
...@@ -50,6 +52,13 @@ class FeedbackPrivateDelegate { ...@@ -50,6 +52,13 @@ class FeedbackPrivateDelegate {
// Creates a SystemLogsSource for the given type of log file. // Creates a SystemLogsSource for the given type of log file.
virtual std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource( virtual std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource(
api::feedback_private::LogSource source_type) const = 0; api::feedback_private::LogSource source_type) const = 0;
// Takes ownership of |original_sys_logs|, merges Intel Wi-Fi debug logs if
// they exist, and passes the log map back via |callback|.
virtual void FetchAndMergeIwlwifiDumpLogsIfPresent(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
content::BrowserContext* context,
system_logs::SysLogsFetcherCallback callback) const = 0;
#endif #endif
// Returns the normalized email address of the signed-in user associated with // Returns the normalized email address of the signed-in user associated with
......
...@@ -40,6 +40,14 @@ ShellFeedbackPrivateDelegate::CreateSingleLogSource( ...@@ -40,6 +40,14 @@ ShellFeedbackPrivateDelegate::CreateSingleLogSource(
NOTIMPLEMENTED(); NOTIMPLEMENTED();
return nullptr; return nullptr;
} }
void ShellFeedbackPrivateDelegate::FetchAndMergeIwlwifiDumpLogsIfPresent(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
content::BrowserContext* context,
system_logs::SysLogsFetcherCallback callback) const {
NOTIMPLEMENTED();
std::move(callback).Run(std::move(original_sys_logs));
}
#endif #endif
std::string ShellFeedbackPrivateDelegate::GetSignedInUserEmail( std::string ShellFeedbackPrivateDelegate::GetSignedInUserEmail(
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef EXTENSIONS_SHELL_BROWSER_API_FEEDBACK_PRIVATE_SHELL_FEEDBACK_PRIVATE_DELEGATE_H_ #ifndef EXTENSIONS_SHELL_BROWSER_API_FEEDBACK_PRIVATE_SHELL_FEEDBACK_PRIVATE_DELEGATE_H_
#define EXTENSIONS_SHELL_BROWSER_API_FEEDBACK_PRIVATE_SHELL_FEEDBACK_PRIVATE_DELEGATE_H_ #define EXTENSIONS_SHELL_BROWSER_API_FEEDBACK_PRIVATE_SHELL_FEEDBACK_PRIVATE_DELEGATE_H_
#include "components/feedback/feedback_common.h"
#include "extensions/browser/api/feedback_private/feedback_private_delegate.h" #include "extensions/browser/api/feedback_private/feedback_private_delegate.h"
#include "base/macros.h" #include "base/macros.h"
...@@ -25,6 +26,10 @@ class ShellFeedbackPrivateDelegate : public FeedbackPrivateDelegate { ...@@ -25,6 +26,10 @@ class ShellFeedbackPrivateDelegate : public FeedbackPrivateDelegate {
#if defined(OS_CHROMEOS) #if defined(OS_CHROMEOS)
std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource( std::unique_ptr<system_logs::SystemLogsSource> CreateSingleLogSource(
api::feedback_private::LogSource source_type) const override; api::feedback_private::LogSource source_type) const override;
void FetchAndMergeIwlwifiDumpLogsIfPresent(
std::unique_ptr<FeedbackCommon::SystemLogsMap> original_sys_logs,
content::BrowserContext* context,
system_logs::SysLogsFetcherCallback callback) const override;
#endif // defined(OS_CHROMEOS) #endif // defined(OS_CHROMEOS)
std::string GetSignedInUserEmail( std::string GetSignedInUserEmail(
content::BrowserContext* context) const override; content::BrowserContext* context) const override;
......
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