13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 23345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Use of this source code is governed by a BSD-style license that can be 33345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// found in the LICENSE file. 43345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#ifndef BASE_MAC_SCOPED_AEDESC_H_ 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#define BASE_MAC_SCOPED_AEDESC_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#import <CoreServices/CoreServices.h> 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/basictypes.h" 123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 13731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace base { 14731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace mac { 15731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// The ScopedAEDesc is used to scope AppleEvent descriptors. On creation, 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// it will store a NULL descriptor. On destruction, it will dispose of the 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// descriptor. 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This class is parameterized for additional type safety checks. You can use 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// the generic AEDesc type by not providing a template parameter: 22731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// ScopedAEDesc<> desc; 233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricktemplate <typename AEDescType = AEDesc> 24731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass ScopedAEDesc { 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 26731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ScopedAEDesc() { 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AECreateDesc(typeNull, NULL, 0, &desc_); 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ~ScopedAEDesc() { 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AEDisposeDesc(&desc_); 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Used for in parameters. 353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick operator const AEDescType*() { 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return &desc_; 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Used for out parameters. 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AEDescType* OutPointer() { 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return &desc_; 423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick AEDescType desc_; 463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DISALLOW_COPY_AND_ASSIGN(ScopedAEDesc); 483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} // namespace mac 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} // namespace base 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#endif // BASE_MAC_SCOPED_AEDESC_H_ 54