blob: b44a4e627737c6f7b97a8d5eec62c54f5be9e5e9 [file] [log] [blame]
Himanshu Jajua69dbe52019-11-04 19:58:051// Copyright 2019 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
5#ifndef CHROME_BROWSER_SHARING_SHARING_MESSAGE_SENDER_H_
6#define CHROME_BROWSER_SHARING_SHARING_MESSAGE_SENDER_H_
7
8#include <map>
9#include <string>
10
11#include "base/callback.h"
12#include "base/macros.h"
13#include "base/memory/weak_ptr.h"
14#include "base/optional.h"
15#include "base/time/time.h"
16
17namespace chrome_browser_sharing {
18enum MessageType : int;
19class ResponseMessage;
20class SharingMessage;
21} // namespace chrome_browser_sharing
22
23namespace syncer {
24class LocalDeviceInfoProvider;
25} // namespace syncer
26
27class SharingFCMSender;
28class SharingSyncPreference;
29enum class SharingSendMessageResult;
30
31class SharingMessageSender {
32 public:
33 using ResponseCallback = base::OnceCallback<void(
34 SharingSendMessageResult,
35 std::unique_ptr<chrome_browser_sharing::ResponseMessage>)>;
36
37 SharingMessageSender(
38 SharingFCMSender* sharing_fcm_sender,
39 SharingSyncPreference* sync_prefs,
40 syncer::LocalDeviceInfoProvider* local_device_info_provider);
41 virtual ~SharingMessageSender();
42
43 virtual void SendMessageToDevice(
44 const std::string& device_guid,
45 base::TimeDelta response_timeout,
46 chrome_browser_sharing::SharingMessage message,
47 ResponseCallback callback);
48
49 virtual void OnAckReceived(
50 chrome_browser_sharing::MessageType message_type,
51 const std::string& message_id,
52 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response);
53
54 private:
55 void OnMessageSent(base::TimeTicks start_time,
56 const std::string& message_guid,
57 chrome_browser_sharing::MessageType message_type,
58 SharingSendMessageResult result,
59 base::Optional<std::string> message_id);
60
61 void InvokeSendMessageCallback(
62 const std::string& message_guid,
63 chrome_browser_sharing::MessageType message_type,
64 SharingSendMessageResult result,
65 std::unique_ptr<chrome_browser_sharing::ResponseMessage> response);
66
67 SharingFCMSender* fcm_sender_;
68 SharingSyncPreference* sync_prefs_;
69 syncer::LocalDeviceInfoProvider* local_device_info_provider_;
70
71 // Map of random GUID to SendMessageCallback.
72 std::map<std::string, ResponseCallback> send_message_callbacks_;
73 // Map of FCM message_id to time at start of send message request to FCM.
74 std::map<std::string, base::TimeTicks> send_message_times_;
75 // Map of FCM message_id to random GUID.
76 std::map<std::string, std::string> message_guids_;
77
78 base::WeakPtrFactory<SharingMessageSender> weak_ptr_factory_{this};
79
80 DISALLOW_COPY_AND_ASSIGN(SharingMessageSender);
81};
82
83#endif // CHROME_BROWSER_SHARING_SHARING_MESSAGE_SENDER_H_