diff options
Diffstat (limited to 'Source/WebCore/page/NavigatorBase.cpp')
-rw-r--r-- | Source/WebCore/page/NavigatorBase.cpp | 88 |
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 |