1/* 2 * Copyright (c) 2014 Apple Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24/* CFPlugIn.h 25 Copyright (c) 1999-2013, Apple Inc. All rights reserved. 26*/ 27 28#if !defined(__COREFOUNDATION_CFPLUGIN__) 29#define __COREFOUNDATION_CFPLUGIN__ 1 30 31#if !defined(COREFOUNDATION_CFPLUGINCOM_SEPARATE) 32#define COREFOUNDATION_CFPLUGINCOM_SEPARATE 1 33#endif 34 35#include <CoreFoundation/CFBase.h> 36#include <CoreFoundation/CFArray.h> 37#include <CoreFoundation/CFBundle.h> 38#include <CoreFoundation/CFString.h> 39#include <CoreFoundation/CFURL.h> 40#include <CoreFoundation/CFUUID.h> 41 42CF_EXTERN_C_BEGIN 43 44/* ================ Standard Info.plist keys for plugIns ================ */ 45 46CF_EXPORT const CFStringRef kCFPlugInDynamicRegistrationKey; 47CF_EXPORT const CFStringRef kCFPlugInDynamicRegisterFunctionKey; 48CF_EXPORT const CFStringRef kCFPlugInUnloadFunctionKey; 49CF_EXPORT const CFStringRef kCFPlugInFactoriesKey; 50CF_EXPORT const CFStringRef kCFPlugInTypesKey; 51 52/* ================= Function prototypes for various callbacks ================= */ 53/* Function types that plugIn authors can implement for various purposes. */ 54 55typedef void (*CFPlugInDynamicRegisterFunction)(CFPlugInRef plugIn); 56typedef void (*CFPlugInUnloadFunction)(CFPlugInRef plugIn); 57typedef void *(*CFPlugInFactoryFunction)(CFAllocatorRef allocator, CFUUIDRef typeUUID); 58 59/* ================= Creating PlugIns ================= */ 60 61CF_EXPORT CFTypeID CFPlugInGetTypeID(void); 62 63CF_EXPORT CFPlugInRef CFPlugInCreate(CFAllocatorRef allocator, CFURLRef plugInURL); 64 /* Might return an existing instance with the ref-count bumped. */ 65 66CF_EXPORT CFBundleRef CFPlugInGetBundle(CFPlugInRef plugIn); 67 68/* ================= Controlling load on demand ================= */ 69/* For plugIns. */ 70/* PlugIns that do static registration are load on demand by default. */ 71/* PlugIns that do dynamic registration are not load on demand by default. */ 72/* A dynamic registration function can call CFPlugInSetLoadOnDemand(). */ 73 74CF_EXPORT void CFPlugInSetLoadOnDemand(CFPlugInRef plugIn, Boolean flag); 75 76CF_EXPORT Boolean CFPlugInIsLoadOnDemand(CFPlugInRef plugIn); 77 78/* ================= Finding factories and creating instances ================= */ 79/* For plugIn hosts. */ 80/* Functions for finding factories to create specific types and actually creating instances of a type. */ 81 82/* This function finds all the factories from any plugin for the given type. Returns an array that the caller must release. */ 83CF_EXPORT CFArrayRef CFPlugInFindFactoriesForPlugInType(CFUUIDRef typeUUID) CF_RETURNS_RETAINED; 84 85 86/* This function restricts the result to factories from the given plug-in that can create the given type. Returns an array that the caller must release. */ 87CF_EXPORT CFArrayRef CFPlugInFindFactoriesForPlugInTypeInPlugIn(CFUUIDRef typeUUID, CFPlugInRef plugIn) CF_RETURNS_RETAINED; 88 89/* This function returns the IUnknown interface for the new instance. */ 90CF_EXPORT void *CFPlugInInstanceCreate(CFAllocatorRef allocator, CFUUIDRef factoryUUID, CFUUIDRef typeUUID); 91 92/* ================= Registering factories and types ================= */ 93/* For plugIn writers who must dynamically register things. */ 94/* Functions to register factory functions and to associate factories with types. */ 95 96CF_EXPORT Boolean CFPlugInRegisterFactoryFunction(CFUUIDRef factoryUUID, CFPlugInFactoryFunction func); 97 98CF_EXPORT Boolean CFPlugInRegisterFactoryFunctionByName(CFUUIDRef factoryUUID, CFPlugInRef plugIn, CFStringRef functionName); 99 100CF_EXPORT Boolean CFPlugInUnregisterFactory(CFUUIDRef factoryUUID); 101 102CF_EXPORT Boolean CFPlugInRegisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID); 103 104CF_EXPORT Boolean CFPlugInUnregisterPlugInType(CFUUIDRef factoryUUID, CFUUIDRef typeUUID); 105 106/* ================= Registering instances ================= */ 107/* When a new instance of a type is created, the instance is responsible for registering itself with the factory that created it and unregistering when it deallocates. */ 108/* This means that an instance must keep track of the CFUUIDRef of the factory that created it so it can unregister when it goes away. */ 109 110CF_EXPORT void CFPlugInAddInstanceForFactory(CFUUIDRef factoryID); 111 112CF_EXPORT void CFPlugInRemoveInstanceForFactory(CFUUIDRef factoryID); 113 114 115/* Obsolete API */ 116 117typedef struct __CFPlugInInstance *CFPlugInInstanceRef; 118 119typedef Boolean (*CFPlugInInstanceGetInterfaceFunction)(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl); 120typedef void (*CFPlugInInstanceDeallocateInstanceDataFunction)(void *instanceData); 121 122CF_EXPORT Boolean CFPlugInInstanceGetInterfaceFunctionTable(CFPlugInInstanceRef instance, CFStringRef interfaceName, void **ftbl); 123 124/* This function returns a retained object on 10.8 or later. */ 125CF_EXPORT CFStringRef CFPlugInInstanceGetFactoryName(CFPlugInInstanceRef instance) CF_RETURNS_RETAINED; 126 127CF_EXPORT void *CFPlugInInstanceGetInstanceData(CFPlugInInstanceRef instance); 128 129CF_EXPORT CFTypeID CFPlugInInstanceGetTypeID(void); 130 131CF_EXPORT CFPlugInInstanceRef CFPlugInInstanceCreateWithInstanceDataSize(CFAllocatorRef allocator, CFIndex instanceDataSize, CFPlugInInstanceDeallocateInstanceDataFunction deallocateInstanceFunction, CFStringRef factoryName, CFPlugInInstanceGetInterfaceFunction getInterfaceFunction); 132 133CF_EXTERN_C_END 134 135#if !COREFOUNDATION_CFPLUGINCOM_SEPARATE 136#include <CoreFoundation/CFPlugInCOM.h> 137#endif /* !COREFOUNDATION_CFPLUGINCOM_SEPARATE */ 138 139#endif /* ! __COREFOUNDATION_CFPLUGIN__ */ 140 141