| Index: chrome/browser/safe_browsing/certificate_reporting_service_browsertest.cc
|
| diff --git a/chrome/browser/safe_browsing/certificate_reporting_service_browsertest.cc b/chrome/browser/safe_browsing/certificate_reporting_service_browsertest.cc
|
| index 89efeca0311f3df3995ac4ff74dc9bebd0059ffb..eb5249ac471cb845652166b3305ab739b5275dce 100644
|
| --- a/chrome/browser/safe_browsing/certificate_reporting_service_browsertest.cc
|
| +++ b/chrome/browser/safe_browsing/certificate_reporting_service_browsertest.cc
|
| @@ -36,6 +36,7 @@
|
| #include "url/scheme_host_port.h"
|
|
|
| using certificate_reporting_test_utils::CertificateReportingServiceTestHelper;
|
| +using certificate_reporting_test_utils::CertificateReportingServiceObserver;
|
| using certificate_reporting_test_utils::ReportExpectation;
|
|
|
| namespace {
|
| @@ -53,24 +54,16 @@ namespace safe_browsing {
|
|
|
| // These tests check the whole mechanism to send and queue invalid certificate
|
| // reports. Each test triggers reports by visiting broken SSL pages. The reports
|
| -// succeed, fail or hang indefinitely. The test waits for the URL requests
|
| -// corresponding to the reports to to be created via the URL request
|
| -// interceptor. When reports are expected to succeed or fail, test teardown
|
| -// checks that there are no in-flight or pending reports in the
|
| -// CertificateReportingService queue. When a report is to be delayed, a single
|
| -// in-flight report is expected in CertificateReportingService. Since the actual
|
| -// URL requests for reports are sent from the IO thread, the tests wait for the
|
| -// IO thread to finish before checking the expected report counts.
|
| -//
|
| -// Note that these browser tests differ from the unit tests in how they check
|
| -// expected reports: Unit tests create a network delegate and observe the
|
| -// destruction of the URL requests, whereas browser tests wait for the URL
|
| -// requests to be created instead.
|
| +// succeed, fail or hang indefinitely:
|
| +// - If a report is expected to fail or succeed, the test waits for the
|
| +// corresponding URL request jobs to be destroyed.
|
| +// - If a report is expected to hang, the test waits for the corresponding URL
|
| +// request job to be created. Only after resuming the hung request job the
|
| +// test waits for the request to be destroyed.
|
| class CertificateReportingServiceBrowserTest : public InProcessBrowserTest {
|
| public:
|
| CertificateReportingServiceBrowserTest()
|
| - : https_server_(net::EmbeddedTestServer::TYPE_HTTPS),
|
| - expect_delayed_report_on_teardown_(false) {}
|
| + : https_server_(net::EmbeddedTestServer::TYPE_HTTPS) {}
|
|
|
| void SetUpOnMainThread() override {
|
| DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| @@ -80,19 +73,25 @@ class CertificateReportingServiceBrowserTest : public InProcessBrowserTest {
|
| https_server_.ServeFilesFromSourceDirectory("chrome/test/data");
|
| ASSERT_TRUE(https_server_.Start());
|
|
|
| - test_helper_.SetUpInterceptor();
|
| + test_helper()->SetUpInterceptor();
|
|
|
| CertificateReportingServiceFactory::GetInstance()
|
| ->SetReportEncryptionParamsForTesting(
|
| - test_helper_.server_public_key(),
|
| - test_helper_.server_public_key_version());
|
| + test_helper()->server_public_key(),
|
| + test_helper()->server_public_key_version());
|
| + CertificateReportingServiceFactory::GetInstance()
|
| + ->SetServiceResetCallbackForTesting(
|
| + base::Bind(&CertificateReportingServiceObserver::OnServiceReset,
|
| + base::Unretained(&service_observer_)));
|
| InProcessBrowserTest::SetUpOnMainThread();
|
| }
|
|
|
| void TearDownOnMainThread() override {
|
| - CheckExpectedReportCounts(expect_delayed_report_on_teardown_);
|
| + test_helper()->ExpectNoRequests(service());
|
| content::BrowserThread::PostTask(content::BrowserThread::IO, FROM_HERE,
|
| base::Bind(&CleanUpOnIOThread));
|
| + EXPECT_GE(num_expected_failed_report_, 0)
|
| + << "Don't forget to set expected failed report count.";
|
| // Check the histogram as the last thing. This makes sure no in-flight
|
| // report is missed.
|
| if (num_expected_failed_report_ != 0) {
|
| @@ -138,16 +137,10 @@ class CertificateReportingServiceBrowserTest : public InProcessBrowserTest {
|
| // Navigate away from the interstitial to trigger report upload.
|
| ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
|
| content::WaitForInterstitialDetach(contents);
|
| - WaitForIOThread();
|
| }
|
|
|
| void SendPendingReports() { service()->SendPending(); }
|
|
|
| - // Checks that there are no outstanding reports.
|
| - // If |expect_delayed_report_on_teardown| is true, expects a single delayed
|
| - // report.
|
| - void CheckNoReports() { CheckExpectedReportCounts(false); }
|
| -
|
| // Changes opt-in status and waits for the cert reporting service to reset.
|
| // Can only be used after the service is initialized. When changing the
|
| // value at the beginning of a test,
|
| @@ -159,119 +152,52 @@ class CertificateReportingServiceBrowserTest : public InProcessBrowserTest {
|
| // a task to the IO thread to reset the service. Waiting for the IO thread
|
| // ensures that the service is reset before returning from this method.
|
| void ChangeOptInAndWait(certificate_reporting_test_utils::OptIn opt_in) {
|
| + service_observer_.Clear();
|
| certificate_reporting_test_utils::SetCertReportingOptIn(browser(), opt_in);
|
| - WaitForIOThread();
|
| + service_observer_.WaitForReset();
|
| }
|
|
|
| // Same as ChangeOptInAndWait, but enables/disables SafeBrowsing instead.
|
| void ToggleSafeBrowsingAndWaitForServiceReset(bool safebrowsing_enabled) {
|
| + service_observer_.Clear();
|
| browser()->profile()->GetPrefs()->SetBoolean(prefs::kSafeBrowsingEnabled,
|
| safebrowsing_enabled);
|
| - WaitForIOThread();
|
| - }
|
| -
|
| - void ShutdownServiceAndWait() {
|
| - service()->Shutdown();
|
| - WaitForIOThread();
|
| - }
|
| -
|
| - // Waits for a number of URL requests to be created for the reports in
|
| - // |expectation| and checks that the reports in |expectation| matches the
|
| - // reports observed by URL request interceptor.
|
| - void WaitForReports(const ReportExpectation& expectation) {
|
| - test_helper_.interceptor()->WaitForReports(expectation.num_reports());
|
| - std::set<std::string> expected_hostnames;
|
| - CheckReports(expectation.successful_reports,
|
| - test_helper_.interceptor()->successful_reports());
|
| - CheckReports(expectation.failed_reports,
|
| - test_helper_.interceptor()->failed_reports());
|
| - CheckReports(expectation.delayed_reports,
|
| - test_helper_.interceptor()->delayed_reports());
|
| - test_helper_.interceptor()->ClearObservedReports();
|
| - }
|
| -
|
| - // Resumes the delayed request and waits for the resume task to complete which
|
| - // in turn means the response starts.
|
| - void ResumeDelayedRequestAndWait() {
|
| - base::RunLoop run_loop;
|
| - test_helper_.ResumeDelayedRequest(run_loop.QuitClosure());
|
| - run_loop.Run();
|
| - }
|
| -
|
| - // Tells the test to expect a delayed report during test teardown. If not set,
|
| - // the tests expect no in-flight reports during teardown.
|
| - void SetExpectDelayedReportOnTeardown() {
|
| - expect_delayed_report_on_teardown_ = true;
|
| + service_observer_.WaitForReset();
|
| }
|
|
|
| - void SetExpectedHistogramCountOnTeardown(
|
| - unsigned int num_expected_failed_report) {
|
| + void SetExpectedHistogramCountOnTeardown(int num_expected_failed_report) {
|
| num_expected_failed_report_ = num_expected_failed_report;
|
| }
|
|
|
| - private:
|
| CertificateReportingService* service() const {
|
| return CertificateReportingServiceFactory::GetForBrowserContext(
|
| browser()->profile());
|
| }
|
|
|
| - // Waits for pending tasks on the IO thread to complete.
|
| - void WaitForIOThread() {
|
| - scoped_refptr<base::ThreadTestHelper> io_helper(new base::ThreadTestHelper(
|
| - content::BrowserThread::GetTaskRunnerForThread(
|
| - content::BrowserThread::IO)
|
| - .get()));
|
| - ASSERT_TRUE(io_helper->Run());
|
| - }
|
| -
|
| + private:
|
| // Checks that the serialized reports in |received_reports| have the same
|
| // hostnames as |expected_hostnames|.
|
| void CheckReports(const std::set<std::string>& expected_hostnames,
|
| - const std::set<std::string>& received_reports) {
|
| + const std::set<std::string>& received_reports,
|
| + const std::string type) {
|
| std::set<std::string> received_hostnames;
|
| for (const std::string& serialized_report : received_reports) {
|
| certificate_reporting::ErrorReport report;
|
| ASSERT_TRUE(report.InitializeFromString(serialized_report));
|
| received_hostnames.insert(report.hostname());
|
| }
|
| - EXPECT_EQ(expected_hostnames, received_hostnames);
|
| - }
|
| -
|
| - // Checks that there are no remaining successful and failed reports observed
|
| - // by the interceptor. If |expect_delayed_report| is true, expects a single
|
| - // delayed report. Otherwise, expects no delayed reports.
|
| - void CheckExpectedReportCounts(bool expect_delayed_report) {
|
| - DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
|
| - // Wait for the IO thread to ensure that any report-sending tasks previously
|
| - // posted to the IO thread hav run (and thus been observed by the
|
| - // interceptor).
|
| - WaitForIOThread();
|
| - EXPECT_TRUE(test_helper_.interceptor()->successful_reports().empty());
|
| - EXPECT_TRUE(test_helper_.interceptor()->failed_reports().empty());
|
| -
|
| - if (expect_delayed_report)
|
| - EXPECT_EQ(1u, test_helper_.interceptor()->delayed_reports().size());
|
| - else
|
| - EXPECT_TRUE(test_helper_.interceptor()->delayed_reports().empty());
|
| -
|
| - if (service()->GetReporterForTesting()) {
|
| - // Reporter can be null if reporting is disabled.
|
| - size_t num_inflight_reports = expect_delayed_report ? 1u : 0u;
|
| - EXPECT_EQ(num_inflight_reports,
|
| - service()
|
| - ->GetReporterForTesting()
|
| - ->inflight_report_count_for_testing());
|
| - }
|
| + EXPECT_EQ(expected_hostnames, received_hostnames) << type
|
| + << " comparison failed";
|
| }
|
|
|
| net::EmbeddedTestServer https_server_;
|
| - // If true, the test will expect to see a delayed report during test teardown.
|
| - bool expect_delayed_report_on_teardown_ = false;
|
|
|
| - unsigned int num_expected_failed_report_ = 0;
|
| + int num_expected_failed_report_ = -1;
|
|
|
| CertificateReportingServiceTestHelper test_helper_;
|
|
|
| + CertificateReportingServiceObserver service_observer_;
|
| +
|
| base::HistogramTester histogram_tester_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(CertificateReportingServiceBrowserTest);
|
| @@ -307,7 +233,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Reporting is opted in, so the report should succeed.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Successful({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Successful({"report0"}));
|
| }
|
|
|
| // Tests that report send attempts are not cancelled when extended reporting is
|
| @@ -325,11 +252,13 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Send a failed report.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Send another failed report.
|
| SendReport("report1");
|
| - WaitForReports(ReportExpectation::Failed({"report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1"}));
|
|
|
| // Let all report uploads complete successfully now.
|
| test_helper()->SetFailureMode(certificate_reporting_test_utils::
|
| @@ -337,12 +266,14 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Send another report. This time the report should be successfully sent.
|
| SendReport("report2");
|
| - WaitForReports(ReportExpectation::Successful({"report2"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Successful({"report2"}));
|
|
|
| // Send all pending reports. The two previously failed reports should have
|
| // been queued, and now be sent successfully.
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Successful({"report0", "report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Successful({"report0", "report1"}));
|
|
|
| // Try sending pending reports again. Since there is no pending report,
|
| // nothing should be sent this time. If any report is sent, test teardown
|
| @@ -364,7 +295,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Send a failed report.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Disable reporting. This should clear all pending reports.
|
| ChangeOptInAndWait(
|
| @@ -388,7 +320,7 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Send attempt should be cancelled since reporting is opted out.
|
| SendReport("no-report");
|
| - CheckNoReports();
|
| + test_helper()->ExpectNoRequests(service());
|
|
|
| // Enable reporting.
|
| ChangeOptInAndWait(
|
| @@ -396,7 +328,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // A failed report should be observed.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Disable reporting. This should reset the reporting service and
|
| // clear all pending reports.
|
| @@ -405,7 +338,7 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Report should be cancelled since reporting is opted out.
|
| SendReport("report1");
|
| - CheckNoReports();
|
| + test_helper()->ExpectNoRequests(service());
|
|
|
| // Send pending reports. Nothing should be sent since there aren't any
|
| // pending reports. If any report is sent, test teardown will catch it.
|
| @@ -424,27 +357,30 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| test_helper()->SetFailureMode(
|
| certificate_reporting_test_utils::ReportSendingResult::REPORTS_FAIL);
|
|
|
| - // Send a failed report.
|
| + // Send a delayed report.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Disable SafeBrowsing. This should clear all pending reports.
|
| ToggleSafeBrowsingAndWaitForServiceReset(false);
|
|
|
| // Send pending reports. No reports should be observed.
|
| SendPendingReports();
|
| - CheckNoReports();
|
| + test_helper()->ExpectNoRequests(service());
|
|
|
| // Re-enable SafeBrowsing and trigger another report which will be queued.
|
| ToggleSafeBrowsingAndWaitForServiceReset(true);
|
| SendReport("report1");
|
| - WaitForReports(ReportExpectation::Failed({"report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1"}));
|
|
|
| // Queued report should now be successfully sent.
|
| test_helper()->SetFailureMode(certificate_reporting_test_utils::
|
| ReportSendingResult::REPORTS_SUCCESSFUL);
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Successful({"report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Successful({"report1"}));
|
| }
|
|
|
| // CertificateReportingService should ignore reports older than the report TTL.
|
| @@ -469,12 +405,14 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Send a failed report.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Advance the clock a bit and trigger another failed report.
|
| clock->Advance(base::TimeDelta::FromHours(5));
|
| SendReport("report1");
|
| - WaitForReports(ReportExpectation::Failed({"report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1"}));
|
|
|
| // Advance the clock to 20 hours, putting it 25 hours ahead of the reference
|
| // time. This makes report0 older than 24 hours. report1 is now 20 hours.
|
| @@ -483,11 +421,13 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| // Send pending reports. report0 should be discarded since it's too old.
|
| // report1 should be queued again.
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Failed({"report1"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1"}));
|
|
|
| // Trigger another failed report.
|
| SendReport("report2");
|
| - WaitForReports(ReportExpectation::Failed({"report2"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report2"}));
|
|
|
| // Advance the clock 5 hours. report1 will now be 25 hours old.
|
| clock->Advance(base::TimeDelta::FromHours(5));
|
| @@ -495,7 +435,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| // Send pending reports. report1 should be discarded since it's too old.
|
| // report2 should be queued again.
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Failed({"report2"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report2"}));
|
|
|
| // Advance the clock 20 hours again so that report2 is 25 hours old and is
|
| // older than max age (24 hours).
|
| @@ -531,7 +472,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| // Trigger a failed report.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Failed({"report0"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report0"}));
|
|
|
| // Trigger three more reports within five hours of each other. After this:
|
| // report0 is 0 hours after reference time (15 hours old).
|
| @@ -547,13 +489,15 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| clock->Advance(base::TimeDelta::FromHours(5));
|
| SendReport("report3");
|
|
|
| - WaitForReports(ReportExpectation::Failed({"report1", "report2", "report3"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1", "report2", "report3"}));
|
|
|
| // Send pending reports. Four reports were generated above, but the service
|
| // only queues three reports, so report0 should be dropped since it's the
|
| // oldest.
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Failed({"report1", "report2", "report3"}));
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Failed({"report1", "report2", "report3"}));
|
|
|
| // Let all reports succeed.
|
| test_helper()->SetFailureMode(certificate_reporting_test_utils::
|
| @@ -569,26 +513,8 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| // Send pending reports. Only reports 2 and 3 should be sent, report 1
|
| // should be ignored because it's too old.
|
| SendPendingReports();
|
| - WaitForReports(ReportExpectation::Successful({"report2", "report3"}));
|
| -}
|
| -
|
| -// Resume a delayed report after CertificateReportingService shuts down. Should
|
| -// not crash.
|
| -IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| - Delayed_NotResumed_ShouldNotCrash) {
|
| - SetExpectedHistogramCountOnTeardown(0);
|
| -
|
| - certificate_reporting_test_utils::SetCertReportingOptIn(
|
| - browser(), certificate_reporting_test_utils::EXTENDED_REPORTING_OPT_IN);
|
| - // Let reports hang.
|
| - test_helper()->SetFailureMode(
|
| - certificate_reporting_test_utils::ReportSendingResult::REPORTS_DELAY);
|
| -
|
| - // Navigate to and away from an interstitial to trigger a report. The report
|
| - // is triggered but hangs, so no error or success callbacks should be called.
|
| - SendReport("no-report");
|
| -
|
| - SetExpectDelayedReportOnTeardown();
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Successful({"report2", "report3"}));
|
| }
|
|
|
| IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
| @@ -597,18 +523,21 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| certificate_reporting_test_utils::SetCertReportingOptIn(
|
| browser(), certificate_reporting_test_utils::EXTENDED_REPORTING_OPT_IN);
|
| - // Let all reports fail.
|
| + // Let all reports hang.
|
| test_helper()->SetFailureMode(
|
| certificate_reporting_test_utils::ReportSendingResult::REPORTS_DELAY);
|
|
|
| // Trigger a report that hangs.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Delayed({"report0"}));
|
| + test_helper()->WaitForRequestsCreated(
|
| + ReportExpectation::Delayed({"report0"}));
|
|
|
| // Resume the report upload. The report upload should successfully complete.
|
| // The interceptor only observes request creations and not response
|
| // completions, so there is nothing to observe.
|
| - ResumeDelayedRequestAndWait();
|
| + test_helper()->ResumeDelayedRequest();
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Delayed({"report0"}));
|
| }
|
|
|
| // Same as above, but the service is shut down before resuming the delayed
|
| @@ -619,21 +548,20 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest,
|
|
|
| certificate_reporting_test_utils::SetCertReportingOptIn(
|
| browser(), certificate_reporting_test_utils::EXTENDED_REPORTING_OPT_IN);
|
| - // Let all reports fail.
|
| + // Let all reports hang.
|
| test_helper()->SetFailureMode(
|
| certificate_reporting_test_utils::ReportSendingResult::REPORTS_DELAY);
|
|
|
| // Trigger a report that hangs.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Delayed({"report0"}));
|
| -
|
| - // Shutdown the service. Resuming the delayed request shouldn't crash.
|
| - ShutdownServiceAndWait();
|
| -
|
| - // Resume the report upload. The report upload should successfully complete.
|
| - // The interceptor only observes request creations and not response
|
| - // completions, so there is nothing to observe.
|
| - ResumeDelayedRequestAndWait();
|
| + test_helper()->WaitForRequestsCreated(
|
| + ReportExpectation::Delayed({"report0"}));
|
| +
|
| + // Shutdown the service and resume the report upload. Shouldn't crash.
|
| + service()->Shutdown();
|
| + test_helper()->ResumeDelayedRequest();
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Delayed({"report0"}));
|
| }
|
|
|
| // Trigger a delayed report, then disable Safebrowsing. Certificate reporting
|
| @@ -643,34 +571,37 @@ IN_PROC_BROWSER_TEST_F(CertificateReportingServiceBrowserTest, Delayed_Reset) {
|
|
|
| certificate_reporting_test_utils::SetCertReportingOptIn(
|
| browser(), certificate_reporting_test_utils::EXTENDED_REPORTING_OPT_IN);
|
| - // Let all reports fail.
|
| + // Let all reports hang.
|
| test_helper()->SetFailureMode(
|
| certificate_reporting_test_utils::ReportSendingResult::REPORTS_DELAY);
|
|
|
| // Trigger a report that hangs.
|
| SendReport("report0");
|
| - WaitForReports(ReportExpectation::Delayed({"report0"}));
|
| + test_helper()->WaitForRequestsCreated(
|
| + ReportExpectation::Delayed({"report0"}));
|
|
|
| // Disable SafeBrowsing. This should clear all pending reports.
|
| ToggleSafeBrowsingAndWaitForServiceReset(false);
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Delayed({"report0"}));
|
|
|
| // Resume delayed report. No response should be observed since all pending
|
| // reports should be cleared.
|
| - ResumeDelayedRequestAndWait();
|
| - CheckNoReports();
|
| + test_helper()->ResumeDelayedRequest();
|
| + test_helper()->ExpectNoRequests(service());
|
|
|
| // Re-enable SafeBrowsing.
|
| ToggleSafeBrowsingAndWaitForServiceReset(true);
|
|
|
| // Trigger a report that hangs.
|
| SendReport("report1");
|
| - WaitForReports(ReportExpectation::Delayed({"report1"}));
|
| + test_helper()->WaitForRequestsCreated(
|
| + ReportExpectation::Delayed({"report1"}));
|
|
|
| - // Resume delayed report. By the time the runloop is finished, the response
|
| - // will be complete and CertificateReportingService will process the
|
| - // error/success callback for the report. There will be no inflight reports
|
| - // remaining.
|
| - ResumeDelayedRequestAndWait();
|
| + // Resume the delayed report and wait for it to complete.
|
| + test_helper()->ResumeDelayedRequest();
|
| + test_helper()->WaitForRequestsDestroyed(
|
| + ReportExpectation::Delayed({"report1"}));
|
| }
|
|
|
| } // namespace safe_browsing
|
|
|