blob: 8b69b8b3b196ed1b47848fa029d8250b106bd9d4 [file] [log] [blame]
Avi Drissmand6cdf9b2022-09-15 19:52:531// Copyright 2019 The Chromium Authors
Erik Jensen1662a302019-05-08 19:34:462// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef REMOTING_CLIENT_JNI_JNI_DIRECTORY_SERVICE_H_
6#define REMOTING_CLIENT_JNI_JNI_DIRECTORY_SERVICE_H_
7
8#include <memory>
9
10#include "base/android/scoped_java_ref.h"
11#include "base/memory/scoped_refptr.h"
Yuwei Huangfa4b0e72020-07-28 00:08:3812#include "base/memory/weak_ptr.h"
Erik Jensen1662a302019-05-08 19:34:4613#include "base/sequence_checker.h"
Patrick Monette643cdf62021-10-15 19:13:4214#include "base/task/sequenced_task_runner.h"
Yuwei Huangfa4b0e72020-07-28 00:08:3815#include "base/threading/sequence_bound.h"
16#include "remoting/base/directory_service_client.h"
Erik Jensen1662a302019-05-08 19:34:4617
18namespace remoting {
19
Yuwei Huangfa4b0e72020-07-28 00:08:3820class ProtobufHttpStatus;
21
Erik Jensen1662a302019-05-08 19:34:4622class JniDirectoryService {
23 public:
24 // TODO(rkjnsn): Update error codes to better align with those returned by the
25 // new gRPC API.
26 // GENERATED_JAVA_ENUM_PACKAGE: org.chromium.chromoting.jni
27 // GENERATED_JAVA_CLASS_NAME_OVERRIDE: DirectoryServiceRequestError
28 enum class RequestError : int {
29 AUTH_FAILED = 0,
30 NETWORK_ERROR = 1,
31 SERVICE_UNAVAILABLE = 2,
32 UNEXPECTED_RESPONSE = 3,
33 UNKNOWN = 4,
34 };
35 JniDirectoryService();
36 ~JniDirectoryService();
37
38 void RetrieveHostList(JNIEnv* env,
Erik Jensen1662a302019-05-08 19:34:4639 const base::android::JavaParamRef<jobject>& callback);
40 void DeleteHost(JNIEnv* env,
Erik Jensen1662a302019-05-08 19:34:4641 const base::android::JavaParamRef<jstring>& host_id,
42 const base::android::JavaParamRef<jobject>& callback);
43
Eric Stevensond6b8ada2019-07-26 21:26:0644 void Destroy(JNIEnv* env);
Erik Jensen1662a302019-05-08 19:34:4645
46 private:
Yuwei Huangfa4b0e72020-07-28 00:08:3847 void OnHostListRetrieved(
48 base::android::ScopedJavaGlobalRef<jobject> callback,
49 const ProtobufHttpStatus& status,
50 std::unique_ptr<apis::v1::GetHostListResponse> response);
Erik Jensen1662a302019-05-08 19:34:4651 void OnHostDeleted(base::android::ScopedJavaGlobalRef<jobject> callback,
Yuwei Huangfa4b0e72020-07-28 00:08:3852 const ProtobufHttpStatus& status,
53 std::unique_ptr<apis::v1::DeleteHostResponse> response);
Erik Jensen1662a302019-05-08 19:34:4654
Yuwei Huangfa4b0e72020-07-28 00:08:3855 base::SequenceBound<DirectoryServiceClient> client_;
Erik Jensen1662a302019-05-08 19:34:4656 scoped_refptr<base::SequencedTaskRunner> sequence_;
57 SEQUENCE_CHECKER(sequence_checker_);
Yuwei Huangfa4b0e72020-07-28 00:08:3858
59 base::WeakPtrFactory<JniDirectoryService> weak_factory_{this};
Erik Jensen1662a302019-05-08 19:34:4660};
61
62} // namespace remoting
63
64#endif // REMOTING_CLIENT_JNI_JNI_DIRECTORY_SERVICE_H_