mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 14:15:30 +00:00
172598b4e2
In general, using an AutoJSAPI inited with an object is NOT the same as using AutoSafeJSContext (or AutoJSAPI inited without an object) and then entering the compartment of the object: the former will report exceptions to the global of the object as it comes off the stack, while the latter will not. This only really matters if we have an object from a window or worker global and hence might fire error events, or report internal stuff to the web console. The changes to initing with an object made in this bug are OK for the following reasons: 1) dom/base/Console.cpp: Always clears its exception before coming off the stack. 2) dom/base/nsDOMClassInfo.cpp: Inits with a non-web global. 3) dom/base/nsFrameMessageManager.cpp: Inits with a non-web global. 4) dom/media/MediaPermissionGonk.cpp: We probably want the caller to notice if anything here throws. 5) dom/xbl/nsXBLPrototypeBinding.cpp: Inits with a non-web global. 6) dom/xul/nsXULElement.cpp: Inits with a non-web global. 7) extensions/pref/autoconfig/src/nsJSConfigTriggers.cpp: Inits with a non-web global. 8) ipc/testshell/XPCShellEnvironment.cpp: Inits with a non-web global.
54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "DateCacheCleaner.h"
|
|
|
|
#include "js/Date.h"
|
|
#include "mozilla/dom/ScriptSettings.h"
|
|
#include "mozilla/ClearOnShutdown.h"
|
|
#include "mozilla/Hal.h"
|
|
#include "mozilla/StaticPtr.h"
|
|
|
|
using namespace mozilla::hal;
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
namespace time {
|
|
|
|
class DateCacheCleaner : public SystemTimezoneChangeObserver
|
|
{
|
|
public:
|
|
DateCacheCleaner()
|
|
{
|
|
RegisterSystemTimezoneChangeObserver(this);
|
|
}
|
|
|
|
~DateCacheCleaner()
|
|
{
|
|
UnregisterSystemTimezoneChangeObserver(this);
|
|
}
|
|
void Notify(const SystemTimezoneChangeInformation& aSystemTimezoneChangeInfo)
|
|
{
|
|
JS::ResetTimeZone();
|
|
}
|
|
|
|
};
|
|
|
|
StaticAutoPtr<DateCacheCleaner> sDateCacheCleaner;
|
|
|
|
void
|
|
InitializeDateCacheCleaner()
|
|
{
|
|
if (!sDateCacheCleaner) {
|
|
sDateCacheCleaner = new DateCacheCleaner();
|
|
ClearOnShutdown(&sDateCacheCleaner);
|
|
}
|
|
}
|
|
|
|
} // namespace time
|
|
} // namespace dom
|
|
} // namespace mozilla
|