netwerk/base/AutoClose.h
author Andrew Osmond <aosmond@mozilla.com>
Fri, 17 Nov 2017 06:45:28 -0500
changeset 392351 b9a29d94ccac646c9336fa75e084bbc8581501ad
parent 367749 6a629adbb62a299d7208373d1c6f375149d2afdb
child 395458 3e425d2e71df08dc944a26eaa41158522a75ff02
permissions -rw-r--r--
Bug 1368776 - Part 15. Cache flags passed to ImageResource::GetImageContainerImpl for consistency. r=tnikkel When FLAG_HIGH_QUALITY_SCALING is used, we need to make sure we continue using that flag when we update the container. We should also use it for comparing whether or not an existing image container is equivalent.

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
 * You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_net_AutoClose_h
#define mozilla_net_AutoClose_h

#include "nsCOMPtr.h"

namespace mozilla { namespace net {

// Like an nsAutoPtr for XPCOM streams (e.g. nsIAsyncInputStream) and other
// refcounted classes that need to have the Close() method called explicitly
// before they are destroyed.
template <typename T>
class AutoClose
{
public:
  AutoClose() { }
  ~AutoClose(){
    Close();
  }

  explicit operator bool() const
  {
    return mPtr;
  }

  already_AddRefed<T> forget()
  {
    return mPtr.forget();
  }

  void takeOver(nsCOMPtr<T> & rhs)
  {
    Close();
    mPtr = rhs.forget();
  }

  void takeOver(AutoClose<T> & rhs)
  {
    Close();
    mPtr = rhs.mPtr.forget();
  }

  void CloseAndRelease()
  {
    Close();
    mPtr = nullptr;
  }

  T* operator->() const MOZ_NO_ADDREF_RELEASE_ON_RETURN
  {
    return mPtr.operator->();
  }

private:
  void Close()
  {
    if (mPtr) {
      mPtr->Close();
    }
  }

  void operator=(const AutoClose<T> &) = delete;
  AutoClose(const AutoClose<T> &) = delete;

  nsCOMPtr<T> mPtr;
};

} // namespace net
} // namespace mozilla

#endif // mozilla_net_AutoClose_h