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