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

Side by Side Diff: chrome/browser/safe_browsing/srt_fetcher_browsertest_win.cc

Issue 2813253002: Replace elevation required bool with an enum. (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "chrome/browser/safe_browsing/srt_fetcher_win.h" 5 #include "chrome/browser/safe_browsing/srt_fetcher_win.h"
6 6
7 #include <initializer_list> 7 #include <initializer_list>
8 #include <set> 8 #include <set>
9 #include <tuple> 9 #include <tuple>
10 #include <utility> 10 #include <utility>
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "components/safe_browsing_db/safe_browsing_prefs.h" 42 #include "components/safe_browsing_db/safe_browsing_prefs.h"
43 #include "mojo/edk/embedder/embedder.h" 43 #include "mojo/edk/embedder/embedder.h"
44 #include "mojo/edk/embedder/scoped_ipc_support.h" 44 #include "mojo/edk/embedder/scoped_ipc_support.h"
45 #include "mojo/edk/system/core.h" 45 #include "mojo/edk/system/core.h"
46 #include "testing/multiprocess_func_list.h" 46 #include "testing/multiprocess_func_list.h"
47 47
48 namespace safe_browsing { 48 namespace safe_browsing {
49 49
50 namespace { 50 namespace {
51 51
52 using chrome_cleaner::mojom::ElevationStatus;
52 using chrome_cleaner::mojom::PromptAcceptance; 53 using chrome_cleaner::mojom::PromptAcceptance;
53 54
54 // Special switches passed by the parent process (test case) to the reporter 55 // Special switches passed by the parent process (test case) to the reporter
55 // child process to indicate the behavior that should be mocked. 56 // child process to indicate the behavior that should be mocked.
56 constexpr char kExitCodeToReturnSwitch[] = "exit-code-to-return"; 57 constexpr char kExitCodeToReturnSwitch[] = "exit-code-to-return";
57 constexpr char kReportUwSFoundSwitch[] = "report-uws-found"; 58 constexpr char kReportUwSFoundSwitch[] = "report-uws-found";
58 constexpr char kReportElevationRequiredSwitch[] = "report-elevation-required"; 59 constexpr char kReportElevationRequiredSwitch[] = "report-elevation-required";
59 constexpr char kExpectedPromptAcceptanceSwitch[] = "expected-prompt-acceptance"; 60 constexpr char kExpectedPromptAcceptanceSwitch[] = "expected-prompt-acceptance";
60 61
61 // The exit code to be returned in case of failure in the child process. 62 // The exit code to be returned in case of failure in the child process.
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 std::move(message_pipe_handle), 0)); 130 std::move(message_pipe_handle), 0));
130 131
131 std::vector<chrome_cleaner::mojom::UwSPtr> removable_uws_found; 132 std::vector<chrome_cleaner::mojom::UwSPtr> removable_uws_found;
132 if (command_line.HasSwitch(kReportUwSFoundSwitch)) { 133 if (command_line.HasSwitch(kReportUwSFoundSwitch)) {
133 chrome_cleaner::mojom::UwSPtr uws = chrome_cleaner::mojom::UwS::New(); 134 chrome_cleaner::mojom::UwSPtr uws = chrome_cleaner::mojom::UwS::New();
134 uws->id = kDefaultUwSId; 135 uws->id = kDefaultUwSId;
135 uws->name = kDefaultUwSName; 136 uws->name = kDefaultUwSName;
136 uws->observed_behaviours = chrome_cleaner::mojom::ObservedBehaviours::New(); 137 uws->observed_behaviours = chrome_cleaner::mojom::ObservedBehaviours::New();
137 removable_uws_found.push_back(std::move(uws)); 138 removable_uws_found.push_back(std::move(uws));
138 } 139 }
139 const bool elevation_required = 140 const ElevationStatus elevation_status =
140 command_line.HasSwitch(kReportElevationRequiredSwitch); 141 command_line.HasSwitch(kReportElevationRequiredSwitch)
142 ? ElevationStatus::REQUIRED
143 : ElevationStatus::NOT_REQUIRED;
141 const PromptAcceptance expected_prompt_acceptance = 144 const PromptAcceptance expected_prompt_acceptance =
142 PromptAcceptanceFromCommandLine(command_line); 145 PromptAcceptanceFromCommandLine(command_line);
143 146
144 (*g_chrome_prompt_ptr) 147 (*g_chrome_prompt_ptr)
145 ->PromptUser( 148 ->PromptUser(
146 std::move(removable_uws_found), elevation_required, 149 std::move(removable_uws_found), elevation_status,
147 base::Bind(&PromptUserCallback, done, expected_prompt_acceptance, 150 base::Bind(&PromptUserCallback, done, expected_prompt_acceptance,
148 expected_value_received)); 151 expected_value_received));
149 } 152 }
150 153
151 // Connects to the parent process and sends mocked scan results. Returns true 154 // Connects to the parent process and sends mocked scan results. Returns true
152 // if connection was successful and the prompt acceptance results sent by the 155 // if connection was successful and the prompt acceptance results sent by the
153 // parent process are the same as expected. 156 // parent process are the same as expected.
154 bool ConnectAndSendDataToParentProcess( 157 bool ConnectAndSendDataToParentProcess(
155 const std::string& chrome_mojo_pipe_token, 158 const std::string& chrome_mojo_pipe_token,
156 const base::CommandLine& command_line) { 159 const base::CommandLine& command_line) {
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 (chrome_mojo_pipe_token.empty() || 204 (chrome_mojo_pipe_token.empty() ||
202 ConnectAndSendDataToParentProcess(chrome_mojo_pipe_token, 205 ConnectAndSendDataToParentProcess(chrome_mojo_pipe_token,
203 *command_line)); 206 *command_line));
204 return success ? exit_code_to_report : kFailureExitCode; 207 return success ? exit_code_to_report : kFailureExitCode;
205 } 208 }
206 209
207 // Parameters for this test: 210 // Parameters for this test:
208 // - bool in_browser_cleaner_ui: indicates if InBrowserCleanerUI experiment 211 // - bool in_browser_cleaner_ui: indicates if InBrowserCleanerUI experiment
209 // is enabled; if so, the parent and the child processes will communicate 212 // is enabled; if so, the parent and the child processes will communicate
210 // via a Mojo IPC; 213 // via a Mojo IPC;
211 // - bool elevation_required: indicates if the scan results sent by the child 214 // - ElevationStatus elevation_status: indicates if the scan results sent by
212 // process should consider that elevation will be required for cleanup. 215 // the child process should consider that elevation will be required for
216 // cleanup.
213 class SRTFetcherTest 217 class SRTFetcherTest
214 : public InProcessBrowserTest, 218 : public InProcessBrowserTest,
215 public SwReporterTestingDelegate, 219 public SwReporterTestingDelegate,
216 public ::testing::WithParamInterface<std::tuple<bool, bool>> { 220 public ::testing::WithParamInterface<std::tuple<bool, ElevationStatus>> {
217 public: 221 public:
218 void SetUpInProcessBrowserTestFixture() override { 222 void SetUpInProcessBrowserTestFixture() override {
219 SetSwReporterTestingDelegate(this); 223 SetSwReporterTestingDelegate(this);
220 224
221 std::tie(in_browser_cleaner_ui_, elevation_required_) = GetParam(); 225 std::tie(in_browser_cleaner_ui_, elevation_status_) = GetParam();
222 // The config should only accept elevation_required_ if InBrowserCleanerUI 226 // The config should only accept elevation_status_ if InBrowserCleanerUI
223 // feature is enabled. 227 // feature is enabled.
224 ASSERT_TRUE(!elevation_required_ || in_browser_cleaner_ui_); 228 ASSERT_TRUE(elevation_status_ == ElevationStatus::NOT_REQUIRED ||
229 in_browser_cleaner_ui_);
225 230
226 if (in_browser_cleaner_ui_) 231 if (in_browser_cleaner_ui_)
227 scoped_feature_list_.InitAndEnableFeature(kInBrowserCleanerUIFeature); 232 scoped_feature_list_.InitAndEnableFeature(kInBrowserCleanerUIFeature);
228 else 233 else
229 scoped_feature_list_.InitAndDisableFeature(kInBrowserCleanerUIFeature); 234 scoped_feature_list_.InitAndDisableFeature(kInBrowserCleanerUIFeature);
230 } 235 }
231 236
232 void SetUpOnMainThread() override { 237 void SetUpOnMainThread() override {
233 // During the test, use a task runner with a mock clock. 238 // During the test, use a task runner with a mock clock.
234 saved_task_runner_ = base::ThreadTaskRunnerHandle::Get(); 239 saved_task_runner_ = base::ThreadTaskRunnerHandle::Get();
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 base::CommandLine command_line( 282 base::CommandLine command_line(
278 base::GetMultiProcessTestChildBaseCommandLine()); 283 base::GetMultiProcessTestChildBaseCommandLine());
279 command_line.AppendArguments(invocation.command_line, 284 command_line.AppendArguments(invocation.command_line,
280 /*include_program=*/false); 285 /*include_program=*/false);
281 command_line.AppendSwitchASCII(kExitCodeToReturnSwitch, 286 command_line.AppendSwitchASCII(kExitCodeToReturnSwitch,
282 base::IntToString(exit_code_to_report_)); 287 base::IntToString(exit_code_to_report_));
283 if (in_browser_cleaner_ui_) { 288 if (in_browser_cleaner_ui_) {
284 AddPromptAcceptanceToCommandLine(PromptAcceptance::DENIED, &command_line); 289 AddPromptAcceptanceToCommandLine(PromptAcceptance::DENIED, &command_line);
285 if (exit_code_to_report_ == kSwReporterCleanupNeeded) { 290 if (exit_code_to_report_ == kSwReporterCleanupNeeded) {
286 command_line.AppendSwitch(kReportUwSFoundSwitch); 291 command_line.AppendSwitch(kReportUwSFoundSwitch);
287 if (elevation_required_) 292 if (elevation_status_ == ElevationStatus::REQUIRED)
288 command_line.AppendSwitch(kReportElevationRequiredSwitch); 293 command_line.AppendSwitch(kReportElevationRequiredSwitch);
289 } 294 }
290 } 295 }
291 base::SpawnChildResult result = base::SpawnMultiProcessTestChild( 296 base::SpawnChildResult result = base::SpawnMultiProcessTestChild(
292 "MockSwReporterProcess", command_line, launch_options); 297 "MockSwReporterProcess", command_line, launch_options);
293 return std::move(result.process); 298 return std::move(result.process);
294 } 299 }
295 300
296 // Returns the test's idea of the current time. 301 // Returns the test's idea of the current time.
297 base::Time Now() const override { return mock_time_task_runner_->Now(); } 302 base::Time Now() const override { return mock_time_task_runner_->Now(); }
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 } 457 }
453 458
454 // A task runner with a mock clock. 459 // A task runner with a mock clock.
455 scoped_refptr<base::TestMockTimeTaskRunner> mock_time_task_runner_ = 460 scoped_refptr<base::TestMockTimeTaskRunner> mock_time_task_runner_ =
456 new base::TestMockTimeTaskRunner(); 461 new base::TestMockTimeTaskRunner();
457 462
458 // The task runner that was in use before installing |mock_time_task_runner_|. 463 // The task runner that was in use before installing |mock_time_task_runner_|.
459 scoped_refptr<base::SingleThreadTaskRunner> saved_task_runner_; 464 scoped_refptr<base::SingleThreadTaskRunner> saved_task_runner_;
460 465
461 bool in_browser_cleaner_ui_; 466 bool in_browser_cleaner_ui_;
462 bool elevation_required_; 467 ElevationStatus elevation_status_;
463 468
464 bool prompt_trigger_called_ = false; 469 bool prompt_trigger_called_ = false;
465 int reporter_launch_count_ = 0; 470 int reporter_launch_count_ = 0;
466 std::vector<SwReporterInvocation> reporter_launch_parameters_; 471 std::vector<SwReporterInvocation> reporter_launch_parameters_;
467 int exit_code_to_report_ = kReporterFailureExitCode; 472 int exit_code_to_report_ = kReporterFailureExitCode;
468 473
469 // A callback to invoke when the first reporter of a queue is launched. This 474 // A callback to invoke when the first reporter of a queue is launched. This
470 // can be used to perform actions in the middle of a queue of reporters which 475 // can be used to perform actions in the middle of a queue of reporters which
471 // all launch on the same mock clock tick. 476 // all launch on the same mock clock tick.
472 base::OnceClosure first_launch_callback_; 477 base::OnceClosure first_launch_callback_;
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after
787 // Logs should also be sent for the next run, even though LastTimeSentReport 792 // Logs should also be sent for the next run, even though LastTimeSentReport
788 // is now recent, because the run is part of the same set of invocations. 793 // is now recent, because the run is part of the same set of invocations.
789 { 794 {
790 SCOPED_TRACE("second launch"); 795 SCOPED_TRACE("second launch");
791 ExpectLoggingSwitches(reporter_launch_parameters_[1], true); 796 ExpectLoggingSwitches(reporter_launch_parameters_[1], true);
792 ExpectLastReportSentInTheLastHour(); 797 ExpectLastReportSentInTheLastHour();
793 } 798 }
794 ExpectToRunAgain(kDaysBetweenSuccessfulSwReporterRuns); 799 ExpectToRunAgain(kDaysBetweenSuccessfulSwReporterRuns);
795 } 800 }
796 801
797 INSTANTIATE_TEST_CASE_P(NoInBrowserCleanerUI, 802 INSTANTIATE_TEST_CASE_P(
798 SRTFetcherTest, 803 NoInBrowserCleanerUI,
799 testing::Combine(testing::Values(false), 804 SRTFetcherTest,
800 testing::Values(false))); 805 testing::Combine(testing::Values(false),
806 testing::Values(ElevationStatus::NOT_REQUIRED)));
801 807
802 INSTANTIATE_TEST_CASE_P(InBrowserCleanerUI, 808 INSTANTIATE_TEST_CASE_P(
803 SRTFetcherTest, 809 InBrowserCleanerUI,
804 testing::Combine(testing::Values(true), 810 SRTFetcherTest,
805 testing::Bool())); 811 testing::Combine(testing::Values(true),
812 testing::Values(ElevationStatus::NOT_REQUIRED,
813 ElevationStatus::REQUIRED)));
806 814
807 // This provide tests which allows explicit invocation of the SRT Prompt 815 // This provide tests which allows explicit invocation of the SRT Prompt
808 // useful for checking dialog layout or any other interactive functionality 816 // useful for checking dialog layout or any other interactive functionality
809 // tests. See docs/testing/test_browser_dialog.md for description of the 817 // tests. See docs/testing/test_browser_dialog.md for description of the
810 // testing framework. 818 // testing framework.
811 IN_PROC_BROWSER_TEST_F(SRTFetcherPromptTest, InvokeDialog_SRTErrorNoFile) { 819 IN_PROC_BROWSER_TEST_F(SRTFetcherPromptTest, InvokeDialog_SRTErrorNoFile) {
812 RunDialog(); 820 RunDialog();
813 } 821 }
814 822
815 IN_PROC_BROWSER_TEST_F(SRTFetcherPromptTest, InvokeDialog_SRTErrorFile) { 823 IN_PROC_BROWSER_TEST_F(SRTFetcherPromptTest, InvokeDialog_SRTErrorFile) {
816 RunDialog(); 824 RunDialog();
817 } 825 }
818 826
819 } // namespace safe_browsing 827 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698