1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 /* a CSS style sheet returned from nsIStyleSheetService.preloadSheet */
9 #ifndef mozilla_PreloadedStyleSheet_h
10 #define mozilla_PreloadedStyleSheet_h
12 #include "mozilla/css/SheetParsingMode.h"
13 #include "mozilla/NotNull.h"
14 #include "mozilla/Result.h"
16 #include "nsCycleCollectionParticipant.h"
17 #include "nsICSSLoaderObserver.h"
18 #include "nsIPreloadedStyleSheet.h"
29 class PreloadedStyleSheet
: public nsIPreloadedStyleSheet
{
31 PreloadedStyleSheet(nsIURI
*, css::SheetParsingMode
);
33 NS_DECL_CYCLE_COLLECTING_ISUPPORTS
34 NS_DECL_CYCLE_COLLECTION_CLASS(PreloadedStyleSheet
)
36 // *aResult is not addrefed, since the PreloadedStyleSheet holds a strong
37 // reference to the sheet.
38 nsresult
GetSheet(StyleSheet
** aResult
);
41 nsresult
PreloadAsync(NotNull
<dom::Promise
*> aPromise
);
44 virtual ~PreloadedStyleSheet() = default;
47 class StylesheetPreloadObserver final
: public nsICSSLoaderObserver
{
51 explicit StylesheetPreloadObserver(NotNull
<dom::Promise
*> aPromise
,
52 PreloadedStyleSheet
* aSheet
)
53 : mPromise(aPromise
), mPreloadedSheet(aSheet
) {}
55 NS_IMETHOD
StyleSheetLoaded(StyleSheet
* aSheet
, bool aWasDeferred
,
56 nsresult aStatus
) override
;
59 virtual ~StylesheetPreloadObserver() = default;
62 RefPtr
<dom::Promise
> mPromise
;
63 RefPtr
<PreloadedStyleSheet
> mPreloadedSheet
;
66 RefPtr
<StyleSheet
> mSheet
;
69 nsCOMPtr
<nsIURI
> mURI
;
70 css::SheetParsingMode mParsingMode
;
73 } // namespace mozilla
75 #endif // mozilla_PreloadedStyleSheet_h