author Emilio Cobos Álvarez <>
Sun, 17 Dec 2017 22:29:10 +0100
changeset 396857 13faabcf8e965cca857e3cc8fdbea289a09c7ea0
child 397101 07c4aa18a0b6ce4df6626c9a4fb9d4a37fe4c5d4
permissions -rw-r--r--
Bug 1425769: Base class for ShadowRoot and Document to manage style state. r=smaug This also removes some confusing comments around nsIDocument regarding some kind of "special" stylesheets, which don't seem to exist anymore, and consolidates StyleSheetList so that we only have one implementation. I think that fixes a potential leak on the shadow root code (even though the API is v0 only), given the pointer from the ShadowRootStyleSheetList to the ShadowRoot wasn't being CCd. Also, more stuff could be renamed, methods removed, etc, feel free to suggest more cleanup, I've done mostly the minimal. Next steps are moving the stylesets there and stop using the proto binding sheet list / resources. MozReview-Commit-ID: D9hnDgPQAS5

/* -*- 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 mozilla_dom_StyleScope_h__
#define mozilla_dom_StyleScope_h__

#include "nsTArray.h"

class nsINode;

namespace mozilla {
class StyleSheet;

namespace dom {

class StyleSheetList;

 * A class meant to be shared by ShadowRoot and Document, that holds a list of
 * stylesheets.
 * TODO(emilio, bug 1418159): In the future this should hold most of the
 * relevant style state, this should allow us to fix bug 548397.
class StyleScope
  virtual nsINode& AsNode() = 0;

  const nsINode& AsNode() const
    return const_cast<StyleScope&>(*this).AsNode();

  StyleSheet* SheetAt(size_t aIndex) const
    return mStyleSheets.SafeElementAt(aIndex);

  size_t SheetCount() const
    return mStyleSheets.Length();

  int32_t IndexOfSheet(const StyleSheet& aSheet) const
    return mStyleSheets.IndexOf(&aSheet);

  void InsertSheetAt(size_t aIndex, StyleSheet& aSheet)
    mStyleSheets.InsertElementAt(aIndex, &aSheet);

  void RemoveSheet(StyleSheet& aSheet)

  void AppendStyleSheet(StyleSheet& aSheet)

  StyleSheetList& EnsureDOMStyleSheets();


  nsTArray<RefPtr<mozilla::StyleSheet>> mStyleSheets;
  RefPtr<mozilla::dom::StyleSheetList> mDOMStyleSheets;