| // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/win/iunknown_impl.h" | 
 |  | 
 | namespace base { | 
 | namespace win { | 
 |  | 
 | IUnknownImpl::IUnknownImpl() | 
 |     : ref_count_(0) { | 
 | } | 
 |  | 
 | IUnknownImpl::~IUnknownImpl() { | 
 | } | 
 |  | 
 | ULONG STDMETHODCALLTYPE IUnknownImpl::AddRef() { | 
 |   ref_count_.Increment(); | 
 |   return 1; | 
 | } | 
 |  | 
 | ULONG STDMETHODCALLTYPE IUnknownImpl::Release() { | 
 |   if (!ref_count_.Decrement()) { | 
 |     delete this; | 
 |     return 0; | 
 |   } | 
 |   return 1; | 
 | } | 
 |  | 
 | STDMETHODIMP IUnknownImpl::QueryInterface(REFIID riid, void** ppv) { | 
 |   if (riid == IID_IUnknown) { | 
 |     *ppv = static_cast<IUnknown*>(this); | 
 |     AddRef(); | 
 |     return S_OK; | 
 |   } | 
 |  | 
 |   *ppv = NULL; | 
 |   return E_NOINTERFACE; | 
 | } | 
 |  | 
 | }  // namespace win | 
 | }  // namespace base |