Commit eb780fd4 authored by Rob Percival's avatar Rob Percival Committed by Commit Bot

Do not create TreeStateTracker if kCTLogAuditing feature is disabled

This avoids distributing STHs and SCTs to it and spending time verifying STH signatures
when they won't be used for anything.

Bug: 828665
Change-Id: I8cb6b67fcd12d9e4f875331d1eae9c44d9e74925
Reviewed-on: https://chromium-review.googlesource.com/1009913Reviewed-by: default avatarRyan Sleevi <rsleevi@chromium.org>
Commit-Queue: Rob Percival <robpercival@chromium.org>
Cr-Commit-Position: refs/heads/master@{#550675}
parent 5b72921d
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include "chrome/common/chrome_features.h" #include "chrome/common/chrome_features.h"
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "components/certificate_transparency/features.h"
#include "components/certificate_transparency/sth_distributor.h" #include "components/certificate_transparency/sth_distributor.h"
#include "components/certificate_transparency/sth_observer.h" #include "components/certificate_transparency/sth_observer.h"
#include "components/certificate_transparency/tree_state_tracker.h" #include "components/certificate_transparency/tree_state_tracker.h"
...@@ -551,15 +552,17 @@ void IOThread::Init() { ...@@ -551,15 +552,17 @@ void IOThread::Init() {
UpdateDnsClientEnabled(); UpdateDnsClientEnabled();
ct_tree_tracker_ = if (base::FeatureList::IsEnabled(certificate_transparency::kCTLogAuditing)) {
std::make_unique<certificate_transparency::TreeStateTracker>( ct_tree_tracker_ =
globals_->ct_logs, globals_->system_request_context->host_resolver(), std::make_unique<certificate_transparency::TreeStateTracker>(
net_log_); globals_->ct_logs,
// Register the ct_tree_tracker_ as observer for new STHs. globals_->system_request_context->host_resolver(), net_log_);
RegisterSTHObserver(ct_tree_tracker_.get()); // Register the ct_tree_tracker_ as observer for new STHs.
// Register the ct_tree_tracker_ as observer for verified SCTs. RegisterSTHObserver(ct_tree_tracker_.get());
globals_->system_request_context->cert_transparency_verifier()->SetObserver( // Register the ct_tree_tracker_ as observer for verified SCTs.
ct_tree_tracker_.get()); globals_->system_request_context->cert_transparency_verifier()->SetObserver(
ct_tree_tracker_.get());
}
} }
void IOThread::CleanUp() { void IOThread::CleanUp() {
...@@ -567,13 +570,16 @@ void IOThread::CleanUp() { ...@@ -567,13 +570,16 @@ void IOThread::CleanUp() {
system_url_request_context_getter_ = nullptr; system_url_request_context_getter_ = nullptr;
// Unlink the ct_tree_tracker_ from the global cert_transparency_verifier if (ct_tree_tracker_) {
// and unregister it from new STH notifications so it will take no actions // Unlink the ct_tree_tracker_ from the global cert_transparency_verifier
// on anything observed during CleanUp process. // and unregister it from new STH notifications so it will take no actions
globals()->system_request_context->cert_transparency_verifier()->SetObserver( // on anything observed during CleanUp process.
nullptr); globals()
UnregisterSTHObserver(ct_tree_tracker_.get()); ->system_request_context->cert_transparency_verifier()
ct_tree_tracker_.reset(); ->SetObserver(nullptr);
UnregisterSTHObserver(ct_tree_tracker_.get());
ct_tree_tracker_.reset();
}
globals_->system_request_context->proxy_resolution_service()->OnShutdown(); globals_->system_request_context->proxy_resolution_service()->OnShutdown();
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "chrome/common/chrome_switches.h" #include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/in_process_browser_test.h"
#include "components/certificate_transparency/features.h"
#include "components/certificate_transparency/tree_state_tracker.h" #include "components/certificate_transparency/tree_state_tracker.h"
#include "components/prefs/pref_service.h" #include "components/prefs/pref_service.h"
#include "components/variations/variations_associated_data.h" #include "components/variations/variations_associated_data.h"
...@@ -113,12 +114,20 @@ void CheckEffectiveConnectionType(IOThread* io_thread, ...@@ -113,12 +114,20 @@ void CheckEffectiveConnectionType(IOThread* io_thread,
} }
void CheckSCTsAreSentToTreeTracker(IOThread* io_thread) { void CheckSCTsAreSentToTreeTracker(IOThread* io_thread) {
EXPECT_NE(io_thread->ct_tree_tracker(), nullptr);
EXPECT_EQ(io_thread->ct_tree_tracker(), EXPECT_EQ(io_thread->ct_tree_tracker(),
io_thread->globals() io_thread->globals()
->system_request_context->cert_transparency_verifier() ->system_request_context->cert_transparency_verifier()
->GetObserver()); ->GetObserver());
} }
void CheckSCTsAreNotSentToTreeTracker(IOThread* io_thread) {
EXPECT_EQ(io_thread->globals()
->system_request_context->cert_transparency_verifier()
->GetObserver(),
nullptr);
}
class IOThreadBrowserTest : public InProcessBrowserTest { class IOThreadBrowserTest : public InProcessBrowserTest {
public: public:
IOThreadBrowserTest() {} IOThreadBrowserTest() {}
...@@ -203,12 +212,48 @@ IN_PROC_BROWSER_TEST_F(IOThreadBrowserTest, UpdateDelegateWhitelist) { ...@@ -203,12 +212,48 @@ IN_PROC_BROWSER_TEST_F(IOThreadBrowserTest, UpdateDelegateWhitelist) {
base::Unretained(g_browser_process->io_thread()), true, url)); base::Unretained(g_browser_process->io_thread()), true, url));
} }
IN_PROC_BROWSER_TEST_F(IOThreadBrowserTest, SCTsAreSentToTreeTracker) { class IOThreadCTBrowserTest : public IOThreadBrowserTest {
public:
IOThreadCTBrowserTest() {}
~IOThreadCTBrowserTest() override {}
void SetUp() override {
scoped_feature_list_.InitAndEnableFeature(
certificate_transparency::kCTLogAuditing);
IOThreadBrowserTest::SetUp();
}
private:
base::test::ScopedFeatureList scoped_feature_list_;
};
IN_PROC_BROWSER_TEST_F(IOThreadCTBrowserTest, SCTsAreSentToTreeTracker) {
RunOnIOThreadBlocking( RunOnIOThreadBlocking(
base::BindOnce(&CheckSCTsAreSentToTreeTracker, base::BindOnce(&CheckSCTsAreSentToTreeTracker,
base::Unretained(g_browser_process->io_thread()))); base::Unretained(g_browser_process->io_thread())));
} }
class IOThreadNoCTBrowserTest : public IOThreadBrowserTest {
public:
IOThreadNoCTBrowserTest() {}
~IOThreadNoCTBrowserTest() override {}
void SetUp() override {
scoped_feature_list_.InitAndDisableFeature(
certificate_transparency::kCTLogAuditing);
IOThreadBrowserTest::SetUp();
}
private:
base::test::ScopedFeatureList scoped_feature_list_;
};
IN_PROC_BROWSER_TEST_F(IOThreadNoCTBrowserTest, SCTsAreNotSentToTreeTracker) {
RunOnIOThreadBlocking(
base::BindOnce(&CheckSCTsAreNotSentToTreeTracker,
base::Unretained(g_browser_process->io_thread())));
}
class IOThreadEctCommandLineBrowserTest : public IOThreadBrowserTest { class IOThreadEctCommandLineBrowserTest : public IOThreadBrowserTest {
public: public:
IOThreadEctCommandLineBrowserTest() {} IOThreadEctCommandLineBrowserTest() {}
......
...@@ -54,9 +54,6 @@ TreeStateTracker::~TreeStateTracker() {} ...@@ -54,9 +54,6 @@ TreeStateTracker::~TreeStateTracker() {}
void TreeStateTracker::OnSCTVerified(base::StringPiece hostname, void TreeStateTracker::OnSCTVerified(base::StringPiece hostname,
X509Certificate* cert, X509Certificate* cert,
const SignedCertificateTimestamp* sct) { const SignedCertificateTimestamp* sct) {
if (!base::FeatureList::IsEnabled(kCTLogAuditing))
return;
auto it = tree_trackers_.find(sct->log_id); auto it = tree_trackers_.find(sct->log_id);
// Ignore if the SCT is from an unknown log. // Ignore if the SCT is from an unknown log.
if (it == tree_trackers_.end()) if (it == tree_trackers_.end())
......
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