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

Unified Diff: chrome/browser/safe_browsing/srt_fetcher_win.cc

Issue 2849433002: Adds error handling support for the SwReporter launcher (reland) (Closed)
Patch Set: Rebase Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/safe_browsing/srt_fetcher_win.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/safe_browsing/srt_fetcher_win.cc
diff --git a/chrome/browser/safe_browsing/srt_fetcher_win.cc b/chrome/browser/safe_browsing/srt_fetcher_win.cc
index 6f2ee0f88e9f5b90d245d708ba646f5d6e69535e..b786599300c8642bfc8635e6b39879dec106da6f 100644
--- a/chrome/browser/safe_browsing/srt_fetcher_win.cc
+++ b/chrome/browser/safe_browsing/srt_fetcher_win.cc
@@ -45,7 +45,6 @@
#include "chrome/browser/ui/global_error/global_error_service_factory.h"
#include "chrome/common/pref_names.h"
#include "components/chrome_cleaner/public/constants/constants.h"
-#include "components/chrome_cleaner/public/interfaces/chrome_prompt.mojom.h"
#include "components/component_updater/pref_names.h"
#include "components/data_use_measurement/core/data_use_user_data.h"
#include "components/prefs/pref_service.h"
@@ -545,6 +544,20 @@ void DisplaySRTPrompt(const base::FilePath& download_path) {
global_error->ShowBubbleView(browser);
}
+// Handles the case when the remote end has been closed, by performing the
+// necessary cleanups if the prompt dialog is being shown to the user.
+void OnConnectionClosed() {
+ // Placeholder. This should handle cases when the reporter process is
+ // disconnected (e.g. due to a crash) and the prompt dialog is being shown
+ // to the user.
+}
+
+// Handles the case when a mojo::ReportBadMessage has been explicitly reported.
+void OnConnectionError(const std::string& message) {
+ // Placeholder. This should handle cases when the reporter process sends
+ // a bad message and the prompt dialog is being shown to the user.
+}
+
// Class responsible for launching the reporter process and waiting for its
// completion. If feature InBrowserCleanerUI is enabled, this object will also
// be responsible for starting the ChromePromptImpl object on the IO thread and
@@ -591,7 +604,8 @@ class SwReporterProcess : public base::RefCountedThreadSafe<SwReporterProcess> {
base::Process LaunchConnectedReporterProcess();
// Starts a new instance of ChromePromptImpl to receive requests from the
- // reporter. Must be run on the IO thread.
+ // reporter and establishes the mojo connection to it.
+ // Must be run on the IO thread.
void CreateChromePromptImpl(
chrome_cleaner::mojom::ChromePromptRequest chrome_prompt_request);
@@ -620,7 +634,7 @@ int SwReporterProcess::LaunchAndWaitForExitOnBackgroundThread() {
// This exit code is used to identify that a reporter run didn't happen, so
// the result should be ignored and a rerun scheduled for the usual delay.
- int exit_code = kReporterFailureExitCode;
+ int exit_code = kReporterNotLaunchedExitCode;
UMAHistogramReporter uma(invocation_.suffix);
if (reporter_process.IsValid()) {
uma.RecordReporterStep(SW_REPORTER_START_EXECUTION);
@@ -668,10 +682,6 @@ base::Process SwReporterProcess::LaunchConnectedReporterProcess() {
if (!reporter_process.IsValid())
return reporter_process;
- pending_process_connection.Connect(
- reporter_process.Handle(),
- mojo::edk::ConnectionParams(channel.PassServerHandle()));
-
chrome_cleaner::mojom::ChromePromptRequest chrome_prompt_request;
chrome_prompt_request.Bind(std::move(mojo_pipe));
@@ -684,6 +694,16 @@ base::Process SwReporterProcess::LaunchConnectedReporterProcess() {
base::RetainedRef(this),
std::move(chrome_prompt_request)));
+ mojo::edk::ProcessErrorCallback on_connection_error =
+ g_testing_delegate_
+ ? base::Bind(&SwReporterTestingDelegate::OnConnectionError,
+ base::Unretained(g_testing_delegate_))
+ : base::Bind(&OnConnectionError);
+ pending_process_connection.Connect(
+ reporter_process.Handle(),
+ mojo::edk::ConnectionParams(channel.PassServerHandle()),
+ on_connection_error);
+
return reporter_process;
}
@@ -701,7 +721,11 @@ void SwReporterProcess::CreateChromePromptImpl(
DCHECK(base::FeatureList::IsEnabled(kInBrowserCleanerUIFeature));
chrome_prompt_impl_ =
- base::MakeUnique<ChromePromptImpl>(std::move(chrome_prompt_request));
+ g_testing_delegate_
+ ? g_testing_delegate_->CreateChromePromptImpl(
+ std::move(chrome_prompt_request))
+ : base::MakeUnique<ChromePromptImpl>(std::move(chrome_prompt_request),
+ base::Bind(&OnConnectionClosed));
}
void SwReporterProcess::ReleaseChromePromptImpl() {
@@ -934,7 +958,7 @@ class ReporterRunner : public chrome::BrowserListObserver {
base::TimeDelta reporter_running_time = now - reporter_start_time;
// Don't continue the current queue of reporters if one failed to launch.
- if (exit_code == kReporterFailureExitCode)
+ if (exit_code == kReporterNotLaunchedExitCode)
current_invocations_ = SwReporterQueue();
// As soon as we're not running this queue, schedule the next overall queue
@@ -954,7 +978,7 @@ class ReporterRunner : public chrome::BrowserListObserver {
// code itself doesn't need to be logged in this case because
// SW_REPORTER_FAILED_TO_START is logged in
// |LaunchAndWaitForExitOnBackgroundThread|.)
- if (exit_code == kReporterFailureExitCode)
+ if (exit_code == kReporterNotLaunchedExitCode)
return;
const auto& finished_invocation = sw_reporter_process->invocation();
« no previous file with comments | « chrome/browser/safe_browsing/srt_fetcher_win.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698