No Issue - Add navigator.webdriver attribute.

This patch adds an enumerable, configurable, readonly attribute "webdriver" to
the Navigator object. The attribute is always false because we do not support
WebDriver or scripted automation.

The navigator.webdriver attribute is meant as an indication to web authors that
a document is visited by WebDriver. It is important to stress that it is not
meant as a way to detect that a website is being visited by a browser automation
tool or bot, but as a tool for web documents to take alternate code paths.

On the off-chance exposing navigator.webdriver turns out to be catastrophic,
we put it behind a new preference dom.webdriver.enabled that controls its
exposure.
This commit is contained in:
Moonchild 2024-06-17 09:44:52 +02:00 committed by roytam1
commit 6a200d5284
4 changed files with 22 additions and 0 deletions

View file

@ -1532,6 +1532,14 @@ Navigator::Clipboard()
return mClipboard;
}
/* static */
bool
Navigator::Webdriver()
{
// We don't support Selenium or marionette, so this is always false.
return false;
}
#ifdef MOZ_EME
static nsCString
ToCString(const nsString& aString)

View file

@ -219,6 +219,8 @@ public:
dom::Clipboard* Clipboard();
static bool Webdriver();
void GetLanguages(nsTArray<nsString>& aLanguages);
bool MozE10sEnabled();

View file

@ -12,6 +12,7 @@
* https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#navigator-interface-extension
* http://www.w3.org/TR/beacon/#sec-beacon-method
* https://html.spec.whatwg.org/#navigatorconcurrenthardware
* https://w3c.github.io/webdriver/webdriver-spec.html#interface
*
* © Copyright 2004-2020 Apple Computer, Inc., Mozilla Foundation,
* Opera Software ASA and Moonchild Productions. You are granted a license to use,
@ -31,6 +32,7 @@ Navigator implements NavigatorStorageUtils;
Navigator implements NavigatorConcurrentHardware;
Navigator implements NavigatorStorage;
Navigator implements NavigatorGlobalPrivacyControl;
Navigator implements NavigatorAutomationInformation;
[NoInterfaceObject, Exposed=(Window,Worker)]
interface NavigatorID {
@ -334,3 +336,10 @@ partial interface Navigator {
[Pref="dom.events.asyncClipboard", SecureContext, SameObject]
readonly attribute Clipboard clipboard;
};
// https://w3c.github.io/webdriver/webdriver-spec.html#interface
[NoInterfaceObject, Exposed=Window]
interface NavigatorAutomationInformation {
[Pref="dom.webdriver.enabled"]
readonly attribute boolean webdriver;
};

View file

@ -5259,6 +5259,9 @@ pref("media.seekToNextFrame.enabled", true);
// return the maximum number of cores that navigator.hardwareConcurrency returns
pref("dom.maxHardwareConcurrency", 16);
// Exposes the navigator.webdriver attribute.
pref("dom.webdriver.enabled", true);
// Shutdown the async osfile worker if it's no longer needed.
pref("osfile.reset_worker_delay", 30000);