summaryrefslogtreecommitdiff
path: root/Source/WebCore/page/NavigatorBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/page/NavigatorBase.cpp')
-rw-r--r--Source/WebCore/page/NavigatorBase.cpp88
1 files changed, 64 insertions, 24 deletions
diff --git a/Source/WebCore/page/NavigatorBase.cpp b/Source/WebCore/page/NavigatorBase.cpp
index eb2f8f7cc..a33214b80 100644
--- a/Source/WebCore/page/NavigatorBase.cpp
+++ b/Source/WebCore/page/NavigatorBase.cpp
@@ -10,10 +10,10 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
@@ -27,7 +27,11 @@
#include "config.h"
#include "NavigatorBase.h"
+#include "Language.h"
#include "NetworkStateNotifier.h"
+#include <mutex>
+#include <wtf/NeverDestroyed.h>
+#include <wtf/NumberOfCores.h>
#include <wtf/text/WTFString.h>
#if OS(LINUX)
@@ -36,49 +40,48 @@
#endif
#if PLATFORM(IOS)
-#include "WebCoreSystemInterface.h"
+#include "Device.h"
#endif
#ifndef WEBCORE_NAVIGATOR_PLATFORM
#if PLATFORM(IOS)
-#define WEBCORE_NAVIGATOR_PLATFORM ""
+#define WEBCORE_NAVIGATOR_PLATFORM deviceName()
#elif OS(MAC_OS_X) && (CPU(PPC) || CPU(PPC64))
-#define WEBCORE_NAVIGATOR_PLATFORM "MacPPC"
+#define WEBCORE_NAVIGATOR_PLATFORM ASCIILiteral("MacPPC")
#elif OS(MAC_OS_X) && (CPU(X86) || CPU(X86_64))
-#define WEBCORE_NAVIGATOR_PLATFORM "MacIntel"
+#define WEBCORE_NAVIGATOR_PLATFORM ASCIILiteral("MacIntel")
#elif OS(WINDOWS)
-#define WEBCORE_NAVIGATOR_PLATFORM "Win32"
+#define WEBCORE_NAVIGATOR_PLATFORM ASCIILiteral("Win32")
#else
-#define WEBCORE_NAVIGATOR_PLATFORM ""
+#define WEBCORE_NAVIGATOR_PLATFORM emptyString()
#endif
#endif // ifndef WEBCORE_NAVIGATOR_PLATFORM
#ifndef WEBCORE_NAVIGATOR_PRODUCT
-#define WEBCORE_NAVIGATOR_PRODUCT "Gecko"
+#define WEBCORE_NAVIGATOR_PRODUCT ASCIILiteral("Gecko")
#endif // ifndef WEBCORE_NAVIGATOR_PRODUCT
#ifndef WEBCORE_NAVIGATOR_PRODUCT_SUB
-#define WEBCORE_NAVIGATOR_PRODUCT_SUB "20030107"
+#define WEBCORE_NAVIGATOR_PRODUCT_SUB ASCIILiteral("20030107")
#endif // ifndef WEBCORE_NAVIGATOR_PRODUCT_SUB
#ifndef WEBCORE_NAVIGATOR_VENDOR
-#define WEBCORE_NAVIGATOR_VENDOR "Apple Computer, Inc."
+#define WEBCORE_NAVIGATOR_VENDOR ASCIILiteral("Apple Computer, Inc.")
#endif // ifndef WEBCORE_NAVIGATOR_VENDOR
#ifndef WEBCORE_NAVIGATOR_VENDOR_SUB
-#define WEBCORE_NAVIGATOR_VENDOR_SUB ""
+#define WEBCORE_NAVIGATOR_VENDOR_SUB emptyString()
#endif // ifndef WEBCORE_NAVIGATOR_VENDOR_SUB
-
namespace WebCore {
NavigatorBase::~NavigatorBase()
{
}
-String NavigatorBase::appName() const
+String NavigatorBase::appName()
{
- return "Netscape";
+ return ASCIILiteral("Netscape");
}
String NavigatorBase::appVersion() const
@@ -88,47 +91,84 @@ String NavigatorBase::appVersion() const
return agent.substring(agent.find('/') + 1);
}
-String NavigatorBase::platform() const
+String NavigatorBase::platform()
{
#if OS(LINUX)
if (!String(WEBCORE_NAVIGATOR_PLATFORM).isEmpty())
return WEBCORE_NAVIGATOR_PLATFORM;
struct utsname osname;
- DEFINE_STATIC_LOCAL(String, platformName, (uname(&osname) >= 0 ? String(osname.sysname) + String(" ") + String(osname.machine) : emptyString()));
+ static NeverDestroyed<String> platformName(uname(&osname) >= 0 ? String(osname.sysname) + String(" ") + String(osname.machine) : emptyString());
return platformName;
#else
return WEBCORE_NAVIGATOR_PLATFORM;
#endif
}
-String NavigatorBase::appCodeName() const
+String NavigatorBase::appCodeName()
{
- return "Mozilla";
+ return ASCIILiteral("Mozilla");
}
-String NavigatorBase::product() const
+String NavigatorBase::product()
{
return WEBCORE_NAVIGATOR_PRODUCT;
}
-String NavigatorBase::productSub() const
+String NavigatorBase::productSub()
{
return WEBCORE_NAVIGATOR_PRODUCT_SUB;
}
-String NavigatorBase::vendor() const
+String NavigatorBase::vendor()
{
return WEBCORE_NAVIGATOR_VENDOR;
}
-String NavigatorBase::vendorSub() const
+String NavigatorBase::vendorSub()
{
return WEBCORE_NAVIGATOR_VENDOR_SUB;
}
-bool NavigatorBase::onLine() const
+bool NavigatorBase::onLine()
{
return networkStateNotifier().onLine();
}
+String NavigatorBase::language()
+{
+ return defaultLanguage();
+}
+
+Vector<String> NavigatorBase::languages()
+{
+ // We intentionally expose only the primary language for privacy reasons.
+ return { defaultLanguage() };
+}
+
+#if ENABLE(NAVIGATOR_HWCONCURRENCY)
+
+int NavigatorBase::hardwareConcurrency()
+{
+ static int numberOfCores;
+
+ static std::once_flag once;
+ std::call_once(once, [] {
+ // Enforce a maximum for the number of cores reported to mitigate
+ // fingerprinting for the minority of machines with large numbers of cores.
+ // If machines with more than 8 cores become commonplace, we should bump this number.
+ // see https://bugs.webkit.org/show_bug.cgi?id=132588 for the
+ // rationale behind this decision.
+#if PLATFORM(IOS)
+ const int maxCoresToReport = 2;
+#else
+ const int maxCoresToReport = 8;
+#endif
+ numberOfCores = std::min(WTF::numberOfProcessorCores(), maxCoresToReport);
+ });
+
+ return numberOfCores;
+}
+
+#endif
+
} // namespace WebCore