File: data_sharing_sdk_delegate_desktop.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,811; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (137 lines) | stat: -rw-r--r-- 5,436 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
// Copyright 2024 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_BROWSER_DATA_SHARING_DESKTOP_DATA_SHARING_SDK_DELEGATE_DESKTOP_H_
#define CHROME_BROWSER_DATA_SHARING_DESKTOP_DATA_SHARING_SDK_DELEGATE_DESKTOP_H_

#include "base/callback_list.h"
#include "base/functional/callback.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/webui/data_sharing/data_sharing_ui.h"
#include "components/data_sharing/public/data_sharing_sdk_delegate.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/web_contents.h"

namespace data_sharing {

// Used by DataSharingService to provide access to SDK.
class DataSharingSDKDelegateDesktop : public DataSharingSDKDelegate,
                                      DataSharingUI::Delegate {
 public:
  using LoadFinishedCallback = base::OnceCallback<void(content::WebContents*)>;
  using ReadGroupsCallback = base::OnceCallback<void(
      const base::expected<data_sharing_pb::ReadGroupsResult, absl::Status>&)>;
  using ReadGroupWithTokenCallback = base::OnceCallback<void(
      const base::expected<data_sharing_pb::ReadGroupsResult, absl::Status>&)>;

  explicit DataSharingSDKDelegateDesktop(content::BrowserContext* context);

  DataSharingSDKDelegateDesktop(const DataSharingSDKDelegateDesktop&) = delete;
  DataSharingSDKDelegateDesktop& operator=(
      const DataSharingSDKDelegateDesktop&) = delete;
  DataSharingSDKDelegateDesktop(DataSharingSDKDelegateDesktop&&) = delete;
  DataSharingSDKDelegateDesktop& operator=(DataSharingSDKDelegateDesktop&&) =
      delete;

  ~DataSharingSDKDelegateDesktop() override;

  // DataSharingSDKDelegate:
  void Initialize(
      DataSharingNetworkLoader* data_sharing_network_loader) override;

  void CreateGroup(const data_sharing_pb::CreateGroupParams& params,
                   base::OnceCallback<void(
                       const base::expected<data_sharing_pb::CreateGroupResult,
                                            absl::Status>&)> callback) override;

  void ReadGroups(const data_sharing_pb::ReadGroupsParams& params,
                  ReadGroupsCallback callback) override;

  void ReadGroupWithToken(
      const data_sharing_pb::ReadGroupWithTokenParams& params,
      ReadGroupWithTokenCallback callback) override;

  void AddMember(
      const data_sharing_pb::AddMemberParams& params,
      base::OnceCallback<void(const absl::Status&)> callback) override;

  void RemoveMember(
      const data_sharing_pb::RemoveMemberParams& params,
      base::OnceCallback<void(const absl::Status&)> callback) override;

  void LeaveGroup(
      const data_sharing_pb::LeaveGroupParams& params,
      base::OnceCallback<void(const absl::Status&)> callback) override;

  void DeleteGroup(
      const data_sharing_pb::DeleteGroupParams& params,
      base::OnceCallback<void(const absl::Status&)> callback) override;

  void LookupGaiaIdByEmail(
      const data_sharing_pb::LookupGaiaIdByEmailParams& params,
      base::OnceCallback<
          void(const base::expected<data_sharing_pb::LookupGaiaIdByEmailResult,
                                    absl::Status>&)> callback) override;

  void Shutdown() override;

  // DataSharingUI::Delegate:
  void ApiInitComplete() override;
  void ShowErrorDialog(int status_code) override;
  void OnShareLinkRequested(
      const std::string& group_id,
      const std::string& access_token,
      base::OnceCallback<void(const std::optional<GURL>&)> callback) override;
  void OnGroupAction(
      data_sharing::mojom::GroupAction action,
      data_sharing::mojom::GroupActionProgress progress) override;

  void AddAccessToken(
      const data_sharing_pb::AddAccessTokenParams& params,
      base::OnceCallback<
          void(const base::expected<data_sharing_pb::AddAccessTokenResult,
                                    absl::Status>&)> callback) override;

 private:
  // Load the WebContents if it's not loaded and invoke the callback when
  // finish, otherwise invoke the callback immediately.
  void MaybeLoadWebContents(LoadFinishedCallback callback);

  void OnReadGroups(ReadGroupsCallback callback,
                    data_sharing::mojom::ReadGroupsResultPtr mojom_result);

  void OnReadGroupWithToken(
      ReadGroupWithTokenCallback callback,
      data_sharing::mojom::ReadGroupWithTokenResultPtr mojom_result);

  void OnLeaveGroup(base::OnceCallback<void(const absl::Status&)> callback,
                    int status_code);

  void OnDeleteGroup(base::OnceCallback<void(const absl::Status&)> callback,
                     int status_code);

  // Schedule reseting the WebContents after a specific time.
  void ScheduleResetWebContentsTimer();

  // Reset the WebContents.
  void ResetWebContents();

  // A list of callback to be invoked.
  base::OnceCallbackList<void(content::WebContents*)> callbacks_;

  // A list of callback subscriptions.
  std::vector<base::CallbackListSubscription> callback_subscriptions_;

  // WebContents to load the data sharing sdk.
  std::unique_ptr<content::WebContents> web_contents_;

  const raw_ptr<content::BrowserContext> context_;

  // Timer to reset the WebContents after some time without activity.
  std::unique_ptr<base::OneShotTimer> reset_web_contents_timer_;
};

}  // namespace data_sharing

#endif  // CHROME_BROWSER_DATA_SHARING_DESKTOP_DATA_SHARING_SDK_DELEGATE_DESKTOP_H_