eche_signaler.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #ifndef ASH_WEBUI_ECHE_APP_UI_ECHE_SIGNALER_H_
  5. #define ASH_WEBUI_ECHE_APP_UI_ECHE_SIGNALER_H_
  6. #include "ash/services/secure_channel/public/cpp/client/connection_manager.h"
  7. #include "ash/webui/eche_app_ui/eche_connector.h"
  8. #include "ash/webui/eche_app_ui/mojom/eche_app.mojom.h"
  9. #include "base/gtest_prod_util.h"
  10. #include "mojo/public/cpp/bindings/pending_receiver.h"
  11. #include "mojo/public/cpp/bindings/pending_remote.h"
  12. #include "mojo/public/cpp/bindings/receiver_set.h"
  13. #include "mojo/public/cpp/bindings/remote.h"
  14. #include "mojo/public/cpp/bindings/remote_set.h"
  15. namespace ash {
  16. namespace eche_app {
  17. class EcheSignaler : public mojom::SignalingMessageExchanger,
  18. public secure_channel::ConnectionManager::Observer {
  19. public:
  20. EcheSignaler(EcheConnector* eche_connector,
  21. secure_channel::ConnectionManager* connection_manager);
  22. ~EcheSignaler() override;
  23. EcheSignaler(const EcheSignaler&) = delete;
  24. EcheSignaler& operator=(const EcheSignaler&) = delete;
  25. // mojom::SignalingMessageExchanger:
  26. void SendSignalingMessage(const std::vector<uint8_t>& signal) override;
  27. void SetSignalingMessageObserver(
  28. mojo::PendingRemote<mojom::SignalingMessageObserver> observer) override;
  29. void TearDownSignaling() override;
  30. void Bind(mojo::PendingReceiver<mojom::SignalingMessageExchanger> receiver);
  31. // Visible for testing.
  32. // secure_channel::ConnectionManager::Observer:
  33. void OnMessageReceived(const std::string& payload) override;
  34. private:
  35. FRIEND_TEST_ALL_PREFIXES(EcheSignalerTest,
  36. TestConnectionFailWhenNoReceiveAnyMessage);
  37. FRIEND_TEST_ALL_PREFIXES(EcheSignalerTest,
  38. TestConnectionFailWhenSignalingHasLateRequest);
  39. FRIEND_TEST_ALL_PREFIXES(EcheSignalerTest,
  40. TestConnectionFailWhenSignalingHasLateResponse);
  41. FRIEND_TEST_ALL_PREFIXES(EcheSignalerTest,
  42. TestConnectionFailWhenSecurityChannelDisconnected);
  43. void RecordSignalingTimeout();
  44. // The signaling timer to log fail reason in case response timeout.
  45. std::unique_ptr<base::DelayTimer> signaling_timeout_timer_;
  46. // This is for identify the timeout reason.
  47. eche_app::mojom::ConnectionFailReason probably_connection_failed_reason_ =
  48. eche_app::mojom::ConnectionFailReason::kUnknown;
  49. EcheConnector* eche_connector_;
  50. secure_channel::ConnectionManager* connection_manager_;
  51. mojo::Remote<mojom::SignalingMessageObserver> observer_;
  52. mojo::Receiver<mojom::SignalingMessageExchanger> exchanger_{this};
  53. };
  54. } // namespace eche_app
  55. } // namespace ash
  56. #endif // ASH_WEBUI_ECHE_APP_UI_ECHE_SIGNALER_H_