Index: components/certificate_transparency/single_tree_tracker.cc |
diff --git a/components/certificate_transparency/single_tree_tracker.cc b/components/certificate_transparency/single_tree_tracker.cc |
index 547ac5885d1a7c992cf147f42d32dc73511e958e..f3d151e65b4d14373762e125b458640bd4feb90f 100644 |
--- a/components/certificate_transparency/single_tree_tracker.cc |
+++ b/components/certificate_transparency/single_tree_tracker.cc |
@@ -218,6 +218,27 @@ struct SingleTreeTracker::EntryAuditState { |
explicit EntryAuditState(AuditState state) : state(state) {} |
}; |
+class SingleTreeTracker::NetworkObserver |
+ : public net::NetworkChangeNotifier::NetworkChangeObserver { |
+ public: |
+ explicit NetworkObserver(SingleTreeTracker* parent) : parent_(parent) { |
+ net::NetworkChangeNotifier::AddNetworkChangeObserver(this); |
+ } |
+ |
+ ~NetworkObserver() override { |
+ net::NetworkChangeNotifier::RemoveNetworkChangeObserver(this); |
+ } |
+ |
+ // net::NetworkChangeNotifier::NetworkChangeObserver implementation. |
+ void OnNetworkChanged( |
+ net::NetworkChangeNotifier::ConnectionType type) override { |
+ parent_->ResetPendingQueue(); |
+ } |
+ |
+ private: |
+ SingleTreeTracker* parent_; |
+}; |
+ |
// Orders entries by the SCT timestamp. In case of tie, which is very unlikely |
// as it requires two SCTs issued from a log at exactly the same time, order |
// by leaf hash. |
@@ -240,12 +261,13 @@ SingleTreeTracker::SingleTreeTracker( |
net_log_(net::NetLogWithSource::Make( |
net_log, |
net::NetLogSourceType::CT_TREE_STATE_TRACKER)), |
+ network_observer_(new NetworkObserver(this)), |
weak_factory_(this) { |
memory_pressure_listener_.reset(new base::MemoryPressureListener(base::Bind( |
&SingleTreeTracker::OnMemoryPressure, base::Unretained(this)))); |
} |
-SingleTreeTracker::~SingleTreeTracker() {} |
+SingleTreeTracker::~SingleTreeTracker() = default; |
void SingleTreeTracker::OnSCTVerified(net::X509Certificate* cert, |
const SignedCertificateTimestamp* sct) { |
@@ -348,6 +370,10 @@ void SingleTreeTracker::NewSTHObserved(const SignedTreeHead& sth) { |
ProcessPendingEntries(); |
} |
+void SingleTreeTracker::ResetPendingQueue() { |
+ pending_entries_.clear(); |
+} |
+ |
SingleTreeTracker::SCTInclusionStatus |
SingleTreeTracker::GetLogEntryInclusionStatus( |
net::X509Certificate* cert, |