File: conversion_utils.cc

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 (120 lines) | stat: -rw-r--r-- 4,930 bytes parent folder | download | duplicates (5)
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
// 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.

#include "components/data_sharing/public/android/conversion_utils.h"

#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/android/scoped_java_ref.h"
#include "components/data_sharing/public/group_data.h"
#include "components/signin/public/identity_manager/account_info.h"
#include "google_apis/gaia/gaia_id.h"
#include "url/android/gurl_android.h"

// Must come after all headers that specialize FromJniType() / ToJniType().
#include "components/data_sharing/public/jni_headers/DataSharingNetworkResult_jni.h"
#include "components/data_sharing/public/jni_headers/GroupData_jni.h"
#include "components/data_sharing/public/jni_headers/GroupMember_jni.h"
#include "components/data_sharing/public/jni_headers/GroupToken_jni.h"
#include "components/data_sharing/public/jni_headers/SharedTabGroupPreview_jni.h"
#include "components/data_sharing/public/jni_headers/TabPreview_jni.h"

using base::android::AttachCurrentThread;
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
using base::android::ToJavaByteArray;
using base::android::ToTypedJavaArrayOfObjects;

namespace data_sharing::conversion {

ScopedJavaLocalRef<jobject> CreateJavaGroupMember(JNIEnv* env,
                                                  const GroupMember& member) {
  auto gaia_id = member.gaia_id.empty()
                     ? ScopedJavaLocalRef<jobject>()
                     : ConvertToJavaGaiaId(env, member.gaia_id);
  return Java_GroupMember_createGroupMember(
      env, gaia_id, ConvertUTF8ToJavaString(env, member.display_name),
      ConvertUTF8ToJavaString(env, member.email), static_cast<int>(member.role),
      url::GURLAndroid::FromNativeGURL(env, member.avatar_url),
      ConvertUTF8ToJavaString(env, member.given_name));
}

ScopedJavaLocalRef<jobject> CreateJavaGroupToken(JNIEnv* env,
                                                 const GroupToken& token) {
  return Java_GroupToken_createGroupToken(
      env, ConvertUTF8ToJavaString(env, token.group_id.value()),
      ConvertUTF8ToJavaString(env, token.access_token));
}

ScopedJavaLocalRef<jobject> CreateJavaGroupData(JNIEnv* env,
                                                const GroupData& group_data) {
  std::vector<ScopedJavaLocalRef<jobject>> j_members;
  j_members.reserve(group_data.members.size());
  for (const GroupMember& member : group_data.members) {
    j_members.push_back(CreateJavaGroupMember(env, member));
  }
  return Java_GroupData_createGroupData(
      env,
      ConvertUTF8ToJavaString(env, group_data.group_token.group_id.value()),
      ConvertUTF8ToJavaString(env, group_data.display_name),
      ToTypedJavaArrayOfObjects(
          env, base::span(j_members),
          org_chromium_components_data_1sharing_GroupMember_clazz(env)),
      ConvertUTF8ToJavaString(env, group_data.group_token.access_token));
}

ScopedJavaLocalRef<jobjectArray> CreateGroupedDataArray(
    JNIEnv* env,
    const std::set<GroupData>& groups) {
  std::vector<ScopedJavaLocalRef<jobject>> j_groups_data;
  for (const GroupData& group : groups) {
    j_groups_data.push_back(CreateJavaGroupData(env, group));
  }

  ScopedJavaLocalRef<jobjectArray> j_group_array;
  if (!j_groups_data.empty()) {
    j_group_array = ToTypedJavaArrayOfObjects(
        env, base::span(j_groups_data),
        org_chromium_components_data_1sharing_GroupData_clazz(env));
  }

  return j_group_array;
}

ScopedJavaLocalRef<jobject> CreateJavaSharedTabGroupPreview(
    JNIEnv* env,
    const SharedTabGroupPreview& preview) {
  std::vector<ScopedJavaLocalRef<jobject>> j_tabs;
  for (const auto& tab : preview.tabs) {
    j_tabs.push_back(Java_TabPreview_createTabPreview(
        env, url::GURLAndroid::FromNativeGURL(env, tab.url),
        ConvertUTF8ToJavaString(env, tab.GetDisplayUrl())));
  }

  ScopedJavaLocalRef<jobjectArray> j_tabs_array;
  if (!j_tabs.empty()) {
    j_tabs_array = ToTypedJavaArrayOfObjects(
        env, base::span(j_tabs),
        org_chromium_components_data_1sharing_TabPreview_clazz(env));
  }
  return Java_SharedTabGroupPreview_createSharedTabGroupPreview(
      env, ConvertUTF8ToJavaString(env, preview.title), j_tabs_array);
}

ScopedJavaLocalRef<jobject> CreateDataSharingNetworkResult(
    JNIEnv* env,
    DataSharingNetworkLoader::LoadResult* response) {
  if (response == nullptr) {
    return ScopedJavaLocalRef<jobject>();
  }

  return Java_DataSharingNetworkResult_createDataSharingNetworkResult(
      env,
      ToJavaByteArray(env, std::vector<uint8_t>(response->result_bytes.begin(),
                                                response->result_bytes.end())),
      static_cast<int>(response->status), response->network_error_code);
}

}  // namespace data_sharing::conversion