summaryrefslogtreecommitdiffstats
path: root/dom
diff options
context:
space:
mode:
authorMatt A. Tobin <email@mattatobin.com>2020-04-17 07:43:40 -0400
committerMatt A. Tobin <email@mattatobin.com>2020-04-17 07:43:40 -0400
commit80c024779929d44397a8c03d2fa7808f97f2c21a (patch)
treee961240621bd07d87e8a45e3006da7c02c890306 /dom
parent6d76ab9b6c19d0829c343e1bc3cd7865221d64ba (diff)
downloadUXP-80c024779929d44397a8c03d2fa7808f97f2c21a.tar
UXP-80c024779929d44397a8c03d2fa7808f97f2c21a.tar.gz
UXP-80c024779929d44397a8c03d2fa7808f97f2c21a.tar.lz
UXP-80c024779929d44397a8c03d2fa7808f97f2c21a.tar.xz
UXP-80c024779929d44397a8c03d2fa7808f97f2c21a.zip
Issue #1375 - Fix IsWebComponentsEnabled checks
Diffstat (limited to 'dom')
-rw-r--r--dom/base/nsDocument.cpp76
-rw-r--r--dom/base/nsDocument.h16
-rw-r--r--dom/webidl/Element.webidl8
3 files changed, 32 insertions, 68 deletions
diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp
index 745d170f1..7b280a188 100644
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -2242,6 +2242,29 @@ WarnIfSandboxIneffective(nsIDocShell* aDocShell,
}
}
+bool
+nsDocument::IsWebComponentsEnabled(JSContext* aCx, JSObject* aObject)
+{
+ if (!nsContentUtils::IsWebComponentsEnabled()) {
+ return false;
+ }
+
+ JS::Rooted<JSObject*> obj(aCx, aObject);
+
+ JSAutoCompartment ac(aCx, obj);
+ JS::Rooted<JSObject*> global(aCx, JS_GetGlobalForObject(aCx, obj));
+ nsCOMPtr<nsPIDOMWindowInner> window =
+ do_QueryInterface(nsJSUtils::GetStaticScriptGlobal(global));
+
+ nsIDocument* doc = window ? window->GetExtantDoc() : nullptr;
+ if (doc && doc->IsStyledByServo()) {
+ NS_WARNING("stylo: Web Components not supported yet");
+ return false;
+ }
+
+ return true;
+}
+
nsresult
nsDocument::StartDocumentLoad(const char* aCommand, nsIChannel* aChannel,
nsILoadGroup* aLoadGroup,
@@ -5582,64 +5605,11 @@ nsIDocument::CreateAttributeNS(const nsAString& aNamespaceURI,
}
bool
-nsDocument::IsWebComponentsEnabled(JSContext* aCx, JSObject* aObject)
-{
- JS::Rooted<JSObject*> obj(aCx, aObject);
-
- if (nsContentUtils::IsWebComponentsEnabled()) {
- return true;
- }
-
- // Check for the webcomponents permission. See Bug 1181555.
- JSAutoCompartment ac(aCx, obj);
- JS::Rooted<JSObject*> global(aCx, JS_GetGlobalForObject(aCx, obj));
- nsCOMPtr<nsPIDOMWindowInner> window =
- do_QueryInterface(nsJSUtils::GetStaticScriptGlobal(global));
-
- return IsWebComponentsEnabled(window);
-}
-
-bool
nsDocument::IsWebComponentsEnabled(const nsINode* aNode)
{
return aNode->OwnerDoc()->IsWebComponentsEnabled();
}
-bool
-nsDocument::IsWebComponentsEnabled(dom::NodeInfo* aNodeInfo)
-{
- if (nsContentUtils::IsWebComponentsEnabled()) {
- return true;
- }
-
- nsIDocument* doc = aNodeInfo->GetDocument();
- // Use GetScopeObject() here so that data documents work the same way as the
- // main document they're associated with.
- nsCOMPtr<nsPIDOMWindowInner> window =
- do_QueryInterface(doc->GetScopeObject());
- return IsWebComponentsEnabled(window);
-}
-
-bool
-nsDocument::IsWebComponentsEnabled(nsPIDOMWindowInner* aWindow)
-{
- if (aWindow) {
- nsresult rv;
- nsCOMPtr<nsIPermissionManager> permMgr =
- do_GetService(NS_PERMISSIONMANAGER_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, false);
-
- uint32_t perm;
- rv = permMgr->TestPermissionFromWindow(
- aWindow, "moz-extremely-unstable-and-will-change-webcomponents", &perm);
- NS_ENSURE_SUCCESS(rv, false);
-
- return perm == nsIPermissionManager::ALLOW_ACTION;
- }
-
- return false;
-}
-
NS_IMETHODIMP
nsDocument::GetElementsByTagName(const nsAString& aTagname,
nsIDOMNodeList** aReturn)
diff --git a/dom/base/nsDocument.h b/dom/base/nsDocument.h
index 4ab285840..6520d905d 100644
--- a/dom/base/nsDocument.h
+++ b/dom/base/nsDocument.h
@@ -755,6 +755,11 @@ public:
virtual void NotifyLayerManagerRecreated() override;
+ // Check whether web components are enabled for the global of aObject.
+ static bool IsWebComponentsEnabled(JSContext* aCx, JSObject* aObject);
+ // Check whether web components are enabled for the document this node belongs
+ // to.
+ static bool IsWebComponentsEnabled(const nsINode* aNode);
private:
void AddOnDemandBuiltInUASheet(mozilla::StyleSheet* aSheet);
nsRadioGroupStruct* GetRadioGroupInternal(const nsAString& aName) const;
@@ -1341,17 +1346,6 @@ protected:
nsWeakPtr mFullscreenRoot;
public:
- // Check whether web components are enabled for the global of aObject.
- static bool IsWebComponentsEnabled(JSContext* aCx, JSObject* aObject);
- // Check whether web components are enabled for the document this node belongs
- // to.
- static bool IsWebComponentsEnabled(const nsINode* aNode);
- // Check whether web components are enabled for the global of the document
- // this nodeinfo comes from.
- static bool IsWebComponentsEnabled(mozilla::dom::NodeInfo* aNodeInfo);
- // Check whether web components are enabled for the given window.
- static bool IsWebComponentsEnabled(nsPIDOMWindowInner* aWindow);
-
RefPtr<mozilla::EventListenerManager> mListenerManager;
RefPtr<nsDOMStyleSheetSetList> mStyleSheetSetList;
RefPtr<nsScriptLoader> mScriptLoader;
diff --git a/dom/webidl/Element.webidl b/dom/webidl/Element.webidl
index 2f7e934b8..d5cac7c64 100644
--- a/dom/webidl/Element.webidl
+++ b/dom/webidl/Element.webidl
@@ -236,17 +236,17 @@ dictionary ShadowRootInit {
// https://dom.spec.whatwg.org/#element
partial interface Element {
// Shadow DOM v1
- [Throws, Pref="nsDocument::IsWebComponentsEnabled"]
+ [Throws, Func="nsDocument::IsWebComponentsEnabled"]
ShadowRoot attachShadow(ShadowRootInit shadowRootInitDict);
[BinaryName="shadowRootByMode", Func="nsDocument::IsWebComponentsEnabled"]
readonly attribute ShadowRoot? shadowRoot;
- [BinaryName="assignedSlotByMode", Pref="nsDocument::IsWebComponentsEnabled"]
+ [BinaryName="assignedSlotByMode", Func="nsDocument::IsWebComponentsEnabled"]
readonly attribute HTMLSlotElement? assignedSlot;
- [CEReactions, Unscopable, SetterThrows, Pref="nsDocument::IsWebComponentsEnabled"]
+ [CEReactions, Unscopable, SetterThrows, Func="nsDocument::IsWebComponentsEnabled"]
attribute DOMString slot;
// [deprecated] Shadow DOM v0
- [Throws, Pref="nsDocument::IsWebComponentsEnabled"]
+ [Throws, Func="nsDocument::IsWebComponentsEnabled"]
ShadowRoot createShadowRoot();
};