author Stanca Serban <>
Fri, 25 Nov 2022 18:35:18 +0200
changeset 643645 8b092cca2cab001ed8d13fc83d17bdba39cffe0d
parent 449350 18faf33e3dc1d324dbc4566e18d4e20cf13b941f
permissions -rw-r--r--
Backed out changeset dab070a6ba77 (bug 1802125) for causing wpt failures on /clipboard-apis. CLOSED TREE

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=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 */

#ifndef nsLayoutStatics_h__
#define nsLayoutStatics_h__

#include "nscore.h"
#include "MainThreadUtils.h"
#include "nsISupportsImpl.h"
#include "nsDebug.h"

// This isn't really a class, it's a namespace for static methods.
// Documents and other objects can hold a reference to the layout static
// objects so that they last past the xpcom-shutdown notification.

class nsLayoutStatics {
  // Called by the layout module constructor. This call performs an AddRef()
  // internally.
  static nsresult Initialize();

  static void AddRef() {
                 "nsLayoutStatics reference counting must be on main thread");

                 "nsLayoutStatics already dropped to zero!");

    NS_LOG_ADDREF(&sLayoutStaticRefcnt, sLayoutStaticRefcnt, "nsLayoutStatics",
  static void Release() {
                 "nsLayoutStatics reference counting must be on main thread");

    NS_LOG_RELEASE(&sLayoutStaticRefcnt, sLayoutStaticRefcnt,

    if (!sLayoutStaticRefcnt) Shutdown();

  // not to be called!

  static void Shutdown();

  static nsrefcnt sLayoutStaticRefcnt;

#endif  // nsLayoutStatics_h__