1 // Copyright 2017 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/reporting/reporting_network_change_observer.h" 6 7 #include "base/memory/raw_ptr.h" 8 #include "net/base/network_change_notifier.h" 9 #include "net/reporting/reporting_cache.h" 10 #include "net/reporting/reporting_context.h" 11 #include "net/reporting/reporting_policy.h" 12 #include "net/reporting/reporting_report.h" 13 14 namespace net { 15 16 namespace { 17 18 class ReportingNetworkChangeObserverImpl 19 : public ReportingNetworkChangeObserver, 20 public NetworkChangeNotifier::NetworkChangeObserver { 21 public: ReportingNetworkChangeObserverImpl(ReportingContext * context)22 explicit ReportingNetworkChangeObserverImpl(ReportingContext* context) 23 : context_(context) { 24 NetworkChangeNotifier::AddNetworkChangeObserver(this); 25 } 26 27 ReportingNetworkChangeObserverImpl( 28 const ReportingNetworkChangeObserverImpl&) = delete; 29 ReportingNetworkChangeObserverImpl& operator=( 30 const ReportingNetworkChangeObserverImpl&) = delete; 31 32 // ReportingNetworkChangeObserver implementation: ~ReportingNetworkChangeObserverImpl()33 ~ReportingNetworkChangeObserverImpl() override { 34 NetworkChangeNotifier::RemoveNetworkChangeObserver(this); 35 } 36 37 // NetworkChangeNotifier::NetworkChangeObserver implementation: OnNetworkChanged(NetworkChangeNotifier::ConnectionType type)38 void OnNetworkChanged(NetworkChangeNotifier::ConnectionType type) override { 39 // Every network change will be preceded by a call with CONNECTION_NONE, and 40 // NetworkChangeNotifier suggests that destructive actions be performed in 41 // the call with CONNECTION_NONE, so clear reports and/or clients only in 42 // that case. 43 if (type != NetworkChangeNotifier::ConnectionType::CONNECTION_NONE) 44 return; 45 46 if (!context_->policy().persist_reports_across_network_changes) 47 context_->cache()->RemoveAllReports(); 48 49 if (!context_->policy().persist_clients_across_network_changes) 50 context_->cache()->RemoveAllClients(); 51 } 52 53 private: 54 raw_ptr<ReportingContext> context_; 55 }; 56 57 } // namespace 58 59 // static 60 std::unique_ptr<ReportingNetworkChangeObserver> Create(ReportingContext * context)61ReportingNetworkChangeObserver::Create(ReportingContext* context) { 62 return std::make_unique<ReportingNetworkChangeObserverImpl>(context); 63 } 64 65 ReportingNetworkChangeObserver::~ReportingNetworkChangeObserver() = default; 66 67 } // namespace net 68