// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef NET_BASE_NETWORK_CHANGE_NOTIFIER_FUCHSIA_H_ #define NET_BASE_NETWORK_CHANGE_NOTIFIER_FUCHSIA_H_ #include #include #include "base/atomicops.h" #include "base/containers/flat_set.h" #include "base/gtest_prod_util.h" #include "base/threading/thread_checker.h" #include "net/base/net_export.h" #include "net/base/network_change_notifier.h" #include "net/base/network_interfaces.h" namespace net { class NET_EXPORT_PRIVATE NetworkChangeNotifierFuchsia : public NetworkChangeNotifier { public: // Blocks execution until an initial interface list is received from // |netstack_|. NetworkChangeNotifierFuchsia(); ~NetworkChangeNotifierFuchsia() override; private: friend class NetworkChangeNotifierFuchsiaTest; FRIEND_TEST_ALL_PREFIXES(NetworkChangeNotifierFuchsiaTest, FoundWiFi); FRIEND_TEST_ALL_PREFIXES(NetworkChangeNotifierFuchsiaTest, FoundWiFiNonDefault); // For testing purposes. explicit NetworkChangeNotifierFuchsia( fuchsia::netstack::NetstackPtr netstack); // Forwards the network interface list along with the result of // GetRouteTable() to OnRouteTableReceived(). void ProcessInterfaceList( base::OnceClosure on_initialized_cb, fidl::VectorPtr interfaces); // Computes network change notification state change from the list of // interfaces and routing table data, sending observer events if IP or // connection type changes are detected. // |on_initialized_cb| will be bound when the network state is populated for // the first time. In that case, change observer events will not be // published, and |on_initialized_cb| will be invoked once the function has // finished executing. void OnRouteTableReceived( base::OnceClosure on_initialized_cb, fidl::VectorPtr interfaces, fidl::VectorPtr table); // NetworkChangeNotifier implementation. ConnectionType GetCurrentConnectionType() const override; // The ConnectionType of the default network interface, stored as an atomic // 32-bit int for safe concurrent access. base::subtle::Atomic32 cached_connection_type_ = CONNECTION_NONE; fuchsia::netstack::NetstackPtr netstack_; // Set of addresses from the previous query/update for the default interface. base::flat_set cached_addresses_; THREAD_CHECKER(thread_checker_); DISALLOW_COPY_AND_ASSIGN(NetworkChangeNotifierFuchsia); }; } // namespace net #endif // NET_BASE_NETWORK_CHANGE_NOTIFIER_FUCHSIA_H_