|  | /* | 
|  | *  Copyright 2022 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  |  | 
|  | #ifndef MODULES_PORTAL_XDG_DESKTOP_PORTAL_UTILS_H_ | 
|  | #define MODULES_PORTAL_XDG_DESKTOP_PORTAL_UTILS_H_ | 
|  |  | 
|  | #include <gio/gio.h> | 
|  |  | 
|  | #include <cstdint> | 
|  | #include <string> | 
|  |  | 
|  | #include "absl/strings/string_view.h" | 
|  | #include "modules/portal/portal_request_response.h" | 
|  | #include "rtc_base/system/rtc_export.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | namespace xdg_portal { | 
|  |  | 
|  | constexpr char kDesktopBusName[] = "org.freedesktop.portal.Desktop"; | 
|  | constexpr char kDesktopObjectPath[] = "/org/freedesktop/portal/desktop"; | 
|  | constexpr char kDesktopRequestObjectPath[] = | 
|  | "/org/freedesktop/portal/desktop/request"; | 
|  | constexpr char kSessionInterfaceName[] = "org.freedesktop.portal.Session"; | 
|  | constexpr char kRequestInterfaceName[] = "org.freedesktop.portal.Request"; | 
|  | constexpr char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; | 
|  |  | 
|  | using ProxyRequestCallback = void (*)(GObject*, GAsyncResult*, gpointer); | 
|  | using SessionRequestCallback = void (*)(GDBusProxy*, GAsyncResult*, gpointer); | 
|  | using SessionRequestResponseSignalHandler = void (*)(GDBusConnection*, | 
|  | const char*, | 
|  | const char*, | 
|  | const char*, | 
|  | const char*, | 
|  | GVariant*, | 
|  | gpointer); | 
|  | using StartRequestResponseSignalHandler = void (*)(GDBusConnection*, | 
|  | const char*, | 
|  | const char*, | 
|  | const char*, | 
|  | const char*, | 
|  | GVariant*, | 
|  | gpointer); | 
|  | using SessionStartRequestedHandler = void (*)(GDBusProxy*, | 
|  | GAsyncResult*, | 
|  | gpointer); | 
|  |  | 
|  | RTC_EXPORT std::string RequestResponseToString(RequestResponse request); | 
|  |  | 
|  | RequestResponse RequestResponseFromPortalResponse(uint32_t portal_response); | 
|  |  | 
|  | // Returns a string path for signal handle based on the provided connection and | 
|  | // token. | 
|  | RTC_EXPORT std::string PrepareSignalHandle(absl::string_view token, | 
|  | GDBusConnection* connection); | 
|  |  | 
|  | // Sets up the callback to execute when a response signal is received for the | 
|  | // given object. | 
|  | RTC_EXPORT uint32_t | 
|  | SetupRequestResponseSignal(absl::string_view object_path, | 
|  | const GDBusSignalCallback callback, | 
|  | gpointer user_data, | 
|  | GDBusConnection* connection); | 
|  |  | 
|  | RTC_EXPORT void RequestSessionProxy( | 
|  | absl::string_view interface_name, | 
|  | const ProxyRequestCallback proxy_request_callback, | 
|  | GCancellable* cancellable, | 
|  | gpointer user_data); | 
|  |  | 
|  | RTC_EXPORT void SetupSessionRequestHandlers( | 
|  | absl::string_view portal_prefix, | 
|  | const SessionRequestCallback session_request_callback, | 
|  | const SessionRequestResponseSignalHandler request_response_signale_handler, | 
|  | GDBusConnection* connection, | 
|  | GDBusProxy* proxy, | 
|  | GCancellable* cancellable, | 
|  | std::string& portal_handle, | 
|  | guint& session_request_signal_id, | 
|  | gpointer user_data); | 
|  |  | 
|  | RTC_EXPORT void StartSessionRequest( | 
|  | absl::string_view prefix, | 
|  | absl::string_view session_handle, | 
|  | const StartRequestResponseSignalHandler signal_handler, | 
|  | const SessionStartRequestedHandler session_started_handler, | 
|  | GDBusProxy* proxy, | 
|  | GDBusConnection* connection, | 
|  | GCancellable* cancellable, | 
|  | guint& start_request_signal_id, | 
|  | std::string& start_handle, | 
|  | gpointer user_data); | 
|  |  | 
|  | // Tears down the portal session and cleans up related objects. | 
|  | RTC_EXPORT void TearDownSession(absl::string_view session_handle, | 
|  | GDBusProxy* proxy, | 
|  | GCancellable* cancellable, | 
|  | GDBusConnection* connection); | 
|  |  | 
|  | }  // namespace xdg_portal | 
|  | }  // namespace webrtc | 
|  |  | 
|  | #endif  // MODULES_PORTAL_XDG_DESKTOP_PORTAL_UTILS_H_ |