diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp index 2274826a2a23..12a41da241da 100644 --- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -1607,9 +1607,10 @@ Navigator::HasFeature(const nsAString& aName, ErrorResult& aRv) return nullptr; } - // Hardcoded web-extensions feature which is b2g specific. + // Hardcoded extensions features which are b2g specific. #ifdef MOZ_B2G - if (aName.EqualsLiteral("web-extensions")) { + if (aName.EqualsLiteral("web-extensions") || + aName.EqualsLiteral("late-customization")) { p->MaybeResolve(true); return p.forget(); } diff --git a/dom/base/test/test_hasFeature.html b/dom/base/test/test_hasFeature.html index 7be3eb604937..fcc6ca809b6a 100644 --- a/dom/base/test/test_hasFeature.html +++ b/dom/base/test/test_hasFeature.html @@ -65,11 +65,19 @@ function testExtensions() { return Promise.resolve(); } - return navigator.hasFeature("web-extensions").then(function(value) { - is(value, true, "Resolve the Promise with " + value + " for web-extensions"); - }, function() { - ok(false, "The Promise should not be rejected"); + var builtInFeatures = [ + {feature: "web-extensions", value: true}, + {feature: "late-customization", value: true} + ]; + + builtInFeatures.forEach(function(x) { + navigator.hasFeature(x.feature).then(function(value) { + is(value, x.value, "Resolve the Promise with " + value + " for feature: " + x.feature); + }).catch(function(ex) { + ok(false, "The Promise should not be rejected"); + }); }); + return Promise.resolve(); } SpecialPowers.pushPermissions([