CodePudding user response:
The browser queries the operating system (whichever one you are using) to determine the user's timezone. For instance on the Mac I'm typing this answer on:
#if V8_OS_DARWIN
#include <mach/mach.h>
#include <mach/mach_time.h>
#include <pthread.h>
#endif
#if V8_OS_DARWIN
int64_t ComputeThreadTicks() {
mach_msg_type_number_t thread_info_count = THREAD_BASIC_INFO_COUNT;
thread_basic_info_data_t thread_info_data;
kern_return_t kr = thread_info(
pthread_mach_thread_np(pthread_self()),
THREAD_BASIC_INFO,
reinterpret_cast<thread_info_t>(&thread_info_data),
&thread_info_count);
CHECK_EQ(kr, KERN_SUCCESS);
// We can add the seconds into a {int64_t} without overflow.
CHECK_LE(thread_info_data.user_time.seconds,
std::numeric_limits<int64_t>::max() -
thread_info_data.system_time.seconds);
int64_t seconds =
thread_info_data.user_time.seconds thread_info_data.system_time.seconds;
// Multiplying the seconds by {kMicrosecondsPerSecond}, and adding something
// in [0, 2 * kMicrosecondsPerSecond) must result in a valid {int64_t}.
static constexpr int64_t kSecondsLimit =
(std::numeric_limits<int64_t>::max() /
v8::base::Time::kMicrosecondsPerSecond) -
2;
CHECK_GT(kSecondsLimit, seconds);
int64_t micros = seconds * v8::base::Time::kMicrosecondsPerSecond;
micros = (thread_info_data.user_time.microseconds
thread_info_data.system_time.microseconds);
return micros;
}
You can see here where chromium queries the (again OS-specific) system time.
If you look at the linked file in the codebase you can see where it has ifdef
s for all the various supported OS flavors: win32, POSIX, Fuschia, etc.