1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_COCOA_SCOPED_AUTHORIZATIONREF_H_ 6 #define CHROME_BROWSER_COCOA_SCOPED_AUTHORIZATIONREF_H_ 7 #pragma once 8 9 #include <Security/Authorization.h> 10 11 #include "base/basictypes.h" 12 #include "base/compiler_specific.h" 13 14 // scoped_AuthorizationRef maintains ownership of an AuthorizationRef. It is 15 // patterned after the scoped_ptr interface. 16 17 class scoped_AuthorizationRef { 18 public: 19 explicit scoped_AuthorizationRef(AuthorizationRef authorization = NULL) 20 : authorization_(authorization) { 21 } 22 23 ~scoped_AuthorizationRef() { 24 if (authorization_) { 25 AuthorizationFree(authorization_, kAuthorizationFlagDestroyRights); 26 } 27 } 28 29 void reset(AuthorizationRef authorization = NULL) { 30 if (authorization_ != authorization) { 31 if (authorization_) { 32 AuthorizationFree(authorization_, kAuthorizationFlagDestroyRights); 33 } 34 authorization_ = authorization; 35 } 36 } 37 38 bool operator==(AuthorizationRef that) const { 39 return authorization_ == that; 40 } 41 42 bool operator!=(AuthorizationRef that) const { 43 return authorization_ != that; 44 } 45 46 operator AuthorizationRef() const { 47 return authorization_; 48 } 49 50 AuthorizationRef* operator&() { 51 return &authorization_; 52 } 53 54 AuthorizationRef get() const { 55 return authorization_; 56 } 57 58 void swap(scoped_AuthorizationRef& that) { 59 AuthorizationRef temp = that.authorization_; 60 that.authorization_ = authorization_; 61 authorization_ = temp; 62 } 63 64 // scoped_AuthorizationRef::release() is like scoped_ptr<>::release. It is 65 // NOT a wrapper for AuthorizationFree(). To force a 66 // scoped_AuthorizationRef object to call AuthorizationFree(), use 67 // scoped_AuthorizaitonRef::reset(). 68 AuthorizationRef release() WARN_UNUSED_RESULT { 69 AuthorizationRef temp = authorization_; 70 authorization_ = NULL; 71 return temp; 72 } 73 74 private: 75 AuthorizationRef authorization_; 76 77 DISALLOW_COPY_AND_ASSIGN(scoped_AuthorizationRef); 78 }; 79 80 #endif // CHROME_BROWSER_COCOA_SCOPED_AUTHORIZATIONREF_H_ 81