// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef COMPONENTS_OS_CRYPT_KEYRING_UTIL_LINUX_H_
#define COMPONENTS_OS_CRYPT_KEYRING_UTIL_LINUX_H_

// libgnome-keyring has been deprecated in favor of libsecret.
// See: https://mail.gnome.org/archives/commits-list/2013-October/msg08876.html
//
// The define below turns off the deprecations, in order to avoid build
// failures with Gnome 3.12. When we move to libsecret, the define can be
// removed, together with the include below it.
//
// The porting is tracked in http://crbug.com/355223
#define GNOME_KEYRING_DEPRECATED
#define GNOME_KEYRING_DEPRECATED_FOR(x)
#include <gnome-keyring.h>

#include "base/component_export.h"
#include "base/macros.h"

// Many of the gnome_keyring_* functions use variable arguments, which makes
// them difficult if not impossible to truly wrap in C. Therefore, we use
// appropriately-typed function pointers and scoping to make the fact that we
// might be dynamically loading the library almost invisible. As a bonus, we
// also get a simple way to mock the library for testing. Classes that inherit
// from GnomeKeyringLoader will use its versions of the gnome_keyring_*
// functions. Note that it has only static fields.
class GnomeKeyringLoader {
 public:
  static COMPONENT_EXPORT(OS_CRYPT) bool LoadGnomeKeyring();

  // Declare the actual function pointers that we'll use in client code.
  // These functions will contact the service.
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_is_available)
      gnome_keyring_is_available_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_store_password)
      gnome_keyring_store_password_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_delete_password)
      gnome_keyring_delete_password_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_find_items)
      gnome_keyring_find_items_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_find_password_sync) gnome_keyring_find_password_sync_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_store_password_sync)
      gnome_keyring_store_password_sync_ptr;

  // These functions do not contact the service.
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_result_to_message)
      gnome_keyring_result_to_message_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_attribute_list_free)
      gnome_keyring_attribute_list_free_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_attribute_list_new) gnome_keyring_attribute_list_new_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_attribute_list_append_string)
      gnome_keyring_attribute_list_append_string_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(
      &::gnome_keyring_attribute_list_append_uint32)
      gnome_keyring_attribute_list_append_uint32_ptr;
  static COMPONENT_EXPORT(OS_CRYPT) decltype(&::gnome_keyring_free_password)
      gnome_keyring_free_password_ptr;
  // We also use gnome_keyring_attribute_list_index(), which is a macro and
  // can't be referenced.

 protected:
  // Set to true if LoadGnomeKeyring() has already succeeded.
  static COMPONENT_EXPORT(OS_CRYPT) bool keyring_loaded;

 private:
  struct FunctionInfo {
    const char* name;
    void** pointer;
  };

  // Make it easy to initialize the function pointers in LoadGnomeKeyring().
  static const FunctionInfo functions[];
};

#endif  // COMPONENTS_OS_CRYPT_KEYRING_UTIL_LINUX_H_
