1*6777b538SAndroid Build Coastguard Worker // Copyright 2010 The Chromium Authors 2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file. 4*6777b538SAndroid Build Coastguard Worker 5*6777b538SAndroid Build Coastguard Worker #ifndef BASE_MAC_SCOPED_AEDESC_H_ 6*6777b538SAndroid Build Coastguard Worker #define BASE_MAC_SCOPED_AEDESC_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #import <CoreServices/CoreServices.h> 9*6777b538SAndroid Build Coastguard Worker 10*6777b538SAndroid Build Coastguard Worker namespace base::mac { 11*6777b538SAndroid Build Coastguard Worker 12*6777b538SAndroid Build Coastguard Worker // The ScopedAEDesc is used to scope AppleEvent descriptors. On creation, 13*6777b538SAndroid Build Coastguard Worker // it will store a NULL descriptor. On destruction, it will dispose of the 14*6777b538SAndroid Build Coastguard Worker // descriptor. 15*6777b538SAndroid Build Coastguard Worker // 16*6777b538SAndroid Build Coastguard Worker // This class is parameterized for additional type safety checks. You can use 17*6777b538SAndroid Build Coastguard Worker // the generic AEDesc type by not providing a template parameter: 18*6777b538SAndroid Build Coastguard Worker // ScopedAEDesc<> desc; 19*6777b538SAndroid Build Coastguard Worker template <typename AEDescType = AEDesc> 20*6777b538SAndroid Build Coastguard Worker class ScopedAEDesc { 21*6777b538SAndroid Build Coastguard Worker public: ScopedAEDesc()22*6777b538SAndroid Build Coastguard Worker ScopedAEDesc() { 23*6777b538SAndroid Build Coastguard Worker AECreateDesc(typeNull, NULL, 0, &desc_); 24*6777b538SAndroid Build Coastguard Worker } 25*6777b538SAndroid Build Coastguard Worker 26*6777b538SAndroid Build Coastguard Worker ScopedAEDesc(const ScopedAEDesc&) = delete; 27*6777b538SAndroid Build Coastguard Worker ScopedAEDesc& operator=(const ScopedAEDesc&) = delete; 28*6777b538SAndroid Build Coastguard Worker ~ScopedAEDesc()29*6777b538SAndroid Build Coastguard Worker ~ScopedAEDesc() { 30*6777b538SAndroid Build Coastguard Worker AEDisposeDesc(&desc_); 31*6777b538SAndroid Build Coastguard Worker } 32*6777b538SAndroid Build Coastguard Worker 33*6777b538SAndroid Build Coastguard Worker // Used for in parameters. 34*6777b538SAndroid Build Coastguard Worker operator const AEDescType*() { 35*6777b538SAndroid Build Coastguard Worker return &desc_; 36*6777b538SAndroid Build Coastguard Worker } 37*6777b538SAndroid Build Coastguard Worker 38*6777b538SAndroid Build Coastguard Worker // Used for out parameters. OutPointer()39*6777b538SAndroid Build Coastguard Worker AEDescType* OutPointer() { 40*6777b538SAndroid Build Coastguard Worker return &desc_; 41*6777b538SAndroid Build Coastguard Worker } 42*6777b538SAndroid Build Coastguard Worker 43*6777b538SAndroid Build Coastguard Worker private: 44*6777b538SAndroid Build Coastguard Worker AEDescType desc_; 45*6777b538SAndroid Build Coastguard Worker }; 46*6777b538SAndroid Build Coastguard Worker 47*6777b538SAndroid Build Coastguard Worker } // namespace base::mac 48*6777b538SAndroid Build Coastguard Worker 49*6777b538SAndroid Build Coastguard Worker #endif // BASE_MAC_SCOPED_AEDESC_H_ 50