Commit 8df9c25d authored by bzbarsky%mit.edu's avatar bzbarsky%mit.edu
Browse files

Create CSSLoaders when the document object is created and deCOMify the getter.

Bug 290068, r=sicking, sr=peterv, a=brendan
parent 6e9df675
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -435,10 +435,11 @@ public:
  virtual void EnsureCatalogStyleSheet(const char *aStyleSheetURI) = 0;

  /**
   * Get this document's CSSLoader.  May return null in error
   * conditions (OOM)
   * Get this document's CSSLoader.  This is guaranteed to not return null.
   */
  virtual nsICSSLoader* GetCSSLoader() = 0;
  nsICSSLoader* CSSLoader() const {
    return mCSSLoader;
  }

  /**
   * Get this document's attribute stylesheet.  May return null if
@@ -698,6 +699,10 @@ protected:
  nsCOMPtr<nsIBindingManager> mBindingManager;
  nsNodeInfoManager* mNodeInfoManager; // [STRONG]

  nsICSSLoader* mCSSLoader; // [STRONG; not a COMPtr to avoid
                            // including nsICSSLoader.h; the ownership
                            // is managed by nsDocument]

  // Table of element properties for this document.
  nsPropertyTable mPropertyTable;

+1 −1
Original line number Diff line number Diff line
@@ -181,7 +181,7 @@ nsContentSink::Init(nsIDocument* aDoc,
  nsresult rv = loader->AddObserver(proxy);
  NS_ENSURE_SUCCESS(rv, rv);

  mCSSLoader = aDoc->GetCSSLoader();
  mCSSLoader = aDoc->CSSLoader();

  ProcessHTTPHeaders(aChannel);

+15 −19
Original line number Diff line number Diff line
@@ -586,7 +586,9 @@ nsDocument::~nsDocument()
  }

  if (mCSSLoader) {
    // Could be null here if Init() failed
    mCSSLoader->DropDocumentReference();
    NS_RELEASE(mCSSLoader);
  }

  // XXX Ideally we'd do this cleanup in the nsIDocument destructor.
@@ -666,6 +668,10 @@ NS_IMPL_RELEASE(nsDocument)
nsresult
nsDocument::Init()
{
  if (mBindingManager || mCSSLoader || mNodeInfoManager) {
    return NS_ERROR_ALREADY_INITIALIZED;
  }

  // Force initialization.
  nsBindingManager *bindingManager = new nsBindingManager();
  NS_ENSURE_TRUE(bindingManager, NS_ERROR_OUT_OF_MEMORY);
@@ -675,9 +681,11 @@ nsDocument::Init()
  // (static cast to the correct interface pointer)
  mObservers.InsertElementAt(NS_STATIC_CAST(nsIDocumentObserver*, bindingManager), 0);

  if (mNodeInfoManager) {
    return NS_ERROR_ALREADY_INITIALIZED;
  }
  NS_NewCSSLoader(this, &mCSSLoader);
  NS_ENSURE_TRUE(mCSSLoader, NS_ERROR_OUT_OF_MEMORY);
  // Assume we're not HTML and not quirky, until we know otherwise
  mCSSLoader->SetCaseSensitive(PR_TRUE);
  mCSSLoader->SetCompatibilityMode(eCompatibility_FullStandards);

  mNodeInfoManager = new nsNodeInfoManager();
  NS_ENSURE_TRUE(mNodeInfoManager, NS_ERROR_OUT_OF_MEMORY);
@@ -1221,14 +1229,7 @@ nsDocument::SetHeaderData(nsIAtom* aHeaderField, const nsAString& aData)
    nsAutoString title;
    PRInt32 index;

    // We lazily create our CSSLoader.
    // XXXbz why?  Wouldn't it make more sense to just create it at
    // document creation and not do all these null-checks all over?
    nsICSSLoader* cssLoader = GetCSSLoader();
    if (!cssLoader) {
      return;
    }
    cssLoader->SetPreferredSheet(aData);
    CSSLoader()->SetPreferredSheet(aData);

    PRInt32 count = mStyleSheets.Count();
    for (index = 0; index < count; index++) {
@@ -1793,9 +1794,9 @@ nsDocument::AddCatalogStyleSheet(nsIStyleSheet* aSheet)
void
nsDocument::EnsureCatalogStyleSheet(const char *aStyleSheetURI)
{
  nsICSSLoader* cssLoader = GetCSSLoader();
  nsICSSLoader* cssLoader = CSSLoader();
  PRBool enabled;
  if (cssLoader && NS_SUCCEEDED(cssLoader->GetEnabled(&enabled)) && enabled) {
  if (NS_SUCCEEDED(cssLoader->GetEnabled(&enabled)) && enabled) {
    PRInt32 sheetCount = GetNumberOfCatalogStyleSheets();
    for (PRInt32 i = 0; i < sheetCount; i++) {
      nsIStyleSheet* sheet = GetCatalogStyleSheetAt(i);
@@ -2622,12 +2623,7 @@ nsDocument::GetStyleSheets(nsIDOMStyleSheetList** aStyleSheets)
NS_IMETHODIMP
nsDocument::GetPreferredStylesheetSet(nsAString& aStyleTitle)
{
  if (mCSSLoader) {
    mCSSLoader->GetPreferredSheet(aStyleTitle);
  }
  else {
    aStyleTitle.Truncate();
  }
  CSSLoader()->GetPreferredSheet(aStyleTitle);
  return NS_OK;
}

+0 −1
Original line number Diff line number Diff line
@@ -594,7 +594,6 @@ protected:

  nsSupportsHashtable* mBoxObjectTable;

  nsCOMPtr<nsICSSLoader> mCSSLoader;
  nsRefPtr<nsHTMLStyleSheet> mAttrStyleSheet;
  nsCOMPtr<nsIHTMLCSSStyleSheet> mStyleAttrStyleSheet;
  nsRefPtr<nsXMLEventsManager> mXMLEventsManager;
+8 −12
Original line number Diff line number Diff line
@@ -261,12 +261,6 @@ nsStyleLinkElement::UpdateStyleSheet(nsIDocument *aOldDocument,
    return NS_OK;
  }

  nsICSSLoader* loader = doc->GetCSSLoader();

  if (!loader) {
    return NS_OK;
  }

  PRBool blockParser = kBlockByDefault;
  if (isAlternate) {
    blockParser = PR_FALSE;
@@ -325,12 +319,14 @@ nsStyleLinkElement::UpdateStyleSheet(nsIDocument *aOldDocument,

    // Now that we have a url and a unicode input stream, parse the
    // style sheet.
    rv = loader->LoadInlineStyle(thisContent, uin, mLineNumber, title, media,
    rv = doc->CSSLoader()->
      LoadInlineStyle(thisContent, uin, mLineNumber, title, media,
                      ((blockParser) ? parser.get() : nsnull),
                      doneLoading, aObserver);
  }
  else {
    rv = loader->LoadStyleLink(thisContent, uri, title, media,
    rv = doc->CSSLoader()->
      LoadStyleLink(thisContent, uri, title, media,
                    ((blockParser) ? parser.get() : nsnull),
                    doneLoading, aObserver);
  }
Loading