diff --git a/chrome/nsChromeRegistry.cpp b/chrome/nsChromeRegistry.cpp index 4ecb3bd2953c3..59519673019ed 100644 --- a/chrome/nsChromeRegistry.cpp +++ b/chrome/nsChromeRegistry.cpp @@ -17,7 +17,6 @@ #include "nsString.h" #include "nsQueryObject.h" -#include "mozilla/CSSStyleSheet.h" #include "mozilla/dom/URL.h" #include "nsIConsoleService.h" #include "nsIDocument.h" @@ -30,12 +29,14 @@ #include "nsIScriptError.h" #include "nsIWindowMediator.h" #include "nsIPrefService.h" +#include "mozilla/StyleSheetHandle.h" +#include "mozilla/StyleSheetHandleInlines.h" nsChromeRegistry* nsChromeRegistry::gChromeRegistry; // DO NOT use namespace mozilla; it'll break due to a naming conflict between // mozilla::TextRange and a TextRange in OSX headers. -using mozilla::CSSStyleSheet; +using mozilla::StyleSheetHandle; using mozilla::dom::IsChromeURI; //////////////////////////////////////////////////////////////////////////////// @@ -401,19 +402,18 @@ nsresult nsChromeRegistry::RefreshWindow(nsPIDOMWindowOuter* aWindow) nsCOMPtr shell = document->GetShell(); if (shell) { // Reload only the chrome URL agent style sheets. - nsTArray> agentSheets; + nsTArray agentSheets; rv = shell->GetAgentStyleSheets(agentSheets); NS_ENSURE_SUCCESS(rv, rv); - nsTArray> newAgentSheets; - for (CSSStyleSheet* sheet : agentSheets) { + nsTArray newAgentSheets; + for (StyleSheetHandle sheet : agentSheets) { nsIURI* uri = sheet->GetSheetURI(); if (IsChromeURI(uri)) { // Reload the sheet. - RefPtr newSheet; - rv = document->LoadChromeSheetSync(uri, true, - getter_AddRefs(newSheet)); + StyleSheetHandle::RefPtr newSheet; + rv = document->LoadChromeSheetSync(uri, true, &newSheet); if (NS_FAILED(rv)) return rv; if (newSheet) { rv = newAgentSheets.AppendElement(newSheet) ? NS_OK : NS_ERROR_FAILURE; @@ -433,27 +433,27 @@ nsresult nsChromeRegistry::RefreshWindow(nsPIDOMWindowOuter* aWindow) int32_t count = document->GetNumberOfStyleSheets(); // Build an array of style sheets we need to reload. - nsTArray> oldSheets(count); - nsTArray> newSheets(count); + nsTArray oldSheets(count); + nsTArray newSheets(count); // Iterate over the style sheets. for (int32_t i = 0; i < count; i++) { // Get the style sheet - CSSStyleSheet* styleSheet = document->GetStyleSheetAt(i); + StyleSheetHandle styleSheet = document->GetStyleSheetAt(i); oldSheets.AppendElement(styleSheet); } // Iterate over our old sheets and kick off a sync load of the new // sheet if and only if it's a chrome URL. - for (CSSStyleSheet* sheet : oldSheets) { + for (StyleSheetHandle sheet : oldSheets) { nsIURI* uri = sheet ? sheet->GetOriginalURI() : nullptr; if (uri && IsChromeURI(uri)) { // Reload the sheet. - RefPtr newSheet; + StyleSheetHandle::RefPtr newSheet; // XXX what about chrome sheets that have a title or are disabled? This // only works by sheer dumb luck. - document->LoadChromeSheetSync(uri, false, getter_AddRefs(newSheet)); + document->LoadChromeSheetSync(uri, false, &newSheet); // Even if it's null, we put in in there. newSheets.AppendElement(newSheet); } else { diff --git a/dom/base/ShadowRoot.cpp b/dom/base/ShadowRoot.cpp index ed60e55ae27b9..120aeb34d2fb5 100644 --- a/dom/base/ShadowRoot.cpp +++ b/dom/base/ShadowRoot.cpp @@ -17,6 +17,8 @@ #include "mozilla/dom/HTMLContentElement.h" #include "mozilla/dom/HTMLShadowElement.h" #include "nsXBLPrototypeBinding.h" +#include "mozilla/StyleSheetHandle.h" +#include "mozilla/StyleSheetHandleInlines.h" using namespace mozilla; using namespace mozilla::dom; @@ -130,7 +132,7 @@ ShadowRoot::StyleSheetChanged() } void -ShadowRoot::InsertSheet(CSSStyleSheet* aSheet, +ShadowRoot::InsertSheet(StyleSheetHandle aSheet, nsIContent* aLinkingContent) { nsCOMPtr @@ -148,8 +150,8 @@ ShadowRoot::InsertSheet(CSSStyleSheet* aSheet, break; } - nsINode* sheetOwnerNode = mProtoBinding->StyleSheetAt(i)->GetOwnerNode(); - if (nsContentUtils::PositionIsBefore(aLinkingContent, sheetOwnerNode)) { + nsINode* sheetOwningNode = mProtoBinding->StyleSheetAt(i)->GetOwnerNode(); + if (nsContentUtils::PositionIsBefore(aLinkingContent, sheetOwningNode)) { mProtoBinding->InsertStyleSheetAt(i, aSheet); break; } @@ -161,7 +163,7 @@ ShadowRoot::InsertSheet(CSSStyleSheet* aSheet, } void -ShadowRoot::RemoveSheet(CSSStyleSheet* aSheet) +ShadowRoot::RemoveSheet(StyleSheetHandle aSheet) { mProtoBinding->RemoveStyleSheet(aSheet); @@ -752,7 +754,14 @@ ShadowRootStyleSheetList::IndexedGetter(uint32_t aIndex, bool& aFound) return nullptr; } - return mShadowRoot->mProtoBinding->StyleSheetAt(aIndex); + // XXXheycam Return null until ServoStyleSheet implements the right + // DOM interfaces. + StyleSheetHandle sheet = mShadowRoot->mProtoBinding->StyleSheetAt(aIndex); + if (sheet->IsServo()) { + NS_ERROR("stylo: can't return ServoStyleSheets to script yet"); + return nullptr; + } + return sheet->AsGecko(); } uint32_t diff --git a/dom/base/ShadowRoot.h b/dom/base/ShadowRoot.h index a2b71244c5fd6..cbf4cfb088009 100644 --- a/dom/base/ShadowRoot.h +++ b/dom/base/ShadowRoot.h @@ -9,6 +9,7 @@ #include "mozilla/dom/DocumentFragment.h" #include "mozilla/dom/StyleSheetList.h" +#include "mozilla/StyleSheetHandle.h" #include "nsCOMPtr.h" #include "nsCycleCollectionParticipant.h" #include "nsTHashtable.h" @@ -45,8 +46,8 @@ class ShadowRoot final : public DocumentFragment, void AddToIdTable(Element* aElement, nsIAtom* aId); void RemoveFromIdTable(Element* aElement, nsIAtom* aId); - void InsertSheet(CSSStyleSheet* aSheet, nsIContent* aLinkingContent); - void RemoveSheet(CSSStyleSheet* aSheet); + void InsertSheet(StyleSheetHandle aSheet, nsIContent* aLinkingContent); + void RemoveSheet(StyleSheetHandle aSheet); bool ApplyAuthorStyles(); void SetApplyAuthorStyles(bool aApplyAuthorStyles); StyleSheetList* StyleSheets(); diff --git a/dom/base/nsContentSink.cpp b/dom/base/nsContentSink.cpp index 1e40b73a37333..7a80464dfe884 100644 --- a/dom/base/nsContentSink.cpp +++ b/dom/base/nsContentSink.cpp @@ -213,7 +213,7 @@ nsContentSink::Init(nsIDocument* aDoc, } NS_IMETHODIMP -nsContentSink::StyleSheetLoaded(CSSStyleSheet* aSheet, +nsContentSink::StyleSheetLoaded(StyleSheetHandle aSheet, bool aWasAlternate, nsresult aStatus) { diff --git a/dom/base/nsContentSink.h b/dom/base/nsContentSink.h index e65c6f7edabfd..a5b1e2ab7c864 100644 --- a/dom/base/nsContentSink.h +++ b/dom/base/nsContentSink.h @@ -85,7 +85,7 @@ class nsContentSink : public nsICSSLoaderObserver, NS_DECL_NSITIMERCALLBACK // nsICSSLoaderObserver - NS_IMETHOD StyleSheetLoaded(mozilla::CSSStyleSheet* aSheet, + NS_IMETHOD StyleSheetLoaded(mozilla::StyleSheetHandle aSheet, bool aWasAlternate, nsresult aStatus) override; diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp index 7032fbb875d12..fa9416bb5a29f 100644 --- a/dom/base/nsDocument.cpp +++ b/dom/base/nsDocument.cpp @@ -245,6 +245,8 @@ #include "nsISupportsPrimitives.h" #include "mozilla/StyleSetHandle.h" #include "mozilla/StyleSetHandleInlines.h" +#include "mozilla/StyleSheetHandle.h" +#include "mozilla/StyleSheetHandleInlines.h" #include "mozilla/DocLoadingTimelineMarker.h" @@ -733,10 +735,16 @@ nsDOMStyleSheetList::IndexedGetter(uint32_t aIndex, bool& aFound) } aFound = true; - CSSStyleSheet* sheet = mDocument->GetStyleSheetAt(aIndex); + StyleSheetHandle sheet = mDocument->GetStyleSheetAt(aIndex); NS_ASSERTION(sheet, "Must have a sheet"); - return static_cast(sheet); + // XXXheycam Return null until ServoStyleSheet implements the right DOM + // interfaces. + if (sheet->IsServo()) { + NS_ERROR("stylo: can't return a ServoStyleSheet to the DOM yet"); + return nullptr; + } + return sheet->AsGecko(); } void @@ -746,7 +754,7 @@ nsDOMStyleSheetList::NodeWillBeDestroyed(const nsINode *aNode) } void -nsDOMStyleSheetList::StyleSheetAdded(CSSStyleSheet* aStyleSheet, +nsDOMStyleSheetList::StyleSheetAdded(StyleSheetHandle aStyleSheet, bool aDocumentSheet) { if (aDocumentSheet && -1 != mLength) { @@ -755,7 +763,7 @@ nsDOMStyleSheetList::StyleSheetAdded(CSSStyleSheet* aStyleSheet, } void -nsDOMStyleSheetList::StyleSheetRemoved(CSSStyleSheet* aStyleSheet, +nsDOMStyleSheetList::StyleSheetRemoved(StyleSheetHandle aStyleSheet, bool aDocumentSheet) { if (aDocumentSheet && -1 != mLength) { @@ -1322,9 +1330,14 @@ nsDOMStyleSheetSetList::EnsureFresh() int32_t count = mDocument->GetNumberOfStyleSheets(); nsAutoString title; for (int32_t index = 0; index < count; index++) { - CSSStyleSheet* sheet = mDocument->GetStyleSheetAt(index); + StyleSheetHandle sheet = mDocument->GetStyleSheetAt(index); NS_ASSERTION(sheet, "Null sheet in sheet list!"); - sheet->GetTitle(title); + // XXXheycam ServoStyleSheets don't expose their title yet. + if (sheet->IsServo()) { + NS_ERROR("stylo: ServoStyleSets don't expose their title yet"); + continue; + } + sheet->AsGecko()->GetTitle(title); if (!title.IsEmpty() && !mNames.Contains(title) && !Add(title)) { return; } @@ -1604,7 +1617,7 @@ nsDocument::~nsDocument() mCachedRootElement = nullptr; // Let the stylesheets know we're going away - for (CSSStyleSheet* sheet : mStyleSheets) { + for (StyleSheetHandle sheet : mStyleSheets) { sheet->SetOwningDocument(nullptr); } if (mAttrStyleSheet) { @@ -2282,7 +2295,7 @@ void nsDocument::RemoveDocStyleSheetsFromStyleSets() { // The stylesheets should forget us - for (CSSStyleSheet* sheet : Reversed(mStyleSheets)) { + for (StyleSheetHandle sheet : Reversed(mStyleSheets)) { sheet->SetOwningDocument(nullptr); if (sheet->IsApplicable()) { @@ -2297,11 +2310,11 @@ nsDocument::RemoveDocStyleSheetsFromStyleSets() void nsDocument::RemoveStyleSheetsFromStyleSets( - nsTArray>& aSheets, + nsTArray& aSheets, SheetType aType) { // The stylesheets should forget us - for (CSSStyleSheet* sheet : Reversed(aSheets)) { + for (StyleSheetHandle sheet : Reversed(aSheets)) { sheet->SetOwningDocument(nullptr); if (sheet->IsApplicable()) { @@ -2368,10 +2381,10 @@ nsDocument::ResetStylesheetsToURI(nsIURI* aURI) static void AppendSheetsToStyleSet(StyleSetHandle aStyleSet, - const nsTArray>& aSheets, + const nsTArray& aSheets, SheetType aType) { - for (CSSStyleSheet* sheet : Reversed(aSheets)) { + for (StyleSheetHandle sheet : Reversed(aSheets)) { aStyleSet->AppendStyleSheet(aType, sheet); } } @@ -2384,7 +2397,7 @@ nsDocument::FillStyleSet(StyleSetHandle aStyleSet) NS_PRECONDITION(aStyleSet->SheetCount(SheetType::Doc) == 0, "Style set already has document sheets?"); - for (CSSStyleSheet* sheet : Reversed(mStyleSheets)) { + for (StyleSheetHandle sheet : Reversed(mStyleSheets)) { if (sheet->IsApplicable()) { aStyleSet->AddDocStyleSheet(sheet, this); } @@ -2392,13 +2405,13 @@ nsDocument::FillStyleSet(StyleSetHandle aStyleSet) nsStyleSheetService *sheetService = nsStyleSheetService::GetInstance(); if (sheetService) { - for (CSSStyleSheet* sheet : *sheetService->AuthorStyleSheets()) { + for (StyleSheetHandle sheet : *sheetService->AuthorStyleSheets()) { aStyleSet->AppendStyleSheet(SheetType::Doc, sheet); } } // Iterate backwards to maintain order - for (CSSStyleSheet* sheet : Reversed(mOnDemandBuiltInUASheets)) { + for (StyleSheetHandle sheet : Reversed(mOnDemandBuiltInUASheets)) { if (sheet->IsApplicable()) { aStyleSet->PrependStyleSheet(SheetType::Agent, sheet); } @@ -4051,7 +4064,7 @@ nsDocument::RemoveChildAt(uint32_t aIndex, bool aNotify) } void -nsDocument::EnsureOnDemandBuiltInUASheet(CSSStyleSheet* aSheet) +nsDocument::EnsureOnDemandBuiltInUASheet(StyleSheetHandle aSheet) { if (mOnDemandBuiltInUASheets.Contains(aSheet)) { return; @@ -4062,7 +4075,7 @@ nsDocument::EnsureOnDemandBuiltInUASheet(CSSStyleSheet* aSheet) } void -nsDocument::AddOnDemandBuiltInUASheet(CSSStyleSheet* aSheet) +nsDocument::AddOnDemandBuiltInUASheet(StyleSheetHandle aSheet) { MOZ_ASSERT(!mOnDemandBuiltInUASheets.Contains(aSheet)); @@ -4091,20 +4104,20 @@ nsDocument::GetNumberOfStyleSheets() const return mStyleSheets.Length(); } -CSSStyleSheet* +StyleSheetHandle nsDocument::GetStyleSheetAt(int32_t aIndex) const { - return mStyleSheets.SafeElementAt(aIndex, nullptr); + return mStyleSheets.SafeElementAt(aIndex, StyleSheetHandle()); } int32_t -nsDocument::GetIndexOfStyleSheet(CSSStyleSheet* aSheet) const +nsDocument::GetIndexOfStyleSheet(StyleSheetHandle aSheet) const { return mStyleSheets.IndexOf(aSheet); } void -nsDocument::AddStyleSheetToStyleSets(CSSStyleSheet* aSheet) +nsDocument::AddStyleSheetToStyleSets(StyleSheetHandle aSheet) { nsCOMPtr shell = GetShell(); if (shell) { @@ -4117,7 +4130,11 @@ nsDocument::AddStyleSheetToStyleSets(CSSStyleSheet* aSheet) className##Init init; \ init.mBubbles = true; \ init.mCancelable = true; \ - init.mStylesheet = aSheet; \ + /* XXXheycam ServoStyleSheet doesn't implement DOM interfaces yet */ \ + if (aSheet->IsServo()) { \ + NS_ERROR("stylo: can't dispatch events for ServoStyleSheets yet"); \ + } \ + init.mStylesheet = aSheet->IsGecko() ? aSheet->AsGecko() : nullptr; \ init.memberName = argName; \ \ RefPtr event = \ @@ -4131,7 +4148,7 @@ nsDocument::AddStyleSheetToStyleSets(CSSStyleSheet* aSheet) } while (0); void -nsDocument::NotifyStyleSheetAdded(CSSStyleSheet* aSheet, bool aDocumentSheet) +nsDocument::NotifyStyleSheetAdded(StyleSheetHandle aSheet, bool aDocumentSheet) { NS_DOCUMENT_NOTIFY_OBSERVERS(StyleSheetAdded, (aSheet, aDocumentSheet)); @@ -4144,7 +4161,7 @@ nsDocument::NotifyStyleSheetAdded(CSSStyleSheet* aSheet, bool aDocumentSheet) } void -nsDocument::NotifyStyleSheetRemoved(CSSStyleSheet* aSheet, bool aDocumentSheet) +nsDocument::NotifyStyleSheetRemoved(StyleSheetHandle aSheet, bool aDocumentSheet) { NS_DOCUMENT_NOTIFY_OBSERVERS(StyleSheetRemoved, (aSheet, aDocumentSheet)); @@ -4157,7 +4174,7 @@ nsDocument::NotifyStyleSheetRemoved(CSSStyleSheet* aSheet, bool aDocumentSheet) } void -nsDocument::AddStyleSheet(CSSStyleSheet* aSheet) +nsDocument::AddStyleSheet(StyleSheetHandle aSheet) { NS_PRECONDITION(aSheet, "null arg"); mStyleSheets.AppendElement(aSheet); @@ -4171,7 +4188,7 @@ nsDocument::AddStyleSheet(CSSStyleSheet* aSheet) } void -nsDocument::RemoveStyleSheetFromStyleSets(CSSStyleSheet* aSheet) +nsDocument::RemoveStyleSheetFromStyleSets(StyleSheetHandle aSheet) { nsCOMPtr shell = GetShell(); if (shell) { @@ -4180,10 +4197,10 @@ nsDocument::RemoveStyleSheetFromStyleSets(CSSStyleSheet* aSheet) } void -nsDocument::RemoveStyleSheet(CSSStyleSheet* aSheet) +nsDocument::RemoveStyleSheet(StyleSheetHandle aSheet) { NS_PRECONDITION(aSheet, "null arg"); - RefPtr sheet = aSheet; // hold ref so it won't die too soon + StyleSheetHandle::RefPtr sheet = aSheet; // hold ref so it won't die too soon if (!mStyleSheets.RemoveElement(aSheet)) { NS_ASSERTION(mInUnlinkOrDeletion, "stylesheet not found"); @@ -4202,8 +4219,8 @@ nsDocument::RemoveStyleSheet(CSSStyleSheet* aSheet) } void -nsDocument::UpdateStyleSheets(nsTArray>& aOldSheets, - nsTArray>& aNewSheets) +nsDocument::UpdateStyleSheets(nsTArray& aOldSheets, + nsTArray& aNewSheets) { BeginUpdate(UPDATE_STYLE); @@ -4212,7 +4229,7 @@ nsDocument::UpdateStyleSheets(nsTArray>& aOldSheets, "The lists must be the same length!"); int32_t count = aOldSheets.Length(); - RefPtr oldSheet; + StyleSheetHandle::RefPtr oldSheet; int32_t i; for (i = 0; i < count; ++i) { oldSheet = aOldSheets[i]; @@ -4223,7 +4240,7 @@ nsDocument::UpdateStyleSheets(nsTArray>& aOldSheets, RemoveStyleSheet(oldSheet); // This does the right notifications // Now put the new one in its place. If it's null, just ignore it. - CSSStyleSheet* newSheet = aNewSheets[i]; + StyleSheetHandle newSheet = aNewSheets[i]; if (newSheet) { mStyleSheets.InsertElementAt(oldIndex, newSheet); newSheet->SetOwningDocument(this); @@ -4239,7 +4256,7 @@ nsDocument::UpdateStyleSheets(nsTArray>& aOldSheets, } void -nsDocument::InsertStyleSheetAt(CSSStyleSheet* aSheet, int32_t aIndex) +nsDocument::InsertStyleSheetAt(StyleSheetHandle aSheet, int32_t aIndex) { NS_PRECONDITION(aSheet, "null ptr"); @@ -4256,7 +4273,7 @@ nsDocument::InsertStyleSheetAt(CSSStyleSheet* aSheet, int32_t aIndex) void -nsDocument::SetStyleSheetApplicableState(CSSStyleSheet* aSheet, +nsDocument::SetStyleSheetApplicableState(StyleSheetHandle aSheet, bool aApplicable) { NS_PRECONDITION(aSheet, "null arg"); @@ -4322,7 +4339,7 @@ ConvertAdditionalSheetType(nsIDocument::additionalSheetType aType) } static int32_t -FindSheet(const nsTArray>& aSheets, nsIURI* aSheetURI) +FindSheet(const nsTArray& aSheets, nsIURI* aSheetURI) { for (int32_t i = aSheets.Length() - 1; i >= 0; i-- ) { bool bEqual; @@ -4366,9 +4383,8 @@ nsDocument::LoadAdditionalStyleSheet(additionalSheetType aType, MOZ_CRASH("impossible value for aType"); } - RefPtr sheet; - nsresult rv = loader->LoadSheetSync(aSheetURI, parsingMode, true, - getter_AddRefs(sheet)); + StyleSheetHandle::RefPtr sheet; + nsresult rv = loader->LoadSheetSync(aSheetURI, parsingMode, true, &sheet); NS_ENSURE_SUCCESS(rv, rv); sheet->SetOwningDocument(this); @@ -4378,7 +4394,7 @@ nsDocument::LoadAdditionalStyleSheet(additionalSheetType aType, } nsresult -nsDocument::AddAdditionalStyleSheet(additionalSheetType aType, CSSStyleSheet* aSheet) +nsDocument::AddAdditionalStyleSheet(additionalSheetType aType, StyleSheetHandle aSheet) { if (mAdditionalSheets[aType].Contains(aSheet)) return NS_ERROR_INVALID_ARG; @@ -4407,11 +4423,11 @@ nsDocument::RemoveAdditionalStyleSheet(additionalSheetType aType, nsIURI* aSheet { MOZ_ASSERT(aSheetURI); - nsTArray>& sheets = mAdditionalSheets[aType]; + nsTArray& sheets = mAdditionalSheets[aType]; int32_t i = FindSheet(mAdditionalSheets[aType], aSheetURI); if (i >= 0) { - RefPtr sheetRef = sheets[i]; + StyleSheetHandle::RefPtr sheetRef = sheets[i]; sheets.RemoveElementAt(i); BeginUpdate(UPDATE_STYLE); @@ -4433,10 +4449,10 @@ nsDocument::RemoveAdditionalStyleSheet(additionalSheetType aType, nsIURI* aSheet } } -CSSStyleSheet* +StyleSheetHandle nsDocument::FirstAdditionalAuthorSheet() { - return mAdditionalSheets[eAuthorSheet].SafeElementAt(0, nullptr); + return mAdditionalSheets[eAuthorSheet].SafeElementAt(0, StyleSheetHandle()); } nsIGlobalObject* @@ -5192,7 +5208,7 @@ nsDocument::DocumentStatesChanged(EventStates aStateMask) } void -nsDocument::StyleRuleChanged(CSSStyleSheet* aSheet, +nsDocument::StyleRuleChanged(StyleSheetHandle aSheet, css::Rule* aStyleRule) { NS_DOCUMENT_NOTIFY_OBSERVERS(StyleRuleChanged, (aSheet)); @@ -5206,7 +5222,7 @@ nsDocument::StyleRuleChanged(CSSStyleSheet* aSheet, } void -nsDocument::StyleRuleAdded(CSSStyleSheet* aSheet, +nsDocument::StyleRuleAdded(StyleSheetHandle aSheet, css::Rule* aStyleRule) { NS_DOCUMENT_NOTIFY_OBSERVERS(StyleRuleAdded, (aSheet)); @@ -5221,7 +5237,7 @@ nsDocument::StyleRuleAdded(CSSStyleSheet* aSheet, } void -nsDocument::StyleRuleRemoved(CSSStyleSheet* aSheet, +nsDocument::StyleRuleRemoved(StyleSheetHandle aSheet, css::Rule* aStyleRule) { NS_DOCUMENT_NOTIFY_OBSERVERS(StyleRuleRemoved, (aSheet)); @@ -6462,17 +6478,23 @@ nsIDocument::GetSelectedStyleSheetSet(nsAString& aSheetSet) int32_t count = GetNumberOfStyleSheets(); nsAutoString title; for (int32_t index = 0; index < count; index++) { - CSSStyleSheet* sheet = GetStyleSheetAt(index); + StyleSheetHandle sheet = GetStyleSheetAt(index); NS_ASSERTION(sheet, "Null sheet in sheet list!"); + // XXXheycam Make this work with ServoStyleSheets. + if (sheet->IsServo()) { + NS_ERROR("stylo: can't handle alternate ServoStyleSheets yet"); + continue; + } + bool disabled; - sheet->GetDisabled(&disabled); + sheet->AsGecko()->GetDisabled(&disabled); if (disabled) { // Disabled sheets don't affect the currently selected set continue; } - sheet->GetTitle(title); + sheet->AsGecko()->GetTitle(title); if (aSheetSet.IsEmpty()) { aSheetSet = title; @@ -6576,11 +6598,18 @@ nsDocument::EnableStyleSheetsForSetInternal(const nsAString& aSheetSet, int32_t count = GetNumberOfStyleSheets(); nsAutoString title; for (int32_t index = 0; index < count; index++) { - CSSStyleSheet* sheet = GetStyleSheetAt(index); + StyleSheetHandle sheet = GetStyleSheetAt(index); NS_ASSERTION(sheet, "Null sheet in sheet list!"); - sheet->GetTitle(title); + + // XXXheycam Make this work with ServoStyleSheets. + if (sheet->IsServo()) { + NS_ERROR("stylo: can't handle alternate ServoStyleSheets yet"); + continue; + } + + sheet->AsGecko()->GetTitle(title); if (!title.IsEmpty()) { - sheet->SetEnabled(title.Equals(aSheetSet)); + sheet->AsGecko()->SetEnabled(title.Equals(aSheetSet)); } } if (aUpdateCSSLoader) { @@ -9854,7 +9883,7 @@ class StubCSSLoaderObserver final : public nsICSSLoaderObserver { ~StubCSSLoaderObserver() {} public: NS_IMETHOD - StyleSheetLoaded(CSSStyleSheet*, bool, nsresult) override + StyleSheetLoaded(StyleSheetHandle, bool, nsresult) override { return NS_OK; } @@ -9883,12 +9912,12 @@ nsDocument::PreloadStyle(nsIURI* uri, const nsAString& charset, nsresult nsDocument::LoadChromeSheetSync(nsIURI* uri, bool isAgentSheet, - CSSStyleSheet** sheet) + mozilla::StyleSheetHandle::RefPtr* aSheet) { css::SheetParsingMode mode = isAgentSheet ? css::eAgentSheetFeatures : css::eAuthorSheetFeatures; - return CSSLoader()->LoadSheetSync(uri, mode, isAgentSheet, sheet); + return CSSLoader()->LoadSheetSync(uri, mode, isAgentSheet, aSheet); } class nsDelayedEventDispatcher : public nsRunnable @@ -10214,28 +10243,38 @@ nsIDocument::CreateStaticClone(nsIDocShell* aCloneContainer) int32_t sheetsCount = GetNumberOfStyleSheets(); for (int32_t i = 0; i < sheetsCount; ++i) { - RefPtr sheet = GetStyleSheetAt(i); + StyleSheetHandle::RefPtr sheet = GetStyleSheetAt(i); if (sheet) { if (sheet->IsApplicable()) { - RefPtr clonedSheet = - sheet->Clone(nullptr, nullptr, clonedDoc, nullptr); - NS_WARN_IF_FALSE(clonedSheet, "Cloning a stylesheet didn't work!"); - if (clonedSheet) { - clonedDoc->AddStyleSheet(clonedSheet); + // XXXheycam Need to make ServoStyleSheet cloning work. + if (sheet->IsGecko()) { + RefPtr clonedSheet = + sheet->AsGecko()->Clone(nullptr, nullptr, clonedDoc, nullptr); + NS_WARN_IF_FALSE(clonedSheet, "Cloning a stylesheet didn't work!"); + if (clonedSheet) { + clonedDoc->AddStyleSheet(clonedSheet); + } + } else { + NS_ERROR("stylo: ServoStyleSheet doesn't support cloning"); } } } } // Iterate backwards to maintain order - for (CSSStyleSheet* sheet : Reversed(thisAsDoc->mOnDemandBuiltInUASheets)) { + for (StyleSheetHandle sheet : Reversed(thisAsDoc->mOnDemandBuiltInUASheets)) { if (sheet) { if (sheet->IsApplicable()) { - RefPtr clonedSheet = - sheet->Clone(nullptr, nullptr, clonedDoc, nullptr); - NS_WARN_IF_FALSE(clonedSheet, "Cloning a stylesheet didn't work!"); - if (clonedSheet) { - clonedDoc->AddOnDemandBuiltInUASheet(clonedSheet); + // XXXheycam Need to make ServoStyleSheet cloning work. + if (sheet->IsGecko()) { + RefPtr clonedSheet = + sheet->AsGecko()->Clone(nullptr, nullptr, clonedDoc, nullptr); + NS_WARN_IF_FALSE(clonedSheet, "Cloning a stylesheet didn't work!"); + if (clonedSheet) { + clonedDoc->AddOnDemandBuiltInUASheet(clonedSheet); + } + } else { + NS_ERROR("stylo: ServoStyleSheet doesn't support cloning"); } } } @@ -12366,7 +12405,7 @@ nsDocument::OnAppThemeChanged() } for (int32_t i = 0; i < GetNumberOfStyleSheets(); i++) { - RefPtr sheet = GetStyleSheetAt(i); + StyleSheetHandle::RefPtr sheet = GetStyleSheetAt(i); if (!sheet) { continue; } @@ -12733,12 +12772,12 @@ nsIDocument::DocAddSizeOfIncludingThis(nsWindowSizes* aWindowSizes) const } static size_t -SizeOfOwnedSheetArrayExcludingThis(const nsTArray>& aSheets, +SizeOfOwnedSheetArrayExcludingThis(const nsTArray& aSheets, MallocSizeOf aMallocSizeOf) { size_t n = 0; n += aSheets.ShallowSizeOfExcludingThis(aMallocSizeOf); - for (CSSStyleSheet* sheet : aSheets) { + for (StyleSheetHandle sheet : aSheets) { if (!sheet->GetOwningDocument()) { // Avoid over-reporting shared sheets. continue; @@ -13419,3 +13458,15 @@ nsIDocument::ReportHasScrollLinkedEffect() this, nsContentUtils::eLAYOUT_PROPERTIES, "ScrollLinkedEffectFound2"); } + +mozilla::StyleBackendType +nsIDocument::GetStyleBackendType() const +{ + if (!mPresShell) { +#ifdef MOZ_STYLO + NS_WARNING("GetStyleBackendType() called on document without a pres shell"); +#endif + return StyleBackendType::Gecko; + } + return mPresShell->StyleSet()->BackendType(); +} diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h index 328dc5e835754..b3dc7f0f7ece9 100644 --- a/dom/base/nsDocument.h +++ b/dom/base/nsDocument.h @@ -797,36 +797,36 @@ class nsDocument : public nsIDocument, virtual Element* FindContentForSubDocument(nsIDocument *aDocument) const override; virtual Element* GetRootElementInternal() const override; - virtual void EnsureOnDemandBuiltInUASheet(mozilla::CSSStyleSheet* aSheet) override; + virtual void EnsureOnDemandBuiltInUASheet(mozilla::StyleSheetHandle aSheet) override; /** * Get the (document) style sheets owned by this document. * These are ordered, highest priority last */ virtual int32_t GetNumberOfStyleSheets() const override; - virtual mozilla::CSSStyleSheet* GetStyleSheetAt(int32_t aIndex) const override; - virtual int32_t GetIndexOfStyleSheet(mozilla::CSSStyleSheet* aSheet) const override; - virtual void AddStyleSheet(mozilla::CSSStyleSheet* aSheet) override; - virtual void RemoveStyleSheet(mozilla::CSSStyleSheet* aSheet) override; + virtual mozilla::StyleSheetHandle GetStyleSheetAt(int32_t aIndex) const override; + virtual int32_t GetIndexOfStyleSheet(mozilla::StyleSheetHandle aSheet) const override; + virtual void AddStyleSheet(mozilla::StyleSheetHandle aSheet) override; + virtual void RemoveStyleSheet(mozilla::StyleSheetHandle aSheet) override; virtual void UpdateStyleSheets( - nsTArray>& aOldSheets, - nsTArray>& aNewSheets) override; - virtual void AddStyleSheetToStyleSets(mozilla::CSSStyleSheet* aSheet); - virtual void RemoveStyleSheetFromStyleSets(mozilla::CSSStyleSheet* aSheet); + nsTArray& aOldSheets, + nsTArray& aNewSheets) override; + virtual void AddStyleSheetToStyleSets(mozilla::StyleSheetHandle aSheet); + virtual void RemoveStyleSheetFromStyleSets(mozilla::StyleSheetHandle aSheet); - virtual void InsertStyleSheetAt(mozilla::CSSStyleSheet* aSheet, + virtual void InsertStyleSheetAt(mozilla::StyleSheetHandle aSheet, int32_t aIndex) override; - virtual void SetStyleSheetApplicableState(mozilla::CSSStyleSheet* aSheet, + virtual void SetStyleSheetApplicableState(mozilla::StyleSheetHandle aSheet, bool aApplicable) override; virtual nsresult LoadAdditionalStyleSheet(additionalSheetType aType, nsIURI* aSheetURI) override; virtual nsresult AddAdditionalStyleSheet(additionalSheetType aType, - mozilla::CSSStyleSheet* aSheet) override; + mozilla::StyleSheetHandle aSheet) override; virtual void RemoveAdditionalStyleSheet(additionalSheetType aType, nsIURI* sheetURI) override; - virtual mozilla::CSSStyleSheet* FirstAdditionalAuthorSheet() override; + virtual mozilla::StyleSheetHandle FirstAdditionalAuthorSheet() override; virtual nsIChannel* GetChannel() const override { return mChannel; @@ -886,11 +886,11 @@ class nsDocument : public nsIDocument, virtual void DocumentStatesChanged( mozilla::EventStates aStateMask) override; - virtual void StyleRuleChanged(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleChanged(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) override; - virtual void StyleRuleAdded(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleAdded(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) override; - virtual void StyleRuleRemoved(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleRemoved(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) override; virtual void FlushPendingNotifications(mozFlushType aType) override; @@ -962,7 +962,7 @@ class nsDocument : public nsIDocument, void ReportUseCounters(); private: - void AddOnDemandBuiltInUASheet(mozilla::CSSStyleSheet* aSheet); + void AddOnDemandBuiltInUASheet(mozilla::StyleSheetHandle aSheet); nsRadioGroupStruct* GetRadioGroupInternal(const nsAString& aName) const; void SendToConsole(nsCOMArray& aMessages); @@ -1144,7 +1144,7 @@ class nsDocument : public nsIDocument, const nsAString& aIntegrity) override; virtual nsresult LoadChromeSheetSync(nsIURI* uri, bool isAgentSheet, - mozilla::CSSStyleSheet** sheet) override; + mozilla::StyleSheetHandle::RefPtr* aSheet) override; virtual nsISupports* GetCurrentContentSink() override; @@ -1494,7 +1494,7 @@ class nsDocument : public nsIDocument, void RemoveDocStyleSheetsFromStyleSets(); void RemoveStyleSheetsFromStyleSets( - nsTArray>& aSheets, + nsTArray& aSheets, mozilla::SheetType aType); void ResetStylesheetsToURI(nsIURI* aURI); void FillStyleSet(mozilla::StyleSetHandle aStyleSet); @@ -1548,9 +1548,9 @@ class nsDocument : public nsIDocument, // EndLoad() has already happened. nsWeakPtr mWeakSink; - nsTArray> mStyleSheets; - nsTArray> mOnDemandBuiltInUASheets; - nsTArray> mAdditionalSheets[AdditionalSheetTypeCount]; + nsTArray mStyleSheets; + nsTArray mOnDemandBuiltInUASheets; + nsTArray mAdditionalSheets[AdditionalSheetTypeCount]; // Array of observers nsTObserverArray mObservers; @@ -1709,8 +1709,8 @@ class nsDocument : public nsIDocument, friend class nsUnblockOnloadEvent; // Recomputes the visibility state but doesn't set the new value. mozilla::dom::VisibilityState GetVisibilityState() const; - void NotifyStyleSheetAdded(mozilla::CSSStyleSheet* aSheet, bool aDocumentSheet); - void NotifyStyleSheetRemoved(mozilla::CSSStyleSheet* aSheet, bool aDocumentSheet); + void NotifyStyleSheetAdded(mozilla::StyleSheetHandle aSheet, bool aDocumentSheet); + void NotifyStyleSheetRemoved(mozilla::StyleSheetHandle aSheet, bool aDocumentSheet); void PostUnblockOnloadEvent(); void DoUnblockOnload(); diff --git a/dom/base/nsIDocument.h b/dom/base/nsIDocument.h index 797c3188a5af6..46cebf82c5ff1 100644 --- a/dom/base/nsIDocument.h +++ b/dom/base/nsIDocument.h @@ -34,6 +34,8 @@ #include "prclist.h" #include "mozilla/UniquePtr.h" #include "mozilla/CORSMode.h" +#include "mozilla/StyleBackendType.h" +#include "mozilla/StyleSheetHandle.h" #include // for member class gfxUserFontSet; @@ -918,7 +920,7 @@ class nsIDocument : public nsINode * TODO We can get rid of the whole concept of delayed loading if we fix * bug 77999. */ - virtual void EnsureOnDemandBuiltInUASheet(mozilla::CSSStyleSheet* aSheet) = 0; + virtual void EnsureOnDemandBuiltInUASheet(mozilla::StyleSheetHandle aSheet) = 0; /** * Get the number of (document) stylesheets @@ -934,7 +936,7 @@ class nsIDocument : public nsINode * @return the stylesheet at aIndex. Null if aIndex is out of range. * @throws no exceptions */ - virtual mozilla::CSSStyleSheet* GetStyleSheetAt(int32_t aIndex) const = 0; + virtual mozilla::StyleSheetHandle GetStyleSheetAt(int32_t aIndex) const = 0; /** * Insert a sheet at a particular spot in the stylesheet list (zero-based) @@ -943,7 +945,7 @@ class nsIDocument : public nsINode * adjusted for the "special" sheets. * @throws no exceptions */ - virtual void InsertStyleSheetAt(mozilla::CSSStyleSheet* aSheet, + virtual void InsertStyleSheetAt(mozilla::StyleSheetHandle aSheet, int32_t aIndex) = 0; /** @@ -952,7 +954,7 @@ class nsIDocument : public nsINode * @param aSheet the sheet to get the index of * @return aIndex the index of the sheet in the full list */ - virtual int32_t GetIndexOfStyleSheet(mozilla::CSSStyleSheet* aSheet) const = 0; + virtual int32_t GetIndexOfStyleSheet(mozilla::StyleSheetHandle aSheet) const = 0; /** * Replace the stylesheets in aOldSheets with the stylesheets in @@ -963,24 +965,24 @@ class nsIDocument : public nsINode * will simply be removed. */ virtual void UpdateStyleSheets( - nsTArray>& aOldSheets, - nsTArray>& aNewSheets) = 0; + nsTArray& aOldSheets, + nsTArray& aNewSheets) = 0; /** * Add a stylesheet to the document */ - virtual void AddStyleSheet(mozilla::CSSStyleSheet* aSheet) = 0; + virtual void AddStyleSheet(mozilla::StyleSheetHandle aSheet) = 0; /** * Remove a stylesheet from the document */ - virtual void RemoveStyleSheet(mozilla::CSSStyleSheet* aSheet) = 0; + virtual void RemoveStyleSheet(mozilla::StyleSheetHandle aSheet) = 0; /** * Notify the document that the applicable state of the sheet changed * and that observers should be notified and style sets updated */ - virtual void SetStyleSheetApplicableState(mozilla::CSSStyleSheet* aSheet, + virtual void SetStyleSheetApplicableState(mozilla::StyleSheetHandle aSheet, bool aApplicable) = 0; enum additionalSheetType { @@ -993,10 +995,10 @@ class nsIDocument : public nsINode virtual nsresult LoadAdditionalStyleSheet(additionalSheetType aType, nsIURI* aSheetURI) = 0; virtual nsresult AddAdditionalStyleSheet(additionalSheetType aType, - mozilla::CSSStyleSheet* aSheet) = 0; + mozilla::StyleSheetHandle aSheet) = 0; virtual void RemoveAdditionalStyleSheet(additionalSheetType aType, nsIURI* sheetURI) = 0; - virtual mozilla::CSSStyleSheet* FirstAdditionalAuthorSheet() = 0; + virtual mozilla::StyleSheetHandle FirstAdditionalAuthorSheet() = 0; /** * Get this document's CSSLoader. This is guaranteed to not return null. @@ -1005,6 +1007,8 @@ class nsIDocument : public nsINode return mCSSLoader; } + mozilla::StyleBackendType GetStyleBackendType() const; + /** * Get this document's StyleImageLoader. This is guaranteed to not return null. */ @@ -1292,11 +1296,11 @@ class nsIDocument : public nsINode // Observation hooks for style data to propagate notifications // to document observers - virtual void StyleRuleChanged(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleChanged(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) = 0; - virtual void StyleRuleAdded(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleAdded(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) = 0; - virtual void StyleRuleRemoved(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleRuleRemoved(mozilla::StyleSheetHandle aStyleSheet, mozilla::css::Rule* aStyleRule) = 0; /** @@ -2091,7 +2095,7 @@ class nsIDocument : public nsINode * DO NOT USE FOR UNTRUSTED CONTENT. */ virtual nsresult LoadChromeSheetSync(nsIURI* aURI, bool aIsAgentSheet, - mozilla::CSSStyleSheet** aSheet) = 0; + mozilla::StyleSheetHandle::RefPtr* aSheet) = 0; /** * Returns true if the locale used for the document specifies a direction of diff --git a/dom/base/nsIDocumentObserver.h b/dom/base/nsIDocumentObserver.h index 5d6d2542a25ee..0aed2a7cca037 100644 --- a/dom/base/nsIDocumentObserver.h +++ b/dom/base/nsIDocumentObserver.h @@ -7,6 +7,7 @@ #define nsIDocumentObserver_h___ #include "mozilla/EventStates.h" +#include "mozilla/StyleSheetHandle.h" #include "nsISupports.h" #include "nsIMutationObserver.h" @@ -14,7 +15,6 @@ class nsIContent; class nsIDocument; namespace mozilla { -class CSSStyleSheet; namespace css { class Rule; } // namespace css @@ -100,7 +100,7 @@ class nsIDocumentObserver : public nsIMutationObserver * @param aDocumentSheet True if sheet is in document's style sheet list, * false if sheet is not (i.e., UA or user sheet) */ - virtual void StyleSheetAdded(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleSheetAdded(mozilla::StyleSheetHandle aStyleSheet, bool aDocumentSheet) = 0; /** @@ -113,7 +113,7 @@ class nsIDocumentObserver : public nsIMutationObserver * @param aDocumentSheet True if sheet is in document's style sheet list, * false if sheet is not (i.e., UA or user sheet) */ - virtual void StyleSheetRemoved(mozilla::CSSStyleSheet* aStyleSheet, + virtual void StyleSheetRemoved(mozilla::StyleSheetHandle aStyleSheet, bool aDocumentSheet) = 0; /** @@ -125,7 +125,7 @@ class nsIDocumentObserver : public nsIMutationObserver * * @param aStyleSheet the StyleSheet that has changed state */ - virtual void StyleSheetApplicableStateChanged(mozilla::CSSStyleSheet* aStyleSheet) = 0; + virtual void StyleSheetApplicableStateChanged(mozilla::StyleSheetHandle aStyleSheet) = 0; /** * A StyleRule has just been modified within a style sheet. @@ -136,7 +136,7 @@ class nsIDocumentObserver : public nsIMutationObserver * * @param aStyleSheet the StyleSheet that contians the rule */ - virtual void StyleRuleChanged(mozilla::CSSStyleSheet* aStyleSheet) = 0; + virtual void StyleRuleChanged(mozilla::StyleSheetHandle aStyleSheet) = 0; /** * A StyleRule has just been added to a style sheet. @@ -147,7 +147,7 @@ class nsIDocumentObserver : public nsIMutationObserver * * @param aStyleSheet the StyleSheet that has been modified */ - virtual void StyleRuleAdded(mozilla::CSSStyleSheet* aStyleSheet) = 0; + virtual void StyleRuleAdded(mozilla::StyleSheetHandle aStyleSheet) = 0; /** * A StyleRule has just been removed from a style sheet. @@ -158,7 +158,7 @@ class nsIDocumentObserver : public nsIMutationObserver * * @param aStyleSheet the StyleSheet that has been modified */ - virtual void StyleRuleRemoved(mozilla::CSSStyleSheet* aStyleSheet) = 0; + virtual void StyleRuleRemoved(mozilla::StyleSheetHandle aStyleSheet) = 0; }; NS_DEFINE_STATIC_IID_ACCESSOR(nsIDocumentObserver, NS_IDOCUMENT_OBSERVER_IID) @@ -186,25 +186,25 @@ NS_DEFINE_STATIC_IID_ACCESSOR(nsIDocumentObserver, NS_IDOCUMENT_OBSERVER_IID) mozilla::EventStates aStateMask) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLESHEETADDED \ - virtual void StyleSheetAdded(mozilla::CSSStyleSheet* aStyleSheet, \ + virtual void StyleSheetAdded(mozilla::StyleSheetHandle aStyleSheet, \ bool aDocumentSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLESHEETREMOVED \ - virtual void StyleSheetRemoved(mozilla::CSSStyleSheet* aStyleSheet, \ + virtual void StyleSheetRemoved(mozilla::StyleSheetHandle aStyleSheet, \ bool aDocumentSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLESHEETAPPLICABLESTATECHANGED \ virtual void StyleSheetApplicableStateChanged( \ - mozilla::CSSStyleSheet* aStyleSheet) override; + mozilla::StyleSheetHandle aStyleSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLERULECHANGED \ - virtual void StyleRuleChanged(mozilla::CSSStyleSheet* aStyleSheet) override; + virtual void StyleRuleChanged(mozilla::StyleSheetHandle aStyleSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLERULEADDED \ - virtual void StyleRuleAdded(mozilla::CSSStyleSheet* aStyleSheet) override; + virtual void StyleRuleAdded(mozilla::StyleSheetHandle aStyleSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER_STYLERULEREMOVED \ - virtual void StyleRuleRemoved(mozilla::CSSStyleSheet* aStyleSheet) override; + virtual void StyleRuleRemoved(mozilla::StyleSheetHandle aStyleSheet) override; #define NS_DECL_NSIDOCUMENTOBSERVER \ NS_DECL_NSIDOCUMENTOBSERVER_BEGINUPDATE \ @@ -262,29 +262,29 @@ NS_IMPL_NSIMUTATIONOBSERVER_CONTENT(_class) #define NS_IMPL_NSIDOCUMENTOBSERVER_STYLE_STUB(_class) \ void \ -_class::StyleSheetAdded(mozilla::CSSStyleSheet* aStyleSheet, \ +_class::StyleSheetAdded(mozilla::StyleSheetHandle aStyleSheet, \ bool aDocumentSheet) \ { \ } \ void \ -_class::StyleSheetRemoved(mozilla::CSSStyleSheet* aStyleSheet, \ +_class::StyleSheetRemoved(mozilla::StyleSheetHandle aStyleSheet, \ bool aDocumentSheet) \ { \ } \ void \ -_class::StyleSheetApplicableStateChanged(mozilla::CSSStyleSheet* aStyleSheet) \ +_class::StyleSheetApplicableStateChanged(mozilla::StyleSheetHandle aStyleSheet) \ { \ } \ void \ -_class::StyleRuleChanged(mozilla::CSSStyleSheet* aStyleSheet) \ +_class::StyleRuleChanged(mozilla::StyleSheetHandle aStyleSheet) \ { \ } \ void \ -_class::StyleRuleAdded(mozilla::CSSStyleSheet* aStyleSheet) \ +_class::StyleRuleAdded(mozilla::StyleSheetHandle aStyleSheet) \ { \ } \ void \ -_class::StyleRuleRemoved(mozilla::CSSStyleSheet* aStyleSheet) \ +_class::StyleRuleRemoved(mozilla::StyleSheetHandle aStyleSheet) \ { \ } diff --git a/dom/base/nsIStyleSheetLinkingElement.h b/dom/base/nsIStyleSheetLinkingElement.h index 77eaebf6096f3..d6c2440169ba7 100644 --- a/dom/base/nsIStyleSheetLinkingElement.h +++ b/dom/base/nsIStyleSheetLinkingElement.h @@ -8,6 +8,7 @@ #include "nsISupports.h" +#include "mozilla/StyleSheetHandle.h" class nsICSSLoaderObserver; class nsIURI; @@ -16,10 +17,6 @@ class nsIURI; { 0xa8b79f3b, 0x9d18, 0x4f9c, \ { 0xb1, 0xaa, 0x8c, 0x9b, 0x1b, 0xaa, 0xac, 0xad } } -namespace mozilla { -class CSSStyleSheet; -} // namespace mozilla - class nsIStyleSheetLinkingElement : public nsISupports { public: NS_DECLARE_STATIC_IID_ACCESSOR(NS_ISTYLESHEETLINKINGELEMENT_IID) @@ -31,14 +28,14 @@ class nsIStyleSheetLinkingElement : public nsISupports { * @param aStyleSheet the style sheet associated with this * element. */ - NS_IMETHOD SetStyleSheet(mozilla::CSSStyleSheet* aStyleSheet) = 0; + NS_IMETHOD SetStyleSheet(mozilla::StyleSheetHandle aStyleSheet) = 0; /** * Used to obtain the style sheet linked in by this element. * * @return the style sheet associated with this element. */ - NS_IMETHOD_(mozilla::CSSStyleSheet*) GetStyleSheet() = 0; + NS_IMETHOD_(mozilla::StyleSheetHandle) GetStyleSheet() = 0; /** * Initialize the stylesheet linking element. If aDontLoadStyle is diff --git a/dom/base/nsStyleLinkElement.cpp b/dom/base/nsStyleLinkElement.cpp index bf7d9bfbd9ea2..9b733ebc33f9d 100644 --- a/dom/base/nsStyleLinkElement.cpp +++ b/dom/base/nsStyleLinkElement.cpp @@ -12,7 +12,8 @@ #include "nsStyleLinkElement.h" -#include "mozilla/CSSStyleSheet.h" +#include "mozilla/StyleSheetHandle.h" +#include "mozilla/StyleSheetHandleInlines.h" #include "mozilla/css/Loader.h" #include "mozilla/dom/Element.h" #include "mozilla/dom/FragmentOrElement.h" @@ -67,7 +68,7 @@ nsStyleLinkElement::Traverse(nsCycleCollectionTraversalCallback &cb) } NS_IMETHODIMP -nsStyleLinkElement::SetStyleSheet(CSSStyleSheet* aStyleSheet) +nsStyleLinkElement::SetStyleSheet(StyleSheetHandle aStyleSheet) { if (mStyleSheet) { mStyleSheet->SetOwningNode(nullptr); @@ -84,7 +85,7 @@ nsStyleLinkElement::SetStyleSheet(CSSStyleSheet* aStyleSheet) return NS_OK; } -NS_IMETHODIMP_(CSSStyleSheet*) +NS_IMETHODIMP_(StyleSheetHandle) nsStyleLinkElement::GetStyleSheet() { return mStyleSheet; @@ -316,8 +317,15 @@ nsStyleLinkElement::DoUpdateStyleSheet(nsIDocument* aOldDocument, return NS_OK; } - Element* oldScopeElement = - mStyleSheet ? mStyleSheet->GetScopeElement() : nullptr; + // XXXheycam ServoStyleSheets do not support