Bug 1087801 - Don't assume the global is a Window in the DOM CSS object. r=bholley, a=lsblakk
--- a/layout/style/CSS.cpp
+++ b/layout/style/CSS.cpp
@@ -8,36 +8,37 @@
#include "CSS.h"
#include "mozilla/dom/BindingDeclarations.h"
#include "nsCSSParser.h"
#include "nsGlobalWindow.h"
#include "nsIDocument.h"
#include "nsIURI.h"
#include "nsStyleUtil.h"
+#include "xpcpublic.h"
namespace mozilla {
namespace dom {
struct SupportsParsingInfo
{
nsIURI* mDocURI;
nsIURI* mBaseURI;
nsIPrincipal* mPrincipal;
};
static nsresult
-GetParsingInfo(nsISupports* aGlobal,
+GetParsingInfo(const GlobalObject& aGlobal,
SupportsParsingInfo& aInfo)
{
- if (!aGlobal) {
+ nsGlobalWindow* win = xpc::WindowOrNull(aGlobal.Get());
+ if (!win) {
return NS_ERROR_FAILURE;
}
- nsGlobalWindow* win = nsGlobalWindow::FromSupports(aGlobal);
nsCOMPtr<nsIDocument> doc = win->GetDoc();
if (!doc) {
return NS_ERROR_FAILURE;
}
aInfo.mDocURI = nsCOMPtr<nsIURI>(doc->GetDocumentURI());
aInfo.mBaseURI = nsCOMPtr<nsIURI>(doc->GetBaseURI());
aInfo.mPrincipal = win->GetPrincipal();
@@ -48,17 +49,17 @@ GetParsingInfo(nsISupports* aGlobal,
CSS::Supports(const GlobalObject& aGlobal,
const nsAString& aProperty,
const nsAString& aValue,
ErrorResult& aRv)
{
nsCSSParser parser;
SupportsParsingInfo info;
- nsresult rv = GetParsingInfo(aGlobal.GetAsSupports(), info);
+ nsresult rv = GetParsingInfo(aGlobal, info);
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return false;
}
return parser.EvaluateSupportsDeclaration(aProperty, aValue, info.mDocURI,
info.mBaseURI, info.mPrincipal);
}
@@ -66,17 +67,17 @@ CSS::Supports(const GlobalObject& aGloba
/* static */ bool
CSS::Supports(const GlobalObject& aGlobal,
const nsAString& aCondition,
ErrorResult& aRv)
{
nsCSSParser parser;
SupportsParsingInfo info;
- nsresult rv = GetParsingInfo(aGlobal.GetAsSupports(), info);
+ nsresult rv = GetParsingInfo(aGlobal, info);
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return false;
}
return parser.EvaluateSupportsCondition(aCondition, info.mDocURI,
info.mBaseURI, info.mPrincipal);
}