| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_SERVICES_SHARING_SHARING_IMPL_H_ |
| #define CHROME_SERVICES_SHARING_SHARING_IMPL_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/task/sequenced_task_runner.h" |
| #include "chrome/services/sharing/nearby/nearby_shared_remotes.h" |
| #include "chromeos/ash/services/nearby/public/mojom/nearby_connections.mojom-forward.h" |
| #include "chromeos/ash/services/nearby/public/mojom/nearby_presence.mojom-forward.h" |
| #include "chromeos/ash/services/nearby/public/mojom/quick_start_decoder.mojom.h" |
| #include "chromeos/ash/services/nearby/public/mojom/sharing.mojom.h" |
| #include "chromeos/ash/services/nearby/public/mojom/webrtc.mojom-forward.h" |
| #include "mojo/public/cpp/bindings/pending_receiver.h" |
| #include "mojo/public/cpp/bindings/receiver.h" |
| #include "services/network/public/mojom/mdns_responder.mojom-forward.h" |
| #include "services/network/public/mojom/p2p.mojom-forward.h" |
| |
| namespace nearby::connections { |
| class NearbyConnections; |
| } // namespace nearby::connections |
| |
| namespace ash::nearby::presence { |
| class NearbyPresence; |
| } // namespace ash::nearby::presence |
| |
| namespace sharing { |
| |
| class NearbySharingDecoder; |
| |
| class SharingImpl : public mojom::Sharing { |
| public: |
| using NearbyConnectionsMojom = nearby::connections::mojom::NearbyConnections; |
| using NearbyConnections = nearby::connections::NearbyConnections; |
| using NearbyPresenceMojom = ash::nearby::presence::mojom::NearbyPresence; |
| using NearbyPresence = ash::nearby::presence::NearbyPresence; |
| using NearbyDependenciesPtr = ::sharing::mojom::NearbyDependenciesPtr; |
| |
| SharingImpl(mojo::PendingReceiver<mojom::Sharing> receiver, |
| scoped_refptr<base::SequencedTaskRunner> io_task_runner); |
| SharingImpl(const SharingImpl&) = delete; |
| SharingImpl& operator=(const SharingImpl&) = delete; |
| ~SharingImpl() override; |
| |
| // mojom::Sharing: |
| void Connect( |
| NearbyDependenciesPtr deps, |
| mojo::PendingReceiver<NearbyConnectionsMojom> connections_receiver, |
| mojo::PendingReceiver<NearbyPresenceMojom> presence_receiver, |
| mojo::PendingReceiver<::sharing::mojom::NearbySharingDecoder> |
| decoder_receiver, |
| mojo::PendingReceiver<ash::quick_start::mojom::QuickStartDecoder> |
| quick_start_decoder_receiver) override; |
| void ShutDown(ShutDownCallback callback) override; |
| |
| private: |
| friend class SharingImplTest; |
| |
| // These values are used for metrics. Entries should not be renumbered and |
| // numeric values should never be reused. If entries are added, kMaxValue |
| // should be updated. Keep in sync with the |
| // NearbyConnectionsUtilityProcessMojoDependencyName UMA enum defined in |
| // //tools/metrics/histograms/metadata/nearby/enums.xml. |
| // |
| // LINT.IfChange(NearbyConnectionsUtilityProcessMojoDependencyName) |
| enum class MojoDependencyName { |
| kNearbyConnections = 0, |
| kBluetoothAdapter = 1, |
| kSocketManager = 2, |
| kMdnsResponder = 3, |
| kIceConfigFetcher = 4, |
| kWebRtcSignalingMessenger = 5, |
| kCrosNetworkConfig = 6, |
| kFirewallHoleFactory = 7, |
| kTcpSocketFactory = 8, |
| kNearbyPresence = 9, |
| kNearbyShareDecoder = 10, |
| kQuickStartDecoder = 11, |
| kNearbyPresenceCredentialStorage = 12, |
| kWifiDirectManager = 13, |
| kMdnsManager = 14, |
| kMaxValue = kMdnsManager |
| }; |
| // LINT.ThenChange(//tools/metrics/histograms/metadata/nearby/enums.xml:NearbyConnectionsUtilityProcessMojoDependencyName) |
| |
| void DoShutDown(bool is_expected); |
| void OnDisconnect(MojoDependencyName mojo_dependency_name); |
| void InitializeNearbySharedRemotes(NearbyDependenciesPtr deps); |
| std::string GetMojoDependencyName(MojoDependencyName dependency_name); |
| |
| mojo::Receiver<mojom::Sharing> receiver_; |
| const scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
| |
| std::unique_ptr<nearby::NearbySharedRemotes> nearby_shared_remotes_; |
| |
| std::unique_ptr<NearbyConnections> nearby_connections_; |
| |
| std::unique_ptr<NearbyPresence> nearby_presence_; |
| |
| std::unique_ptr<NearbySharingDecoder> nearby_decoder_; |
| |
| std::unique_ptr<ash::quick_start::mojom::QuickStartDecoder> |
| quick_start_decoder_; |
| |
| base::WeakPtrFactory<SharingImpl> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace sharing |
| |
| #endif // CHROME_SERVICES_SHARING_SHARING_IMPL_H_ |