xref: /aosp_15_r20/external/cronet/net/reporting/reporting_network_change_observer.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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)61 ReportingNetworkChangeObserver::Create(ReportingContext* context) {
62   return std::make_unique<ReportingNetworkChangeObserverImpl>(context);
63 }
64 
65 ReportingNetworkChangeObserver::~ReportingNetworkChangeObserver() = default;
66 
67 }  // namespace net
68