// 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 NET_CERT_TEST_KEYCHAIN_SEARCH_LIST_MAC_H_
#define NET_CERT_TEST_KEYCHAIN_SEARCH_LIST_MAC_H_

#include <CoreServices/CoreServices.h>
#include <Security/Security.h>

#include "base/mac/scoped_cftyperef.h"
#include "net/base/net_export.h"
#include "starboard/types.h"

namespace net {

class NET_EXPORT TestKeychainSearchList {
 public:
  ~TestKeychainSearchList();

  // Creates a TestKeychainSearchList, which will be used by HasInstance and
  // GetInstance.
  // Only one TestKeychainSearchList object may exist at a time, returns nullptr
  // if one exists already.
  static std::unique_ptr<TestKeychainSearchList> Create();

  // Returns true if a TestKeychainSearchList currently exists.
  static bool HasInstance();

  // Returns the current TestKeychainSearchList instance, if any.
  static TestKeychainSearchList* GetInstance();

  // Copies the test keychain search list into |keychain_search_list|.
  OSStatus CopySearchList(CFArrayRef* keychain_search_list) const;

  // Adds |keychain| to the end of the test keychain search list.
  void AddKeychain(SecKeychainRef keychain);

 private:
  TestKeychainSearchList();

  base::ScopedCFTypeRef<CFMutableArrayRef> scoped_keychain_search_list;
};

}  // namespace net

#endif  // NET_CERT_TEST_KEYCHAIN_SEARCH_LIST_MAC_H_
