--- a/accessible/base/nsAccessibilityService.cpp
+++ b/accessible/base/nsAccessibilityService.cpp
@@ -475,19 +475,20 @@ nsAccessibilityService::CreatePluginAcce
#if defined(XP_WIN) || defined(MOZ_ACCESSIBILITY_ATK)
RefPtr<nsNPAPIPluginInstance> pluginInstance;
if (NS_SUCCEEDED(aFrame->GetPluginInstance(getter_AddRefs(pluginInstance))) &&
pluginInstance) {
#ifdef XP_WIN
if (!sPendingPlugins->Contains(aContent) &&
(Preferences::GetBool("accessibility.delay_plugins") ||
Compatibility::IsJAWS() || Compatibility::IsWE())) {
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
RefPtr<PluginTimerCallBack> cb = new PluginTimerCallBack(aContent);
- timer->InitWithCallback(cb, Preferences::GetUint("accessibility.delay_plugin_time"),
+ nsCOMPtr<nsITimer> timer;
+ NS_NewTimerWithCallback(getter_AddRefs(timer),
+ cb, Preferences::GetUint("accessibility.delay_plugin_time"),
nsITimer::TYPE_ONE_SHOT);
sPluginTimers->AppendElement(timer);
sPendingPlugins->AppendElement(aContent);
return nullptr;
}
// We need to remove aContent from the pending plugins here to avoid
// reentrancy. When the timer fires it calls
--- a/accessible/generic/DocAccessible.cpp
+++ b/accessible/generic/DocAccessible.cpp
@@ -645,25 +645,24 @@ DocAccessible::ScrollPositionDidChange(n
{
// Start new timer, if the timer cycles at least 1 full cycle without more scroll position changes,
// then the ::Notify() method will fire the accessibility event for scroll position changes
const uint32_t kScrollPosCheckWait = 50;
if (mScrollWatchTimer) {
mScrollWatchTimer->SetDelay(kScrollPosCheckWait); // Create new timer, to avoid leaks
}
else {
- mScrollWatchTimer = do_CreateInstance("@mozilla.org/timer;1");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mScrollWatchTimer),
+ ScrollTimerCallback,
+ this,
+ kScrollPosCheckWait,
+ nsITimer::TYPE_REPEATING_SLACK,
+ "a11y::DocAccessible::ScrollPositionDidChange");
if (mScrollWatchTimer) {
NS_ADDREF_THIS(); // Kung fu death grip
- mScrollWatchTimer->InitWithNamedFuncCallback(
- ScrollTimerCallback,
- this,
- kScrollPosCheckWait,
- nsITimer::TYPE_REPEATING_SLACK,
- "a11y::DocAccessible::ScrollPositionDidChange");
}
}
mScrollPositionChangedTicks = 1;
}
////////////////////////////////////////////////////////////////////////////////
// nsIObserver
--- a/accessible/xpcom/xpcAccessibilityService.cpp
+++ b/accessible/xpcom/xpcAccessibilityService.cpp
@@ -72,25 +72,22 @@ xpcAccessibilityService::Release(void)
return 0;
}
// When ref count goes down to 1 (held internally as a static reference),
// it means that there are no more external references to the
// xpcAccessibilityService and we can attempt to shut down acceessiblity
// service.
if (count == 1 && !mShutdownTimer) {
- mShutdownTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (mShutdownTimer) {
- mShutdownTimer->InitWithNamedFuncCallback(
- ShutdownCallback,
- this,
- 100,
- nsITimer::TYPE_ONE_SHOT,
- "xpcAccessibilityService::Release");
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mShutdownTimer),
+ ShutdownCallback,
+ this,
+ 100,
+ nsITimer::TYPE_ONE_SHOT,
+ "xpcAccessibilityService::Release");
}
return count;
}
NS_IMPL_QUERY_INTERFACE(xpcAccessibilityService, nsIAccessibilityService)
NS_IMETHODIMP
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -21,16 +21,17 @@
#include "mozilla/dom/ScreenOrientation.h"
#include "mozilla/dom/ToJSValue.h"
#include "mozilla/dom/PermissionMessageUtils.h"
#include "mozilla/dom/workers/ServiceWorkerManager.h"
#include "mozilla/EventStateManager.h"
#include "mozilla/LoadInfo.h"
#include "mozilla/HTMLEditor.h"
#include "mozilla/Preferences.h"
+#include "mozilla/ResultExtensions.h"
#include "mozilla/Services.h"
#include "mozilla/StartupTimeline.h"
#include "mozilla/Telemetry.h"
#include "mozilla/Unused.h"
#include "Navigator.h"
#include "URIUtils.h"
#include "mozilla/dom/DocGroup.h"
#include "mozilla/dom/TabGroup.h"
@@ -452,33 +453,23 @@ nsPingListener::~nsPingListener()
}
}
nsresult
nsPingListener::StartTimeout(DocGroup* aDocGroup)
{
NS_ENSURE_ARG(aDocGroup);
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- timer->SetTarget(aDocGroup->EventTargetFor(TaskCategory::Network));
-
- if (timer) {
- nsresult rv =
- timer->InitWithNamedFuncCallback(OnPingTimeout,
- mLoadGroup,
- PING_TIMEOUT,
- nsITimer::TYPE_ONE_SHOT,
- "nsPingListener::StartTimeout");
- if (NS_SUCCEEDED(rv)) {
- mTimer = timer;
- return NS_OK;
- }
- }
-
- return NS_ERROR_OUT_OF_MEMORY;
+ return NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ OnPingTimeout,
+ mLoadGroup,
+ PING_TIMEOUT,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsPingListener::StartTimeout",
+ aDocGroup->EventTargetFor(TaskCategory::Network));
}
NS_IMETHODIMP
nsPingListener::OnStartRequest(nsIRequest* aRequest, nsISupports* aContext)
{
return NS_OK;
}
@@ -6844,24 +6835,25 @@ nsDocShell::RefreshURI(nsIURI* aURI, int
if (busyFlags & BUSY_FLAGS_BUSY || (!mIsActive && mDisableMetaRefreshWhenInactive)) {
// We don't want to create the timer right now. Instead queue up the request
// and trigger the timer in EndPageLoad() or whenever we become active.
mRefreshURIList->AppendElement(refreshTimer, /*weak =*/ false);
} else {
// There is no page loading going on right now. Create the
// timer and fire it right away.
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1");
- NS_ENSURE_TRUE(timer, NS_ERROR_FAILURE);
nsCOMPtr<nsPIDOMWindowOuter> win = GetWindow();
NS_ENSURE_TRUE(win, NS_ERROR_FAILURE);
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY_VAR(timer,
+ NS_NewTimerWithCallback(refreshTimer, aDelay, nsITimer::TYPE_ONE_SHOT,
+ win->TabGroup()->EventTargetFor(TaskCategory::Network)));
+
mRefreshURIList->AppendElement(timer, /*weak =*/ false); // owning timer ref
- timer->SetTarget(win->TabGroup()->EventTargetFor(TaskCategory::Network));
- timer->InitWithCallback(refreshTimer, aDelay, nsITimer::TYPE_ONE_SHOT);
}
return NS_OK;
}
nsresult
nsDocShell::ForceRefreshURIFromTimer(nsIURI* aURI,
int32_t aDelay,
bool aMetaRefresh,
@@ -7331,26 +7323,30 @@ nsDocShell::RefreshURIFromQueue()
if (refreshInfo) {
// This is the nsRefreshTimer object, waiting to be
// setup in a timer object and fired.
// Create the timer and trigger it.
uint32_t delay =
static_cast<nsRefreshTimer*>(
static_cast<nsITimerCallback*>(refreshInfo))->GetDelay();
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1");
nsCOMPtr<nsPIDOMWindowOuter> win = GetWindow();
- if (timer && win) {
- // Replace the nsRefreshTimer element in the queue with
- // its corresponding timer object, so that in case another
- // load comes through before the timer can go off, the timer will
- // get cancelled in CancelRefreshURITimer()
- mRefreshURIList->ReplaceElementAt(timer, n, /*weak =*/ false);
- timer->SetTarget(win->TabGroup()->EventTargetFor(TaskCategory::Network));
- timer->InitWithCallback(refreshInfo, delay, nsITimer::TYPE_ONE_SHOT);
+ if (win) {
+ nsCOMPtr<nsITimer> timer;
+ NS_NewTimerWithCallback(getter_AddRefs(timer),
+ refreshInfo, delay, nsITimer::TYPE_ONE_SHOT,
+ win->TabGroup()->EventTargetFor(TaskCategory::Network));
+
+ if (timer) {
+ // Replace the nsRefreshTimer element in the queue with
+ // its corresponding timer object, so that in case another
+ // load comes through before the timer can go off, the timer will
+ // get cancelled in CancelRefreshURITimer()
+ mRefreshURIList->ReplaceElementAt(timer, n, /*weak =*/ false);
+ }
}
}
}
return NS_OK;
}
//*****************************************************************************
--- a/docshell/base/nsDocShellTreeOwner.cpp
+++ b/docshell/base/nsDocShellTreeOwner.cpp
@@ -1240,40 +1240,41 @@ ChromeTooltipListener::MouseMove(nsIDOME
mouseEvent->GetScreenX(&mMouseScreenX);
mouseEvent->GetScreenY(&mMouseScreenY);
if (mTooltipTimer) {
mTooltipTimer->Cancel();
}
if (!mShowingTooltip && !mTooltipShownOnce) {
- mTooltipTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mTooltipTimer) {
- nsCOMPtr<EventTarget> eventTarget =
- aMouseEvent->InternalDOMEvent()->GetTarget();
- if (eventTarget) {
- mPossibleTooltipNode = do_QueryInterface(eventTarget);
- nsCOMPtr<nsIGlobalObject> global(eventTarget->GetOwnerGlobal());
- if (global) {
- mTooltipTimer->SetTarget(global->EventTargetFor(TaskCategory::UI));
- }
+ nsIEventTarget* target = nullptr;
+
+ nsCOMPtr<EventTarget> eventTarget =
+ aMouseEvent->InternalDOMEvent()->GetTarget();
+ if (eventTarget) {
+ mPossibleTooltipNode = do_QueryInterface(eventTarget);
+ nsCOMPtr<nsIGlobalObject> global(eventTarget->GetOwnerGlobal());
+ if (global) {
+ target = global->EventTargetFor(TaskCategory::UI);
}
- if (mPossibleTooltipNode) {
- nsresult rv = mTooltipTimer->InitWithNamedFuncCallback(
- sTooltipCallback,
- this,
- LookAndFeel::GetInt(LookAndFeel::eIntID_TooltipDelay, 500),
- nsITimer::TYPE_ONE_SHOT,
- "ChromeTooltipListener::MouseMove");
- if (NS_FAILED(rv)) {
- mPossibleTooltipNode = nullptr;
- }
+ }
+
+ if (mPossibleTooltipNode) {
+ nsresult rv = NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mTooltipTimer),
+ sTooltipCallback,
+ this,
+ LookAndFeel::GetInt(LookAndFeel::eIntID_TooltipDelay, 500),
+ nsITimer::TYPE_ONE_SHOT,
+ "ChromeTooltipListener::MouseMove",
+ target);
+ if (NS_FAILED(rv)) {
+ mPossibleTooltipNode = nullptr;
+ NS_WARNING("Could not create a timer for tooltip tracking");
}
- } else {
- NS_WARNING("Could not create a timer for tooltip tracking");
}
} else {
mTooltipShownOnce = true;
return HideTooltip();
}
return NS_OK;
}
--- a/dom/base/EventSource.cpp
+++ b/dom/base/EventSource.cpp
@@ -1197,17 +1197,17 @@ EventSourceImpl::SetReconnectionTimeout(
{
AssertIsOnMainThread();
if (IsClosed()) {
return NS_ERROR_ABORT;
}
// the timer will be used whenever the requests are going finished.
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();
NS_ENSURE_STATE(mTimer);
}
nsresult rv = mTimer->InitWithNamedFuncCallback(
TimerCallback,
this,
mReconnectionTime,
nsITimer::TYPE_ONE_SHOT,
--- a/dom/base/Selection.cpp
+++ b/dom/base/Selection.cpp
@@ -172,23 +172,21 @@ public:
// Store the presentation context. The timer will be
// stopped by the selection if the prescontext is destroyed.
mPresContext = aPresContext;
mContent = nsIPresShell::GetCapturingContent();
if (!mTimer) {
- nsresult result;
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &result);
- mTimer->SetTarget(
+ mTimer = NS_NewTimer(
mPresContext->Document()->EventTargetFor(TaskCategory::Other));
- if (NS_FAILED(result)) {
- return result;
+ if (!mTimer) {
+ return NS_ERROR_OUT_OF_MEMORY;
}
}
return mTimer->InitWithCallback(this, mDelay, nsITimer::TYPE_ONE_SHOT);
}
nsresult Stop()
{
--- a/dom/base/TimeoutExecutor.cpp
+++ b/dom/base/TimeoutExecutor.cpp
@@ -46,18 +46,18 @@ TimeoutExecutor::ScheduleDelayed(const T
MOZ_DIAGNOSTIC_ASSERT(mDeadline.IsNull());
MOZ_DIAGNOSTIC_ASSERT(mMode == Mode::None);
MOZ_DIAGNOSTIC_ASSERT(!aMinDelay.IsZero() ||
aDeadline > (aNow + mAllowedEarlyFiringTime));
nsresult rv = NS_OK;
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
+ mTimer = NS_NewTimer();
+ NS_ENSURE_TRUE(mTimer, NS_ERROR_OUT_OF_MEMORY);
uint32_t earlyMicros = 0;
MOZ_ALWAYS_SUCCEEDS(mTimer->GetAllowedEarlyFiringMicroseconds(&earlyMicros));
mAllowedEarlyFiringTime = TimeDuration::FromMicroseconds(earlyMicros);
}
// Always call Cancel() in case we are re-using a timer. Otherwise
// the subsequent SetTarget() may fail.
--- a/dom/base/TimeoutManager.cpp
+++ b/dom/base/TimeoutManager.cpp
@@ -1310,29 +1310,22 @@ TimeoutManager::MaybeStartThrottleTimeou
}
MOZ_DIAGNOSTIC_ASSERT(!mThrottleTimeouts);
MOZ_LOG(gLog, LogLevel::Debug,
("TimeoutManager %p delaying tracking timeout throttling by %dms\n",
this, gTimeoutThrottlingDelay));
- mThrottleTimeoutsTimer =
- do_CreateInstance("@mozilla.org/timer;1");
- if (!mThrottleTimeoutsTimer) {
- return;
- }
-
nsCOMPtr<nsITimerCallback> callback =
new ThrottleTimeoutsCallback(&mWindow);
- mThrottleTimeoutsTimer->SetTarget(EventTarget());
-
- mThrottleTimeoutsTimer->InitWithCallback(
- callback, gTimeoutThrottlingDelay, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mThrottleTimeoutsTimer),
+ callback, gTimeoutThrottlingDelay, nsITimer::TYPE_ONE_SHOT,
+ EventTarget());
}
void
TimeoutManager::BeginSyncOperation()
{
// If we're beginning a sync operation, the currently running
// timeout will be put on hold. To not get into an inconsistent
// state, where the currently running timeout appears to take time
--- a/dom/base/nsContentSink.cpp
+++ b/dom/base/nsContentSink.cpp
@@ -1398,30 +1398,24 @@ nsContentSink::WillInterruptImpl()
}
} else if (!mNotificationTimer) {
interval -= diff;
int32_t delay = interval;
// Convert to milliseconds
delay /= PR_USEC_PER_MSEC;
- mNotificationTimer = do_CreateInstance("@mozilla.org/timer;1",
- &result);
- if (NS_SUCCEEDED(result)) {
+ NS_NewTimerWithCallback(getter_AddRefs(mNotificationTimer),
+ this, delay,
+ nsITimer::TYPE_ONE_SHOT);
+ if (mNotificationTimer) {
SINK_TRACE(static_cast<LogModule*>(gContentSinkLogModuleInfo),
SINK_TRACE_REFLOW,
("nsContentSink::WillInterrupt: setting up timer with "
"delay %d", delay));
-
- result =
- mNotificationTimer->InitWithCallback(this, delay,
- nsITimer::TYPE_ONE_SHOT);
- if (NS_FAILED(result)) {
- mNotificationTimer = nullptr;
- }
}
}
}
} else {
SINK_TRACE(static_cast<LogModule*>(gContentSinkLogModuleInfo),
SINK_TRACE_REFLOW,
("nsContentSink::WillInterrupt: flushing tags "
"unconditionally"));
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -7121,20 +7121,20 @@ FullscreenTransitionTask::Run()
// 2. the user has switched to another tab before we get here.
// Completely fixing those cases seems to be tricky, and since they
// should rarely happen, it probably isn't worth to fix. Hence we
// simply add a timeout here to ensure we never hang forever.
// In addition, if the page is complicated or the machine is less
// powerful, layout could take a long time, in which case, staying
// in black screen for that long could hurt user experience even
// more than exposing an intermediate state.
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
uint32_t timeout =
Preferences::GetUint("full-screen-api.transition.timeout", 1000);
- mTimer->Init(observer, timeout, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithObserver(getter_AddRefs(mTimer),
+ observer, timeout, nsITimer::TYPE_ONE_SHOT);
} else if (stage == eAfterToggle) {
Telemetry::AccumulateTimeDelta(Telemetry::FULLSCREEN_TRANSITION_BLACK_MS,
mFullscreenChangeStartTime);
mWidget->PerformFullscreenTransition(nsIWidget::eAfterFullscreenToggle,
mDuration.mFadeOut, mTransitionData,
this);
} else if (stage == eEnd) {
profiler_add_marker("Fullscreen transition end");
@@ -12043,18 +12043,18 @@ nsGlobalWindow::RegisterIdleObserver(nsI
if (mIdleObservers.IsEmpty()) {
mIdleService = do_GetService("@mozilla.org/widget/idleservice;1", &rv);
NS_ENSURE_SUCCESS(rv, rv);
rv = mIdleService->AddIdleObserver(mObserver, MIN_IDLE_NOTIFICATION_TIME_S);
NS_ENSURE_SUCCESS(rv, rv);
if (!mIdleTimer) {
- mIdleTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
+ mIdleTimer = NS_NewTimer();
+ NS_ENSURE_TRUE(mIdleTimer, NS_ERROR_OUT_OF_MEMORY);
} else {
mIdleTimer->Cancel();
}
}
MOZ_ASSERT(mIdleService);
MOZ_ASSERT(mIdleTimer);
--- a/dom/base/nsJSEnvironment.cpp
+++ b/dom/base/nsJSEnvironment.cpp
@@ -2112,59 +2112,47 @@ nsJSContext::PokeGC(JS::gcreason::Reason
if (sICCRunner) {
// Make sure GC is called after the current CC completes.
// No need to set sNeedsFullCC because we are currently running a CC.
sNeedsGCAfterCC = true;
return;
}
- CallCreateInstance("@mozilla.org/timer;1", &sGCTimer);
-
- if (!sGCTimer) {
- // Failed to create timer (probably because we're in XPCOM shutdown)
- return;
- }
-
static bool first = true;
- sGCTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
- sGCTimer->InitWithNamedFuncCallback(GCTimerFired,
- reinterpret_cast<void *>(aReason),
- aDelay
- ? aDelay
- : (first
- ? NS_FIRST_GC_DELAY
- : NS_GC_DELAY),
- nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
- "GCTimerFired");
+ NS_NewTimerWithFuncCallback(&sGCTimer,
+ GCTimerFired,
+ reinterpret_cast<void *>(aReason),
+ aDelay
+ ? aDelay
+ : (first
+ ? NS_FIRST_GC_DELAY
+ : NS_GC_DELAY),
+ nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
+ "GCTimerFired",
+ SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
first = false;
}
// static
void
nsJSContext::PokeShrinkingGC()
{
if (sShrinkingGCTimer || sShuttingDown) {
return;
}
- CallCreateInstance("@mozilla.org/timer;1", &sShrinkingGCTimer);
-
- if (!sShrinkingGCTimer) {
- // Failed to create timer (probably because we're in XPCOM shutdown)
- return;
- }
-
- sShrinkingGCTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
- sShrinkingGCTimer->InitWithNamedFuncCallback(ShrinkingGCTimerFired, nullptr,
- sCompactOnUserInactiveDelay,
- nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
- "ShrinkingGCTimerFired");
+ NS_NewTimerWithFuncCallback(&sShrinkingGCTimer,
+ ShrinkingGCTimerFired, nullptr,
+ sCompactOnUserInactiveDelay,
+ nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
+ "ShrinkingGCTimerFired",
+ SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
}
// static
void
nsJSContext::MaybePokeCC()
{
if (sCCRunner || sICCRunner || sShuttingDown || !sHasRunGC) {
return;
@@ -2332,23 +2320,23 @@ DOMGCSliceCallback(JSContext* aCx, JS::G
sLikelyShortLivingObjectsNeedingGC = 0;
sCleanupsSinceLastGC = 0;
sNeedsFullCC = true;
sHasRunGC = true;
nsJSContext::MaybePokeCC();
if (aDesc.isZone_) {
if (!sFullGCTimer && !sShuttingDown) {
- CallCreateInstance("@mozilla.org/timer;1", &sFullGCTimer);
- sFullGCTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
- sFullGCTimer->InitWithNamedFuncCallback(FullGCTimerFired,
- nullptr,
- NS_FULL_GC_DELAY,
- nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
- "FullGCTimerFired");
+ NS_NewTimerWithFuncCallback(&sFullGCTimer,
+ FullGCTimerFired,
+ nullptr,
+ NS_FULL_GC_DELAY,
+ nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
+ "FullGCTimerFired",
+ SystemGroup::EventTargetFor(TaskCategory::GarbageCollection));
}
} else {
nsJSContext::KillFullGCTimer();
}
if (ShouldTriggerCC(nsCycleCollector_suspectedCount())) {
nsCycleCollector_dispatchDeferredDeletion();
}
--- a/dom/base/nsWindowMemoryReporter.cpp
+++ b/dom/base/nsWindowMemoryReporter.cpp
@@ -864,23 +864,20 @@ nsWindowMemoryReporter::AsyncCheckForGho
// If more than kTimeBetweenChecks seconds have elapsed since the last check,
// timerDelay is 0. Otherwise, it is kTimeBetweenChecks, reduced by the time
// since the last check. Reducing the delay by the time since the last check
// prevents the timer from being completely starved if it is repeatedly killed
// and restarted.
int32_t timeSinceLastCheck = (TimeStamp::NowLoRes() - mLastCheckForGhostWindows).ToSeconds();
int32_t timerDelay = (kTimeBetweenChecks - std::min(timeSinceLastCheck, kTimeBetweenChecks)) * PR_MSEC_PER_SEC;
- mCheckTimer = do_CreateInstance("@mozilla.org/timer;1");
-
- if (mCheckTimer) {
- mCheckTimer->InitWithNamedFuncCallback(CheckTimerFired, nullptr,
- timerDelay, nsITimer::TYPE_ONE_SHOT,
- "nsWindowMemoryReporter::AsyncCheckForGhostWindows_timer");
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mCheckTimer),
+ CheckTimerFired, nullptr,
+ timerDelay, nsITimer::TYPE_ONE_SHOT,
+ "nsWindowMemoryReporter::AsyncCheckForGhostWindows_timer");
}
void
nsWindowMemoryReporter::ObserveAfterMinimizeMemoryUsage()
{
// Someone claims they've done enough GC/CCs so that all eligible windows
// have been free'd. So we deem that any windows which satisfy ghost
// criteria (1) and (2) now satisfy criterion (3) as well.
--- a/dom/canvas/WebGLContextLossHandler.cpp
+++ b/dom/canvas/WebGLContextLossHandler.cpp
@@ -44,17 +44,17 @@ private:
};
NS_IMPL_ISUPPORTS(WatchdogTimerEvent, nsITimerCallback, nsINamed)
////////////////////////////////////////
WebGLContextLossHandler::WebGLContextLossHandler(WebGLContext* webgl)
: mWebGL(webgl)
- , mTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
+ , mTimer(NS_NewTimer())
, mTimerPending(false)
, mShouldRunTimerAgain(false)
#ifdef DEBUG
, mEventTarget(GetCurrentThreadSerialEventTarget())
#endif
{
MOZ_ASSERT(mEventTarget);
}
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -322,21 +322,18 @@ EventStateManager::EventStateManager()
nsresult
EventStateManager::UpdateUserActivityTimer()
{
if (!gUserInteractionTimerCallback)
return NS_OK;
if (!gUserInteractionTimer) {
- CallCreateInstance("@mozilla.org/timer;1", &gUserInteractionTimer);
- if (gUserInteractionTimer) {
- gUserInteractionTimer->SetTarget(
- SystemGroup::EventTargetFor(TaskCategory::Other));
- }
+ gUserInteractionTimer = NS_NewTimer(
+ SystemGroup::EventTargetFor(TaskCategory::Other)).take();
}
if (gUserInteractionTimer) {
gUserInteractionTimer->InitWithCallback(gUserInteractionTimerCallback,
NS_USER_INTERACTION_INTERVAL,
nsITimer::TYPE_ONE_SHOT);
}
return NS_OK;
@@ -1445,28 +1442,25 @@ EventStateManager::CreateClickHoldTimer(
nsGkAtoms::popup))
return;
// check for a <menubutton> like bookmarks
if (mGestureDownContent->IsXULElement(nsGkAtoms::menubutton))
return;
}
- mClickHoldTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mClickHoldTimer) {
- int32_t clickHoldDelay =
- Preferences::GetInt("ui.click_hold_context_menus.delay", 500);
- mClickHoldTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::Other));
- mClickHoldTimer->InitWithNamedFuncCallback(
- sClickHoldCallback,
- this,
- clickHoldDelay,
- nsITimer::TYPE_ONE_SHOT,
- "EventStateManager::CreateClickHoldTimer");
- }
+ int32_t clickHoldDelay =
+ Preferences::GetInt("ui.click_hold_context_menus.delay", 500);
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mClickHoldTimer),
+ sClickHoldCallback,
+ this,
+ clickHoldDelay,
+ nsITimer::TYPE_ONE_SHOT,
+ "EventStateManager::CreateClickHoldTimer",
+ SystemGroup::EventTargetFor(TaskCategory::Other));
} // CreateClickHoldTimer
//
// KillClickHoldTimer
//
// Stop the timer that would show the context menu dead in its tracks
//
void
--- a/dom/events/WheelHandlingHelper.cpp
+++ b/dom/events/WheelHandlingHelper.cpp
@@ -319,21 +319,20 @@ WheelTransaction::OnTimeout(nsITimer* aT
true, true);
}
}
/* static */ void
WheelTransaction::SetTimeout()
{
if (!sTimer) {
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!timer) {
+ sTimer = NS_NewTimer().take();
+ if (!sTimer) {
return;
}
- timer.swap(sTimer);
}
sTimer->Cancel();
DebugOnly<nsresult> rv =
sTimer->InitWithNamedFuncCallback(OnTimeout,
nullptr,
GetTimeoutTime(),
nsITimer::TYPE_ONE_SHOT,
"WheelTransaction::SetTimeout");
--- a/dom/file/FileReader.cpp
+++ b/dom/file/FileReader.cpp
@@ -523,17 +523,17 @@ FileReader::WrapObject(JSContext* aCx, J
{
return FileReaderBinding::Wrap(aCx, this, aGivenProto);
}
void
FileReader::StartProgressEventTimer()
{
if (!mProgressNotifier) {
- mProgressNotifier = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mProgressNotifier = NS_NewTimer();
}
if (mProgressNotifier) {
mProgressEventWasDelayed = false;
mTimerIsActive = true;
mProgressNotifier->Cancel();
mProgressNotifier->SetTarget(mTarget);
mProgressNotifier->InitWithCallback(this, NS_PROGRESS_EVENT_INTERVAL,
--- a/dom/file/nsHostObjectProtocolHandler.cpp
+++ b/dom/file/nsHostObjectProtocolHandler.cpp
@@ -429,28 +429,20 @@ class ReleasingTimerHolder final : publi
{
public:
NS_DECL_ISUPPORTS
static void
Create(nsTArray<nsWeakPtr>&& aArray)
{
RefPtr<ReleasingTimerHolder> holder = new ReleasingTimerHolder(Move(aArray));
- holder->mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
-
- // If we are shutting down, we are not able to create a timer.
- if (!holder->mTimer) {
- return;
- }
-
- MOZ_ALWAYS_SUCCEEDS(holder->mTimer->SetTarget(
- SystemGroup::EventTargetFor(TaskCategory::Other)));
-
- nsresult rv = holder->mTimer->InitWithCallback(holder, RELEASING_TIMER,
- nsITimer::TYPE_ONE_SHOT);
+ nsresult rv = NS_NewTimerWithCallback(getter_AddRefs(holder->mTimer),
+ holder, RELEASING_TIMER,
+ nsITimer::TYPE_ONE_SHOT,
+ SystemGroup::EventTargetFor(TaskCategory::Other));
NS_ENSURE_SUCCESS_VOID(rv);
}
NS_IMETHOD
Notify(nsITimer* aTimer) override
{
for (uint32_t i = 0; i < mURIs.Length(); ++i) {
nsCOMPtr<nsIURI> uri = do_QueryReferent(mURIs[i]);
--- a/dom/flyweb/FlyWebService.cpp
+++ b/dom/flyweb/FlyWebService.cpp
@@ -665,22 +665,22 @@ FlyWebMDNSService::Notify(nsITimer* time
return NS_OK;
}
nsresult
FlyWebMDNSService::Init()
{
MOZ_ASSERT(mDiscoveryState == DISCOVERY_IDLE);
- mDiscoveryStartTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mDiscoveryStartTimer = NS_NewTimer();
if (!mDiscoveryStartTimer) {
return NS_ERROR_FAILURE;
}
- mDiscoveryStopTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mDiscoveryStopTimer = NS_NewTimer();
if (!mDiscoveryStopTimer) {
return NS_ERROR_FAILURE;
}
nsresult rv;
mDNSServiceDiscovery = do_GetService(DNSSERVICEDISCOVERY_CONTRACT_ID, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
--- a/dom/gamepad/windows/WindowsGamepad.cpp
+++ b/dom/gamepad/windows/WindowsGamepad.cpp
@@ -349,19 +349,19 @@ DirectInputMessageLoopOnceCallback(nsITi
}
}
class WindowsGamepadService
{
public:
WindowsGamepadService()
{
- mDirectInputTimer = do_CreateInstance("@mozilla.org/timer;1");
- mXInputTimer = do_CreateInstance("@mozilla.org/timer;1");
- mDeviceChangeTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mDirectInputTimer = NS_NewTimer();
+ mXInputTimer = NS_NewTimer();
+ mDeviceChangeTimer = NS_NewTimer();
}
virtual ~WindowsGamepadService()
{
Cleanup();
}
void DevicesChanged(bool aIsStablizing);
--- a/dom/geolocation/MLSFallback.cpp
+++ b/dom/geolocation/MLSFallback.cpp
@@ -23,21 +23,18 @@ MLSFallback::~MLSFallback()
nsresult
MLSFallback::Startup(nsIGeolocationUpdate* aWatcher)
{
if (mHandoffTimer || mMLSFallbackProvider) {
return NS_OK;
}
mUpdateWatcher = aWatcher;
- nsresult rv;
- mHandoffTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
- rv = mHandoffTimer->InitWithCallback(this, mDelayMs, nsITimer::TYPE_ONE_SHOT);
- return rv;
+ return NS_NewTimerWithCallback(getter_AddRefs(mHandoffTimer),
+ this, mDelayMs, nsITimer::TYPE_ONE_SHOT);
}
nsresult
MLSFallback::Shutdown()
{
mUpdateWatcher = nullptr;
if (mHandoffTimer) {
--- a/dom/geolocation/nsGeolocation.cpp
+++ b/dom/geolocation/nsGeolocation.cpp
@@ -517,19 +517,19 @@ nsGeolocationRequest::GetRequester(nsICo
void
nsGeolocationRequest::SetTimeoutTimer()
{
MOZ_ASSERT(!mShutdown, "set timeout after shutdown");
StopTimeoutTimer();
if (mOptions && mOptions->mTimeout != 0 && mOptions->mTimeout != 0x7fffffff) {
- mTimeoutTimer = do_CreateInstance("@mozilla.org/timer;1");
RefPtr<TimerCallbackHolder> holder = new TimerCallbackHolder(this);
- mTimeoutTimer->InitWithCallback(holder, mOptions->mTimeout, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mTimeoutTimer),
+ holder, mOptions->mTimeout, nsITimer::TYPE_ONE_SHOT);
}
}
void
nsGeolocationRequest::StopTimeoutTimer()
{
if (mTimeoutTimer) {
mTimeoutTimer->Cancel();
@@ -862,17 +862,17 @@ nsGeolocationService::StartDevice(nsIPri
return NS_OK;
}
void
nsGeolocationService::SetDisconnectTimer()
{
if (!mDisconnectTimer) {
- mDisconnectTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mDisconnectTimer = NS_NewTimer();
} else {
mDisconnectTimer->Cancel();
}
mDisconnectTimer->Init(this,
sProviderTimeout,
nsITimer::TYPE_ONE_SHOT);
}
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -4398,22 +4398,21 @@ void HTMLMediaElement::VideoDecodeSuspen
void HTMLMediaElement::HiddenVideoStart()
{
MOZ_ASSERT(NS_IsMainThread());
mHiddenPlayTime.Start();
if (mVideoDecodeSuspendTimer) {
// Already started, just keep it running.
return;
}
- mVideoDecodeSuspendTimer = do_CreateInstance("@mozilla.org/timer;1");
- mVideoDecodeSuspendTimer->SetTarget(mMainThreadEventTarget);
- mVideoDecodeSuspendTimer->InitWithNamedFuncCallback(
- VideoDecodeSuspendTimerCallback, this,
- MediaPrefs::MDSMSuspendBackgroundVideoDelay(), nsITimer::TYPE_ONE_SHOT,
- "HTMLMediaElement::VideoDecodeSuspendTimerCallback");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mVideoDecodeSuspendTimer),
+ VideoDecodeSuspendTimerCallback, this,
+ MediaPrefs::MDSMSuspendBackgroundVideoDelay(), nsITimer::TYPE_ONE_SHOT,
+ "HTMLMediaElement::VideoDecodeSuspendTimerCallback",
+ mMainThreadEventTarget);
}
void HTMLMediaElement::HiddenVideoStop()
{
MOZ_ASSERT(NS_IsMainThread());
mHiddenPlayTime.Pause();
mVideoDecodeSuspendTime.Pause();
if (!mVideoDecodeSuspendTimer) {
@@ -5610,21 +5609,20 @@ void HTMLMediaElement::ProgressTimerCall
}
void HTMLMediaElement::StartProgressTimer()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mNetworkState == nsIDOMHTMLMediaElement::NETWORK_LOADING);
NS_ASSERTION(!mProgressTimer, "Already started progress timer.");
- mProgressTimer = do_CreateInstance("@mozilla.org/timer;1");
- mProgressTimer->SetTarget(mMainThreadEventTarget);
- mProgressTimer->InitWithNamedFuncCallback(
- ProgressTimerCallback, this, PROGRESS_MS, nsITimer::TYPE_REPEATING_SLACK,
- "HTMLMediaElement::ProgressTimerCallback");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mProgressTimer),
+ ProgressTimerCallback, this, PROGRESS_MS, nsITimer::TYPE_REPEATING_SLACK,
+ "HTMLMediaElement::ProgressTimerCallback",
+ mMainThreadEventTarget);
}
void HTMLMediaElement::StartProgress()
{
// Record the time now for detecting stalled.
mDataTime = TimeStamp::NowLoRes();
// Reset mProgressTime so that mDataTime is not indicating bytes received
// after the last progress event.
--- a/dom/html/nsHTMLDNSPrefetch.cpp
+++ b/dom/html/nsHTMLDNSPrefetch.cpp
@@ -273,17 +273,17 @@ nsHTMLDNSPrefetch::nsListener::OnLookupC
/////////////////////////////////////////////////////////////////////////////////////////////////////////
nsHTMLDNSPrefetch::nsDeferrals::nsDeferrals()
: mHead(0),
mTail(0),
mActiveLoaderCount(0),
mTimerArmed(false)
{
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();;
}
nsHTMLDNSPrefetch::nsDeferrals::~nsDeferrals()
{
if (mTimerArmed) {
mTimerArmed = false;
mTimer->Cancel();
}
--- a/dom/indexedDB/ActorsParent.cpp
+++ b/dom/indexedDB/ActorsParent.cpp
@@ -11989,17 +11989,17 @@ DatabaseUpdateFunction::UpdateInternal(i
}
/*******************************************************************************
* ConnectionPool implementation
******************************************************************************/
ConnectionPool::ConnectionPool()
: mDatabasesMutex("ConnectionPool::mDatabasesMutex")
- , mIdleTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
+ , mIdleTimer(NS_NewTimer())
, mNextTransactionId(0)
, mTotalThreadCount(0)
, mShutdownRequested(false)
, mShutdownComplete(false)
{
AssertIsOnOwningThread();
AssertIsOnBackgroundThread();
MOZ_ASSERT(mIdleTimer);
--- a/dom/indexedDB/IndexedDatabaseManager.cpp
+++ b/dom/indexedDB/IndexedDatabaseManager.cpp
@@ -384,17 +384,17 @@ IndexedDatabaseManager::Init()
if (sIsMainProcess) {
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
NS_ENSURE_STATE(obs);
nsresult rv =
obs->AddObserver(this, DISKSPACEWATCHER_OBSERVER_TOPIC, false);
NS_ENSURE_SUCCESS(rv, rv);
- mDeleteTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mDeleteTimer = NS_NewTimer();
NS_ENSURE_STATE(mDeleteTimer);
if (QuotaManager* quotaManager = QuotaManager::Get()) {
NoteLiveQuotaManager(quotaManager);
}
}
Preferences::RegisterCallbackAndCall(AtomicBoolPrefChangedCallback,
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -2929,24 +2929,23 @@ void
ContentChild::StartForceKillTimer()
{
if (mForceKillTimer) {
return;
}
int32_t timeoutSecs = Preferences::GetInt("dom.ipc.tabs.shutdownTimeoutSecs", 5);
if (timeoutSecs > 0) {
- mForceKillTimer = do_CreateInstance("@mozilla.org/timer;1");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mForceKillTimer),
+ ContentChild::ForceKillTimerCallback,
+ this,
+ timeoutSecs * 1000,
+ nsITimer::TYPE_ONE_SHOT,
+ "dom::ContentChild::StartForceKillTimer");
MOZ_ASSERT(mForceKillTimer);
- mForceKillTimer->InitWithNamedFuncCallback(
- ContentChild::ForceKillTimerCallback,
- this,
- timeoutSecs * 1000,
- nsITimer::TYPE_ONE_SHOT,
- "dom::ContentChild::StartForceKillTimer");
}
}
/* static */ void
ContentChild::ForceKillTimerCallback(nsITimer* aTimer, void* aClosure)
{
ProcessChild::QuickExit();
}
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -1902,24 +1902,23 @@ void
ContentParent::StartForceKillTimer()
{
if (mForceKillTimer || !mIPCOpen) {
return;
}
int32_t timeoutSecs = Preferences::GetInt("dom.ipc.tabs.shutdownTimeoutSecs", 5);
if (timeoutSecs > 0) {
- mForceKillTimer = do_CreateInstance("@mozilla.org/timer;1");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mForceKillTimer),
+ ContentParent::ForceKillTimerCallback,
+ this,
+ timeoutSecs * 1000,
+ nsITimer::TYPE_ONE_SHOT,
+ "dom::ContentParent::StartForceKillTimer");
MOZ_ASSERT(mForceKillTimer);
- mForceKillTimer->InitWithNamedFuncCallback(
- ContentParent::ForceKillTimerCallback,
- this,
- timeoutSecs * 1000,
- nsITimer::TYPE_ONE_SHOT,
- "dom::ContentParent::StartForceKillTimer");
}
}
void
ContentParent::NotifyTabDestroyed(const TabId& aTabId,
bool aNotifiedDestroying)
{
if (aNotifiedDestroying) {
--- a/dom/ipc/ProcessPriorityManager.cpp
+++ b/dom/ipc/ProcessPriorityManager.cpp
@@ -808,18 +808,18 @@ ParticularProcessPriorityManager::Schedu
timeout = sBackgroundGracePeriodMS;
break;
default:
MOZ_ASSERT(false, "Unrecognized timeout pref");
break;
}
LOGP("Scheduling reset timer to fire in %dms.", timeout);
- mResetPriorityTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mResetPriorityTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mResetPriorityTimer),
+ this, timeout, nsITimer::TYPE_ONE_SHOT);
}
NS_IMETHODIMP
ParticularProcessPriorityManager::Notify(nsITimer* aTimer)
{
LOGP("Reset priority timer callback; about to ResetPriorityNow.");
ResetPriorityNow();
mResetPriorityTimer = nullptr;
--- a/dom/media/CanvasCaptureMediaStream.cpp
+++ b/dom/media/CanvasCaptureMediaStream.cpp
@@ -135,25 +135,22 @@ public:
: OutputStreamDriver(aSourceStream, aTrackId, aPrincipalHandle)
, mFPS(aFPS)
, mTimer(nullptr)
{
if (mFPS == 0.0) {
return;
}
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!mTimer) {
- return;
- }
- mTimer->InitWithNamedFuncCallback(&TimerTick,
- this,
- int(1000 / mFPS),
- nsITimer::TYPE_REPEATING_SLACK,
- "dom::TimerDriver::TimerDriver");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ &TimerTick,
+ this,
+ int(1000 / mFPS),
+ nsITimer::TYPE_REPEATING_SLACK,
+ "dom::TimerDriver::TimerDriver");
}
static void TimerTick(nsITimer* aTimer, void* aClosure)
{
MOZ_ASSERT(aClosure);
TimerDriver* driver = static_cast<TimerDriver*>(aClosure);
driver->RequestFrameCapture();
--- a/dom/media/ChannelMediaDecoder.cpp
+++ b/dom/media/ChannelMediaDecoder.cpp
@@ -25,18 +25,17 @@ ChannelMediaDecoder::ResourceCallback::R
MOZ_ASSERT(aMainThread);
}
void
ChannelMediaDecoder::ResourceCallback::Connect(ChannelMediaDecoder* aDecoder)
{
MOZ_ASSERT(NS_IsMainThread());
mDecoder = aDecoder;
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- mTimer->SetTarget(mAbstractMainThread->AsEventTarget());
+ mTimer = NS_NewTimer(mAbstractMainThread->AsEventTarget());
}
void
ChannelMediaDecoder::ResourceCallback::Disconnect()
{
MOZ_ASSERT(NS_IsMainThread());
if (mDecoder) {
mDecoder = nullptr;
--- a/dom/media/DecoderDoctorDiagnostics.cpp
+++ b/dom/media/DecoderDoctorDiagnostics.cpp
@@ -222,25 +222,18 @@ DecoderDoctorDocumentWatcher::StopWatchi
}
void
DecoderDoctorDocumentWatcher::EnsureTimerIsStarted()
{
MOZ_ASSERT(NS_IsMainThread());
if (!mTimer) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (NS_WARN_IF(!mTimer)) {
- return;
- }
- if (NS_WARN_IF(NS_FAILED(
- mTimer->InitWithCallback(
- this, sAnalysisPeriod_ms, nsITimer::TYPE_ONE_SHOT)))) {
- mTimer = nullptr;
- }
+ NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, sAnalysisPeriod_ms, nsITimer::TYPE_ONE_SHOT);
}
}
enum class ReportParam : uint8_t
{
// Marks the end of the parameter list.
// Keep this zero! (For implicit zero-inits when used in definitions below.)
None = 0,
--- a/dom/media/MediaDevices.cpp
+++ b/dom/media/MediaDevices.cpp
@@ -229,17 +229,17 @@ MediaDevices::OnDeviceChange()
if (!(MediaManager::Get()->IsActivelyCapturingOrHasAPermission(GetOwner()->WindowID()) ||
Preferences::GetBool("media.navigator.permission.disabled", false))) {
return;
}
if (!mFuzzTimer)
{
- mFuzzTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mFuzzTimer = NS_NewTimer();
}
if (!mFuzzTimer) {
MOZ_ASSERT(false);
return;
}
mFuzzTimer->Cancel();
--- a/dom/media/MediaStreamGraph.cpp
+++ b/dom/media/MediaStreamGraph.cpp
@@ -1494,23 +1494,20 @@ MediaStreamGraphImpl::ForceShutDown(Shut
LOG(LogLevel::Debug, ("MediaStreamGraph %p ForceShutdown", this));
MonitorAutoLock lock(mMonitor);
if (aShutdownTicket) {
MOZ_ASSERT(!mForceShutdownTicket);
// Avoid waiting forever for a graph to shut down
// synchronously. Reports are that some 3rd-party audio drivers
// occasionally hang in shutdown (both for us and Chrome).
- mShutdownTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!mShutdownTimer) {
- return;
- }
- mShutdownTimer->InitWithCallback(this,
- MediaStreamGraph::AUDIO_CALLBACK_DRIVER_SHUTDOWN_TIMEOUT,
- nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mShutdownTimer),
+ this,
+ MediaStreamGraph::AUDIO_CALLBACK_DRIVER_SHUTDOWN_TIMEOUT,
+ nsITimer::TYPE_ONE_SHOT);
}
mForceShutDown = true;
mForceShutdownTicket = aShutdownTicket;
if (mLifecycleState == LIFECYCLE_THREAD_NOT_STARTED) {
// We *could* have just sent this a message to start up, so don't
// yank the rug out from under it. Tell it to startup and let it
// shut down.
RefPtr<GraphDriver> driver = CurrentDriver();
--- a/dom/media/MediaTimer.cpp
+++ b/dom/media/MediaTimer.cpp
@@ -15,17 +15,17 @@
namespace mozilla {
NS_IMPL_ADDREF(MediaTimer)
NS_IMPL_RELEASE_WITH_DESTROY(MediaTimer, DispatchDestroy())
MediaTimer::MediaTimer()
: mMonitor("MediaTimer Monitor")
- , mTimer(do_CreateInstance("@mozilla.org/timer;1"))
+ , mTimer(NS_NewTimer())
, mCreationTimeStamp(TimeStamp::Now())
, mUpdateScheduled(false)
{
TIMER_LOG("MediaTimer::MediaTimer");
// Use the SharedThreadPool to create an nsIThreadPool with a maximum of one
// thread, which is equivalent to an nsIThread for our purposes.
RefPtr<SharedThreadPool> threadPool(
--- a/dom/media/VideoUtils.cpp
+++ b/dom/media/VideoUtils.cpp
@@ -362,33 +362,23 @@ SimpleTimer::Init(nsIRunnable* aTask, ui
target = aTarget;
} else {
target = GetMainThreadEventTarget();
if (!target) {
return NS_ERROR_NOT_AVAILABLE;
}
}
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv)) {
- return rv;
- }
- // Note: set target before InitWithCallback in case the timer fires before
- // we change the event target.
- rv = timer->SetTarget(target);
- if (NS_FAILED(rv)) {
- timer->Cancel();
- return rv;
- }
- rv = timer->InitWithCallback(this, aTimeoutMs, nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, aTimeoutMs, nsITimer::TYPE_ONE_SHOT,
+ target);
if (NS_FAILED(rv)) {
return rv;
}
- mTimer = timer.forget();
mTask = aTask;
return NS_OK;
}
NS_IMPL_ISUPPORTS(SimpleTimer, nsITimerCallback, nsINamed)
already_AddRefed<SimpleTimer>
SimpleTimer::Create(nsIRunnable* aTask, uint32_t aTimeoutMs, nsIEventTarget* aTarget)
--- a/dom/media/eme/MediaKeySystemAccessManager.cpp
+++ b/dom/media/eme/MediaKeySystemAccessManager.cpp
@@ -276,18 +276,20 @@ MediaKeySystemAccessManager::AwaitInstal
{
EME_LOG("MediaKeySystemAccessManager::AwaitInstall %s", NS_ConvertUTF16toUTF8(aKeySystem).get());
if (!EnsureObserversAdded()) {
NS_WARNING("Failed to add pref observer");
return false;
}
- nsCOMPtr<nsITimer> timer(do_CreateInstance("@mozilla.org/timer;1"));
- if (!timer || NS_FAILED(timer->Init(this, 60 * 1000, nsITimer::TYPE_ONE_SHOT))) {
+ nsCOMPtr<nsITimer> timer;
+ NS_NewTimerWithObserver(getter_AddRefs(timer),
+ this, 60 * 1000, nsITimer::TYPE_ONE_SHOT);
+ if (!timer) {
NS_WARNING("Failed to create timer to await CDM install.");
return false;
}
mRequests.AppendElement(PendingRequest(aPromise, aKeySystem, aConfigs, timer));
return true;
}
--- a/dom/media/gmp/GMPTimerParent.cpp
+++ b/dom/media/gmp/GMPTimerParent.cpp
@@ -41,32 +41,29 @@ GMPTimerParent::RecvSetTimer(const uint3
MOZ_ASSERT(mGMPEventTarget->IsOnCurrentThread());
if (!mIsOpen) {
return IPC_OK();
}
nsresult rv;
nsAutoPtr<Context> ctx(new Context());
- ctx->mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
+
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(ctx->mTimer),
+ &GMPTimerParent::GMPTimerExpired,
+ ctx,
+ aTimeoutMs,
+ nsITimer::TYPE_ONE_SHOT,
+ "gmp::GMPTimerParent::RecvSetTimer",
+ mGMPEventTarget);
NS_ENSURE_SUCCESS(rv, IPC_OK());
ctx->mId = aTimerId;
- rv = ctx->mTimer->SetTarget(mGMPEventTarget);
- NS_ENSURE_SUCCESS(rv, IPC_OK());
ctx->mParent = this;
- rv =
- ctx->mTimer->InitWithNamedFuncCallback(&GMPTimerParent::GMPTimerExpired,
- ctx,
- aTimeoutMs,
- nsITimer::TYPE_ONE_SHOT,
- "gmp::GMPTimerParent::RecvSetTimer");
- NS_ENSURE_SUCCESS(rv, IPC_OK());
-
mTimers.PutEntry(ctx.forget());
return IPC_OK();
}
void
GMPTimerParent::Shutdown()
{
--- a/dom/media/webrtc/MediaEngineDefault.cpp
+++ b/dom/media/webrtc/MediaEngineDefault.cpp
@@ -173,17 +173,17 @@ static void ReleaseFrame(layers::PlanarY
nsresult
MediaEngineDefaultVideoSource::Start(SourceMediaStream* aStream, TrackID aID,
const PrincipalHandle& aPrincipalHandle)
{
if (mState != kAllocated) {
return NS_ERROR_FAILURE;
}
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
if (!mTimer) {
return NS_ERROR_FAILURE;
}
aStream->AddTrack(aID, 0, new VideoSegment(), SourceMediaStream::ADDTRACK_QUEUED);
// Remember TrackID so we can end it later
mTrackID = aID;
--- a/dom/media/webrtc/MediaEngineTabVideoSource.cpp
+++ b/dom/media/webrtc/MediaEngineTabVideoSource.cpp
@@ -46,18 +46,19 @@ MediaEngineTabVideoSource::MediaEngineTa
, mDataSize(0)
, mBlackedoutWindow(false)
, mMonitor("MediaEngineTabVideoSource") {}
nsresult
MediaEngineTabVideoSource::StartRunnable::Run()
{
mVideoSource->Draw();
- mVideoSource->mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mVideoSource->mTimer->InitWithCallback(mVideoSource, mVideoSource->mTimePerFrame, nsITimer:: TYPE_REPEATING_SLACK);
+ NS_NewTimerWithCallback(getter_AddRefs(mVideoSource->mTimer),
+ mVideoSource, mVideoSource->mTimePerFrame,
+ nsITimer::TYPE_REPEATING_SLACK);
if (mVideoSource->mTabSource) {
mVideoSource->mTabSource->NotifyStreamStart(mVideoSource->mWindow);
}
return NS_OK;
}
nsresult
MediaEngineTabVideoSource::StopRunnable::Run()
--- a/dom/media/webspeech/recognition/SpeechRecognition.cpp
+++ b/dom/media/webspeech/recognition/SpeechRecognition.cpp
@@ -112,17 +112,17 @@ NS_INTERFACE_MAP_END_INHERITING(DOMEvent
NS_IMPL_ADDREF_INHERITED(SpeechRecognition, DOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(SpeechRecognition, DOMEventTargetHelper)
SpeechRecognition::SpeechRecognition(nsPIDOMWindowInner* aOwnerWindow)
: DOMEventTargetHelper(aOwnerWindow)
, mEndpointer(kSAMPLE_RATE)
, mAudioSamplesPerChunk(mEndpointer.FrameSize())
- , mSpeechDetectionTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
+ , mSpeechDetectionTimer(NS_NewTimer())
, mSpeechGrammarList(new SpeechGrammarList(GetParentObject()))
, mInterimResults(false)
, mMaxAlternatives(1)
{
SR_LOG("created SpeechRecognition");
if (MediaPrefs::WebSpeechTestEnabled()) {
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
--- a/dom/plugins/base/nsNPAPIPluginInstance.cpp
+++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp
@@ -1035,28 +1035,27 @@ nsNPAPIPluginInstance::ScheduleTimer(uin
// generate ID that is unique to this instance
uint32_t uniqueID = mTimers.Length();
while ((uniqueID == 0) || TimerWithID(uniqueID, nullptr))
uniqueID++;
newTimer->id = uniqueID;
// create new xpcom timer, scheduled correctly
nsresult rv;
- nsCOMPtr<nsITimer> xpcomTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
+ const short timerType = (repeat ? (short)nsITimer::TYPE_REPEATING_SLACK : (short)nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(newTimer->timer),
+ PluginTimerCallback,
+ newTimer,
+ interval,
+ timerType,
+ "nsNPAPIPluginInstance::ScheduleTimer");
if (NS_FAILED(rv)) {
delete newTimer;
return 0;
}
- const short timerType = (repeat ? (short)nsITimer::TYPE_REPEATING_SLACK : (short)nsITimer::TYPE_ONE_SHOT);
- xpcomTimer->InitWithNamedFuncCallback(PluginTimerCallback,
- newTimer,
- interval,
- timerType,
- "nsNPAPIPluginInstance::ScheduleTimer");
- newTimer->timer = xpcomTimer;
// save callback function
newTimer->callback = timerFunc;
// add timer to timers array
mTimers.AppendElement(newTimer);
return newTimer->id;
--- a/dom/plugins/base/nsNPAPIPluginStreamListener.cpp
+++ b/dom/plugins/base/nsNPAPIPluginStreamListener.cpp
@@ -318,24 +318,20 @@ nsNPAPIPluginStreamListener::ResumeReque
mStreamListenerPeer->ResumeRequests();
}
mIsSuspended = false;
}
nsresult
nsNPAPIPluginStreamListener::StartDataPump()
{
- nsresult rv;
- mDataPumpTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
// Start pumping data to the plugin every 100ms until it obeys and
// eats the data.
- return mDataPumpTimer->InitWithCallback(this, 100,
- nsITimer::TYPE_REPEATING_SLACK);
+ return NS_NewTimerWithCallback(getter_AddRefs(mDataPumpTimer),
+ this, 100, nsITimer::TYPE_REPEATING_SLACK);
}
void
nsNPAPIPluginStreamListener::StopDataPump()
{
if (mDataPumpTimer) {
mDataPumpTimer->Cancel();
mDataPumpTimer = nullptr;
--- a/dom/plugins/base/nsPluginHost.cpp
+++ b/dom/plugins/base/nsPluginHost.cpp
@@ -656,17 +656,17 @@ void nsPluginHost::OnPluginInstanceDestr
// retention and avoid perf hits for loading popular plugins.
if (!hasInstance) {
if (UnloadPluginsASAP()) {
aPluginTag->TryUnloadPlugin(false);
} else {
if (aPluginTag->mUnloadTimer) {
aPluginTag->mUnloadTimer->Cancel();
} else {
- aPluginTag->mUnloadTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ aPluginTag->mUnloadTimer = NS_NewTimer();
}
uint32_t unloadTimeout = Preferences::GetUint(kPrefUnloadPluginTimeoutSecs,
kDefaultPluginUnloadingTimeout);
aPluginTag->mUnloadTimer->InitWithCallback(this,
1000 * unloadTimeout,
nsITimer::TYPE_ONE_SHOT);
}
}
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -1284,17 +1284,17 @@ bool nsPluginInstanceOwner::IsRemoteDraw
NPEventModel nsPluginInstanceOwner::GetEventModel()
{
return mEventModel;
}
#define DEFAULT_REFRESH_RATE 20 // 50 FPS
-nsCOMPtr<nsITimer> *nsPluginInstanceOwner::sCATimer = nullptr;
+StaticRefPtr<nsITimer> nsPluginInstanceOwner::sCATimer;
nsTArray<nsPluginInstanceOwner*> *nsPluginInstanceOwner::sCARefreshListeners = nullptr;
void nsPluginInstanceOwner::CARefresh(nsITimer *aTimer, void *aClosure) {
if (!sCARefreshListeners) {
return;
}
for (size_t i = 0; i < sCARefreshListeners->Length(); i++) {
nsPluginInstanceOwner* instanceOwner = (*sCARefreshListeners)[i];
@@ -1330,39 +1330,34 @@ void nsPluginInstanceOwner::AddToCARefre
}
if (sCARefreshListeners->Contains(this)) {
return;
}
sCARefreshListeners->AppendElement(this);
- if (!sCATimer) {
- sCATimer = new nsCOMPtr<nsITimer>();
- }
-
if (sCARefreshListeners->Length() == 1) {
- *sCATimer = do_CreateInstance("@mozilla.org/timer;1");
- (*sCATimer)->InitWithNamedFuncCallback(CARefresh, nullptr,
- DEFAULT_REFRESH_RATE, nsITimer::TYPE_REPEATING_SLACK,
- "nsPluginInstanceOwner::CARefresh");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(sCATimer),
+ CARefresh, nullptr,
+ DEFAULT_REFRESH_RATE, nsITimer::TYPE_REPEATING_SLACK,
+ "nsPluginInstanceOwner::CARefresh");
}
}
void nsPluginInstanceOwner::RemoveFromCARefreshTimer() {
if (!sCARefreshListeners || sCARefreshListeners->Contains(this) == false) {
return;
}
sCARefreshListeners->RemoveElement(this);
if (sCARefreshListeners->Length() == 0) {
if (sCATimer) {
- (*sCATimer)->Cancel();
- delete sCATimer;
+ sCATimer->Cancel();
sCATimer = nullptr;
}
delete sCARefreshListeners;
sCARefreshListeners = nullptr;
}
}
void nsPluginInstanceOwner::SetPluginPort()
--- a/dom/presentation/PresentationSessionInfo.cpp
+++ b/dom/presentation/PresentationSessionInfo.cpp
@@ -1167,21 +1167,18 @@ PresentationPresentingInfo::Init(nsIPres
{
PresentationSessionInfo::Init(aControlChannel);
// Add a timer to prevent waiting indefinitely in case the receiver page fails
// to become ready.
nsresult rv;
int32_t timeout =
Preferences::GetInt("presentation.receiver.loading.timeout", 10000);
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
- }
- rv = mTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, timeout, nsITimer::TYPE_ONE_SHOT);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
return NS_OK;
}
void
--- a/dom/presentation/provider/MulticastDNSDeviceProvider.cpp
+++ b/dom/presentation/provider/MulticastDNSDeviceProvider.cpp
@@ -139,24 +139,24 @@ MulticastDNSDeviceProvider::Init()
return rv;
}
mPresentationService = do_CreateInstance(PRESENTATION_CONTROL_SERVICE_CONTACT_ID, &rv);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
- mDiscoveryTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
+ mDiscoveryTimer = NS_NewTimer();
+ if (NS_WARN_IF(!mDiscoveryTimer)) {
+ return NS_ERROR_OUT_OF_MEMORY;
}
- mServerRetryTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return rv;
+ mServerRetryTimer = NS_NewTimer();
+ if (NS_WARN_IF(!mServerRetryTimer)) {
+ return NS_ERROR_OUT_OF_MEMORY;
}
Preferences::AddStrongObservers(this, kObservedPrefs);
mDiscoveryEnabled = Preferences::GetBool(PREF_PRESENTATION_DISCOVERY);
mDiscoveryTimeoutMs = Preferences::GetUint(PREF_PRESENTATION_DISCOVERY_TIMEOUT_MS);
mDiscoverable = Preferences::GetBool(PREF_PRESENTATION_DISCOVERABLE);
mDiscoverableEncrypted = Preferences::GetBool(PREF_PRESENTATION_DISCOVERABLE_ENCRYPTED);
mServerRetryMs = Preferences::GetUint(PREF_PRESENTATION_DISCOVERABLE_RETRY_MS);
--- a/dom/quota/ActorsParent.cpp
+++ b/dom/quota/ActorsParent.cpp
@@ -3613,17 +3613,17 @@ QuotaManager::Init(const nsAString& aBas
rv = NS_NewNamedThread("QuotaManager IO", getter_AddRefs(mIOThread));
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
// Make a timer here to avoid potential failures later. We don't actually
// initialize the timer until shutdown.
- mShutdownTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mShutdownTimer = NS_NewTimer();
if (NS_WARN_IF(!mShutdownTimer)) {
return NS_ERROR_FAILURE;
}
static_assert(Client::IDB == 0 && Client::ASMJS == 1 && Client::DOMCACHE == 2 &&
Client::TYPE_MAX == 3, "Fix the registration!");
MOZ_ASSERT(mClients.Capacity() == Client::TYPE_MAX,
--- a/dom/storage/StorageObserver.cpp
+++ b/dom/storage/StorageObserver.cpp
@@ -162,24 +162,18 @@ StorageObserver::Observe(nsISupports* aS
// Start the thread that opens the database.
if (!strcmp(aTopic, kStartupTopic)) {
MOZ_ASSERT(XRE_IsParentProcess());
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
obs->RemoveObserver(this, kStartupTopic);
- mDBThreadStartDelayTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!mDBThreadStartDelayTimer) {
- return NS_ERROR_UNEXPECTED;
- }
-
- mDBThreadStartDelayTimer->Init(this, nsITimer::TYPE_ONE_SHOT, kStartupDelay);
-
- return NS_OK;
+ return NS_NewTimerWithObserver(getter_AddRefs(mDBThreadStartDelayTimer),
+ this, nsITimer::TYPE_ONE_SHOT, kStartupDelay);
}
// Timer callback used to start the database a short timer after startup
if (!strcmp(aTopic, NS_TIMER_CALLBACK_TOPIC)) {
MOZ_ASSERT(XRE_IsParentProcess());
nsCOMPtr<nsITimer> timer = do_QueryInterface(aSubject);
if (!timer) {
--- a/dom/workers/RuntimeService.cpp
+++ b/dom/workers/RuntimeService.cpp
@@ -1950,17 +1950,17 @@ RuntimeService::Init()
// nsIStreamTransportService is thread-safe but it must be initialized on the
// main-thread. FileReader needs it, so, let's initialize it now.
nsresult rv;
nsCOMPtr<nsIStreamTransportService> sts =
do_GetService(kStreamTransportServiceCID, &rv);
NS_ENSURE_TRUE(sts, NS_ERROR_FAILURE);
- mIdleThreadTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mIdleThreadTimer = NS_NewTimer();
NS_ENSURE_STATE(mIdleThreadTimer);
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
NS_ENSURE_TRUE(obs, NS_ERROR_FAILURE);
rv = obs->AddObserver(this, NS_XPCOM_SHUTDOWN_THREADS_OBSERVER_ID, false);
NS_ENSURE_SUCCESS(rv, rv);
--- a/dom/workers/ServiceWorkerManager.cpp
+++ b/dom/workers/ServiceWorkerManager.cpp
@@ -4335,33 +4335,28 @@ ServiceWorkerManager::ScheduleUpdateTime
if (timer) {
// There is already a timer scheduled. In this case just use the original
// schedule time. We don't want to push it out to a later time since that
// could allow updates to be starved forever if events are continuously
// fired.
return;
}
- timer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- data->mUpdateTimers.Remove(aScope); // another lookup, but very rare
- return;
- }
-
- // Label with SystemGroup because UpdateTimerCallback only sends an IPC message
- // (PServiceWorkerUpdaterConstructor) without touching any web contents.
- timer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::Other));
-
nsCOMPtr<nsITimerCallback> callback = new UpdateTimerCallback(aPrincipal,
aScope);
const uint32_t UPDATE_DELAY_MS = 1000;
- rv = timer->InitWithCallback(callback, UPDATE_DELAY_MS,
- nsITimer::TYPE_ONE_SHOT);
+ // Label with SystemGroup because UpdateTimerCallback only sends an IPC message
+ // (PServiceWorkerUpdaterConstructor) without touching any web contents.
+ rv = NS_NewTimerWithCallback(getter_AddRefs(timer),
+ callback, UPDATE_DELAY_MS,
+ nsITimer::TYPE_ONE_SHOT,
+ SystemGroup::EventTargetFor(TaskCategory::Other));
+
if (NS_WARN_IF(NS_FAILED(rv))) {
data->mUpdateTimers.Remove(aScope); // another lookup, but very rare
return;
}
}
void
ServiceWorkerManager::UpdateTimerFired(nsIPrincipal* aPrincipal,
--- a/dom/workers/ServiceWorkerPrivate.cpp
+++ b/dom/workers/ServiceWorkerPrivate.cpp
@@ -84,17 +84,17 @@ NS_IMPL_ISUPPORTS0(KeepAliveToken)
ServiceWorkerPrivate::ServiceWorkerPrivate(ServiceWorkerInfo* aInfo)
: mInfo(aInfo)
, mDebuggerCount(0)
, mTokenCount(0)
{
AssertIsOnMainThread();
MOZ_ASSERT(aInfo);
- mIdleWorkerTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mIdleWorkerTimer = NS_NewTimer();
MOZ_ASSERT(mIdleWorkerTimer);
}
ServiceWorkerPrivate::~ServiceWorkerPrivate()
{
MOZ_ASSERT(!mWorkerPrivate);
MOZ_ASSERT(!mTokenCount);
MOZ_ASSERT(!mInfo);
@@ -1095,23 +1095,18 @@ class AllowWindowInteractionHandler fina
void
StartClearWindowTimer(WorkerPrivate* aWorkerPrivate)
{
MOZ_ASSERT(aWorkerPrivate);
aWorkerPrivate->AssertIsOnWorkerThread();
MOZ_ASSERT(!mTimer);
nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return;
- }
-
- rv = timer->SetTarget(aWorkerPrivate->ControlEventTarget());
- if (NS_WARN_IF(NS_FAILED(rv))) {
+ nsCOMPtr<nsITimer> timer = NS_NewTimer(aWorkerPrivate->ControlEventTarget());
+ if (NS_WARN_IF(!timer)) {
return;
}
if (!HoldWorker(aWorkerPrivate, Closing)) {
return;
}
aWorkerPrivate->GlobalScope()->AllowWindowInteraction();
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -5291,17 +5291,17 @@ WorkerPrivate::InitializeGCTimers()
{
AssertIsOnWorkerThread();
// We need a timer for GC. The basic plan is to run a non-shrinking GC
// periodically (PERIODIC_GC_TIMER_DELAY_SEC) while the worker is running.
// Once the worker goes idle we set a short (IDLE_GC_TIMER_DELAY_SEC) timer to
// run a shrinking GC. If the worker receives more messages then the short
// timer is canceled and the periodic timer resumes.
- mGCTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mGCTimer = NS_NewTimer();
MOZ_ASSERT(mGCTimer);
mPeriodicGCTimerRunning = false;
mIdleGCTimerRunning = false;
}
void
WorkerPrivate::SetGCTimerMode(GCTimerMode aMode)
@@ -6473,22 +6473,20 @@ WorkerPrivate::SetTimeout(JSContext* aCx
mTimeouts.InsertElementSorted(newInfo.forget(), GetAutoPtrComparator(mTimeouts));
LOG(TimeoutsLog(), ("Worker %p has new timeout: delay=%d interval=%s\n",
this, aTimeout, aIsInterval ? "yes" : "no"));
// If the timeout we just made is set to fire next then we need to update the
// timer, unless we're currently running timeouts.
if (insertedInfo == mTimeouts.Elements() && !mRunningExpiredTimeouts) {
- nsresult rv;
-
if (!mTimer) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv)) {
- aRv.Throw(rv);
+ mTimer = NS_NewTimer();
+ if (!mTimer) {
+ aRv.Throw(NS_ERROR_UNEXPECTED);
return 0;
}
mTimerRunnable = new TimerRunnable(this);
}
if (!mTimerRunning) {
if (!ModifyBusyCountFromWorker(true)) {
--- a/dom/xbl/nsBindingManager.cpp
+++ b/dom/xbl/nsBindingManager.cpp
@@ -388,25 +388,23 @@ nsBindingManager::DoProcessAttachedQueue
} else {
// Someone's doing event processing from inside a constructor.
// They're evil, but we'll fight back! Just poll on them being
// done and repost the attached queue event.
//
// But don't poll in a tight loop -- otherwise we keep the Gecko
// event loop non-empty and trigger bug 1021240 on OS X.
nsresult rv = NS_ERROR_FAILURE;
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (timer) {
- rv = timer->InitWithNamedFuncCallback(
- PostPAQEventCallback,
- this,
- 100,
- nsITimer::TYPE_ONE_SHOT,
- "nsBindingManager::DoProcessAttachedQueue");
- }
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ PostPAQEventCallback,
+ this,
+ 100,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsBindingManager::DoProcessAttachedQueue");
if (NS_SUCCEEDED(rv)) {
NS_ADDREF_THIS();
// We drop our reference to the timer here, since the timer callback is
// responsible for releasing the object.
Unused << timer.forget().take();
}
}
--- a/dom/xhr/XMLHttpRequestMainThread.cpp
+++ b/dom/xhr/XMLHttpRequestMainThread.cpp
@@ -3273,17 +3273,17 @@ XMLHttpRequestMainThread::StartTimeoutTi
mTimeoutTimer->Cancel();
}
if (!mTimeoutMilliseconds) {
return;
}
if (!mTimeoutTimer) {
- mTimeoutTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mTimeoutTimer);
}
uint32_t elapsed =
(uint32_t)((PR_Now() - mRequestSentTime) / PR_USEC_PER_MSEC);
mTimeoutTimer->InitWithCallback(
this,
mTimeoutMilliseconds > elapsed ? mTimeoutMilliseconds - elapsed : 0,
nsITimer::TYPE_ONE_SHOT
@@ -3752,17 +3752,17 @@ XMLHttpRequestMainThread::StopProgressEv
mProgressNotifier->Cancel();
}
}
void
XMLHttpRequestMainThread::StartProgressEventTimer()
{
if (!mProgressNotifier) {
- mProgressNotifier = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mProgressNotifier = NS_NewTimer();
SetTimerEventTarget(mProgressNotifier);
}
if (mProgressNotifier) {
mProgressTimerIsActive = true;
mProgressNotifier->Cancel();
mProgressNotifier->InitWithCallback(this, NS_PROGRESS_EVENT_INTERVAL,
nsITimer::TYPE_ONE_SHOT);
}
@@ -3779,17 +3779,17 @@ XMLHttpRequestMainThread::MaybeStartSync
}
// If we are in a beforeunload or a unload event, we must force a timeout.
TimeDuration diff = (TimeStamp::NowLoRes() - doc->GetPageUnloadingEventTimeStamp());
if (diff.ToMilliseconds() > MAX_SYNC_TIMEOUT_WHEN_UNLOADING) {
return eErrorOrExpired;
}
- mSyncTimeoutTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mSyncTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mSyncTimeoutTimer);
if (!mSyncTimeoutTimer) {
return eErrorOrExpired;
}
uint32_t timeout = MAX_SYNC_TIMEOUT_WHEN_UNLOADING - diff.ToMilliseconds();
nsresult rv = mSyncTimeoutTimer->InitWithCallback(this, timeout,
nsITimer::TYPE_ONE_SHOT);
--- a/editor/composer/nsComposerCommandsUpdater.cpp
+++ b/editor/composer/nsComposerCommandsUpdater.cpp
@@ -220,19 +220,18 @@ nsComposerCommandsUpdater::Init(nsPIDOMW
mDocShell = do_GetWeakReference(aDOMWindow->GetDocShell());
return NS_OK;
}
nsresult
nsComposerCommandsUpdater::PrimeUpdateTimer()
{
if (!mUpdateTimer) {
- nsresult rv = NS_OK;
- mUpdateTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
+ mUpdateTimer = NS_NewTimer();;
+ NS_ENSURE_TRUE(mUpdateTimer, NS_ERROR_OUT_OF_MEMORY);
}
const uint32_t kUpdateTimerDelay = 150;
return mUpdateTimer->InitWithCallback(static_cast<nsITimerCallback*>(this),
kUpdateTimerDelay,
nsITimer::TYPE_ONE_SHOT);
}
--- a/editor/composer/nsEditingSession.cpp
+++ b/editor/composer/nsEditingSession.cpp
@@ -962,26 +962,26 @@ nsEditingSession::EndDocumentLoad(nsIWeb
if (NS_FAILED(rv)) {
// If we had an error, setup timer to load a blank page later
if (mLoadBlankDocTimer) {
// Must cancel previous timer?
mLoadBlankDocTimer->Cancel();
mLoadBlankDocTimer = nullptr;
}
- mLoadBlankDocTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- mEditorStatus = eEditorCreationInProgress;
- mLoadBlankDocTimer->InitWithNamedFuncCallback(
+ rv = NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mLoadBlankDocTimer),
nsEditingSession::TimerCallback,
static_cast<void*>(mDocShell.get()),
10,
nsITimer::TYPE_ONE_SHOT,
"nsEditingSession::EndDocumentLoad");
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ mEditorStatus = eEditorCreationInProgress;
}
}
}
}
return rv;
}
--- a/editor/libeditor/TextEditRules.cpp
+++ b/editor/libeditor/TextEditRules.cpp
@@ -708,18 +708,18 @@ TextEditRules::WillInsertText(EditAction
if (LookAndFeel::GetEchoPassword() && !DontEchoPassword()) {
HideLastPWInput();
mLastStart = start;
mLastLength = outString->Length();
if (mTimer) {
mTimer->Cancel();
} else {
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
+ mTimer = NS_NewTimer();
+ NS_ENSURE_TRUE(mTimer, NS_ERROR_OUT_OF_MEMORY);
}
mTimer->InitWithCallback(this, LookAndFeel::GetPasswordMaskDelay(),
nsITimer::TYPE_ONE_SHOT);
} else {
FillBufWithPWChars(outString, outString->Length());
}
}
--- a/extensions/pref/autoconfig/src/nsAutoConfig.cpp
+++ b/extensions/pref/autoconfig/src/nsAutoConfig.cpp
@@ -1,13 +1,14 @@
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* 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 "mozilla/ResultExtensions.h"
#include "nsAutoConfig.h"
#include "nsIURI.h"
#include "nsIHttpChannel.h"
#include "nsIFileStreams.h"
#include "nsThreadUtils.h"
#include "nsAppDirectoryServiceDefs.h"
#include "nsIObserverService.h"
#include "nsLiteralString.h"
@@ -330,23 +331,18 @@ nsresult nsAutoConfig::downloadAutoConfi
}
int32_t minutes;
rv = mPrefBranch->GetIntPref("autoadmin.refresh_interval",
&minutes);
if (NS_SUCCEEDED(rv) && minutes > 0) {
// Create a new timer and pass this nsAutoConfig
// object as a timer callback.
- mTimer = do_CreateInstance("@mozilla.org/timer;1",&rv);
- if (NS_FAILED(rv))
- return rv;
- rv = mTimer->InitWithCallback(this, minutes * 60 * 1000,
- nsITimer::TYPE_REPEATING_SLACK);
- if (NS_FAILED(rv))
- return rv;
+ MOZ_TRY_VAR(mTimer, NS_NewTimerWithCallback(this, minutes * 60 * 1000,
+ nsITimer::TYPE_REPEATING_SLACK));
}
} //first_time
return NS_OK;
} // nsPref::downloadAutoConfig()
--- a/gfx/layers/apz/util/APZEventState.cpp
+++ b/gfx/layers/apz/util/APZEventState.cpp
@@ -202,17 +202,17 @@ APZEventState::ProcessSingleTap(const CS
if (mTouchEndCancelled) {
return;
}
LayoutDevicePoint ldPoint = aPoint * aScale;
APZES_LOG("Scheduling timer for click event\n");
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ nsCOMPtr<nsITimer> timer = NS_NewTimer();
dom::TabChild* tabChild = widget->GetOwningTabChild();
if (tabChild && XRE_IsContentProcess()) {
timer->SetTarget(
tabChild->TabGroup()->EventTargetFor(TaskCategory::Other));
}
RefPtr<DelayedFireSingleTapEvent> callback =
new DelayedFireSingleTapEvent(mWidget, ldPoint, aModifiers, aClickCount,
--- a/gfx/layers/client/TextureClientPool.cpp
+++ b/gfx/layers/client/TextureClientPool.cpp
@@ -57,18 +57,18 @@ TextureClientPool::TextureClientPool(Lay
, mInitialPoolSize(aInitialPoolSize)
, mPoolUnusedSize(aPoolUnusedSize)
, mOutstandingClients(0)
, mSurfaceAllocator(aAllocator)
, mDestroyed(false)
{
TCP_LOG("TexturePool %p created with maximum unused texture clients %u\n",
this, mInitialPoolSize);
- mShrinkTimer = do_CreateInstance("@mozilla.org/timer;1");
- mClearTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mShrinkTimer = NS_NewTimer();
+ mClearTimer = NS_NewTimer();
if (aFormat == gfx::SurfaceFormat::UNKNOWN) {
gfxWarning() << "Creating texture pool for SurfaceFormat::UNKNOWN format";
}
}
TextureClientPool::~TextureClientPool()
{
mShrinkTimer->Cancel();
--- a/gfx/thebes/gfxFcPlatformFontList.cpp
+++ b/gfx/thebes/gfxFcPlatformFontList.cpp
@@ -1245,25 +1245,23 @@ gfxFcPlatformFontList::gfxFcPlatformFont
, mFcSubstituteCache(64)
, mLastConfig(nullptr)
, mAlwaysUseFontconfigGenerics(true)
{
// if the rescan interval is set, start the timer
int rescanInterval = FcConfigGetRescanInterval(nullptr);
if (rescanInterval) {
mLastConfig = FcConfigGetCurrent();
- mCheckFontUpdatesTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mCheckFontUpdatesTimer) {
- mCheckFontUpdatesTimer->InitWithNamedFuncCallback(
- CheckFontUpdates,
- this,
- (rescanInterval + 1) * 1000,
- nsITimer::TYPE_REPEATING_SLACK,
- "gfxFcPlatformFontList::gfxFcPlatformFontList");
- } else {
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mCheckFontUpdatesTimer),
+ CheckFontUpdates,
+ this,
+ (rescanInterval + 1) * 1000,
+ nsITimer::TYPE_REPEATING_SLACK,
+ "gfxFcPlatformFontList::gfxFcPlatformFontList");
+ if (!mCheckFontUpdatesTimer) {
NS_WARNING("Failure to create font updates timer");
}
}
#ifdef MOZ_BUNDLED_FONTS
mBundledFontsInitialized = false;
#endif
}
--- a/gfx/thebes/gfxFont.cpp
+++ b/gfx/thebes/gfxFont.cpp
@@ -178,28 +178,27 @@ gfxFontCache::gfxFontCache(nsIEventTarge
nsCOMPtr<nsIObserverService> obs = GetObserverService();
if (obs) {
obs->AddObserver(new Observer, "memory-pressure", false);
}
#ifndef RELEASE_OR_BETA
// Currently disabled for release builds, due to unexplained crashes
// during expiration; see bug 717175 & 894798.
- mWordCacheExpirationTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mWordCacheExpirationTimer) {
- if (XRE_IsContentProcess() && NS_IsMainThread()) {
- mWordCacheExpirationTimer->SetTarget(aEventTarget);
- }
- mWordCacheExpirationTimer->InitWithNamedFuncCallback(
- WordCacheExpirationTimerCallback,
- this,
- SHAPED_WORD_TIMEOUT_SECONDS * 1000,
- nsITimer::TYPE_REPEATING_SLACK,
- "gfxFontCache::gfxFontCache");
+ nsIEventTarget* target = nullptr;
+ if (XRE_IsContentProcess() && NS_IsMainThread()) {
+ target = aEventTarget;
}
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mWordCacheExpirationTimer),
+ WordCacheExpirationTimerCallback,
+ this,
+ SHAPED_WORD_TIMEOUT_SECONDS * 1000,
+ nsITimer::TYPE_REPEATING_SLACK,
+ "gfxFontCache::gfxFontCache",
+ target);
#endif
}
gfxFontCache::~gfxFontCache()
{
// Ensure the user font cache releases its references to font entries,
// so they aren't kept alive after the font instances and font-list
// have been shut down.
--- a/gfx/thebes/gfxFontInfoLoader.cpp
+++ b/gfx/thebes/gfxFontInfoLoader.cpp
@@ -147,17 +147,17 @@ gfxFontInfoLoader::StartLoader(uint32_t
if (mState != stateInitial &&
mState != stateTimerOff &&
mState != stateTimerOnDelay) {
CancelLoader();
}
// set up timer
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();
if (!mTimer) {
NS_WARNING("Failure to create font info loader timer");
return;
}
}
AddShutdownObserver();
--- a/gfx/thebes/gfxPlatformMac.cpp
+++ b/gfx/thebes/gfxPlatformMac.cpp
@@ -394,17 +394,17 @@ public:
class OSXDisplay final : public VsyncSource::Display
{
public:
OSXDisplay()
: mDisplayLink(nullptr)
{
MOZ_ASSERT(NS_IsMainThread());
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
}
~OSXDisplay() override
{
MOZ_ASSERT(NS_IsMainThread());
}
static void RetryEnableVsync(nsITimer* aTimer, void* aOsxDisplay)
--- a/ipc/glue/BackgroundImpl.cpp
+++ b/ipc/glue/BackgroundImpl.cpp
@@ -1025,19 +1025,18 @@ ParentImpl::CreateBackgroundThread()
NS_WARNING("Trying to create background thread after shutdown has "
"already begun!");
return false;
}
nsCOMPtr<nsITimer> newShutdownTimer;
if (!sShutdownTimer) {
- nsresult rv;
- newShutdownTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
+ newShutdownTimer = NS_NewTimer();
+ if (!newShutdownTimer) {
return false;
}
}
if (!sShutdownObserverRegistered) {
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
if (NS_WARN_IF(!obs)) {
return false;
--- a/ipc/glue/MessagePump.cpp
+++ b/ipc/glue/MessagePump.cpp
@@ -81,17 +81,17 @@ MessagePump::Run(MessagePump::Delegate*
MOZ_ASSERT(keep_running_);
MOZ_RELEASE_ASSERT(NS_IsMainThread(),
"Use mozilla::ipc::MessagePumpForNonMainThreads instead!");
MOZ_RELEASE_ASSERT(!mEventTarget);
nsIThread* thisThread = NS_GetCurrentThread();
MOZ_ASSERT(thisThread);
- mDelayedWorkTimer = do_CreateInstance(kNS_TIMER_CID);
+ mDelayedWorkTimer = NS_NewTimer();
MOZ_ASSERT(mDelayedWorkTimer);
base::ScopedNSAutoreleasePool autoReleasePool;
for (;;) {
autoReleasePool.Recycle();
bool did_work = NS_ProcessNextEvent(thisThread, false) ? true : false;
@@ -157,17 +157,17 @@ void
MessagePump::ScheduleDelayedWork(const base::TimeTicks& aDelayedTime)
{
// To avoid racing on mDelayedWorkTimer, we need to be on the same thread as
// ::Run().
MOZ_RELEASE_ASSERT((!mEventTarget && NS_IsMainThread())
|| mEventTarget->IsOnCurrentThread());
if (!mDelayedWorkTimer) {
- mDelayedWorkTimer = do_CreateInstance(kNS_TIMER_CID);
+ mDelayedWorkTimer = NS_NewTimer();
if (!mDelayedWorkTimer) {
// Called before XPCOM has started up? We can't do this correctly.
NS_WARNING("Delayed task might not run!");
delayed_work_time_ = aDelayedTime;
return;
}
}
@@ -305,23 +305,19 @@ void
MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate* aDelegate)
{
MOZ_ASSERT(keep_running_);
MOZ_RELEASE_ASSERT(!NS_IsMainThread(), "Use mozilla::ipc::MessagePump instead!");
nsIThread* thread = NS_GetCurrentThread();
MOZ_RELEASE_ASSERT(mEventTarget->IsOnCurrentThread());
- mDelayedWorkTimer = do_CreateInstance(kNS_TIMER_CID);
+ mDelayedWorkTimer = NS_NewTimer(mEventTarget);
MOZ_ASSERT(mDelayedWorkTimer);
- if (NS_FAILED(mDelayedWorkTimer->SetTarget(mEventTarget))) {
- MOZ_CRASH("Failed to set timer target!");
- }
-
// Chromium event notifications to be processed will be received by this
// event loop as a DoWorkRunnables via ScheduleWork. Chromium events that
// were received before our thread is valid, however, will not generate
// runnable wrappers. We must process any of these before we enter this
// loop, or we will forever have unprocessed chromium messages in our queue.
//
// Note we would like to request a flush of the chromium event queue
// using a runnable on the xpcom side, but some thread implementations
--- a/layout/base/AccessibleCaretEventHub.cpp
+++ b/layout/base/AccessibleCaretEventHub.cpp
@@ -435,20 +435,20 @@ AccessibleCaretEventHub::Init()
}
docShell->AddWeakReflowObserver(this);
docShell->AddWeakScrollObserver(this);
mDocShell = static_cast<nsDocShell*>(docShell);
if (sUseLongTapInjector) {
- mLongTapInjectorTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mLongTapInjectorTimer = NS_NewTimer();
}
- mScrollEndInjectorTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mScrollEndInjectorTimer = NS_NewTimer();
mManager = MakeUnique<AccessibleCaretManager>(mPresShell);
mInitialized = true;
}
void
AccessibleCaretEventHub::Terminate()
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
@@ -1842,17 +1842,17 @@ PresShell::Initialize(nscoord aWidth, ns
if (!mPresContext->IsPaginated()) {
// Kick off a one-shot timer based off our pref value. When this timer
// fires, if painting is still locked down, then we will go ahead and
// trigger a full invalidate and allow painting to proceed normally.
mPaintingSuppressed = true;
// Don't suppress painting if the document isn't loading.
nsIDocument::ReadyState readyState = mDocument->GetReadyStateEnum();
if (readyState != nsIDocument::READYSTATE_COMPLETE) {
- mPaintSuppressionTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mPaintSuppressionTimer = NS_NewTimer();
}
if (!mPaintSuppressionTimer) {
mPaintingSuppressed = false;
} else {
// Initialize the timer.
// Default to PAINTLOCK_EVENT_DELAY if we can't get the pref value.
int32_t delay =
@@ -1998,17 +1998,17 @@ PresShell::ResizeReflowIgnoreOverride(ns
}
}
}
if (!mIsDestroying && !mResizeEvent.IsPending() &&
!mAsyncResizeTimerIsActive) {
if (mInResize) {
if (!mAsyncResizeEventTimer) {
- mAsyncResizeEventTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mAsyncResizeEventTimer = NS_NewTimer();
}
if (mAsyncResizeEventTimer) {
mAsyncResizeTimerIsActive = true;
mAsyncResizeEventTimer->SetTarget(
mDocument->EventTargetFor(TaskCategory::Other));
mAsyncResizeEventTimer->InitWithNamedFuncCallback(AsyncResizeEventCallback,
this, 15,
nsITimer::TYPE_ONE_SHOT,
@@ -3685,24 +3685,23 @@ PresShell::ScheduleViewManagerFlush(Pain
// The passed-in PresShell is always alive here. Because if PresShell
// died, mDelayedPaintTimer->Cancel() would be called during the
// destruction and this callback would never be invoked.
auto self = static_cast<PresShell*>(aClosure);
self->SetNextPaintCompressed();
self->ScheduleViewManagerFlush();
};
- mDelayedPaintTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mDelayedPaintTimer->SetTarget(
- mDocument->EventTargetFor(TaskCategory::Other));
- mDelayedPaintTimer->InitWithNamedFuncCallback(PaintTimerCallBack,
- this,
- kPaintDelayPeriod,
- nsITimer::TYPE_ONE_SHOT,
- "PaintTimerCallBack");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mDelayedPaintTimer),
+ PaintTimerCallBack,
+ this,
+ kPaintDelayPeriod,
+ nsITimer::TYPE_ONE_SHOT,
+ "PaintTimerCallBack",
+ mDocument->EventTargetFor(TaskCategory::Other));
}
return;
}
nsPresContext* presContext = GetPresContext();
if (presContext) {
presContext->RefreshDriver()->ScheduleViewManagerFlush();
}
@@ -9248,26 +9247,23 @@ PresShell::sReflowContinueCallback(nsITi
bool
PresShell::ScheduleReflowOffTimer()
{
NS_PRECONDITION(!mObservingLayoutFlushes, "Shouldn't get here");
ASSERT_REFLOW_SCHEDULED_STATE();
if (!mReflowContinueTimer) {
- mReflowContinueTimer = do_CreateInstance("@mozilla.org/timer;1");
- mReflowContinueTimer->SetTarget(
- mDocument->EventTargetFor(TaskCategory::Other));
- if (!mReflowContinueTimer ||
- NS_FAILED(mReflowContinueTimer->
- InitWithNamedFuncCallback(sReflowContinueCallback, this, 30,
- nsITimer::TYPE_ONE_SHOT,
- "sReflowContinueCallback"))) {
- return false;
- }
+ nsresult rv;
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(mReflowContinueTimer),
+ sReflowContinueCallback, this, 30,
+ nsITimer::TYPE_ONE_SHOT,
+ "sReflowContinueCallback",
+ mDocument->EventTargetFor(TaskCategory::Other));
+ return NS_SUCCEEDED(rv);
}
return true;
}
bool
PresShell::DoReflow(nsIFrame* target, bool aInterruptible)
{
gfxTextPerfMetrics* tp = mPresContext->GetTextPerfMetrics();
--- a/layout/base/nsCaret.cpp
+++ b/layout/base/nsCaret.cpp
@@ -631,26 +631,26 @@ void nsCaret::ResetBlinking()
// If the rate hasn't changed, then there is nothing to do.
return;
}
mBlinkRate = blinkRate;
if (mBlinkTimer) {
mBlinkTimer->Cancel();
} else {
- nsresult err;
- mBlinkTimer = do_CreateInstance("@mozilla.org/timer;1", &err);
- if (NS_FAILED(err)) {
- return;
+ nsIEventTarget* target = nullptr;
+ if (nsCOMPtr<nsIPresShell> presShell = do_QueryReferent(mPresShell)) {
+ if (nsCOMPtr<nsIDocument> doc = presShell->GetDocument()) {
+ target = doc->EventTargetFor(TaskCategory::Other);
+ }
}
- if (nsCOMPtr<nsIPresShell> presShell = do_QueryReferent(mPresShell)) {
- if (nsCOMPtr<nsIDocument> doc = presShell->GetDocument()) {
- mBlinkTimer->SetTarget(doc->EventTargetFor(TaskCategory::Other));
- }
+ mBlinkTimer = NS_NewTimer(target);
+ if (!mBlinkTimer) {
+ return;
}
}
if (blinkRate > 0) {
mBlinkCount = Preferences::GetInt("ui.caretBlinkCount", -1);
mBlinkTimer->InitWithNamedFuncCallback(CaretBlinkCallback, this, blinkRate,
nsITimer::TYPE_REPEATING_SLACK,
"nsCaret::CaretBlinkCallback_timer");
--- a/layout/base/nsPresContext.cpp
+++ b/layout/base/nsPresContext.cpp
@@ -2748,28 +2748,23 @@ nsPresContext::HasCachedStyleData()
return styleSet->HasCachedStyleData();
}
already_AddRefed<nsITimer>
nsPresContext::CreateTimer(nsTimerCallbackFunc aCallback,
const char* aName,
uint32_t aDelay)
{
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1");
- timer->SetTarget(Document()->EventTargetFor(TaskCategory::Other));
- if (timer) {
- nsresult rv = timer->InitWithNamedFuncCallback(aCallback, this, aDelay,
- nsITimer::TYPE_ONE_SHOT,
- aName);
- if (NS_SUCCEEDED(rv)) {
- return timer.forget();
- }
- }
-
- return nullptr;
+ nsCOMPtr<nsITimer> timer;
+ NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ aCallback, this, aDelay,
+ nsITimer::TYPE_ONE_SHOT,
+ aName,
+ Document()->EventTargetFor(TaskCategory::Other));
+ return timer.forget();
}
static bool sGotInterruptEnv = false;
enum InterruptMode {
ModeRandom,
ModeCounter,
ModeEvent
};
@@ -3396,31 +3391,30 @@ void
nsRootPresContext::EnsureEventualDidPaintEvent(uint64_t aTransactionId)
{
for (NotifyDidPaintTimer& t : mNotifyDidPaintTimers) {
if (t.mTransactionId == aTransactionId) {
return;
}
}
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1");
- timer->SetTarget(Document()->EventTargetFor(TaskCategory::Other));
- if (timer) {
- RefPtr<nsRootPresContext> self = this;
- nsresult rv = timer->InitWithCallback(
- NewNamedTimerCallback([self, aTransactionId](){
- nsAutoScriptBlocker blockScripts;
- self->NotifyDidPaintForSubtree(aTransactionId);
- }, "NotifyDidPaintForSubtree"), 100, nsITimer::TYPE_ONE_SHOT);
-
- if (NS_SUCCEEDED(rv)) {
- NotifyDidPaintTimer* t = mNotifyDidPaintTimers.AppendElement();
- t->mTransactionId = aTransactionId;
- t->mTimer = timer;
- }
+ nsCOMPtr<nsITimer> timer;
+ RefPtr<nsRootPresContext> self = this;
+ nsresult rv = NS_NewTimerWithCallback(
+ getter_AddRefs(timer),
+ NewNamedTimerCallback([self, aTransactionId](){
+ nsAutoScriptBlocker blockScripts;
+ self->NotifyDidPaintForSubtree(aTransactionId);
+ }, "NotifyDidPaintForSubtree"), 100, nsITimer::TYPE_ONE_SHOT,
+ Document()->EventTargetFor(TaskCategory::Other));
+
+ if (NS_SUCCEEDED(rv)) {
+ NotifyDidPaintTimer* t = mNotifyDidPaintTimers.AppendElement();
+ t->mTransactionId = aTransactionId;
+ t->mTimer = timer;
}
}
void
nsRootPresContext::CancelDidPaintTimers(uint64_t aTransactionId)
{
uint32_t i = 0;
while (i < mNotifyDidPaintTimers.Length()) {
--- a/layout/base/nsRefreshDriver.cpp
+++ b/layout/base/nsRefreshDriver.cpp
@@ -366,17 +366,17 @@ class SimpleTimerBasedRefreshDriverTimer
{
public:
/*
* aRate -- the delay, in milliseconds, requested between timer firings
*/
explicit SimpleTimerBasedRefreshDriverTimer(double aRate)
{
SetRate(aRate);
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
}
virtual ~SimpleTimerBasedRefreshDriverTimer() override
{
StopTimer();
}
// will take effect at next timer tick
--- a/layout/generic/ScrollbarActivity.cpp
+++ b/layout/generic/ScrollbarActivity.cpp
@@ -423,17 +423,17 @@ ScrollbarActivity::SetIsFading(bool aNew
void
ScrollbarActivity::StartFadeBeginTimer()
{
if (GetForceAlwaysVisiblePref()) {
return;
}
if (!mFadeBeginTimer) {
- mFadeBeginTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mFadeBeginTimer = NS_NewTimer();
}
mFadeBeginTimer->InitWithNamedFuncCallback(
FadeBeginTimerFired, this, mScrollbarFadeBeginDelay,
nsITimer::TYPE_ONE_SHOT, "ScrollbarActivity::FadeBeginTimerFired");
}
void
ScrollbarActivity::CancelFadeBeginTimer()
--- a/layout/generic/nsGfxScrollFrame.cpp
+++ b/layout/generic/nsGfxScrollFrame.cpp
@@ -2582,17 +2582,17 @@ void ScrollFrameHelper::TriggerDisplayPo
}
if (!gfxPrefs::APZDisplayPortExpiryTime()) {
// a zero time disables the expiry
return;
}
if (!mDisplayPortExpiryTimer) {
- mDisplayPortExpiryTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mDisplayPortExpiryTimer = NS_NewTimer();
}
ResetDisplayPortExpiryTimer();
}
void ScrollFrameHelper::ScrollVisual()
{
// Mark this frame as having been scrolled. If this is the root
// scroll frame of a content document, then IsAlwaysActive()
@@ -2709,23 +2709,21 @@ ScrollFrameHelper::ScrollActivityCallbac
self->mOuter->PresContext()->PresShell()->SynthesizeMouseMove(true);
}
void
ScrollFrameHelper::ScheduleSyntheticMouseMove()
{
if (!mScrollActivityTimer) {
- mScrollActivityTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mScrollActivityTimer = NS_NewTimer(
+ mOuter->PresContext()->Document()->EventTargetFor(TaskCategory::Other));
if (!mScrollActivityTimer) {
return;
}
-
- mScrollActivityTimer->SetTarget(
- mOuter->PresContext()->Document()->EventTargetFor(TaskCategory::Other));
}
mScrollActivityTimer->InitWithNamedFuncCallback(
ScrollActivityCallback,
this,
100,
nsITimer::TYPE_ONE_SHOT,
"ScrollFrameHelper::ScheduleSyntheticMouseMove");
--- a/layout/printing/nsPagePrintTimer.cpp
+++ b/layout/printing/nsPagePrintTimer.cpp
@@ -24,54 +24,42 @@ nsPagePrintTimer::~nsPagePrintTimer()
if (cv) {
cv->Destroy();
}
}
nsresult
nsPagePrintTimer::StartTimer(bool aUseDelay)
{
- nsresult result;
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &result);
- if (NS_FAILED(result)) {
- NS_WARNING("unable to start the timer");
- } else {
- uint32_t delay = 0;
- if (aUseDelay) {
- if (mFiringCount < 10) {
- // Longer delay for the few first pages.
- delay = mDelay + ((10 - mFiringCount) * 100);
- } else {
- delay = mDelay;
- }
+ uint32_t delay = 0;
+ if (aUseDelay) {
+ if (mFiringCount < 10) {
+ // Longer delay for the few first pages.
+ delay = mDelay + ((10 - mFiringCount) * 100);
+ } else {
+ delay = mDelay;
}
- mTimer->SetTarget(mDocument->EventTargetFor(TaskCategory::Other));
- mTimer->InitWithCallback(this, delay, nsITimer::TYPE_ONE_SHOT);
}
- return result;
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, delay, nsITimer::TYPE_ONE_SHOT,
+ mDocument->EventTargetFor(TaskCategory::Other));
}
nsresult
nsPagePrintTimer::StartWatchDogTimer()
{
- nsresult result;
if (mWatchDogTimer) {
mWatchDogTimer->Cancel();
}
- mWatchDogTimer = do_CreateInstance("@mozilla.org/timer;1", &result);
- if (NS_FAILED(result)) {
- NS_WARNING("unable to start the timer");
- } else {
- // Instead of just doing one timer for a long period do multiple so we
- // can check if the user cancelled the printing.
- mWatchDogTimer->SetTarget(mDocument->EventTargetFor(TaskCategory::Other));
- mWatchDogTimer->InitWithCallback(this, WATCH_DOG_INTERVAL,
- nsITimer::TYPE_ONE_SHOT);
- }
- return result;
+ // Instead of just doing one timer for a long period do multiple so we
+ // can check if the user cancelled the printing.
+ return NS_NewTimerWithCallback(getter_AddRefs(mWatchDogTimer),
+ this, WATCH_DOG_INTERVAL,
+ nsITimer::TYPE_ONE_SHOT,
+ mDocument->EventTargetFor(TaskCategory::Other));
}
void
nsPagePrintTimer::StopWatchDogTimer()
{
if (mWatchDogTimer) {
mWatchDogTimer->Cancel();
mWatchDogTimer = nullptr;
@@ -173,21 +161,19 @@ nsPagePrintTimer::Notify(nsITimer *timer
}
return NS_OK;
}
void
nsPagePrintTimer::WaitForRemotePrint()
{
- nsresult result;
- mWaitingForRemotePrint = do_CreateInstance("@mozilla.org/timer;1", &result);
- if (NS_FAILED(result)) {
+ mWaitingForRemotePrint = NS_NewTimer();
+ if (!mWaitingForRemotePrint) {
NS_WARNING("Failed to wait for remote print, we might time-out.");
- mWaitingForRemotePrint = nullptr;
}
}
void
nsPagePrintTimer::RemotePrintFinished()
{
if (!mWaitingForRemotePrint) {
return;
--- a/layout/style/nsFontFaceLoader.cpp
+++ b/layout/style/nsFontFaceLoader.cpp
@@ -81,26 +81,23 @@ nsFontFaceLoader::StartedLoading(nsIStre
if (fontDisplay == NS_FONT_DISPLAY_AUTO ||
fontDisplay == NS_FONT_DISPLAY_BLOCK) {
loadTimeout = GetFallbackDelay();
} else {
loadTimeout = GetShortFallbackDelay();
}
if (loadTimeout > 0) {
- mLoadTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mLoadTimer) {
- mLoadTimer->SetTarget(
- mFontFaceSet->Document()->EventTargetFor(TaskCategory::Other));
- mLoadTimer->InitWithNamedFuncCallback(LoadTimerCallback,
- static_cast<void*>(this),
- loadTimeout,
- nsITimer::TYPE_ONE_SHOT,
- "LoadTimerCallback");
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mLoadTimer),
+ LoadTimerCallback,
+ static_cast<void*>(this),
+ loadTimeout,
+ nsITimer::TYPE_ONE_SHOT,
+ "LoadTimerCallback",
+ mFontFaceSet->Document()->EventTargetFor(TaskCategory::Other));
} else {
mUserFontEntry->mFontDataLoadingState = gfxUserFontEntry::LOADING_SLOWLY;
}
mStreamLoader = aStreamLoader;
}
/* static */ void
nsFontFaceLoader::LoadTimerCallback(nsITimer* aTimer, void* aClosure)
--- a/layout/xul/nsListBoxBodyFrame.cpp
+++ b/layout/xul/nsListBoxBodyFrame.cpp
@@ -117,30 +117,29 @@ nsListScrollSmoother::Start()
NS_ASSERTION(self->mOuter, "mOuter is null, see bug #68365");
if (self->mOuter) {
// actually do some work.
self->mOuter->InternalPositionChangedCallback();
}
};
Stop();
- mRepeatTimer = do_CreateInstance("@mozilla.org/timer;1");
- nsIContent* content = nullptr;
+ nsIEventTarget* target = nullptr;
if (mOuter) {
- content = mOuter->GetContent();
+ if (nsIContent* content = mOuter->GetContent()) {
+ target = content->OwnerDoc()->EventTargetFor(TaskCategory::Other);
+ }
}
- if (content) {
- mRepeatTimer->SetTarget(
- content->OwnerDoc()->EventTargetFor(TaskCategory::Other));
- }
- mRepeatTimer->InitWithNamedFuncCallback(scrollSmootherCallback,
- this,
- SMOOTH_INTERVAL,
- nsITimer::TYPE_ONE_SHOT,
- "scrollSmootherCallback");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mRepeatTimer),
+ scrollSmootherCallback,
+ this,
+ SMOOTH_INTERVAL,
+ nsITimer::TYPE_ONE_SHOT,
+ "scrollSmootherCallback",
+ target);
}
void
nsListScrollSmoother::Stop()
{
if ( mRepeatTimer ) {
mRepeatTimer->Cancel();
mRepeatTimer = nullptr;
--- a/layout/xul/nsMenuFrame.cpp
+++ b/layout/xul/nsMenuFrame.cpp
@@ -523,20 +523,19 @@ nsMenuFrame::HandleEvent(nsPresContext*
// A timer is used so that it doesn't open if the user moves the mouse quickly
// past the menu. This conditional check ensures that only menus have this
// behaviour
if (!IsDisabled() && IsMenu() && !IsOpen() && !mOpenTimer && !menuParent->IsMenuBar()) {
int32_t menuDelay =
LookAndFeel::GetInt(LookAndFeel::eIntID_SubmenuDelay, 300); // ms
// We're a menu, we're built, we're closed, and no timer has been kicked off.
- mOpenTimer = do_CreateInstance("@mozilla.org/timer;1");
- mOpenTimer->SetTarget(
- mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
- mOpenTimer->InitWithCallback(mTimerMediator, menuDelay, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mOpenTimer),
+ mTimerMediator, menuDelay, nsITimer::TYPE_ONE_SHOT,
+ mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
}
}
return NS_OK;
}
void
nsMenuFrame::ToggleMenuState()
@@ -1237,20 +1236,19 @@ nsMenuFrame::StartBlinking(WidgetGUIEven
nsMenuParent* menuParent = GetMenuParent();
if (menuParent) {
// Make this menu ignore events from now on.
menuParent->LockMenuUntilClosed(true);
}
// Set up a timer to blink back on.
- mBlinkTimer = do_CreateInstance("@mozilla.org/timer;1");
- mBlinkTimer->SetTarget(
- mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
- mBlinkTimer->InitWithCallback(mTimerMediator, kBlinkDelay, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mBlinkTimer),
+ mTimerMediator, kBlinkDelay, nsITimer::TYPE_ONE_SHOT,
+ mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
mBlinkState = 1;
}
void
nsMenuFrame::StopBlinking()
{
mBlinkState = 0;
if (mBlinkTimer) {
--- a/layout/xul/nsRepeatService.cpp
+++ b/layout/xul/nsRepeatService.cpp
@@ -50,21 +50,20 @@ nsRepeatService::Start(Callback aCallbac
uint32_t aInitialDelay)
{
NS_PRECONDITION(aCallback != nullptr, "null ptr");
mCallback = aCallback;
mCallbackData = aCallbackData;
mCallbackName = aCallbackName;
- nsresult rv;
- mRepeatTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
+ mRepeatTimer = NS_NewTimer(
+ aDocument->EventTargetFor(TaskCategory::Other));
- if (NS_SUCCEEDED(rv)) {
- mRepeatTimer->SetTarget(aDocument->EventTargetFor(TaskCategory::Other));
+ if (mRepeatTimer) {
InitTimerCallback(aInitialDelay);
}
}
void nsRepeatService::Stop(Callback aCallback, void* aCallbackData)
{
if (mCallback != aCallback || mCallbackData != aCallbackData)
return;
--- a/layout/xul/nsXULPopupManager.cpp
+++ b/layout/xul/nsXULPopupManager.cpp
@@ -1238,28 +1238,29 @@ nsXULPopupManager::HidePopupAfterDelay(n
// Don't close up immediately.
// Kick off a close timer.
KillMenuTimer();
int32_t menuDelay =
LookAndFeel::GetInt(LookAndFeel::eIntID_SubmenuDelay, 300); // ms
// Kick off the timer.
- mCloseTimer = do_CreateInstance("@mozilla.org/timer;1");
- nsIContent* content = aPopup->GetContent();
- if (content) {
- mCloseTimer->SetTarget(
- content->OwnerDoc()->EventTargetFor(TaskCategory::Other));
+ nsIEventTarget* target = nullptr;
+ if (nsIContent* content = aPopup->GetContent()) {
+ target = content->OwnerDoc()->EventTargetFor(TaskCategory::Other);
}
- mCloseTimer->InitWithNamedFuncCallback([](nsITimer* aTimer, void* aClosure) {
- nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
- if (pm) {
- pm->KillMenuTimer();
- }
- }, nullptr, menuDelay, nsITimer::TYPE_ONE_SHOT, "KillMenuTimer");
+ NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mCloseTimer),
+ [](nsITimer* aTimer, void* aClosure) {
+ nsXULPopupManager* pm = nsXULPopupManager::GetInstance();
+ if (pm) {
+ pm->KillMenuTimer();
+ }
+ }, nullptr, menuDelay, nsITimer::TYPE_ONE_SHOT, "KillMenuTimer",
+ target);
// the popup will call PopupDestroyed if it is destroyed, which checks if it
// is set to mTimerMenu, so it should be safe to keep a reference to it
mTimerMenu = aPopup;
}
void
nsXULPopupManager::HidePopupsInList(const nsTArray<nsMenuPopupFrame *> &aFrames)
--- a/layout/xul/nsXULTooltipListener.cpp
+++ b/layout/xul/nsXULTooltipListener.cpp
@@ -190,31 +190,28 @@ nsXULTooltipListener::MouseMove(nsIDOMEv
mSourceNode = nullptr;
return;
}
targetContent = targetContent->GetParent();
}
}
- mTooltipTimer = do_CreateInstance("@mozilla.org/timer;1");
- mTooltipTimer->SetTarget(
+ mTargetNode = do_GetWeakReference(eventTarget);
+ if (mTargetNode) {
+ nsresult rv = NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mTooltipTimer),
+ sTooltipCallback, this,
+ LookAndFeel::GetInt(LookAndFeel::eIntID_TooltipDelay, 500),
+ nsITimer::TYPE_ONE_SHOT,
+ "sTooltipCallback",
sourceContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
- if (mTooltipTimer) {
- mTargetNode = do_GetWeakReference(eventTarget);
- if (mTargetNode) {
- nsresult rv =
- mTooltipTimer->InitWithNamedFuncCallback(sTooltipCallback, this,
- LookAndFeel::GetInt(LookAndFeel::eIntID_TooltipDelay, 500),
- nsITimer::TYPE_ONE_SHOT,
- "sTooltipCallback");
- if (NS_FAILED(rv)) {
- mTargetNode = nullptr;
- mSourceNode = nullptr;
- }
+ if (NS_FAILED(rv)) {
+ mTargetNode = nullptr;
+ mSourceNode = nullptr;
}
}
return;
}
#ifdef MOZ_XUL
if (mIsSourceTree)
return;
--- a/layout/xul/tree/nsTreeBodyFrame.cpp
+++ b/layout/xul/tree/nsTreeBodyFrame.cpp
@@ -8,16 +8,17 @@
#include "mozilla/ContentEvents.h"
#include "mozilla/DebugOnly.h"
#include "mozilla/EventDispatcher.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/gfx/PathHelpers.h"
#include "mozilla/Likely.h"
#include "mozilla/MathAlgorithms.h"
#include "mozilla/MouseEvents.h"
+#include "mozilla/ResultExtensions.h"
#include "mozilla/TextEditRules.h"
#include "gfxUtils.h"
#include "nsAlgorithm.h"
#include "nsCOMPtr.h"
#include "nsFontMetrics.h"
#include "nsPresContext.h"
#include "nsNameSpaceManager.h"
@@ -1805,26 +1806,22 @@ nsTreeBodyFrame::CreateTimer(const LookA
// Get the delay from the look and feel service.
int32_t delay = LookAndFeel::GetInt(aID, 0);
nsCOMPtr<nsITimer> timer;
// Create a new timer only if the delay is greater than zero.
// Zero value means that this feature is completely disabled.
if (delay > 0) {
- timer = do_CreateInstance("@mozilla.org/timer;1");
- if (timer) {
- timer->SetTarget(
- mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other));
- timer->InitWithNamedFuncCallback(aFunc, this, delay, aType, aName);
- }
+ MOZ_TRY_VAR(timer, NS_NewTimerWithFuncCallback(
+ aFunc, this, delay, aType, aName,
+ mContent->OwnerDoc()->EventTargetFor(TaskCategory::Other)));
}
- NS_IF_ADDREF(*aTimer = timer);
-
+ timer.forget(aTimer);
return NS_OK;
}
nsresult
nsTreeBodyFrame::RowCountChanged(int32_t aIndex, int32_t aCount)
{
if (aCount == 0 || !mView)
return NS_OK; // Nothing to do.
--- a/layout/xul/tree/nsTreeSelection.cpp
+++ b/layout/xul/tree/nsTreeSelection.cpp
@@ -325,25 +325,25 @@ NS_IMETHODIMP nsTreeSelection::TimedSele
return rv;
if (aMsec != -1) {
mSuppressed = suppressSelect;
if (!mSuppressed) {
if (mSelectTimer)
mSelectTimer->Cancel();
- mSelectTimer = do_CreateInstance("@mozilla.org/timer;1");
- nsCOMPtr<nsIContent> content = GetContent();
- if (content) {
- mSelectTimer->SetTarget(
- content->OwnerDoc()->EventTargetFor(TaskCategory::Other));
+ nsIEventTarget* target = nullptr;
+ if (nsCOMPtr<nsIContent> content = GetContent()) {
+ target = content->OwnerDoc()->EventTargetFor(TaskCategory::Other);
}
- mSelectTimer->InitWithNamedFuncCallback(SelectCallback, this, aMsec,
- nsITimer::TYPE_ONE_SHOT,
- "nsTreeSelection::SelectCallback");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mSelectTimer),
+ SelectCallback, this, aMsec,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsTreeSelection::SelectCallback",
+ target);
}
}
return NS_OK;
}
NS_IMETHODIMP nsTreeSelection::Select(int32_t aIndex)
{
--- a/media/mtransport/nr_timer.cpp
+++ b/media/mtransport/nr_timer.cpp
@@ -202,24 +202,22 @@ static int nr_async_timer_set_zero(NR_as
}
static int nr_async_timer_set_nonzero(int timeout, NR_async_cb cb, void *arg,
char *func, int l,
nrappkitCallback **handle) {
nsresult rv;
CheckSTSThread();
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv)) {
- return(R_FAILED);
- }
-
nrappkitTimerCallback* callback =
new nrappkitTimerCallback(cb, arg, func, l);
- rv = timer->InitWithCallback(callback, timeout, nsITimer::TYPE_ONE_SHOT);
+
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithCallback(getter_AddRefs(timer),
+ callback, timeout, nsITimer::TYPE_ONE_SHOT);
if (NS_FAILED(rv)) {
return R_FAILED;
}
// Move the ownership of the timer to the callback object, which holds the
// timer alive per spec.
callback->SetTimer(timer.forget());
--- a/media/mtransport/test/sctp_unittest.cpp
+++ b/media/mtransport/test/sctp_unittest.cpp
@@ -63,17 +63,17 @@ class TransportTestPeer : public sigslot
public:
TransportTestPeer(std::string name, int local_port, int remote_port,
MtransportTestUtils* utils)
: name_(name), connected_(false),
sent_(0), received_(0),
flow_(new TransportFlow()),
loopback_(new TransportLayerLoopback()),
sctp_(usrsctp_socket(AF_CONN, SOCK_STREAM, IPPROTO_SCTP, receive_cb, nullptr, 0, nullptr)),
- timer_(do_CreateInstance(NS_TIMER_CONTRACTID)),
+ timer_(NS_NewTimer()),
periodic_(nullptr),
test_utils_(utils) {
std::cerr << "Creating TransportTestPeer; flow=" <<
static_cast<void *>(flow_.get()) <<
" local=" << local_port <<
" remote=" << remote_port << std::endl;
usrsctp_register_address(static_cast<void *>(this));
--- a/media/mtransport/transportlayerdtls.cpp
+++ b/media/mtransport/transportlayerdtls.cpp
@@ -384,18 +384,18 @@ nsresult TransportLayerDtls::InitInterna
nsresult rv;
target_ = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv);
if (NS_FAILED(rv)) {
MOZ_MTLOG(ML_ERROR, "Couldn't get socket transport service");
return rv;
}
- timer_ = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv)) {
+ timer_ = NS_NewTimer();
+ if (!timer_) {
MOZ_MTLOG(ML_ERROR, "Couldn't get timer");
return rv;
}
return NS_OK;
}
--- a/media/mtransport/transportlayerloopback.cpp
+++ b/media/mtransport/transportlayerloopback.cpp
@@ -24,28 +24,26 @@
#include "transportflow.h"
#include "transportlayerloopback.h"
namespace mozilla {
MOZ_MTLOG_MODULE("mtransport")
nsresult TransportLayerLoopback::Init() {
- timer_ = do_CreateInstance(NS_TIMER_CONTRACTID);
- MOZ_ASSERT(timer_);
- if (!timer_)
- return NS_ERROR_FAILURE;
-
nsresult rv;
target_ = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv);
MOZ_ASSERT(NS_SUCCEEDED(rv));
if (!NS_SUCCEEDED(rv))
return rv;
- timer_->SetTarget(target_);
+ timer_ = NS_NewTimer(target_);
+ MOZ_ASSERT(timer_);
+ if (!timer_)
+ return NS_ERROR_FAILURE;
packets_lock_ = PR_NewLock();
MOZ_ASSERT(packets_lock_);
if (!packets_lock_)
return NS_ERROR_FAILURE;
deliverer_ = new Deliverer(this);
--- a/media/webrtc/signaling/gtest/mediapipeline_unittest.cpp
+++ b/media/webrtc/signaling/gtest/mediapipeline_unittest.cpp
@@ -84,21 +84,21 @@ public:
FakeAudioStreamTrack()
: AudioStreamTrack(new DOMMediaStream(nullptr, nullptr), 0, 1,
new FakeMediaStreamTrackSource())
, mMutex("Fake AudioStreamTrack")
, mStop(false)
, mCount(0)
{
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mTimer->SetTarget(test_utils->sts_target());
- mTimer->InitWithNamedFuncCallback(FakeAudioStreamTrackGenerateData, this, 20,
- nsITimer::TYPE_REPEATING_SLACK,
- "FakeAudioStreamTrack::FakeAudioStreamTrackGenerateData");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ FakeAudioStreamTrackGenerateData, this, 20,
+ nsITimer::TYPE_REPEATING_SLACK,
+ "FakeAudioStreamTrack::FakeAudioStreamTrackGenerateData",
+ test_utils->sts_target());
}
void Stop()
{
mozilla::MutexAutoLock lock(mMutex);
mStop = true;
mTimer->Cancel();
--- a/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp
+++ b/media/webrtc/signaling/src/media-conduit/VideoConduit.cpp
@@ -265,17 +265,17 @@ WebrtcVideoConduit::WebrtcVideoConduit(R
, mCodecMode(webrtc::kRealtimeVideo)
, mCall(aCall) // refcounted store of the call object
, mSendStreamConfig(this) // 'this' is stored but not dereferenced in the constructor.
, mRecvStreamConfig(this) // 'this' is stored but not dereferenced in the constructor.
, mRecvSSRC(0)
, mRecvSSRCSetInProgress(false)
, mSendCodecPlugin(nullptr)
, mRecvCodecPlugin(nullptr)
- , mVideoStatsTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
+ , mVideoStatsTimer(NS_NewTimer())
{
mRecvStreamConfig.renderer = this;
// Video Stats Callback
nsTimerCallbackFunc callback = [](nsITimer* aTimer, void* aClosure) {
CSFLogDebug(logTag, "StreamStats polling scheduled for VideoConduit: %p", aClosure);
auto self = static_cast<WebrtcVideoConduit*>(aClosure);
MutexAutoLock lock(self->mCodecMutex);
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionCtx.cpp
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionCtx.cpp
@@ -361,23 +361,22 @@ PeerConnectionCtx::UpdateNetworkState(bo
for (auto pc : ctx->mPeerConnections) {
pc.second->UpdateNetworkState(online);
}
}
nsresult PeerConnectionCtx::Initialize() {
initGMP();
- mTelemetryTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- MOZ_ASSERT(mTelemetryTimer);
- nsresult rv = mTelemetryTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::Other));
+ nsresult rv = NS_NewTimerWithFuncCallback(getter_AddRefs(mTelemetryTimer),
+ EverySecondTelemetryCallback_m, this, 1000,
+ nsITimer::TYPE_REPEATING_PRECISE_CAN_SKIP,
+ "EverySecondTelemetryCallback_m",
+ SystemGroup::EventTargetFor(TaskCategory::Other));
NS_ENSURE_SUCCESS(rv, rv);
- mTelemetryTimer->InitWithNamedFuncCallback(EverySecondTelemetryCallback_m, this, 1000,
- nsITimer::TYPE_REPEATING_PRECISE_CAN_SKIP,
- "EverySecondTelemetryCallback_m");
if (XRE_IsContentProcess()) {
WebrtcGlobalChild::Create();
}
return NS_OK;
}
--- a/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp
+++ b/media/webrtc/signaling/src/peerconnection/PeerConnectionImpl.cpp
@@ -2511,18 +2511,17 @@ PeerConnectionImpl::InsertDTMF(mozilla::
}
}
// No state yet, create a new one
if (!state) {
state = mDTMFStates.AppendElement();
state->mPeerConnectionImpl = this;
state->mTrackId = senderTrackId;
- state->mSendTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- MOZ_ASSERT(state->mSendTimer);
+ state->mSendTimer = NS_NewTimer();
}
MOZ_ASSERT(state);
auto trackPairs = mJsepSession->GetNegotiatedTrackPairs();
state->mLevel = -1;
for (auto& trackPair : trackPairs) {
if (state->mTrackId.EqualsASCII(trackPair.mSending->GetTrackId().c_str())) {
if (trackPair.HasBundleLevel()) {
--- a/media/webrtc/signaling/test/FakeMediaStreamsImpl.h
+++ b/media/webrtc/signaling/test/FakeMediaStreamsImpl.h
@@ -32,24 +32,18 @@ mozilla::TrackTicks Fake_MediaStream::Ti
mozilla::StreamTime
Fake_MediaStream::TicksToTimeRoundDown(mozilla::TrackRate aRate,
mozilla::TrackTicks aTicks) {
return aTicks * GRAPH_RATE / aRate;
}
// Fake_SourceMediaStream
nsresult Fake_SourceMediaStream::Start() {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!mTimer) {
- return NS_ERROR_FAILURE;
- }
-
- mTimer->InitWithCallback(mPeriodic, 100, nsITimer::TYPE_REPEATING_SLACK);
-
- return NS_OK;
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ mPeriodic, 100, nsITimer::TYPE_REPEATING_SLACK);
}
nsresult Fake_SourceMediaStream::Stop() {
mozilla::MutexAutoLock lock(mMutex);
if (mTimer)
mTimer->Cancel();
mPeriodic->Detach();
return NS_OK;
@@ -78,24 +72,18 @@ void Fake_MediaStreamTrack::AddListener(
}
void Fake_MediaStreamTrack::RemoveListener(Fake_MediaStreamTrackListener *aListener)
{
mOwningStream->GetInputStream()->RemoveTrackListener(aListener, mTrackID);
}
// Fake_MediaStreamBase
nsresult Fake_MediaStreamBase::Start() {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (!mTimer) {
- return NS_ERROR_FAILURE;
- }
-
- mTimer->InitWithCallback(mPeriodic, 100, nsITimer::TYPE_REPEATING_SLACK);
-
- return NS_OK;
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ mPeriodic, 100, nsITimer::TYPE_REPEATING_SLACK);
}
nsresult Fake_MediaStreamBase::Stop() {
// Lock the mutex so that we know that after this
// has returned, periodic will not be firing again
// and so it's safe to destruct.
mozilla::MutexAutoLock lock(mMutex);
mTimer->Cancel();
--- a/mobile/android/components/build/nsAndroidHistory.cpp
+++ b/mobile/android/components/build/nsAndroidHistory.cpp
@@ -42,17 +42,17 @@ nsAndroidHistory::GetSingleton()
return sHistory;
}
nsAndroidHistory::nsAndroidHistory()
: mHistoryEnabled(true)
{
LoadPrefs();
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
}
NS_IMETHODIMP
nsAndroidHistory::RegisterVisitedCallback(nsIURI *aURI, Link *aContent)
{
if (!aContent || !aURI)
return NS_OK;
--- a/netwerk/base/CaptivePortalService.cpp
+++ b/netwerk/base/CaptivePortalService.cpp
@@ -88,17 +88,17 @@ CaptivePortalService::RearmTimer()
// If we have successfully determined the state, and we have never detected
// a captive portal, we don't need to keep polling, but will rely on events
// to trigger detection.
if (mState == NOT_CAPTIVE) {
return NS_OK;
}
if (!mTimer) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
}
if (mTimer && mDelay > 0) {
LOG(("CaptivePortalService - Reloading timer with delay %u\n", mDelay));
return mTimer->InitWithCallback(this, mDelay, nsITimer::TYPE_ONE_SHOT);
}
return NS_OK;
--- a/netwerk/base/Dashboard.cpp
+++ b/netwerk/base/Dashboard.cpp
@@ -238,17 +238,17 @@ ConnectionData::Notify(nsITimer *aTimer)
return NS_OK;
}
void
ConnectionData::StartTimer(uint32_t aTimeout)
{
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();
}
mTimer->InitWithCallback(this, aTimeout * 1000,
nsITimer::TYPE_ONE_SHOT);
}
void
ConnectionData::StopTimer()
--- a/netwerk/base/EventTokenBucket.cpp
+++ b/netwerk/base/EventTokenBucket.cpp
@@ -95,19 +95,17 @@ EventTokenBucket::EventTokenBucket(uint3
MOZ_ASSERT(NS_IsMainThread());
nsresult rv;
nsCOMPtr<nsIEventTarget> sts;
nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
if (NS_SUCCEEDED(rv))
sts = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv))
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mTimer)
- mTimer->SetTarget(sts);
+ mTimer = NS_NewTimer(sts);
SetRate(eventsPerSecond, burstSize);
}
EventTokenBucket::~EventTokenBucket()
{
SOCKET_LOG(("EventTokenBucket::dtor %p events=%zu\n",
this, mEvents.GetSize()));
@@ -425,17 +423,17 @@ EventTokenBucket::WantNormalTimers()
static const TimeDuration fiveSeconds = TimeDuration::FromSeconds(5);
if (elapsed >= fiveSeconds) {
NormalTimers();
return;
}
if (!mFineGrainResetTimer)
- mFineGrainResetTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mFineGrainResetTimer = NS_NewTimer();
// if we can't delay the reset, just do it now
if (!mFineGrainResetTimer) {
NormalTimers();
return;
}
// pad the callback out 100ms to avoid having to round trip this again if the
--- a/netwerk/base/Predictor.cpp
+++ b/netwerk/base/Predictor.cpp
@@ -446,18 +446,18 @@ Predictor::InstallObserver()
Preferences::AddBoolVarCache(&mCleanedUp, PREDICTOR_CLEANED_UP_PREF, false);
Preferences::AddUintVarCache(&mMaxURILength, PREDICTOR_MAX_URI_LENGTH_PREF,
PREDICTOR_MAX_URI_LENGTH_DEFAULT);
Preferences::AddBoolVarCache(&mDoingTests, PREDICTOR_DOING_TESTS_PREF, false);
if (!mCleanedUp) {
- mCleanupTimer = do_CreateInstance("@mozilla.org/timer;1");
- mCleanupTimer->Init(this, 60 * 1000, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithObserver(getter_AddRefs(mCleanupTimer),
+ this, 60 * 1000, nsITimer::TYPE_ONE_SHOT);
}
return rv;
}
void
Predictor::RemoveObserver()
{
--- a/netwerk/base/ProxyAutoConfig.cpp
+++ b/netwerk/base/ProxyAutoConfig.cpp
@@ -435,17 +435,17 @@ ProxyAutoConfig::ResolveAddress(const ns
helper,
GetCurrentThreadEventTarget(),
attrs,
getter_AddRefs(helper->mRequest))))
return false;
if (aTimeout && helper->mRequest) {
if (!mTimer)
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
if (mTimer) {
mTimer->SetTarget(mMainThreadEventTarget);
mTimer->InitWithCallback(helper, aTimeout, nsITimer::TYPE_ONE_SHOT);
helper->mTimer = mTimer;
}
}
// Spin the event loop of the pac thread until lookup is complete.
--- a/netwerk/base/ThrottleQueue.cpp
+++ b/netwerk/base/ThrottleQueue.cpp
@@ -244,19 +244,17 @@ ThrottleQueue::ThrottleQueue()
, mTimerArmed(false)
{
nsresult rv;
nsCOMPtr<nsIEventTarget> sts;
nsCOMPtr<nsIIOService> ioService = do_GetIOService(&rv);
if (NS_SUCCEEDED(rv))
sts = do_GetService(NS_SOCKETTRANSPORTSERVICE_CONTRACTID, &rv);
if (NS_SUCCEEDED(rv))
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mTimer)
- mTimer->SetTarget(sts);
+ mTimer = NS_NewTimer(sts);
}
ThrottleQueue::~ThrottleQueue()
{
if (mTimer && mTimerArmed) {
mTimer->Cancel();
}
mTimer = nullptr;
--- a/netwerk/base/Tickler.cpp
+++ b/netwerk/base/Tickler.cpp
@@ -75,23 +75,19 @@ Tickler::Init()
opt.value.ip_ttl = 1;
PR_SetSocketOption(mFD, &opt);
nsresult rv = NS_NewNamedThread("wifi tickler",
getter_AddRefs(mThread));
if (NS_FAILED(rv))
return rv;
- nsCOMPtr<nsITimer> tmpTimer(do_CreateInstance(NS_TIMER_CONTRACTID, &rv));
- if (NS_FAILED(rv))
- return rv;
-
- rv = tmpTimer->SetTarget(mThread);
- if (NS_FAILED(rv))
- return rv;
+ nsCOMPtr<nsITimer> tmpTimer = NS_NewTimer(mThread);
+ if (!tmpTimer)
+ return NS_ERROR_OUT_OF_MEMORY;
mTimer.swap(tmpTimer);
mAddr.inet.family = PR_AF_INET;
mAddr.inet.port = PR_htons (4886);
mAddr.inet.ip = 0;
return NS_OK;
--- a/netwerk/base/nsIncrementalDownload.cpp
+++ b/netwerk/base/nsIncrementalDownload.cpp
@@ -221,22 +221,19 @@ nsIncrementalDownload::CallOnStopRequest
mObserver->OnStopRequest(this, mObserverContext, mStatus);
mObserver = nullptr;
mObserverContext = nullptr;
}
nsresult
nsIncrementalDownload::StartTimer(int32_t interval)
{
- nsresult rv;
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv))
- return rv;
-
- return mTimer->Init(this, interval * 1000, nsITimer::TYPE_ONE_SHOT);
+ return NS_NewTimerWithObserver(getter_AddRefs(mTimer),
+ this, interval * 1000,
+ nsITimer::TYPE_ONE_SHOT);
}
nsresult
nsIncrementalDownload::ProcessTimeout()
{
NS_ASSERTION(!mChannel, "how can we have a channel?");
// Handle existing error conditions
--- a/netwerk/base/nsSocketTransportService2.cpp
+++ b/netwerk/base/nsSocketTransportService2.cpp
@@ -1428,20 +1428,18 @@ nsSocketTransportService::Observe(nsISup
} else if (!strcmp(topic, NS_WIDGET_SLEEP_OBSERVER_TOPIC)) {
mSleepPhase = true;
if (mAfterWakeUpTimer) {
mAfterWakeUpTimer->Cancel();
mAfterWakeUpTimer = nullptr;
}
} else if (!strcmp(topic, NS_WIDGET_WAKE_OBSERVER_TOPIC)) {
if (mSleepPhase && !mAfterWakeUpTimer) {
- mAfterWakeUpTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (mAfterWakeUpTimer) {
- mAfterWakeUpTimer->Init(this, 2000, nsITimer::TYPE_ONE_SHOT);
- }
+ NS_NewTimerWithObserver(getter_AddRefs(mAfterWakeUpTimer),
+ this, 2000, nsITimer::TYPE_ONE_SHOT);
}
} else if (!strcmp(topic, "xpcom-shutdown-threads")) {
ShutdownThread();
}
return NS_OK;
}
@@ -1660,19 +1658,19 @@ nsSocketTransportService::StartPollWatch
[self] {
MutexAutoLock lock(self->mLock);
// Poll can hang sometimes. If we are in shutdown, we are going to start a
// watchdog. If we do not exit poll within REPAIR_POLLABLE_EVENT_TIME
// signal a pollable event again.
MOZ_ASSERT(gIOService->IsNetTearingDown());
if (self->mPolling && !self->mPollRepairTimer) {
- self->mPollRepairTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- self->mPollRepairTimer->Init(self, REPAIR_POLLABLE_EVENT_TIME,
- nsITimer::TYPE_REPEATING_SLACK);
+ NS_NewTimerWithObserver(getter_AddRefs(self->mPollRepairTimer),
+ self, REPAIR_POLLABLE_EVENT_TIME,
+ nsITimer::TYPE_REPEATING_SLACK);
}
}));
}
void
nsSocketTransportService::DoPollRepair()
{
MutexAutoLock lock(mLock);
--- a/netwerk/cache/nsCacheService.cpp
+++ b/netwerk/cache/nsCacheService.cpp
@@ -1627,27 +1627,22 @@ nsCacheService::CreateDiskDevice()
return rv;
}
NS_ASSERTION(!mSmartSizeTimer, "Smartsize timer was already fired!");
// Disk device is usually created during the startup. Delay smart size
// calculation to avoid possible massive IO caused by eviction of entries
// in case the new smart size is smaller than current cache usage.
- mSmartSizeTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- rv = mSmartSizeTimer->InitWithCallback(new nsSetDiskSmartSizeCallback(),
- 1000*60*3,
- nsITimer::TYPE_ONE_SHOT);
- if (NS_FAILED(rv)) {
- NS_WARNING("Failed to post smart size timer");
- mSmartSizeTimer = nullptr;
- }
- } else {
- NS_WARNING("Can't create smart size timer");
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mSmartSizeTimer),
+ new nsSetDiskSmartSizeCallback(),
+ 1000*60*3,
+ nsITimer::TYPE_ONE_SHOT);
+ if (NS_FAILED(rv)) {
+ NS_WARNING("Failed to post smart size timer");
}
// Ignore state of the timer and return success since the purpose of the
// method (create the disk-device) has been fulfilled
return NS_OK;
}
// Runnable sent from cache thread to main thread
--- a/netwerk/cache/nsDeleteDir.cpp
+++ b/netwerk/cache/nsDeleteDir.cpp
@@ -374,35 +374,30 @@ nsDeleteDir::RemoveOldTrashes(nsIFile *c
return NS_OK;
}
nsresult
nsDeleteDir::PostTimer(void *arg, uint32_t delay)
{
nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv))
- return NS_ERROR_UNEXPECTED;
-
MutexAutoLock lock(mLock);
rv = InitThread();
if (NS_FAILED(rv))
return rv;
- rv = timer->SetTarget(mThread);
- if (NS_FAILED(rv))
- return rv;
-
- rv = timer->InitWithNamedFuncCallback(TimerCallback,
- arg,
- delay,
- nsITimer::TYPE_ONE_SHOT,
- "nsDeleteDir::PostTimer");
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ TimerCallback,
+ arg,
+ delay,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsDeleteDir::PostTimer",
+ mThread);
if (NS_FAILED(rv))
return rv;
mTimers.AppendObject(timer);
return NS_OK;
}
nsresult
--- a/netwerk/cache/nsDiskCacheMap.cpp
+++ b/netwerk/cache/nsDiskCacheMap.cpp
@@ -1274,20 +1274,21 @@ nsDiskCacheMap::InitCacheClean(nsIFile *
int32_t bytesRead = PR_Read(mCleanFD, &clean, 1);
if (bytesRead != 1) {
NS_WARNING("Could not read _CACHE_CLEAN_ file contents");
}
}
// Create a timer that will be used to validate the cache
// as long as an activity threshold was met
- mCleanCacheTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- mCleanCacheTimer->SetTarget(nsCacheService::GlobalInstance()->mCacheIOThread);
+ mCleanCacheTimer = NS_NewTimer(nsCacheService::GlobalInstance()->mCacheIOThread);
+ if (mCleanCacheTimer) {
rv = ResetCacheTimer();
+ } else {
+ rv = NS_ERROR_OUT_OF_MEMORY;
}
if (NS_FAILED(rv)) {
NS_WARNING("Could not create cache clean timer");
mCleanCacheTimer = nullptr;
*corruptInfo = nsDiskCache::kCacheCleanTimerError;
return rv;
}
--- a/netwerk/cache2/CacheFileIOManager.cpp
+++ b/netwerk/cache2/CacheFileIOManager.cpp
@@ -1519,21 +1519,19 @@ CacheFileIOManager::ScheduleMetadataWrit
nsresult
CacheFileIOManager::ScheduleMetadataWriteInternal(CacheFile * aFile)
{
MOZ_ASSERT(IsOnIOThreadOrCeased());
nsresult rv;
if (!mMetadataWritesTimer) {
- mMetadataWritesTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = mMetadataWritesTimer->InitWithCallback(
- this, kMetadataWriteDelay, nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mMetadataWritesTimer),
+ this, kMetadataWriteDelay,
+ nsITimer::TYPE_ONE_SHOT);
NS_ENSURE_SUCCESS(rv, rv);
}
if (mScheduledMetadataWrites.IndexOf(aFile) !=
mScheduledMetadataWrites.NoIndex) {
return NS_OK;
}
@@ -3434,35 +3432,27 @@ CacheFileIOManager::StartRemovingTrash()
if (mRemovingTrashDirs) {
LOG(("CacheFileIOManager::StartRemovingTrash() - Trash removing in "
"progress."));
return NS_OK;
}
uint32_t elapsed = (TimeStamp::NowLoRes() - mStartTime).ToMilliseconds();
if (elapsed < kRemoveTrashStartDelay) {
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
nsCOMPtr<nsIEventTarget> ioTarget = IOTarget();
MOZ_ASSERT(ioTarget);
- rv = timer->SetTarget(ioTarget);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = timer->InitWithNamedFuncCallback(
+ return NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mTrashTimer),
CacheFileIOManager::OnTrashTimer,
nullptr,
kRemoveTrashStartDelay - elapsed,
nsITimer::TYPE_ONE_SHOT,
- "net::CacheFileIOManager::StartRemovingTrash");
- NS_ENSURE_SUCCESS(rv, rv);
-
- mTrashTimer.swap(timer);
- return NS_OK;
+ "net::CacheFileIOManager::StartRemovingTrash",
+ ioTarget);
}
nsCOMPtr<nsIRunnable> ev;
ev = NewRunnableMethod("net::CacheFileIOManager::RemoveTrashInternal",
this,
&CacheFileIOManager::RemoveTrashInternal);
rv = mIOThread->Dispatch(ev, CacheIOThread::EVICT);
--- a/netwerk/cache2/CacheIndex.cpp
+++ b/netwerk/cache2/CacheIndex.cpp
@@ -2646,36 +2646,26 @@ CacheIndex::DelayedUpdateLocked()
nsresult
CacheIndex::ScheduleUpdateTimer(uint32_t aDelay)
{
LOG(("CacheIndex::ScheduleUpdateTimer() [delay=%u]", aDelay));
MOZ_ASSERT(!mUpdateTimer);
- nsresult rv;
-
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
nsCOMPtr<nsIEventTarget> ioTarget = CacheFileIOManager::IOTarget();
MOZ_ASSERT(ioTarget);
- rv = timer->SetTarget(ioTarget);
- NS_ENSURE_SUCCESS(rv, rv);
-
- rv = timer->InitWithNamedFuncCallback(CacheIndex::DelayedUpdate,
- nullptr,
- aDelay,
- nsITimer::TYPE_ONE_SHOT,
- "net::CacheIndex::ScheduleUpdateTimer");
- NS_ENSURE_SUCCESS(rv, rv);
-
- mUpdateTimer.swap(timer);
- return NS_OK;
+ return NS_NewTimerWithFuncCallback(getter_AddRefs(mUpdateTimer),
+ CacheIndex::DelayedUpdate,
+ nullptr,
+ aDelay,
+ nsITimer::TYPE_ONE_SHOT,
+ "net::CacheIndex::ScheduleUpdateTimer",
+ ioTarget);
}
nsresult
CacheIndex::SetupDirectoryEnumerator()
{
MOZ_ASSERT(!NS_IsMainThread());
MOZ_ASSERT(!mDirEnumerator);
--- a/netwerk/cache2/CacheStorageService.cpp
+++ b/netwerk/cache2/CacheStorageService.cpp
@@ -1230,17 +1230,17 @@ CacheStorageService::SchedulePurgeOverMe
return;
}
if (mPurgeTimer) {
LOG((" timer already up"));
return;
}
- mPurgeTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mPurgeTimer = NS_NewTimer();
if (mPurgeTimer) {
nsresult rv;
rv = mPurgeTimer->InitWithCallback(this, 1000, nsITimer::TYPE_ONE_SHOT);
LOG((" timer init rv=0x%08" PRIx32, static_cast<uint32_t>(rv)));
}
}
NS_IMETHODIMP
--- a/netwerk/protocol/ftp/nsFtpProtocolHandler.cpp
+++ b/netwerk/protocol/ftp/nsFtpProtocolHandler.cpp
@@ -304,30 +304,28 @@ nsFtpProtocolHandler::InsertConnection(n
if (aConn->mSessionId != mSessionId)
return NS_ERROR_FAILURE;
nsAutoCString spec;
aKey->GetPrePath(spec);
LOG(("FTP:inserting connection for %s\n", spec.get()));
- nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) return rv;
-
timerStruct* ts = new timerStruct();
if (!ts)
return NS_ERROR_OUT_OF_MEMORY;
- rv = timer->InitWithNamedFuncCallback(
- nsFtpProtocolHandler::Timeout,
- ts,
- mIdleTimeout * 1000,
- nsITimer::TYPE_REPEATING_SLACK,
- "nsFtpProtocolHandler::InsertConnection");
+ nsresult rv;
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ nsFtpProtocolHandler::Timeout,
+ ts,
+ mIdleTimeout * 1000,
+ nsITimer::TYPE_REPEATING_SLACK,
+ "nsFtpProtocolHandler::InsertConnection");
if (NS_FAILED(rv)) {
delete ts;
return rv;
}
ts->key = ToNewCString(spec);
if (!ts->key) {
delete ts;
--- a/netwerk/protocol/http/HSTSPrimerListener.cpp
+++ b/netwerk/protocol/http/HSTSPrimerListener.cpp
@@ -370,20 +370,19 @@ HSTSPrimingListener::StartHSTSPriming(ns
// Set up listener which will start the original channel
HSTSPrimingListener* listener = new HSTSPrimingListener(aCallback);
// Start priming
rv = primingChannel->AsyncOpen2(listener);
NS_ENSURE_SUCCESS(rv, rv);
listener->mPrimingChannel.swap(primingChannel);
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- NS_ENSURE_STATE(timer);
-
- rv = timer->InitWithCallback(listener,
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithCallback(getter_AddRefs(timer),
+ listener,
sHSTSPrimingTimeout,
nsITimer::TYPE_ONE_SHOT);
if (NS_FAILED(rv)) {
NS_ERROR("HSTS Priming failed to initialize channel cancellation timer");
}
listener->mHSTSPrimingTimer.swap(timer);
--- a/netwerk/protocol/http/TunnelUtils.cpp
+++ b/netwerk/protocol/http/TunnelUtils.cpp
@@ -415,17 +415,17 @@ TLSFilterTransaction::NudgeTunnel(NudgeT
delay = 6;
} else if (counter < 34) { // up to 499 ms at 17ms
delay = 17;
} else { // after that at 51ms (3 old windows ticks)
delay = 51;
}
if(!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();
}
mNudgeCallback = aCallback;
if (!mTimer ||
NS_FAILED(mTimer->InitWithCallback(this, delay, nsITimer::TYPE_ONE_SHOT))) {
return StartTimerCallback();
}
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -4002,19 +4002,20 @@ nsHttpChannel::OpenCacheEntry(bool isHtt
self->mRaceCacheWithNetwork = true;
}
nsresult rv = cacheStorage->AsyncOpenURI(openURI, extension, cacheEntryOpenFlags, self);
if (NS_FAILED(rv)) {
self->mCacheAsyncOpenCalled = false;
}
};
- mCacheOpenTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
// calls nsHttpChannel::Notify after `mCacheOpenDelay` milliseconds
- mCacheOpenTimer->InitWithCallback(this, mCacheOpenDelay, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mCacheOpenTimer),
+ this, mCacheOpenDelay,
+ nsITimer::TYPE_ONE_SHOT);
}
NS_ENSURE_SUCCESS(rv, rv);
}
waitFlags.Keep(WAIT_FOR_CACHE_ENTRY);
bypassCacheEntryOpen:
@@ -9357,17 +9358,17 @@ nsHttpChannel::TriggerNetworkWithDelay(u
// cause performance regression in tp6 tests, see bug 1398847.
return NS_DispatchToMainThread(
NewRunnableMethod("net::nsHttpChannel::TriggerNetworkWithDelay",
this, &nsHttpChannel::TriggerNetwork),
NS_DISPATCH_NORMAL);
}
if (!mNetworkTriggerTimer) {
- mNetworkTriggerTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mNetworkTriggerTimer = NS_NewTimer();
}
mNetworkTriggerTimer->InitWithCallback(this, aDelay, nsITimer::TYPE_ONE_SHOT);
return NS_OK;
}
nsresult
nsHttpChannel::TriggerNetwork()
{
--- a/netwerk/protocol/http/nsHttpConnection.cpp
+++ b/netwerk/protocol/http/nsHttpConnection.cpp
@@ -1542,23 +1542,23 @@ nsHttpConnection::MaybeForceSendIO()
// tick interval (kForceDelay) as a backup for those circumstances.
static const uint32_t kForceDelay = 17; //ms
if (mForceSendPending) {
return NS_OK;
}
MOZ_ASSERT(!mForceSendTimer);
mForceSendPending = true;
- mForceSendTimer = do_CreateInstance("@mozilla.org/timer;1");
- return mForceSendTimer->InitWithNamedFuncCallback(
- nsHttpConnection::ForceSendIO,
- this,
- kForceDelay,
- nsITimer::TYPE_ONE_SHOT,
- "net::nsHttpConnection::MaybeForceSendIO");
+ return NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mForceSendTimer),
+ nsHttpConnection::ForceSendIO,
+ this,
+ kForceDelay,
+ nsITimer::TYPE_ONE_SHOT,
+ "net::nsHttpConnection::MaybeForceSendIO");
}
// trigger an asynchronous read
nsresult
nsHttpConnection::ForceRecv()
{
LOG(("nsHttpConnection::ForceRecv [this=%p]\n", this));
MOZ_ASSERT(OnSocketThread(), "not on socket thread");
@@ -2079,17 +2079,17 @@ nsHttpConnection::StartShortLivedTCPKeep
}
if (NS_FAILED(rv)) {
return rv;
}
// Start a timer to move to long-lived keepalive config.
if(!mTCPKeepaliveTransitionTimer) {
mTCPKeepaliveTransitionTimer =
- do_CreateInstance("@mozilla.org/timer;1");
+ NS_NewTimer();
}
if (mTCPKeepaliveTransitionTimer) {
int32_t time = gHttpHandler->GetTCPKeepaliveShortLivedTime();
// Adjust |time| to ensure a full set of keepalive probes can be sent
// at the end of the short-lived phase.
if (gHttpHandler->TCPKeepaliveEnabledForShortLivedConns()) {
--- a/netwerk/protocol/http/nsHttpConnectionMgr.cpp
+++ b/netwerk/protocol/http/nsHttpConnectionMgr.cpp
@@ -300,17 +300,17 @@ nsHttpConnectionMgr::PostEvent(nsConnEve
}
void
nsHttpConnectionMgr::PruneDeadConnectionsAfter(uint32_t timeInSeconds)
{
LOG(("nsHttpConnectionMgr::PruneDeadConnectionsAfter\n"));
if(!mTimer)
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTimer = NS_NewTimer();
// failure to create a timer is not a fatal error, but idle connections
// will not be cleaned up until we try to use them.
if (mTimer) {
mTimeOfNextWakeUp = timeInSeconds + NowInSeconds();
mTimer->Init(this, timeInSeconds*1000, nsITimer::TYPE_ONE_SHOT);
} else {
NS_WARNING("failed to create: timer for pruning the dead connections!");
@@ -2641,17 +2641,17 @@ nsHttpConnectionMgr::OnMsgVerifyTraffic(
// Iterate the idle connections and unmark them for traffic checks.
for (uint32_t index = 0; index < ent->mIdleConns.Length(); ++index) {
ent->mIdleConns[index]->CheckForTraffic(false);
}
}
// If the timer is already there. we just re-init it
if(!mTrafficTimer) {
- mTrafficTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mTrafficTimer = NS_NewTimer();
}
// failure to create a timer is not a fatal error, but dead
// connections will not be cleaned up as nicely
if (mTrafficTimer) {
// Give active connections time to get more traffic before killing
// them off. Default: 5000 milliseconds
mTrafficTimer->Init(this, gHttpHandler->NetworkChangedTimeout(),
@@ -2877,17 +2877,17 @@ nsHttpConnectionMgr::ActivateTimeoutTick
if (mTimeoutTickNext > 1) {
mTimeoutTickNext = 1;
mTimeoutTick->SetDelay(1000);
}
return;
}
if (!mTimeoutTick) {
- mTimeoutTick = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimeoutTick = NS_NewTimer();
if (!mTimeoutTick) {
NS_WARNING("failed to create timer for http timeout management");
return;
}
mTimeoutTick->SetTarget(mSocketThreadTarget);
}
MOZ_ASSERT(!mTimeoutTickArmed, "timer tick armed");
@@ -3273,17 +3273,17 @@ nsHttpConnectionMgr::EnsureThrottleTicke
CancelDelayedResumeBackgroundThrottledTransactions();
if (mThrottleTicker) {
return;
}
MOZ_ASSERT(!mThrottlingInhibitsReading);
- mThrottleTicker = do_CreateInstance("@mozilla.org/timer;1");
+ mThrottleTicker = NS_NewTimer();
if (mThrottleTicker) {
mThrottleTicker->Init(this, mThrottleSuspendFor, nsITimer::TYPE_ONE_SHOT);
mThrottlingInhibitsReading = true;
}
LogActiveTransactions('^');
}
@@ -3344,23 +3344,19 @@ nsHttpConnectionMgr::ThrottlerTick()
void
nsHttpConnectionMgr::DelayedResumeBackgroundThrottledTransactions()
{
if (mDelayedResumeReadTimer) {
return;
}
- mDelayedResumeReadTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (!mDelayedResumeReadTimer) {
- return;
- }
-
LOG(("nsHttpConnectionMgr::DelayedResumeBackgroundThrottledTransactions"));
- mDelayedResumeReadTimer->Init(this, mThrottleResumeIn, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithObserver(getter_AddRefs(mDelayedResumeReadTimer),
+ this, mThrottleResumeIn, nsITimer::TYPE_ONE_SHOT);
}
void
nsHttpConnectionMgr::CancelDelayedResumeBackgroundThrottledTransactions()
{
if (!mDelayedResumeReadTimer) {
return;
}
@@ -4009,22 +4005,19 @@ nsHttpConnectionMgr::nsHalfOpenSocket::S
(timeout && !mSpeculative)) {
// Setup the timer that will establish a backup socket
// if we do not get a writable event on the main one.
// We do this because a lost SYN takes a very long time
// to repair at the TCP level.
//
// Failure to setup the timer is something we can live with,
// so don't return an error in that case.
- nsresult rv;
- mSynTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_SUCCEEDED(rv)) {
- mSynTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
- LOG(("nsHalfOpenSocket::SetupBackupTimer() [this=%p]", this));
- }
+ NS_NewTimerWithCallback(getter_AddRefs(mSynTimer),
+ this, timeout, nsITimer::TYPE_ONE_SHOT);
+ LOG(("nsHalfOpenSocket::SetupBackupTimer() [this=%p]", this));
} else if (timeout) {
LOG(("nsHalfOpenSocket::SetupBackupTimer() [this=%p], did not arm\n", this));
}
}
void
nsHttpConnectionMgr::nsHalfOpenSocket::CancelBackupTimer()
{
--- a/netwerk/protocol/websocket/WebSocketChannel.cpp
+++ b/netwerk/protocol/websocket/WebSocketChannel.cpp
@@ -260,28 +260,24 @@ public:
if (fail) {
TimeStamp rightNow = TimeStamp::Now();
uint32_t remainingDelay = fail->RemainingDelay(rightNow);
if (remainingDelay) {
// reconnecting within delay interval: delay by remaining time
nsresult rv;
- ws->mReconnectDelayTimer =
- do_CreateInstance("@mozilla.org/timer;1", &rv);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(ws->mReconnectDelayTimer),
+ ws, remainingDelay, nsITimer::TYPE_ONE_SHOT);
if (NS_SUCCEEDED(rv)) {
- rv = ws->mReconnectDelayTimer->InitWithCallback(
- ws, remainingDelay, nsITimer::TYPE_ONE_SHOT);
- if (NS_SUCCEEDED(rv)) {
- LOG(("WebSocket: delaying websocket [this=%p] by %lu ms, changing"
- " state to CONNECTING_DELAYED", ws,
- (unsigned long)remainingDelay));
- ws->mConnecting = CONNECTING_DELAYED;
- return;
- }
+ LOG(("WebSocket: delaying websocket [this=%p] by %lu ms, changing"
+ " state to CONNECTING_DELAYED", ws,
+ (unsigned long)remainingDelay));
+ ws->mConnecting = CONNECTING_DELAYED;
+ return;
}
// if timer fails (which is very unlikely), drop down to BeginOpen call
} else if (fail->IsExpired(rightNow)) {
mEntries.RemoveElementAt(failIndex);
delete fail;
}
}
}
@@ -1323,22 +1319,21 @@ WebSocketChannel::OnNetworkChanged()
return NS_OK;
}
LOG(("nsWebSocketChannel:: Generating Ping as network changed\n"));
if (!mPingTimer) {
// The ping timer is only conditionally running already. If it wasn't
// already created do it here.
- nsresult rv;
- mPingTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) {
+ mPingTimer = NS_NewTimer();
+ if (!mPingTimer) {
LOG(("WebSocket: unable to create ping timer!"));
NS_WARNING("unable to create ping timer!");
- return rv;
+ return NS_ERROR_OUT_OF_MEMORY;
}
}
// Trigger the ping timeout asap to fire off a new ping. Wait just
// a little bit to better avoid multi-triggers.
mPingForced = 1;
mPingTimer->InitWithCallback(this, 200, nsITimer::TYPE_ONE_SHOT);
return NS_OK;
@@ -1423,25 +1418,19 @@ WebSocketChannel::BeginOpenInternal()
if (NS_FAILED(rv)) {
LOG(("WebSocketChannel::BeginOpenInternal: cannot async open\n"));
AbortSession(NS_ERROR_CONNECTION_REFUSED);
return;
}
mOpenedHttpChannel = 1;
- mOpenTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) {
- LOG(("WebSocketChannel::BeginOpenInternal: cannot create open timer\n"));
- AbortSession(NS_ERROR_UNEXPECTED);
- return;
- }
-
- rv = mOpenTimer->InitWithCallback(this, mOpenTimeout,
- nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mOpenTimer),
+ this, mOpenTimeout,
+ nsITimer::TYPE_ONE_SHOT);
if (NS_FAILED(rv)) {
LOG(("WebSocketChannel::BeginOpenInternal: cannot initialize open "
"timer\n"));
AbortSession(NS_ERROR_UNEXPECTED);
return;
}
}
@@ -2130,21 +2119,20 @@ WebSocketChannel::PrimeNewOutgoingMessag
if (mServerClosed) {
/* bidi close complete */
mReleaseOnTransmit = 1;
} else if (NS_FAILED(mStopOnClose)) {
/* result of abort session - give up */
StopSession(mStopOnClose);
} else {
/* wait for reciprocal close from server */
- mCloseTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- mCloseTimer->InitWithCallback(this, mCloseTimeout,
- nsITimer::TYPE_ONE_SHOT);
- } else {
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mCloseTimer),
+ this, mCloseTimeout,
+ nsITimer::TYPE_ONE_SHOT);
+ if (NS_FAILED(rv)) {
StopSession(rv);
}
}
} else {
switch (msgType) {
case kMsgTypePong:
mOutHeader[0] = kFinalFragBit | nsIWebSocketFrame::OPCODE_PONG;
break;
@@ -2445,21 +2433,20 @@ WebSocketChannel::StopSession(nsresult r
//
// Normally this will be taken care of in AbortSession() after mTCPClosed
// is set when the server close arrives without waiting for the timeout to
// expire.
LOG(("WebSocketChannel::StopSession: Wait for Server TCP close"));
nsresult rv;
- mLingeringCloseTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv))
- mLingeringCloseTimer->InitWithCallback(this, kLingeringCloseTimeout,
- nsITimer::TYPE_ONE_SHOT);
- else
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mLingeringCloseTimer),
+ this, kLingeringCloseTimeout,
+ nsITimer::TYPE_ONE_SHOT);
+ if (NS_FAILED(rv))
CleanupConnection();
} else {
CleanupConnection();
}
if (mCancelable) {
mCancelable->Cancel(NS_ERROR_UNEXPECTED);
mCancelable = nullptr;
@@ -3012,23 +2999,24 @@ nsresult
WebSocketChannel::StartPinging()
{
LOG(("WebSocketChannel::StartPinging() %p", this));
MOZ_ASSERT(OnSocketThread(), "not on socket thread");
MOZ_ASSERT(mPingInterval);
MOZ_ASSERT(!mPingTimer);
nsresult rv;
- mPingTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv)) {
- NS_WARNING("unable to create ping timer. Carrying on.");
- } else {
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mPingTimer),
+ this, mPingInterval,
+ nsITimer::TYPE_ONE_SHOT);
+ if (NS_SUCCEEDED(rv)) {
LOG(("WebSocketChannel will generate ping after %d ms of receive silence\n",
mPingInterval));
- mPingTimer->InitWithCallback(this, mPingInterval, nsITimer::TYPE_ONE_SHOT);
+ } else {
+ NS_WARNING("unable to create ping timer. Carrying on.");
}
return NS_OK;
}
void
WebSocketChannel::ReportConnectionTelemetry()
--- a/netwerk/test/TestUDPSocket.cpp
+++ b/netwerk/test/TestUDPSocket.cpp
@@ -304,17 +304,17 @@ TEST(TestUDPSocket, TestUDPSocketMain)
// Wait for server
waiter->Wait(1);
ASSERT_TRUE(NS_SUCCEEDED(serverListener->mResult));
// Read response from server
ASSERT_TRUE(NS_SUCCEEDED(clientListener->mResult));
// Setup timer to detect multicast failure
- nsCOMPtr<nsITimer> timer = do_CreateInstance("@mozilla.org/timer;1");
+ nsCOMPtr<nsITimer> timer = NS_NewTimer();
ASSERT_TRUE(timer);
RefPtr<MulticastTimerCallback> timerCb = new MulticastTimerCallback(waiter);
// Join multicast group
printf("Joining multicast group\n");
phase = TEST_MULTICAST;
mozilla::net::NetAddr multicastAddr;
multicastAddr.inet.family = AF_INET;
--- a/parser/html/nsHtml5StreamParser.cpp
+++ b/parser/html/nsHtml5StreamParser.cpp
@@ -176,17 +176,17 @@ nsHtml5StreamParser::nsHtml5StreamParser
, mTerminated(false)
, mInterrupted(false)
, mTerminatedMutex("nsHtml5StreamParser mTerminatedMutex")
, mEventTarget(nsHtml5Module::GetStreamParserThread()->SerialEventTarget())
, mExecutorFlusher(new nsHtml5ExecutorFlusher(aExecutor))
, mLoadFlusher(new nsHtml5LoadFlusher(aExecutor))
, mFeedChardet(false)
, mInitialEncodingWasFromParentFrame(false)
- , mFlushTimer(do_CreateInstance("@mozilla.org/timer;1"))
+ , mFlushTimer(NS_NewTimer())
, mFlushTimerMutex("nsHtml5StreamParser mFlushTimerMutex")
, mFlushTimerArmed(false)
, mFlushTimerEverFired(false)
, mMode(aMode)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
mFlushTimer->SetTarget(mEventTarget);
#ifdef DEBUG
--- a/security/manager/ssl/DataStorage.cpp
+++ b/security/manager/ssl/DataStorage.cpp
@@ -958,18 +958,18 @@ DataStorage::SetTimer()
{
MOZ_ASSERT(!NS_IsMainThread());
MOZ_ASSERT(XRE_IsParentProcess());
MutexAutoLock lock(mMutex);
nsresult rv;
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_WARN_IF(NS_FAILED(rv))) {
+ mTimer = NS_NewTimer();
+ if (NS_WARN_IF(!mTimer)) {
return;
}
}
rv = mTimer->InitWithNamedFuncCallback(TimerCallback,
this,
mTimerDelay,
nsITimer::TYPE_ONE_SHOT,
--- a/startupcache/StartupCache.cpp
+++ b/startupcache/StartupCache.cpp
@@ -576,19 +576,19 @@ StartupCache::GetDebugObjectOutputStream
return NS_OK;
}
nsresult
StartupCache::ResetStartupWriteTimer()
{
mStartupWriteInitiated = false;
- nsresult rv;
+ nsresult rv = NS_OK;
if (!mTimer)
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
+ mTimer = NS_NewTimer();
else
rv = mTimer->Cancel();
NS_ENSURE_SUCCESS(rv, rv);
// Wait for 10 seconds, then write out the cache.
mTimer->InitWithNamedFuncCallback(StartupCache::WriteTimeout, this, 60000,
nsITimer::TYPE_ONE_SHOT,
"StartupCache::WriteTimeout");
return NS_OK;
--- a/toolkit/components/alerts/AlertNotification.cpp
+++ b/toolkit/components/alerts/AlertNotification.cpp
@@ -293,22 +293,19 @@ AlertImageRequest::Cancel(nsresult aReas
nsresult
AlertImageRequest::Start()
{
// Keep the request alive until we notify the image listener.
NS_ADDREF_THIS();
nsresult rv;
if (mTimeout > 0) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (NS_WARN_IF(!mTimer)) {
- return NotifyMissing();
- }
- rv = mTimer->InitWithCallback(this, mTimeout,
- nsITimer::TYPE_ONE_SHOT);
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, mTimeout,
+ nsITimer::TYPE_ONE_SHOT);
if (NS_WARN_IF(NS_FAILED(rv))) {
return NotifyMissing();
}
}
// Begin loading the image.
imgLoader* il = imgLoader::NormalLoader();
if (!il) {
--- a/toolkit/components/autocomplete/nsAutoCompleteController.cpp
+++ b/toolkit/components/autocomplete/nsAutoCompleteController.cpp
@@ -1412,25 +1412,18 @@ nsAutoCompleteController::StartSearches(
AfterSearches();
return NS_OK;
}
}
MOZ_ASSERT(timeout > 0, "Trying to delay searches with a 0 timeout!");
// Now start the delayed searches.
- nsresult rv;
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_FAILED(rv))
- return rv;
- rv = mTimer->InitWithCallback(this, timeout, nsITimer::TYPE_ONE_SHOT);
- if (NS_FAILED(rv))
- mTimer = nullptr;
-
- return rv;
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, timeout, nsITimer::TYPE_ONE_SHOT);
}
nsresult
nsAutoCompleteController::ClearSearchTimer()
{
if (mTimer) {
mTimer->Cancel();
mTimer = nullptr;
--- a/toolkit/components/downloads/ApplicationReputation.cpp
+++ b/toolkit/components/downloads/ApplicationReputation.cpp
@@ -1379,18 +1379,18 @@ PendingLookup::SendRemoteQueryInternal()
NS_ENSURE_SUCCESS(rv, rv);
rv = uploadChannel->ExplicitSetUploadStream(sstream,
NS_LITERAL_CSTRING("application/octet-stream"), serialized.size(),
NS_LITERAL_CSTRING("POST"), false);
NS_ENSURE_SUCCESS(rv, rv);
uint32_t timeoutMs = Preferences::GetUint(PREF_SB_DOWNLOADS_REMOTE_TIMEOUT, 10000);
- mTimeoutTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mTimeoutTimer->InitWithCallback(this, timeoutMs, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mTimeoutTimer),
+ this, timeoutMs, nsITimer::TYPE_ONE_SHOT);
rv = mChannel->AsyncOpen2(this);
NS_ENSURE_SUCCESS(rv, rv);
return NS_OK;
}
NS_IMETHODIMP
--- a/toolkit/components/perfmonitoring/nsPerformanceStats.cpp
+++ b/toolkit/components/perfmonitoring/nsPerformanceStats.cpp
@@ -598,17 +598,17 @@ PendingAlertsCollector::GetName(nsACStri
nsresult
PendingAlertsCollector::Start(uint32_t timerDelayMS) {
if (mPending) {
// Collector is already started.
return NS_OK;
}
if (!mTimer) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
}
nsresult rv = mTimer->InitWithCallback(this, timerDelayMS, nsITimer::TYPE_ONE_SHOT);
if (NS_FAILED(rv)) {
return rv;
}
mPending = true;
--- a/toolkit/components/places/nsFaviconService.cpp
+++ b/toolkit/components/places/nsFaviconService.cpp
@@ -162,17 +162,17 @@ nsFaviconService::StoreLastInsertedId(co
}
nsresult
nsFaviconService::Init()
{
mDB = Database::GetDatabase();
NS_ENSURE_STATE(mDB);
- mExpireUnassociatedIconsTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mExpireUnassociatedIconsTimer = NS_NewTimer();
NS_ENSURE_STATE(mExpireUnassociatedIconsTimer);
// Check if there are still icon payloads to be converted.
bool shouldConvertPayloads =
Preferences::GetBool(PREF_CONVERT_PAYLOADS, false);
if (shouldConvertPayloads) {
ConvertUnsupportedPayloads(mDB->MainConn());
}
--- a/toolkit/components/places/nsNavHistory.cpp
+++ b/toolkit/components/places/nsNavHistory.cpp
@@ -668,17 +668,17 @@ nsNavHistory::GetDaysOfHistory() {
}
PRTime
nsNavHistory::GetNow()
{
if (!mCachedNow) {
mCachedNow = PR_Now();
if (!mExpireNowTimer)
- mExpireNowTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mExpireNowTimer = NS_NewTimer();
if (mExpireNowTimer)
mExpireNowTimer->InitWithNamedFuncCallback(expireNowTimerCallback,
this,
RENEW_CACHED_NOW_TIMEOUT,
nsITimer::TYPE_ONE_SHOT,
"nsNavHistory::GetNow");
}
return mCachedNow;
--- a/toolkit/components/statusfilter/nsBrowserStatusFilter.cpp
+++ b/toolkit/components/statusfilter/nsBrowserStatusFilter.cpp
@@ -370,24 +370,21 @@ nsBrowserStatusFilter::MaybeSendStatus()
}
}
nsresult
nsBrowserStatusFilter::StartDelayTimer()
{
NS_ASSERTION(!DelayInEffect(), "delay should not be in effect");
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (!mTimer)
- return NS_ERROR_FAILURE;
-
- mTimer->SetTarget(mTarget);
- return mTimer->InitWithNamedFuncCallback(
- TimeoutHandler, this, 160, nsITimer::TYPE_ONE_SHOT,
- "nsBrowserStatusFilter::TimeoutHandler");
+ return NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ TimeoutHandler, this, 160,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsBrowserStatusFilter::TimeoutHandler",
+ mTarget);
}
void
nsBrowserStatusFilter::ProcessTimeout()
{
mTimer = nullptr;
if (!mListener)
--- a/toolkit/components/telemetry/ipc/TelemetryIPCAccumulator.cpp
+++ b/toolkit/components/telemetry/ipc/TelemetryIPCAccumulator.cpp
@@ -82,20 +82,17 @@ void
DoArmIPCTimerMainThread(const StaticMutexAutoLock& lock)
{
MOZ_ASSERT(NS_IsMainThread());
gIPCTimerArming = false;
if (gIPCTimerArmed) {
return;
}
if (!gIPCTimer) {
- CallCreateInstance(NS_TIMER_CONTRACTID, &gIPCTimer);
- if (gIPCTimer) {
- gIPCTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::Other));
- }
+ gIPCTimer = NS_NewTimer(SystemGroup::EventTargetFor(TaskCategory::Other)).take();
}
if (gIPCTimer) {
gIPCTimer->InitWithNamedFuncCallback(TelemetryIPCAccumulator::IPCTimerFired,
nullptr, kBatchTimeoutMs,
nsITimer::TYPE_ONE_SHOT_LOW_PRIORITY,
"TelemetryIPCAccumulator::IPCTimerFired");
gIPCTimerArmed = true;
}
--- a/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp
+++ b/toolkit/components/url-classifier/nsUrlClassifierStreamUpdater.cpp
@@ -14,16 +14,17 @@
#include "nsNetUtil.h"
#include "nsStreamUtils.h"
#include "nsStringStream.h"
#include "nsToolkitCompsCID.h"
#include "nsUrlClassifierStreamUpdater.h"
#include "mozilla/BasePrincipal.h"
#include "mozilla/ErrorNames.h"
#include "mozilla/Logging.h"
+#include "mozilla/ResultExtensions.h"
#include "nsIInterfaceRequestor.h"
#include "mozilla/LoadContext.h"
#include "mozilla/Telemetry.h"
#include "nsContentUtils.h"
#include "nsIURLFormatter.h"
#include "Classifier.h"
using namespace mozilla::safebrowsing;
@@ -214,33 +215,27 @@ nsUrlClassifierStreamUpdater::FetchUpdat
preferencesInitialized = true;
}
if (sResponseTimeoutMs > sTimeoutMs) {
NS_WARNING("Safe Browsing response timeout is greater than the general "
"timeout. Disabling these update timeouts.");
return NS_OK;
}
- mResponseTimeoutTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- rv = mResponseTimeoutTimer->InitWithCallback(this,
- sResponseTimeoutMs,
- nsITimer::TYPE_ONE_SHOT);
- }
-
- mTimeoutTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
+ MOZ_TRY_VAR(mResponseTimeoutTimer,
+ NS_NewTimerWithCallback(this, sResponseTimeoutMs,
+ nsITimer::TYPE_ONE_SHOT));
- if (NS_SUCCEEDED(rv)) {
- if (sTimeoutMs < DEFAULT_TIMEOUT_MS) {
- LOG(("Download update timeout %d ms (< %d ms) would be too small",
- sTimeoutMs, DEFAULT_TIMEOUT_MS));
- }
- rv = mTimeoutTimer->InitWithCallback(this,
- sTimeoutMs,
- nsITimer::TYPE_ONE_SHOT);
+ MOZ_TRY_VAR(mTimeoutTimer,
+ NS_NewTimerWithCallback(this, sTimeoutMs,
+ nsITimer::TYPE_ONE_SHOT));
+
+ if (sTimeoutMs < DEFAULT_TIMEOUT_MS) {
+ LOG(("Download update timeout %d ms (< %d ms) would be too small",
+ sTimeoutMs, DEFAULT_TIMEOUT_MS));
}
return NS_OK;
}
nsresult
nsUrlClassifierStreamUpdater::FetchUpdate(const nsACString & aUpdateUrl,
const nsACString & aRequestPayload,
@@ -337,23 +332,19 @@ nsUrlClassifierStreamUpdater::DownloadUp
request->mIsPostRequest = aIsPostRequest;
request->mUrl = aUpdateUrl;
request->mSuccessCallback = aSuccessCallback;
request->mUpdateErrorCallback = aUpdateErrorCallback;
request->mDownloadErrorCallback = aDownloadErrorCallback;
// We cannot guarantee that we will be notified when DBService is done
// processing the current update, so we fire a retry timer on our own.
- nsresult rv;
- mFetchNextRequestTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- rv = mFetchNextRequestTimer->InitWithCallback(this,
- FETCH_NEXT_REQUEST_RETRY_DELAY_MS,
- nsITimer::TYPE_ONE_SHOT);
- }
+ MOZ_TRY_VAR(mFetchNextRequestTimer,
+ NS_NewTimerWithCallback(this, FETCH_NEXT_REQUEST_RETRY_DELAY_MS,
+ nsITimer::TYPE_ONE_SHOT));
return NS_OK;
}
if (NS_FAILED(rv)) {
return rv;
}
@@ -478,21 +469,18 @@ nsUrlClassifierStreamUpdater::StreamFini
return NS_OK;
}
// This timer is for fetching indirect updates ("forwards") from any "u:" lines
// that we encountered while processing the server response. It is NOT for
// scheduling the next time we pull the list from the server. That's a different
// timer in listmanager.js (see bug 1110891).
nsresult rv;
- mFetchIndirectUpdatesTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- if (NS_SUCCEEDED(rv)) {
- rv = mFetchIndirectUpdatesTimer->InitWithCallback(this, requestedDelay,
- nsITimer::TYPE_ONE_SHOT);
- }
+ rv = NS_NewTimerWithCallback(getter_AddRefs(mFetchIndirectUpdatesTimer),
+ this, requestedDelay, nsITimer::TYPE_ONE_SHOT);
if (NS_FAILED(rv)) {
NS_WARNING("Unable to initialize timer, fetching next safebrowsing item immediately");
return FetchNext();
}
return NS_OK;
}
--- a/tools/profiler/gecko/ThreadResponsiveness.cpp
+++ b/tools/profiler/gecko/ThreadResponsiveness.cpp
@@ -57,18 +57,18 @@ public:
// Can only run on the main thread.
NS_IMETHOD Run() override
{
mStartToPrevTracer_us = uint64_t(profiler_time() * 1000.0);
if (!mStop) {
if (!mTimer) {
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- mTimer->SetTarget(SystemGroup::EventTargetFor(TaskCategory::Other));
+ mTimer = NS_NewTimer(
+ SystemGroup::EventTargetFor(TaskCategory::Other));
}
mTimer->InitWithCallback(this, 16, nsITimer::TYPE_ONE_SHOT);
}
return NS_OK;
}
// Main thread only
--- a/uriloader/exthandler/nsExternalHelperAppService.cpp
+++ b/uriloader/exthandler/nsExternalHelperAppService.cpp
@@ -2526,22 +2526,18 @@ nsresult nsExternalAppHandler::MaybeClos
nsCOMPtr<nsPIDOMWindowOuter> opener = window->GetOpener();
if (opener && !opener->Closed()) {
mContentContext = do_GetInterface(opener);
// Now close the old window. Do it on a timer so that we don't run
// into issues trying to close the window before it has fully opened.
NS_ASSERTION(!mTimer, "mTimer was already initialized once!");
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (!mTimer) {
- return NS_ERROR_FAILURE;
- }
-
- mTimer->InitWithCallback(this, 0, nsITimer::TYPE_ONE_SHOT);
+ NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, 0, nsITimer::TYPE_ONE_SHOT);
mWindowToClose = window;
}
}
return NS_OK;
}
NS_IMETHODIMP
--- a/widget/cocoa/TextInputHandler.mm
+++ b/widget/cocoa/TextInputHandler.mm
@@ -2911,17 +2911,17 @@ IMEInputHandler::SyncASCIICapableOnly()
void
IMEInputHandler::ResetTimer()
{
NS_ASSERTION(mPendingMethods != 0,
"There are not pending methods, why this is called?");
if (mTimer) {
mTimer->Cancel();
} else {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
NS_ENSURE_TRUE(mTimer, );
}
mTimer->InitWithNamedFuncCallback(FlushPendingMethods, this, 0,
nsITimer::TYPE_ONE_SHOT,
"IMEInputHandler::FlushPendingMethods");
}
void
--- a/widget/cocoa/nsMacDockSupport.mm
+++ b/widget/cocoa/nsMacDockSupport.mm
@@ -12,17 +12,17 @@
NS_IMPL_ISUPPORTS(nsMacDockSupport, nsIMacDockSupport, nsITaskbarProgress)
nsMacDockSupport::nsMacDockSupport()
: mAppIcon(nil)
, mProgressBackground(nil)
, mProgressState(STATE_NO_PROGRESS)
, mProgressFraction(0.0)
{
- mProgressTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mProgressTimer = NS_NewTimer();
}
nsMacDockSupport::~nsMacDockSupport()
{
if (mAppIcon) {
[mAppIcon release];
mAppIcon = nil;
}
@@ -128,17 +128,17 @@ void nsMacDockSupport::RedrawIconCallbac
// Return whether to draw progress
bool nsMacDockSupport::InitProgress()
{
if (mProgressState != STATE_NORMAL && mProgressState != STATE_INDETERMINATE) {
return false;
}
if (!mAppIcon) {
- mProgressTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mProgressTimer = NS_NewTimer();
mAppIcon = [[NSImage imageNamed:@"NSApplicationIcon"] retain];
mProgressBackground = [mAppIcon copyWithZone:nil];
mTheme = new nsNativeThemeCocoa();
NSSize sz = [mProgressBackground size];
mProgressBounds = CGRectMake(sz.width * 1/32, sz.height * 3/32,
sz.width * 30/32, sz.height * 4/32);
[mProgressBackground lockFocus];
--- a/widget/nsBaseWidget.cpp
+++ b/widget/nsBaseWidget.cpp
@@ -1991,18 +1991,18 @@ nsIWidget::SynthesizeNativeTouchTap(Layo
return SynthesizeNativeTouchPoint(pointerId, TOUCH_REMOVE,
aPoint, 0, 0, nullptr);
}
// initiate a long tap
int elapse = Preferences::GetInt("ui.click_hold_context_menus.delay",
TOUCH_INJECT_LONG_TAP_DEFAULT_MSEC);
if (!mLongTapTimer) {
- mLongTapTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- if (NS_FAILED(rv)) {
+ mLongTapTimer = NS_NewTimer();
+ if (!mLongTapTimer) {
SynthesizeNativeTouchPoint(pointerId, TOUCH_CANCEL,
aPoint, 0, 0, nullptr);
return NS_ERROR_UNEXPECTED;
}
// Windows requires recuring events, so we set this to a smaller window
// than the pref value.
int timeout = elapse;
if (timeout > TOUCH_INJECT_PUMP_TIMER_MSEC) {
--- a/widget/nsIdleService.cpp
+++ b/widget/nsIdleService.cpp
@@ -149,17 +149,17 @@ nsIdleServiceDaily::Observe(nsISupports
nsITimer::TYPE_ONE_SHOT,
"nsIdleServiceDaily::Observe");
return NS_OK;
}
nsIdleServiceDaily::nsIdleServiceDaily(nsIIdleService* aIdleService)
: mIdleService(aIdleService)
- , mTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
+ , mTimer(NS_NewTimer())
, mCategoryObservers(OBSERVER_TOPIC_IDLE_DAILY)
, mShutdownInProgress(false)
, mExpectedTriggerTime(0)
, mIdleDailyTriggerWait(DAILY_SIGNIFICANT_IDLE_SERVICE_SEC)
{
}
void
@@ -446,19 +446,18 @@ nsIdleService::AddIdleObserver(nsIObserv
IdleListener listener(aObserver, aIdleTimeInS);
if (!mArrayListeners.AppendElement(listener)) {
return NS_ERROR_OUT_OF_MEMORY;
}
// Create our timer callback if it's not there already.
if (!mTimer) {
- nsresult rv;
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
+ mTimer = NS_NewTimer();
+ NS_ENSURE_TRUE(mTimer, NS_ERROR_OUT_OF_MEMORY);
}
// Check if the newly added observer has a smaller wait time than what we
// are waiting for now.
if (mDeltaToNextIdleSwitchInS > aIdleTimeInS) {
// If it is, then this is the next to move to idle (at this point we
// don't care if it should have switched already).
MOZ_LOG(sLog, LogLevel::Debug,
--- a/widget/nsNativeTheme.cpp
+++ b/widget/nsNativeTheme.cpp
@@ -631,17 +631,17 @@ nsNativeTheme::QueueAnimatedContentForRe
NS_ASSERTION(aMinimumFrameRate, "aMinimumFrameRate must be non-zero!");
NS_ASSERTION(aMinimumFrameRate <= 1000,
"aMinimumFrameRate must be less than 1000!");
uint32_t timeout = 1000 / aMinimumFrameRate;
timeout = std::min(mAnimatedContentTimeout, timeout);
if (!mAnimatedContentTimer) {
- mAnimatedContentTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mAnimatedContentTimer = NS_NewTimer();
NS_ENSURE_TRUE(mAnimatedContentTimer, false);
}
if (mAnimatedContentList.IsEmpty() || timeout != mAnimatedContentTimeout) {
nsresult rv;
if (!mAnimatedContentList.IsEmpty()) {
rv = mAnimatedContentTimer->Cancel();
NS_ENSURE_SUCCESS(rv, false);
--- a/widget/windows/nsDataObj.cpp
+++ b/widget/windows/nsDataObj.cpp
@@ -450,21 +450,21 @@ public:
// The attach method is seperate from the constructor as we may be addref-ing
// ourself, and we want to be sure someone has a strong reference to us.
void Attach()
{
// We need to listen to both the xpcom shutdown message and our timer, and
// fire when the first of either of these two messages is received.
nsresult rv;
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
+ rv = NS_NewTimerWithObserver(getter_AddRefs(mTimer),
+ this, 500, nsITimer::TYPE_ONE_SHOT);
if (NS_WARN_IF(NS_FAILED(rv))) {
return;
}
- mTimer->Init(this, 500, nsITimer::TYPE_ONE_SHOT);
nsCOMPtr<nsIObserverService> observerService =
do_GetService("@mozilla.org/observer-service;1");
if (NS_WARN_IF(!observerService)) {
mTimer->Cancel();
mTimer = nullptr;
return;
}
--- a/widget/windows/nsFilePicker.cpp
+++ b/widget/windows/nsFilePicker.cpp
@@ -154,26 +154,25 @@ public:
}
}
private:
void Init(nsFilePicker* aTarget,
nsTimerCallbackFunc aCallbackFunc,
const char* aName)
{
- mPickerCallbackTimer = do_CreateInstance("@mozilla.org/timer;1");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mPickerCallbackTimer),
+ aCallbackFunc,
+ aTarget,
+ kDialogTimerTimeout,
+ nsITimer::TYPE_REPEATING_SLACK,
+ aName);
if (!mPickerCallbackTimer) {
NS_WARNING("do_CreateInstance for timer failed??");
- return;
}
- mPickerCallbackTimer->InitWithNamedFuncCallback(aCallbackFunc,
- aTarget,
- kDialogTimerTimeout,
- nsITimer::TYPE_REPEATING_SLACK,
- aName);
}
nsCOMPtr<nsITimer> mPickerCallbackTimer;
};
///////////////////////////////////////////////////////////////////////////////
// nsIFilePicker
nsFilePicker::nsFilePicker() :
--- a/xpcom/base/nsMemoryReporterManager.cpp
+++ b/xpcom/base/nsMemoryReporterManager.cpp
@@ -1729,23 +1729,19 @@ nsMemoryReporterManager::StartGettingRep
if (gfx::GPUProcessManager* gpu = gfx::GPUProcessManager::Get()) {
if (RefPtr<MemoryReportingProcess> proc = gpu->GetProcessMemoryReporter()) {
s->mChildrenPending.AppendElement(proc.forget());
}
}
if (!s->mChildrenPending.IsEmpty()) {
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- // Don't use NS_ENSURE_* here; can't return until the report is finished.
- if (NS_WARN_IF(!timer)) {
- FinishReporting();
- return NS_ERROR_FAILURE;
- }
- rv = timer->InitWithNamedFuncCallback(
+ nsCOMPtr<nsITimer> timer;
+ rv = NS_NewTimerWithFuncCallback(
+ getter_AddRefs(timer),
TimeoutCallback,
this,
kTimeoutLengthMS,
nsITimer::TYPE_ONE_SHOT,
"nsMemoryReporterManager::StartGettingReports");
if (NS_WARN_IF(NS_FAILED(rv))) {
FinishReporting();
return rv;
--- a/xpcom/base/nsMessageLoop.cpp
+++ b/xpcom/base/nsMessageLoop.cpp
@@ -93,26 +93,21 @@ MessageLoopIdleTask::MessageLoopIdleTask
mTask = nullptr;
mTimer = nullptr;
}
}
nsresult
MessageLoopIdleTask::Init(uint32_t aEnsureRunsAfterMS)
{
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (NS_WARN_IF(!mTimer)) {
- return NS_ERROR_UNEXPECTED;
- }
-
RefPtr<MessageLoopTimerCallback> callback =
new MessageLoopTimerCallback(this);
-
- return mTimer->InitWithCallback(callback, aEnsureRunsAfterMS,
- nsITimer::TYPE_ONE_SHOT);
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ callback, aEnsureRunsAfterMS,
+ nsITimer::TYPE_ONE_SHOT);
}
NS_IMETHODIMP
MessageLoopIdleTask::Run()
{
// Null out our pointers because if Run() was called by the timer, this
// object will be kept alive by the MessageLoop until the MessageLoop calls
// Run().
--- a/xpcom/ds/nsExpirationTracker.h
+++ b/xpcom/ds/nsExpirationTracker.h
@@ -440,35 +440,32 @@ private:
tracker->HandleTimeout();
}
nsresult CheckStartTimerLocked(const AutoLock& aAutoLock)
{
if (mTimer || !mTimerPeriod) {
return NS_OK;
}
- mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (!mTimer) {
- return NS_ERROR_OUT_OF_MEMORY;
- }
- if (mEventTarget) {
- mTimer->SetTarget(mEventTarget);
- } else if (!NS_IsMainThread()) {
+ nsCOMPtr<nsIEventTarget> target = mEventTarget;
+ if (!target && !NS_IsMainThread()) {
// TimerCallback should always be run on the main thread to prevent races
// to the destruction of the tracker.
- nsCOMPtr<nsIEventTarget> target = do_GetMainThread();
+ target = do_GetMainThread();
NS_ENSURE_STATE(target);
- mTimer->SetTarget(target);
}
- mTimer->InitWithNamedFuncCallback(
+
+ return NS_NewTimerWithFuncCallback(
+ getter_AddRefs(mTimer),
TimerCallback,
this,
mTimerPeriod,
nsITimer::TYPE_REPEATING_SLACK_LOW_PRIORITY,
- mName);
+ mName,
+ target);
return NS_OK;
}
};
namespace detail {
class PlaceholderLock {
public:
--- a/xpcom/io/nsAnonymousTemporaryFile.cpp
+++ b/xpcom/io/nsAnonymousTemporaryFile.cpp
@@ -156,23 +156,20 @@ public:
nsresult Init()
{
// We add the idle observer in a timer, so that the app has enough
// time to start up before we add the idle observer. If we register the
// idle observer too early, it will be registered before the fake idle
// service is installed when running in xpcshell, and this interferes with
// the fake idle service, causing xpcshell-test failures.
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (NS_WARN_IF(!mTimer)) {
- return NS_ERROR_FAILURE;
- }
- nsresult rv = mTimer->Init(this,
- SCHEDULE_TIMEOUT_MS,
- nsITimer::TYPE_ONE_SHOT);
+ nsresult rv = NS_NewTimerWithObserver(getter_AddRefs(mTimer),
+ this,
+ SCHEDULE_TIMEOUT_MS,
+ nsITimer::TYPE_ONE_SHOT);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
// Register shutdown observer so we can cancel the timer if we shutdown before
// the timer runs.
nsCOMPtr<nsIObserverService> obsSrv = services::GetObserverService();
if (NS_WARN_IF(!obsSrv)) {
--- a/xpcom/tests/gtest/TestThreadUtils.cpp
+++ b/xpcom/tests/gtest/TestThreadUtils.cpp
@@ -586,19 +586,19 @@ public:
mSetIdleDeadlineCalled = false;
NS_DispatchToCurrentThread(NewRunnableMethod("IdleObject::Method3", this, &IdleObject::Method3));
}
void Method3()
{
CheckExecutedMethods("Method3", 3);
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- mTimer->InitWithNamedFuncCallback(
- Method4, this, 10, nsITimer::TYPE_ONE_SHOT, "IdleObject::Method3");
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ Method4, this, 10, nsITimer::TYPE_ONE_SHOT,
+ "IdleObject::Method3");
NS_IdleDispatchToCurrentThread(
NewIdleRunnableMethodWithTimer("IdleObject::Method5", this, &IdleObject::Method5), 50);
NS_IdleDispatchToCurrentThread(
NewRunnableMethod("IdleObject::Method6", this, &IdleObject::Method6),
100);
PR_Sleep(PR_MillisecondsToInterval(200));
mRunnableExecuted[3] = true;
--- a/xpcom/tests/gtest/TestTimers.cpp
+++ b/xpcom/tests/gtest/TestTimers.cpp
@@ -107,61 +107,53 @@ NS_IMPL_ISUPPORTS(TimerCallback, nsITime
TEST(Timers, TargetedTimers)
{
AutoCreateAndDestroyReentrantMonitor newMon;
ASSERT_TRUE(newMon);
AutoTestThread testThread;
ASSERT_TRUE(testThread);
- nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
- nsIEventTarget* target = static_cast<nsIEventTarget*>(testThread);
-
- rv = timer->SetTarget(target);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
nsIThread* notifiedThread = nullptr;
nsCOMPtr<nsITimerCallback> callback =
new TimerCallback(¬ifiedThread, newMon);
ASSERT_TRUE(callback);
- rv = timer->InitWithCallback(callback, 2000, nsITimer::TYPE_ONE_SHOT);
+ nsIEventTarget* target = static_cast<nsIEventTarget*>(testThread);
+
+ nsCOMPtr<nsITimer> timer;
+ nsresult rv = NS_NewTimerWithCallback(getter_AddRefs(timer),
+ callback, 2000, nsITimer::TYPE_ONE_SHOT,
+ target);
ASSERT_TRUE(NS_SUCCEEDED(rv));
ReentrantMonitorAutoEnter mon(*newMon);
while (!notifiedThread) {
mon.Wait();
}
ASSERT_EQ(notifiedThread, testThread);
}
TEST(Timers, TimerWithStoppedTarget)
{
AutoTestThread testThread;
ASSERT_TRUE(testThread);
- nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
nsIEventTarget* target = static_cast<nsIEventTarget*>(testThread);
- rv = timer->SetTarget(target);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
-
// If this is called, we'll assert
nsCOMPtr<nsITimerCallback> callback =
new TimerCallback(nullptr, nullptr);
ASSERT_TRUE(callback);
- rv = timer->InitWithCallback(callback, 100, nsITimer::TYPE_ONE_SHOT);
+ nsCOMPtr<nsITimer> timer;
+ nsresult rv = NS_NewTimerWithCallback(getter_AddRefs(timer),
+ callback, 100, nsITimer::TYPE_ONE_SHOT,
+ target);
ASSERT_TRUE(NS_SUCCEEDED(rv));
testThread->Shutdown();
PR_Sleep(400);
}
// gtest on 32bit Win7 debug build is unstable and somehow this test
@@ -224,23 +216,22 @@ public:
// Clear whatever random timers there might be pending.
uint32_t waitTime = 10;
if (t > TimeStamp::Now()) {
waitTime = uint32_t((t - TimeStamp::Now()).ToMilliseconds());
}
PR_Sleep(PR_MillisecondsToInterval(waitTime));
} while(true);
- nsresult rv;
mBefore = TimeStamp::Now();
mMiddle = mBefore + TimeDuration::FromMilliseconds(
kTimerOffset + kTimerInterval * kNumTimers / 2);
for (uint32_t i = 0; i < kNumTimers; ++i) {
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- ASSERT_TRUE(NS_SUCCEEDED(rv));
+ nsCOMPtr<nsITimer> timer = NS_NewTimer();
+ ASSERT_TRUE(timer);
if (i < aNumDifferingTimers) {
if (aTarget) {
timer->SetTarget(aTarget);
}
timer->InitWithNamedFuncCallback(&UnusedCallbackFunc,
nullptr,
@@ -559,22 +550,18 @@ class FuzzTestThreadState final : public
// Reschedule some timers without a Cancel first.
for (size_t i = 0; i < kNumRescheduled; ++i) {
InitRandomTimer(RemoveRandomTimer().get());
}
}
void CreateRandomTimer()
{
- nsresult rv;
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv), "Failed to create timer.");
-
- rv = timer->SetTarget(static_cast<nsIEventTarget*>(mThread.get()));
- MOZ_RELEASE_ASSERT(NS_SUCCEEDED(rv), "Failed to set target.");
+ nsCOMPtr<nsITimer> timer = NS_NewTimer(static_cast<nsIEventTarget*>(mThread.get()));
+ MOZ_RELEASE_ASSERT(timer, "Failed to create timer.");
InitRandomTimer(timer.get());
}
nsCOMPtr<nsITimer> CancelRandomTimer()
{
nsCOMPtr<nsITimer> timer(RemoveRandomTimer());
timer->Cancel();
--- a/xpcom/threads/IdleTaskRunner.cpp
+++ b/xpcom/threads/IdleTaskRunner.cpp
@@ -140,17 +140,17 @@ IdleTaskRunner::Schedule(bool aAllowIdle
} else {
// RefreshDriver doesn't seem to be running.
if (aAllowIdleDispatch) {
nsCOMPtr<nsIRunnable> runnable = this;
SetTimerInternal(mDelay);
NS_IdleDispatchToCurrentThread(runnable.forget());
} else {
if (!mScheduleTimer) {
- mScheduleTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mScheduleTimer = NS_NewTimer();
if (!mScheduleTimer) {
return;
}
} else {
mScheduleTimer->Cancel();
}
if (TaskCategory::Count != mTaskCategory) {
mScheduleTimer->SetTarget(SystemGroup::EventTargetFor(mTaskCategory));
@@ -185,17 +185,17 @@ IdleTaskRunner::CancelTimer()
void
IdleTaskRunner::SetTimerInternal(uint32_t aDelay)
{
if (mTimerActive) {
return;
}
if (!mTimer) {
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
+ mTimer = NS_NewTimer();
} else {
mTimer->Cancel();
}
if (mTimer) {
if (TaskCategory::Count != mTaskCategory) {
mTimer->SetTarget(SystemGroup::EventTargetFor(mTaskCategory));
}
--- a/xpcom/threads/LazyIdleThread.cpp
+++ b/xpcom/threads/LazyIdleThread.cpp
@@ -148,17 +148,17 @@ LazyIdleThread::EnsureThread()
}
rv = obs->AddObserver(this, "xpcom-shutdown-threads", false);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
}
- mIdleTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
+ mIdleTimer = NS_NewTimer();
if (NS_WARN_IF(!mIdleTimer)) {
return NS_ERROR_UNEXPECTED;
}
nsCOMPtr<nsIRunnable> runnable = NewRunnableMethod(
"LazyIdleThread::InitThread", this, &LazyIdleThread::InitThread);
if (NS_WARN_IF(!runnable)) {
return NS_ERROR_UNEXPECTED;
--- a/xpcom/threads/ThreadEventTarget.cpp
+++ b/xpcom/threads/ThreadEventTarget.cpp
@@ -37,25 +37,19 @@ public:
, mDelayedFrom(TimeStamp::NowLoRes())
, mDelay(aDelay)
{ }
NS_DECL_ISUPPORTS_INHERITED
nsresult Init()
{
- nsresult rv;
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
- NS_ENSURE_SUCCESS(rv, rv);
-
- MOZ_ASSERT(mTimer);
- rv = mTimer->SetTarget(mTarget);
-
- NS_ENSURE_SUCCESS(rv, rv);
- return mTimer->InitWithCallback(this, mDelay, nsITimer::TYPE_ONE_SHOT);
+ return NS_NewTimerWithCallback(getter_AddRefs(mTimer),
+ this, mDelay, nsITimer::TYPE_ONE_SHOT,
+ mTarget);
}
nsresult DoRun()
{
nsCOMPtr<nsIRunnable> r = mWrappedRunnable.forget();
return r->Run();
}
--- a/xpcom/threads/nsITimer.idl
+++ b/xpcom/threads/nsITimer.idl
@@ -257,11 +257,85 @@ interface nsITimer : nsISupports
[noscript] readonly attribute unsigned long allowedEarlyFiringMicroseconds;
%{C++
virtual size_t SizeOfIncludingThis(mozilla::MallocSizeOf aMallocSizeOf) const = 0;
%}
};
%{C++
+#include "nsCOMPtr.h"
+
+already_AddRefed<nsITimer> NS_NewTimer();
+
+already_AddRefed<nsITimer> NS_NewTimer(nsIEventTarget* aTarget);
+
+nsresult
+NS_NewTimerWithObserver(nsITimer** aTimer,
+ nsIObserver* aObserver,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithObserver(nsIObserver* aObserver,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+
+nsresult
+NS_NewTimerWithCallback(nsITimer** aTimer,
+ nsITimerCallback* aCallback,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithCallback(nsITimerCallback* aCallback,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+
+nsresult
+NS_NewTimerWithCallback(nsITimer** aTimer,
+ nsITimerCallback* aCallback,
+ const mozilla::TimeDuration& aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithCallback(nsITimerCallback* aCallback,
+ const mozilla::TimeDuration& aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget = nullptr);
+
+nsresult
+NS_NewTimerWithFuncCallback(nsITimer** aTimer,
+ nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ const char* aNameString,
+ nsIEventTarget* aTarget = nullptr);
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithFuncCallback(nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ const char* aNameString,
+ nsIEventTarget* aTarget = nullptr);
+
+nsresult
+NS_NewTimerWithFuncCallback(nsITimer** aTimer,
+ nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsTimerNameCallbackFunc aNameCallback,
+ nsIEventTarget* aTarget = nullptr);
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithFuncCallback(nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsTimerNameCallbackFunc aNameCallback,
+ nsIEventTarget* aTarget = nullptr);
+
#define NS_TIMER_CONTRACTID "@mozilla.org/timer;1"
#define NS_TIMER_CALLBACK_TOPIC "timer-callback"
%}
--- a/xpcom/threads/nsThreadUtils.cpp
+++ b/xpcom/threads/nsThreadUtils.cpp
@@ -73,26 +73,16 @@ CancelableRunnable::Cancel()
{
// Do nothing
return NS_OK;
}
NS_IMPL_ISUPPORTS_INHERITED(IdleRunnable, CancelableRunnable,
nsIIdleRunnable)
-namespace mozilla {
-namespace detail {
-already_AddRefed<nsITimer> CreateTimer()
-{
- nsCOMPtr<nsITimer> timer = do_CreateInstance(NS_TIMER_CONTRACTID);
- return timer.forget();
-}
-} // namespace detail
-} // namespace mozilla
-
NS_IMPL_ISUPPORTS_INHERITED(PrioritizableRunnable, Runnable,
nsIRunnablePriority)
PrioritizableRunnable::PrioritizableRunnable(already_AddRefed<nsIRunnable>&& aRunnable,
uint32_t aPriority)
// Real runnable name is managed by overridding the GetName function.
: Runnable("PrioritizableRunnable")
, mRunnable(Move(aRunnable))
@@ -352,25 +342,23 @@ public:
static_cast<IdleRunnableWrapper*>(aClosure);
runnable->Run();
}
void SetTimer(uint32_t aDelay, nsIEventTarget* aTarget) override
{
MOZ_ASSERT(aTarget);
MOZ_ASSERT(!mTimer);
- mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
- if (mTimer) {
- mTimer->SetTarget(aTarget);
- mTimer->InitWithNamedFuncCallback(TimedOut,
- this,
- aDelay,
- nsITimer::TYPE_ONE_SHOT,
- "IdleRunnableWrapper::SetTimer");
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ TimedOut,
+ this,
+ aDelay,
+ nsITimer::TYPE_ONE_SHOT,
+ "IdleRunnableWrapper::SetTimer",
+ aTarget);
}
NS_IMETHOD GetName(nsACString& aName) override
{
aName.AssignLiteral("IdleRunnableWrapper");
if (nsCOMPtr<nsINamed> named = do_QueryInterface(mRunnable)) {
nsAutoCString name;
named->GetName(name);
--- a/xpcom/threads/nsThreadUtils.h
+++ b/xpcom/threads/nsThreadUtils.h
@@ -633,18 +633,16 @@ NS_NewRunnableFunction(const char* aName
return do_AddRef(
new mozilla::detail::RunnableFunctionImpl<Function>(
aName, mozilla::Forward<Function>(aFunction)));
}
namespace mozilla {
namespace detail {
-already_AddRefed<nsITimer> CreateTimer();
-
template <RunnableKind Kind>
class TimerBehaviour
{
public:
nsITimer* GetTimer() { return nullptr; }
void CancelTimer() {}
protected:
@@ -653,17 +651,17 @@ protected:
template <>
class TimerBehaviour<IdleWithTimer>
{
public:
nsITimer* GetTimer()
{
if (!mTimer) {
- mTimer = CreateTimer();
+ mTimer = NS_NewTimer();
}
return mTimer;
}
void CancelTimer()
{
if (mTimer) {
--- a/xpcom/threads/nsTimerImpl.cpp
+++ b/xpcom/threads/nsTimerImpl.cpp
@@ -11,32 +11,34 @@
#include "nsThreadUtils.h"
#include "pratom.h"
#include "GeckoProfiler.h"
#include "mozilla/Atomics.h"
#include "mozilla/IntegerPrintfMacros.h"
#include "mozilla/Logging.h"
#include "mozilla/Move.h"
#include "mozilla/Mutex.h"
+#include "mozilla/ResultExtensions.h"
#ifdef MOZ_TASK_TRACER
#include "GeckoTaskTracerImpl.h"
using namespace mozilla::tasktracer;
#endif
#ifdef XP_WIN
#include <process.h>
#ifndef getpid
#define getpid _getpid
#endif
#else
#include <unistd.h>
#endif
using mozilla::Atomic;
using mozilla::LogLevel;
+using mozilla::MakeRefPtr;
using mozilla::Move;
using mozilla::MutexAutoLock;
using mozilla::TimeDuration;
using mozilla::TimeStamp;
static TimerThread* gThread = nullptr;
// This module prints info about the precision of timers.
@@ -51,16 +53,203 @@ GetTimerLog()
TimeStamp
NS_GetTimerDeadlineHintOnCurrentThread(TimeStamp aDefault, uint32_t aSearchBound)
{
return gThread
? gThread->FindNextFireTimeForCurrentThread(aDefault, aSearchBound)
: TimeStamp();
}
+already_AddRefed<nsITimer>
+NS_NewTimer()
+{
+ return do_AddRef(new nsTimer());
+}
+
+already_AddRefed<nsITimer>
+NS_NewTimer(nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget && MOZ_LIKELY(timer)) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+ return timer.forget();
+}
+
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithObserver(nsIObserver* aObserver,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY(NS_NewTimerWithObserver(getter_AddRefs(timer),
+ aObserver,
+ aDelay,
+ aType,
+ aTarget));
+ return Move(timer);
+}
+nsresult
+NS_NewTimerWithObserver(nsITimer** aTimer,
+ nsIObserver* aObserver,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+
+ MOZ_TRY(timer->Init(aObserver, aDelay, aType));
+ timer.forget(aTimer);
+ return NS_OK;
+}
+
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithCallback(nsITimerCallback* aCallback,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY(NS_NewTimerWithCallback(getter_AddRefs(timer),
+ aCallback,
+ aDelay,
+ aType,
+ aTarget));
+ return Move(timer);
+}
+nsresult
+NS_NewTimerWithCallback(nsITimer** aTimer,
+ nsITimerCallback* aCallback,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+
+ MOZ_TRY(timer->InitWithCallback(aCallback, aDelay, aType));
+ timer.forget(aTimer);
+ return NS_OK;
+}
+
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithCallback(nsITimerCallback* aCallback,
+ const TimeDuration& aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY(NS_NewTimerWithCallback(getter_AddRefs(timer),
+ aCallback,
+ aDelay,
+ aType,
+ aTarget));
+ return Move(timer);
+}
+nsresult
+NS_NewTimerWithCallback(nsITimer** aTimer,
+ nsITimerCallback* aCallback,
+ const TimeDuration& aDelay,
+ uint32_t aType,
+ nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+
+ MOZ_TRY(timer->InitHighResolutionWithCallback(aCallback, aDelay, aType));
+ timer.forget(aTimer);
+ return NS_OK;
+}
+
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithFuncCallback(nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ const char* aNameString,
+ nsIEventTarget* aTarget)
+{
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY(NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ aCallback,
+ aClosure,
+ aDelay,
+ aType,
+ aNameString,
+ aTarget));
+ return Move(timer);
+}
+nsresult
+NS_NewTimerWithFuncCallback(nsITimer** aTimer,
+ nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ const char* aNameString,
+ nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+
+ MOZ_TRY(timer->InitWithNamedFuncCallback(aCallback, aClosure,
+ aDelay, aType,
+ aNameString));
+ timer.forget(aTimer);
+ return NS_OK;
+}
+
+mozilla::Result<nsCOMPtr<nsITimer>, nsresult>
+NS_NewTimerWithFuncCallback(nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsTimerNameCallbackFunc aNameCallback,
+ nsIEventTarget* aTarget)
+{
+ nsCOMPtr<nsITimer> timer;
+ MOZ_TRY(NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
+ aCallback,
+ aClosure,
+ aDelay,
+ aType,
+ aNameCallback,
+ aTarget));
+ return Move(timer);
+}
+nsresult
+NS_NewTimerWithFuncCallback(nsITimer** aTimer,
+ nsTimerCallbackFunc aCallback,
+ void* aClosure,
+ uint32_t aDelay,
+ uint32_t aType,
+ nsTimerNameCallbackFunc aNameCallback,
+ nsIEventTarget* aTarget)
+{
+ auto timer = MakeRefPtr<nsTimer>();
+ if (aTarget) {
+ MOZ_ALWAYS_SUCCEEDS(timer->SetTarget(aTarget));
+ }
+
+ MOZ_TRY(timer->InitWithNameableFuncCallback(aCallback, aClosure,
+ aDelay, aType,
+ aNameCallback));
+ timer.forget(aTimer);
+ return NS_OK;
+}
+
// This module prints info about which timers are firing, which is useful for
// wakeups for the purposes of power profiling. Set the following environment
// variable before starting the browser.
//
// MOZ_LOG=TimerFirings:4
//
// Then a line will be printed for every timer that fires. The name used for a
// |Callback::Type::Function| timer depends on the circumstances.
--- a/xpfe/appshell/nsWebShellWindow.cpp
+++ b/xpfe/appshell/nsWebShellWindow.cpp
@@ -569,17 +569,17 @@ NS_IMPL_ISUPPORTS(WebShellWindowTimerCal
} // namespace mozilla
void
nsWebShellWindow::SetPersistenceTimer(uint32_t aDirtyFlags)
{
MutexAutoLock lock(mSPTimerLock);
if (!mSPTimer) {
- mSPTimer = do_CreateInstance("@mozilla.org/timer;1");
+ mSPTimer = NS_NewTimer();
if (!mSPTimer) {
NS_WARNING("Couldn't create @mozilla.org/timer;1 instance?");
return;
}
}
RefPtr<WebShellWindowTimerCallback> callback =
new WebShellWindowTimerCallback(this);
--- a/xpfe/components/directory/nsDirectoryViewer.cpp
+++ b/xpfe/components/directory/nsDirectoryViewer.cpp
@@ -853,67 +853,59 @@ nsHTTPIndex::GetTargets(nsIRDFResource *
{
// add aSource into list of connections to make
mConnectionList->AppendElement(aSource, /*weak =*/ false);
// if we don't have a timer about to fire, create one
// which should fire as soon as possible (out-of-band)
if (!mTimer)
{
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
+ rv = NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ nsHTTPIndex::FireTimer,
+ this,
+ 1,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsHTTPIndex::GetTargets");
+ // Note: don't addref "this" as we'll cancel the
+ // timer in the httpIndex destructor
NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create a timer");
- if (NS_SUCCEEDED(rv))
- {
- mTimer->InitWithNamedFuncCallback(
- nsHTTPIndex::FireTimer,
- this,
- 1,
- nsITimer::TYPE_ONE_SHOT,
- "nsHTTPIndex::GetTargets");
- // Note: don't addref "this" as we'll cancel the
- // timer in the httpIndex destructor
- }
}
}
}
}
return(rv);
}
nsresult
nsHTTPIndex::AddElement(nsIRDFResource *parent, nsIRDFResource *prop, nsIRDFNode *child)
{
- nsresult rv;
if (!mNodeList)
{
mNodeList = nsArray::Create();
}
// order required: parent, prop, then child
mNodeList->AppendElement(parent, /*weak =*/ false);
mNodeList->AppendElement(prop, /*weak =*/ false);
mNodeList->AppendElement(child, /*weak = */ false);
if (!mTimer)
{
- mTimer = do_CreateInstance("@mozilla.org/timer;1", &rv);
- NS_ASSERTION(NS_SUCCEEDED(rv), "unable to create a timer");
- if (NS_FAILED(rv)) return(rv);
-
- mTimer->InitWithNamedFuncCallback(nsHTTPIndex::FireTimer,
- this,
- 1,
- nsITimer::TYPE_ONE_SHOT,
- "nsHTTPIndex::AddElement");
- // Note: don't addref "this" as we'll cancel the
- // timer in the httpIndex destructor
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(mTimer),
+ nsHTTPIndex::FireTimer,
+ this,
+ 1,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsHTTPIndex::AddElement");
+ // Note: don't addref "this" as we'll cancel the
+ // timer in the httpIndex destructor
+ }
return(NS_OK);
}
void
nsHTTPIndex::FireTimer(nsITimer* aTimer, void* aClosure)
{
nsHTTPIndex *httpIndex = static_cast<nsHTTPIndex *>(aClosure);
@@ -1029,27 +1021,24 @@ nsHTTPIndex::FireTimer(nsITimer* aTimer,
// weak reference back to nsHTTPIndex
httpIndex->mTimer->Cancel();
httpIndex->mTimer = nullptr;
// after firing off any/all of the connections be sure
// to cancel the timer if we don't need to refire it
if (refireTimer)
{
- httpIndex->mTimer = do_CreateInstance("@mozilla.org/timer;1");
- if (httpIndex->mTimer)
- {
- httpIndex->mTimer->InitWithNamedFuncCallback(nsHTTPIndex::FireTimer,
- aClosure,
- 10,
- nsITimer::TYPE_ONE_SHOT,
- "nsHTTPIndex::FireTimer");
- // Note: don't addref "this" as we'll cancel the
- // timer in the httpIndex destructor
- }
+ NS_NewTimerWithFuncCallback(getter_AddRefs(httpIndex->mTimer),
+ nsHTTPIndex::FireTimer,
+ aClosure,
+ 10,
+ nsITimer::TYPE_ONE_SHOT,
+ "nsHTTPIndex::FireTimer");
+ // Note: don't addref "this" as we'll cancel the
+ // timer in the httpIndex destructor
}
}
NS_IMETHODIMP
nsHTTPIndex::Assert(nsIRDFResource *aSource, nsIRDFResource *aProperty, nsIRDFNode *aTarget,
bool aTruthValue)
{
nsresult rv = NS_ERROR_UNEXPECTED;