merge mozilla-inbound to mozilla-central. r=merge a=merge

MozReview-Commit-ID: 1h3kZyrtqSt
This commit is contained in:
Sebastian Hengst 2017-10-17 11:45:16 +02:00
commit 32f7c8fec3
213 changed files with 2479 additions and 1241 deletions

View File

@ -468,9 +468,10 @@ nsAccessibilityService::CreatePluginAccessible(nsPluginFrame* aFrame,
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);

View File

@ -650,15 +650,14 @@ DocAccessible::ScrollPositionDidChange(nscoord aX, nscoord aY)
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;

View File

@ -77,15 +77,12 @@ xpcAccessibilityService::Release(void)
// 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;

View File

@ -27,7 +27,7 @@ XPCOMUtils.defineLazyServiceGetter(this, "quotaManagerService",
"@mozilla.org/dom/quota-manager-service;1",
"nsIQuotaManagerService");
var {classes: Cc, interfaces: Ci} = Components;
var {classes: Cc, interfaces: Ci, results: Cr} = Components;
/**
* A number of iterations after which to yield time back
@ -308,6 +308,13 @@ Sanitizer.prototype = {
let promises = [];
await new Promise(resolve => {
quotaManagerService.getUsage(request => {
if (request.resultCode != Cr.NS_OK) {
// We are probably shutting down. We don't want to propagate the
// error, rejecting the promise.
resolve();
return;
}
for (let item of request.result) {
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
let uri = principal.URI;

View File

@ -88,6 +88,13 @@ const clearIndexedDB = async function(options) {
await new Promise(resolve => {
quotaManagerService.getUsage(request => {
if (request.resultCode != Components.results.NS_OK) {
// We are probably shutting down. We don't want to propagate the error,
// rejecting the promise.
resolve();
return;
}
for (let item of request.result) {
let principal = Services.scriptSecurityManager.createCodebasePrincipalFromOrigin(item.origin);
let uri = principal.URI;

View File

@ -128,3 +128,36 @@ add_task(async function clickWithPrefSet() {
await SpecialPowers.popPrefEnv();
});
// Open a tab, then quickly open the context menu to ensure that the command
// enabled state of the menuitems is updated properly.
add_task(async function quickContextMenu() {
await SpecialPowers.pushPrefEnv({set: [
[PREF_LOAD_BOOKMARKS_IN_TABS, true]
]});
let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, TEST_PAGES[0]);
EventUtils.synthesizeMouseAtCenter(gBookmarkElements[0], {
button: 0
});
let newTab = await tabPromise;
let placesContext = document.getElementById("placesContext");
let promise = BrowserTestUtils.waitForEvent(placesContext, "popupshown");
EventUtils.synthesizeMouseAtCenter(gBookmarkElements[1], {
button: 2,
type: "contextmenu"
});
await promise;
Assert.ok(!document.getElementById("placesContext_open").disabled,
"Commands in context menu are enabled");
promise = BrowserTestUtils.waitForEvent(placesContext, "popuphidden");
placesContext.hidePopup();
await promise;
await BrowserTestUtils.removeTab(newTab);
await SpecialPowers.popPrefEnv();
});

View File

@ -22,6 +22,7 @@ support-files =
!/devtools/client/framework/test/shared-head.js
[browser_addons_debug_bootstrapped.js]
skip-if = coverage # Bug 1387827
[browser_addons_debug_info.js]
[browser_addons_debug_webextension.js]
tags = webextensions
@ -30,6 +31,7 @@ tags = webextensions
[browser_addons_debug_webextension_nobg.js]
tags = webextensions
[browser_addons_debug_webextension_popup.js]
skip-if = coverage # Bug 1387827
tags = webextensions
[browser_addons_debugging_initial_state.js]
[browser_addons_install.js]

View File

@ -48,6 +48,7 @@ support-files =
!/devtools/client/debugger/new/test/mochitest/head.js
[browser_browser_toolbox.js]
skip-if = coverage # Bug 1387827
[browser_browser_toolbox_debugger.js]
skip-if = debug # Bug 1282269
[browser_devtools_api.js]

View File

@ -26,6 +26,7 @@
#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"
@ -456,23 +457,13 @@ 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
@ -6858,14 +6849,15 @@ nsDocShell::RefreshURI(nsIURI* aURI, int32_t aDelay, bool aRepeat,
} 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;
}
@ -7345,16 +7337,20 @@ nsDocShell::RefreshURIFromQueue()
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);
}
}
}
}

View File

@ -1244,30 +1244,31 @@ ChromeTooltipListener::MouseMove(nsIDOMEvent* aMouseEvent)
}
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;

View File

@ -319,11 +319,9 @@ namespace {
{
MOZ_ASSERT(aTarget);
MOZ_ASSERT(!mTimer);
mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
if (mTimer) {
mTimer->SetTarget(aTarget);
mTimer->InitWithCallback(this, aDelay, nsITimer::TYPE_ONE_SHOT);
}
NS_NewTimerWithCallback(getter_AddRefs(mTimer),
this, aDelay, nsITimer::TYPE_ONE_SHOT,
aTarget);
}
protected:

View File

@ -1202,7 +1202,7 @@ EventSourceImpl::SetReconnectionTimeout()
// 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);
}

View File

@ -177,13 +177,11 @@ public:
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;
}
}

View File

@ -55,8 +55,8 @@ TimeoutExecutor::ScheduleDelayed(const TimeStamp& aDeadline,
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));

View File

@ -1309,19 +1309,12 @@ TimeoutManager::MaybeStartThrottleTimeout()
("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

View File

@ -1402,20 +1402,14 @@ nsContentSink::WillInterruptImpl()
// 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;
}
}
}
}

View File

@ -7098,10 +7098,10 @@ FullscreenTransitionTask::Run()
// 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);
@ -12017,8 +12017,8 @@ nsGlobalWindow::RegisterIdleObserver(nsIIdleObserver* aIdleObserver)
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();
}

View File

@ -2115,25 +2115,19 @@ nsJSContext::PokeGC(JS::gcreason::Reason aReason,
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;
}
@ -2146,18 +2140,12 @@ nsJSContext::PokeShrinkingGC()
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
@ -2335,13 +2323,13 @@ DOMGCSliceCallback(JSContext* aCx, JS::GCProgress aProgress, const JS::GCDescrip
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();

View File

@ -827,13 +827,10 @@ nsWindowMemoryReporter::AsyncCheckForGhostWindows()
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

View File

@ -258,6 +258,7 @@ support-files =
[test_anonymousContent_api.html]
[test_anonymousContent_append_after_reflow.html]
[test_anonymousContent_canvas.html]
skip-if = headless # Bug 1405867
[test_anonymousContent_insert.html]
[test_anonymousContent_manipulate_content.html]
[test_anonymousContent_style_csp.html]
@ -306,7 +307,7 @@ skip-if = toolkit == 'android'
[test_bug330925.xhtml]
[test_bug331959.html]
[test_bug333064.html]
skip-if = toolkit == 'android'
skip-if = toolkit == 'android' || headless # Headless: Bug 1405868
[test_bug333198.html]
[test_bug333673.html]
[test_bug337631.html]

View File

@ -11,8 +11,8 @@
#include "mozilla/dom/quota/QuotaManager.h"
#include "mozilla/SnappyCompressOutputStream.h"
#include "mozilla/Unused.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIFile.h"
#include "nsIUUIDGenerator.h"
#include "nsNetCID.h"
@ -420,14 +420,10 @@ LockedDirectoryPaddingWrite(nsIFile* aBaseDir, DirPaddingFile aPaddingFileType,
rv = NS_NewLocalFileOutputStream(getter_AddRefs(outputStream), file);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIBinaryOutputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryoutputstream;1");
if (NS_WARN_IF(!binaryStream)) { return NS_ERROR_FAILURE; }
nsCOMPtr<nsIObjectOutputStream> objectStream =
NS_NewObjectOutputStream(outputStream);
rv = binaryStream->SetOutputStream(outputStream);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
rv = binaryStream->Write64(aPaddingSize);
rv = objectStream->Write64(aPaddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
return rv;
@ -744,15 +740,11 @@ LockedDirectoryPaddingGet(nsIFile* aBaseDir, int64_t* aPaddingSizeOut)
rv = NS_NewBufferedInputStream(getter_AddRefs(bufferedStream), stream, 512);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIBinaryInputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
rv = binaryStream->SetInputStream(bufferedStream);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
nsCOMPtr<nsIObjectInputStream> objectStream =
NS_NewObjectInputStream(bufferedStream);
uint64_t paddingSize = 0;
rv = binaryStream->Read64(&paddingSize);
rv = objectStream->Read64(&paddingSize);
if (NS_WARN_IF(NS_FAILED(rv))) { return rv; }
*aPaddingSizeOut = paddingSize;

View File

@ -49,7 +49,7 @@ 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

View File

@ -19,8 +19,8 @@
#include "nsIClipboard.h"
#include "nsContentUtils.h"
#include "nsIContent.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIStorageStream.h"
#include "nsStringStream.h"
#include "nsCRT.h"
@ -996,7 +996,7 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
transferable->Init(aLoadContext);
nsCOMPtr<nsIStorageStream> storageStream;
nsCOMPtr<nsIBinaryOutputStream> stream;
nsCOMPtr<nsIObjectOutputStream> stream;
bool added = false;
bool handlingCustomFormats = true;
@ -1087,8 +1087,7 @@ DataTransfer::GetTransferable(uint32_t aIndex, nsILoadContext* aLoadContext)
nsCOMPtr<nsIOutputStream> outputStream;
storageStream->GetOutputStream(0, getter_AddRefs(outputStream));
stream = do_CreateInstance("@mozilla.org/binaryoutputstream;1");
stream->SetOutputStream(outputStream);
stream = NS_NewObjectOutputStream(outputStream);
}
CheckedInt<uint32_t> formatLength =
@ -1593,14 +1592,8 @@ DataTransfer::FillInExternalCustomTypes(nsIVariant* aData, uint32_t aIndex,
nsCOMPtr<nsIInputStream> stringStream;
NS_NewCStringInputStream(getter_AddRefs(stringStream), str);
nsCOMPtr<nsIBinaryInputStream> stream =
do_CreateInstance("@mozilla.org/binaryinputstream;1");
if (!stream) {
return;
}
rv = stream->SetInputStream(stringStream);
NS_ENSURE_SUCCESS_VOID(rv);
nsCOMPtr<nsIObjectInputStream> stream =
NS_NewObjectInputStream(stringStream);
uint32_t type;
do {

View File

@ -319,11 +319,8 @@ EventStateManager::UpdateUserActivityTimer()
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) {
@ -1454,18 +1451,15 @@ EventStateManager::CreateClickHoldTimer(nsPresContext* inPresContext,
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
//

View File

@ -324,11 +324,10 @@ WheelTransaction::OnTimeout(nsITimer* aTimer, void* aClosure)
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 =

View File

@ -175,6 +175,7 @@ skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
[test_onerror_handler_args.html]
[test_passive_listeners.html]
[test_paste_image.html]
skip-if = headless # Bug 1405869
[test_wheel_default_action.html]
[test_bug687787.html]
[test_bug1305458.html]

View File

@ -529,7 +529,7 @@ void
FileReader::StartProgressEventTimer()
{
if (!mProgressNotifier) {
mProgressNotifier = do_CreateInstance(NS_TIMER_CONTRACTID);
mProgressNotifier = NS_NewTimer();
}
if (mProgressNotifier) {

View File

@ -434,18 +434,10 @@ public:
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);
}

View File

@ -670,12 +670,12 @@ 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;
}

View File

@ -354,9 +354,9 @@ 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()
{

View File

@ -28,11 +28,8 @@ MLSFallback::Startup(nsIGeolocationUpdate* aWatcher)
}
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

View File

@ -522,9 +522,9 @@ nsGeolocationRequest::SetTimeoutTimer()
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);
}
}
@ -867,7 +867,7 @@ void
nsGeolocationService::SetDisconnectTimer()
{
if (!mDisconnectTimer) {
mDisconnectTimer = do_CreateInstance("@mozilla.org/timer;1");
mDisconnectTimer = NS_NewTimer();
} else {
mDisconnectTimer->Cancel();
}

View File

@ -4580,12 +4580,11 @@ void HTMLMediaElement::HiddenVideoStart()
// 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()
@ -5789,11 +5788,10 @@ void HTMLMediaElement::StartProgressTimer()
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()

View File

@ -278,7 +278,7 @@ nsHTMLDNSPrefetch::nsDeferrals::nsDeferrals()
mActiveLoaderCount(0),
mTimerArmed(false)
{
mTimer = do_CreateInstance("@mozilla.org/timer;1");
mTimer = NS_NewTimer();;
}
nsHTMLDNSPrefetch::nsDeferrals::~nsDeferrals()

View File

@ -11992,7 +11992,7 @@ DatabaseUpdateFunction::UpdateInternal(int64_t aId,
ConnectionPool::ConnectionPool()
: mDatabasesMutex("ConnectionPool::mDatabasesMutex")
, mIdleTimer(do_CreateInstance(NS_TIMER_CONTRACTID))
, mIdleTimer(NS_NewTimer())
, mNextTransactionId(0)
, mTotalThreadCount(0)
, mShutdownRequested(false)

View File

@ -388,7 +388,7 @@ IndexedDatabaseManager::Init()
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()) {

View File

@ -2950,14 +2950,13 @@ ContentChild::StartForceKillTimer()
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");
}
}

View File

@ -1906,14 +1906,13 @@ ContentParent::StartForceKillTimer()
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");
}
}

View File

@ -813,8 +813,8 @@ ParticularProcessPriorityManager::ScheduleResetPriority(TimeoutPref aTimeoutPref
}
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

View File

@ -140,15 +140,12 @@ public:
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)

View File

@ -30,8 +30,7 @@ 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

View File

@ -234,7 +234,7 @@ MediaDevices::OnDeviceChange()
if (!mFuzzTimer)
{
mFuzzTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mFuzzTimer = NS_NewTimer();
}
if (!mFuzzTimer) {

View File

@ -1502,13 +1502,10 @@ MediaStreamGraphImpl::ForceShutDown(media::ShutdownTicket* aShutdownTicket)
// 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;

View File

@ -20,7 +20,7 @@ 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)
{

View File

@ -367,23 +367,13 @@ SimpleTimer::Init(nsIRunnable* aTask, uint32_t aTimeoutMs, nsIEventTarget* aTarg
}
}
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;
}

View File

@ -227,15 +227,8 @@ 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);
}
}

View File

@ -281,8 +281,10 @@ MediaKeySystemAccessManager::AwaitInstall(DetailedPromise* aPromise,
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;
}

View File

@ -46,22 +46,19 @@ GMPTimerParent::RecvSetTimer(const uint32_t& aTimerId,
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();

View File

@ -178,7 +178,7 @@ MediaEngineDefaultVideoSource::Start(SourceMediaStream* aStream, TrackID aID,
return NS_ERROR_FAILURE;
}
mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mTimer = NS_NewTimer();
if (!mTimer) {
return NS_ERROR_FAILURE;
}

View File

@ -51,8 +51,9 @@ 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);
}

View File

@ -117,7 +117,7 @@ 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)

View File

@ -1031,18 +1031,17 @@ nsNPAPIPluginInstance::ScheduleTimer(uint32_t interval, NPBool repeat, void (*ti
// 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;

View File

@ -272,14 +272,10 @@ nsNPAPIPluginStreamListener::ResumeRequest()
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

View File

@ -657,7 +657,7 @@ void nsPluginHost::OnPluginInstanceDestroyed(nsPluginTag* aPluginTag)
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);

View File

@ -1287,8 +1287,7 @@ NPEventModel nsPluginInstanceOwner::GetEventModel()
}
#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) {
@ -1334,15 +1333,13 @@ void nsPluginInstanceOwner::AddToCARefreshTimer() {
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");
nsCOMPtr<nsITimer> timer;
NS_NewTimerWithFuncCallback(getter_AddRefs(timer),
CARefresh, nullptr,
DEFAULT_REFRESH_RATE, nsITimer::TYPE_REPEATING_SLACK,
"nsPluginInstanceOwner::CARefresh");
sCATimer = timer.forget();
}
}
@ -1355,8 +1352,7 @@ void nsPluginInstanceOwner::RemoveFromCARefreshTimer() {
if (sCARefreshListeners->Length() == 0) {
if (sCATimer) {
(*sCATimer)->Cancel();
delete sCATimer;
sCATimer->Cancel();
sCATimer = nullptr;
}
delete sCARefreshListeners;

View File

@ -8,6 +8,7 @@
#define nsPluginInstanceOwner_h_
#include "mozilla/Attributes.h"
#include "mozilla/StaticPtr.h"
#include "npapi.h"
#include "nsCOMPtr.h"
#include "nsIKeyEventInPluginCallback.h"
@ -308,7 +309,7 @@ private:
RefPtr<nsPluginHost> mPluginHost;
#ifdef XP_MACOSX
static nsCOMPtr<nsITimer> *sCATimer;
static mozilla::StaticRefPtr<nsITimer> sCATimer;
static nsTArray<nsPluginInstanceOwner*> *sCARefreshListeners;
bool mSentInitialTopLevelWindowEvent;
bool mLastWindowIsActive;

View File

@ -1172,11 +1172,8 @@ PresentationPresentingInfo::Init(nsIPresentationControlChannel* aControlChannel)
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;
}

View File

@ -144,14 +144,14 @@ MulticastDNSDeviceProvider::Init()
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);

View File

@ -8,8 +8,8 @@
#include "mozIStorageConnection.h"
#include "mozIStorageService.h"
#include "nsIBinaryInputStream.h"
#include "nsIBinaryOutputStream.h"
#include "nsIObjectInputStream.h"
#include "nsIObjectOutputStream.h"
#include "nsIFile.h"
#include "nsIFileStreams.h"
#include "nsIObserverService.h"
@ -2140,18 +2140,14 @@ GetBinaryOutputStream(nsIFile* aFile,
return rv;
}
nsCOMPtr<nsIBinaryOutputStream> binaryStream =
do_CreateInstance("@mozilla.org/binaryoutputstream;1");
if (NS_WARN_IF(!binaryStream)) {
return NS_ERROR_FAILURE;
if (NS_WARN_IF(!outputStream)) {
return NS_ERROR_UNEXPECTED;
}
rv = binaryStream->SetOutputStream(outputStream);
if (NS_WARN_IF(NS_FAILED(rv))) {
return rv;
}
nsCOMPtr<nsIObjectOutputStream> objectOutputStream =
NS_NewObjectOutputStream(outputStream);
binaryStream.forget(aStream);
objectOutputStream.forget(aStream);
return NS_OK;
}
@ -3623,7 +3619,7 @@ QuotaManager::Init(const nsAString& aBasePath)
// 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;
}

View File

@ -20,7 +20,7 @@ support-files =
[test_main.html]
skip-if = toolkit == 'android' #TIMED_OUT
[test_bug803225.html]
skip-if = toolkit == 'android' || (os=='linux' && bits==32) #Android: TIMED_OUT; Linux32:bug 1324870
skip-if = toolkit == 'android' || (os=='linux' && bits==32) || headless #Android: TIMED_OUT; Linux32:bug 1324870; Headless:bug 1405870
[test_frameNavigation.html]
skip-if = toolkit == 'android' #TIMED_OUT
[test_redirect.html]

View File

@ -211,14 +211,8 @@ StorageObserver::Observe(nsISupports* aSubject,
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

View File

@ -34,8 +34,7 @@ public:
private:
~VREventObserver();
// Weak pointer, instance is owned by mWindow.
nsGlobalWindow* MOZ_NON_OWNING_REF mWindow;
RefPtr<nsGlobalWindow> mWindow;
// For WebVR telemetry for tracking users who view content
// in the 2D view.
TimeStamp mSpendTimeIn2DView;

View File

@ -1984,7 +1984,7 @@ RuntimeService::Init()
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();

View File

@ -4340,23 +4340,18 @@ ServiceWorkerManager::ScheduleUpdateTimer(nsIPrincipal* aPrincipal,
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;

View File

@ -89,7 +89,7 @@ ServiceWorkerPrivate::ServiceWorkerPrivate(ServiceWorkerInfo* aInfo)
AssertIsOnMainThread();
MOZ_ASSERT(aInfo);
mIdleWorkerTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mIdleWorkerTimer = NS_NewTimer();
MOZ_ASSERT(mIdleWorkerTimer);
}
@ -1100,13 +1100,8 @@ class AllowWindowInteractionHandler final : public ExtendableEventCallback
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;
}

View File

@ -5296,7 +5296,7 @@ WorkerPrivate::InitializeGCTimers()
// 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;
@ -6482,12 +6482,10 @@ WorkerPrivate::SetTimeout(JSContext* aCx,
// 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;
}

View File

@ -393,15 +393,13 @@ nsBindingManager::DoProcessAttachedQueue()
// 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

View File

@ -3290,7 +3290,7 @@ XMLHttpRequestMainThread::StartTimeoutTimer()
}
if (!mTimeoutTimer) {
mTimeoutTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mTimeoutTimer);
}
uint32_t elapsed =
@ -3769,7 +3769,7 @@ void
XMLHttpRequestMainThread::StartProgressEventTimer()
{
if (!mProgressNotifier) {
mProgressNotifier = do_CreateInstance(NS_TIMER_CONTRACTID);
mProgressNotifier = NS_NewTimer();
SetTimerEventTarget(mProgressNotifier);
}
if (mProgressNotifier) {
@ -3796,7 +3796,7 @@ XMLHttpRequestMainThread::MaybeStartSyncTimeoutTimer()
return eErrorOrExpired;
}
mSyncTimeoutTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mSyncTimeoutTimer = NS_NewTimer();
SetTimerEventTarget(mSyncTimeoutTimer);
if (!mSyncTimeoutTimer) {
return eErrorOrExpired;

View File

@ -399,11 +399,15 @@ nsXULPrototypeCache::GetOutputStream(nsIURI* uri, nsIObjectOutputStream** stream
nsCOMPtr<nsIStorageStream> storageStream;
bool found = mOutputStreamTable.Get(uri, getter_AddRefs(storageStream));
if (found) {
objectOutput = do_CreateInstance("mozilla.org/binaryoutputstream;1");
if (!objectOutput) return NS_ERROR_OUT_OF_MEMORY;
// Setting an output stream here causes crashes on Windows. The previous
// version of this code always returned NS_ERROR_OUT_OF_MEMORY here,
// because it used a mistyped contract ID to create its object stream.
return NS_ERROR_NOT_IMPLEMENTED;
#if 0
nsCOMPtr<nsIOutputStream> outputStream
= do_QueryInterface(storageStream);
objectOutput->SetOutputStream(outputStream);
objectOutput = NS_NewObjectOutputStream(outputStream);
#endif
} else {
rv = NewObjectOutputWrappedStorageStream(getter_AddRefs(objectOutput),
getter_AddRefs(storageStream),

View File

@ -225,9 +225,8 @@ 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;

View File

@ -967,16 +967,16 @@ nsEditingSession::EndDocumentLoad(nsIWebProgress *aWebProgress,
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;
}
}
}

View File

@ -713,8 +713,8 @@ TextEditRules::WillInsertText(EditAction aAction,
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);

View File

@ -3,6 +3,7 @@
* 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"
@ -335,13 +336,8 @@ nsresult nsAutoConfig::downloadAutoConfig()
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

View File

@ -207,7 +207,7 @@ APZEventState::ProcessSingleTap(const CSSPoint& aPoint,
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()) {

View File

@ -62,8 +62,8 @@ TextureClientPool::TextureClientPool(LayersBackend aLayersBackend,
{
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";
}

View File

@ -1250,15 +1250,13 @@ gfxFcPlatformFontList::gfxFcPlatformFontList()
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");
}
}

View File

@ -184,18 +184,17 @@ gfxFontCache::gfxFontCache(nsIEventTarget* aEventTarget)
#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
}

View File

@ -152,7 +152,7 @@ gfxFontInfoLoader::StartLoader(uint32_t aDelay, uint32_t aInterval)
// 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;

View File

@ -399,7 +399,7 @@ public:
: mDisplayLink(nullptr)
{
MOZ_ASSERT(NS_IsMainThread());
mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mTimer = NS_NewTimer();
}
~OSXDisplay() override

View File

@ -1030,9 +1030,8 @@ ParentImpl::CreateBackgroundThread()
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;
}
}

View File

@ -86,7 +86,7 @@ MessagePump::Run(MessagePump::Delegate* aDelegate)
nsIThread* thisThread = NS_GetCurrentThread();
MOZ_ASSERT(thisThread);
mDelayedWorkTimer = do_CreateInstance(kNS_TIMER_CID);
mDelayedWorkTimer = NS_NewTimer();
MOZ_ASSERT(mDelayedWorkTimer);
base::ScopedNSAutoreleasePool autoReleasePool;
@ -162,7 +162,7 @@ MessagePump::ScheduleDelayedWork(const base::TimeTicks& aDelayedTime)
|| 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!");
@ -310,13 +310,9 @@ MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate* aDelegate)
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

View File

@ -440,10 +440,10 @@ AccessibleCaretEventHub::Init()
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);

View File

@ -1822,7 +1822,7 @@ PresShell::Initialize(nscoord aWidth, nscoord aHeight)
// 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;
@ -1978,7 +1978,7 @@ PresShell::ResizeReflowIgnoreOverride(nscoord aWidth, nscoord aHeight, nscoord a
!mAsyncResizeTimerIsActive) {
if (mInResize) {
if (!mAsyncResizeEventTimer) {
mAsyncResizeEventTimer = do_CreateInstance("@mozilla.org/timer;1");
mAsyncResizeEventTimer = NS_NewTimer();
}
if (mAsyncResizeEventTimer) {
mAsyncResizeTimerIsActive = true;
@ -3665,14 +3665,13 @@ PresShell::ScheduleViewManagerFlush(PaintType aType)
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;
}
@ -8814,16 +8813,13 @@ PresShell::ScheduleReflowOffTimer()
ASSERT_REFLOW_SCHEDULED_STATE();
if (!mReflowContinueTimer) {
mReflowContinueTimer = do_CreateInstance("@mozilla.org/timer;1");
mReflowContinueTimer->SetTarget(
nsresult rv = NS_NewTimerWithFuncCallback(
getter_AddRefs(mReflowContinueTimer),
sReflowContinueCallback, this, 30,
nsITimer::TYPE_ONE_SHOT,
"sReflowContinueCallback",
mDocument->EventTargetFor(TaskCategory::Other));
if (!mReflowContinueTimer ||
NS_FAILED(mReflowContinueTimer->
InitWithNamedFuncCallback(sReflowContinueCallback, this, 30,
nsITimer::TYPE_ONE_SHOT,
"sReflowContinueCallback"))) {
return false;
}
return NS_SUCCEEDED(rv);
}
return true;
}

View File

@ -636,17 +636,17 @@ void nsCaret::ResetBlinking()
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()) {
mBlinkTimer->SetTarget(doc->EventTargetFor(TaskCategory::Other));
target = doc->EventTargetFor(TaskCategory::Other);
}
}
mBlinkTimer = NS_NewTimer(target);
if (!mBlinkTimer) {
return;
}
}
if (blinkRate > 0) {

View File

@ -2798,18 +2798,13 @@ 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;
@ -3446,21 +3441,20 @@ nsRootPresContext::EnsureEventualDidPaintEvent(uint64_t aTransactionId)
}
}
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);
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;
}
if (NS_SUCCEEDED(rv)) {
NotifyDidPaintTimer* t = mNotifyDidPaintTimers.AppendElement();
t->mTransactionId = aTransactionId;
t->mTimer = timer;
}
}

View File

@ -371,7 +371,7 @@ public:
explicit SimpleTimerBasedRefreshDriverTimer(double aRate)
{
SetRate(aRate);
mTimer = do_CreateInstance(NS_TIMER_CONTRACTID);
mTimer = NS_NewTimer();
}
virtual ~SimpleTimerBasedRefreshDriverTimer() override

View File

@ -428,7 +428,7 @@ ScrollbarActivity::StartFadeBeginTimer()
return;
}
if (!mFadeBeginTimer) {
mFadeBeginTimer = do_CreateInstance("@mozilla.org/timer;1");
mFadeBeginTimer = NS_NewTimer();
}
mFadeBeginTimer->InitWithNamedFuncCallback(
FadeBeginTimerFired, this, mScrollbarFadeBeginDelay,

View File

@ -2606,7 +2606,7 @@ void ScrollFrameHelper::TriggerDisplayPortExpiration()
}
if (!mDisplayPortExpiryTimer) {
mDisplayPortExpiryTimer = do_CreateInstance("@mozilla.org/timer;1");
mDisplayPortExpiryTimer = NS_NewTimer();
}
ResetDisplayPortExpiryTimer();
}
@ -2726,13 +2726,11 @@ 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(
@ -3392,18 +3390,20 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
// area to the dispatch to content layer event regions) necessary to activate
// a scroll frame so it creates a scrollable layer.
bool couldBuildLayer = false;
if (mWillBuildScrollableLayer) {
couldBuildLayer = true;
} else {
couldBuildLayer =
nsLayoutUtils::AsyncPanZoomEnabled(mOuter) &&
WantAsyncScroll() &&
// If we are using containers for root frames, and we are the root
// scroll frame for the display root, then we don't need a scroll
// info layer. nsDisplayList::PaintForFrame already calls
// ComputeFrameMetrics for us.
(!(gfxPrefs::LayoutUseContainersForRootFrames() && mIsRoot) ||
(aBuilder->RootReferenceFrame()->PresContext() != mOuter->PresContext()));
if (aBuilder->IsPaintingToWindow()) {
if (mWillBuildScrollableLayer) {
couldBuildLayer = true;
} else {
couldBuildLayer =
nsLayoutUtils::AsyncPanZoomEnabled(mOuter) &&
WantAsyncScroll() &&
// If we are using containers for root frames, and we are the root
// scroll frame for the display root, then we don't need a scroll
// info layer. nsDisplayList::PaintForFrame already calls
// ComputeFrameMetrics for us.
(!(gfxPrefs::LayoutUseContainersForRootFrames() && mIsRoot) ||
(aBuilder->RootReferenceFrame()->PresContext() != mOuter->PresContext()));
}
}
// Now display the scrollbars and scrollcorner. These parts are drawn
@ -3505,7 +3505,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
}
nsDisplayListBuilder::AutoCurrentActiveScrolledRootSetter asrSetter(aBuilder);
if (mWillBuildScrollableLayer) {
if (mWillBuildScrollableLayer && aBuilder->IsPaintingToWindow()) {
asrSetter.EnterScrollFrame(sf);
}
@ -3521,7 +3521,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
nsRect scrolledRectClip =
GetUnsnappedScrolledRectInternal(mScrolledFrame->GetScrollableOverflowRect(),
mScrollPort.Size()) + mScrolledFrame->GetPosition();
if (mWillBuildScrollableLayer) {
if (mWillBuildScrollableLayer && aBuilder->IsPaintingToWindow()) {
// Clip the contents to the display port.
// The dirty rect already acts kind of like a clip, in that
// FrameLayerBuilder intersects item bounds and opaque regions with
@ -3569,7 +3569,8 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
// above (where the idSetter variable is created).
//
// This is not compatible when using containes for root scrollframes.
MOZ_ASSERT(couldBuildLayer && mScrolledFrame->GetContent());
MOZ_ASSERT(couldBuildLayer && mScrolledFrame->GetContent() &&
aBuilder->IsPaintingToWindow());
if (!mWillBuildScrollableLayer) {
// Set a displayport so next paint we don't have to force layerization
// after the fact.
@ -3591,7 +3592,7 @@ ScrollFrameHelper::BuildDisplayList(nsDisplayListBuilder* aBuilder,
}
}
if (mWillBuildScrollableLayer) {
if (mWillBuildScrollableLayer && aBuilder->IsPaintingToWindow()) {
aBuilder->ForceLayerForScrollParent();
}
@ -5057,9 +5058,11 @@ ScrollFrameHelper::IsMaybeScrollingActive() const
return true;
}
nsIContent* content = mOuter->GetContent();
return mHasBeenScrolledRecently ||
IsAlwaysActive() ||
mWillBuildScrollableLayer;
nsLayoutUtils::HasDisplayPort(content) ||
nsContentUtils::HasScrollgrab(content);
}
bool
@ -5071,9 +5074,11 @@ ScrollFrameHelper::IsScrollingActive(nsDisplayListBuilder* aBuilder) const
return true;
}
nsIContent* content = mOuter->GetContent();
return mHasBeenScrolledRecently ||
IsAlwaysActive() ||
mWillBuildScrollableLayer;
nsLayoutUtils::HasDisplayPort(content) ||
nsContentUtils::HasScrollgrab(content);
}
/**

View File

@ -404,7 +404,8 @@ nsSubDocumentFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
&copyOfDirty,
/* aSetBase = */ true);
if (!gfxPrefs::LayoutUseContainersForRootFrames()) {
if (!gfxPrefs::LayoutUseContainersForRootFrames() ||
!aBuilder->IsPaintingToWindow()) {
haveDisplayPort = false;
}

View File

@ -97,6 +97,7 @@ support-files = bug633762_iframe.html
[test_bug1198135.html]
[test_bug1307853.html]
support-files = file_bug1307853.html
[test_bug1408607.html]
[test_contained_plugin_transplant.html]
skip-if = os=='win'
[test_image_selection.html]
@ -124,7 +125,7 @@ skip-if = e10s
[test_plugin_focus.html]
skip-if = os == 'win' # bug 1207918
[test_plugin_mouse_coords.html]
skip-if = toolkit == 'android'
skip-if = toolkit == 'android' || headless # Headless:Bug 1405871
[test_plugin_position.xhtml]
skip-if = e10s
[test_scroll_behavior.html]

View File

@ -0,0 +1,48 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1408607
-->
<head>
<title>Test for Bug 1408607</title>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1408607">Mozilla Bug 1408607</a>
<iframe id="display" src="about:blank"></iframe>
<div id="content" style="display: none">
</div>
<div style="margin-left: 1%; border: 1px solid black;">
<div style="height: 200px; overflow: auto; transform: translateZ(0);">
<div style="height: 100px;"></div>
<a id="x" href="./">Hello</a>
<div style="height: 500px;"></div>
</div>
</div
<pre id="test">
<script type="application/javascript">
SimpleTest.waitForExplicitFinish();
window.addEventListener("load", step1);
function step1()
{
var rect = document.getElementById("x").getBoundingClientRect();
is(document.elementFromPoint(rect.x + rect.width/2, rect.y + rect.height/2), document.getElementById("x"), "Able to hit transformed object");
SimpleTest.finish();
}
</script>
</pre>
</body>
</html>

View File

@ -29,44 +29,32 @@ nsPagePrintTimer::~nsPagePrintTimer()
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
@ -179,11 +167,9 @@ nsPagePrintTimer::Notify(nsITimer *timer)
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;
}
}

View File

@ -89,16 +89,13 @@ nsFontFaceLoader::StartedLoading(nsIStreamLoader* aStreamLoader)
}
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;
}

View File

@ -1127,6 +1127,7 @@ input[type="number"] > div > div > div:hover {
input[type="date"],
input[type="time"] {
overflow: hidden !important;
font-family: -moz-fixed;
}
:-moz-autofill, :-moz-autofill-preview {

View File

@ -122,20 +122,19 @@ nsListScrollSmoother::Start()
};
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

View File

@ -528,10 +528,9 @@ nsMenuFrame::HandleEvent(nsPresContext* aPresContext,
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));
}
}
@ -1242,10 +1241,9 @@ nsMenuFrame::StartBlinking(WidgetGUIEvent* aEvent, bool aFlipChecked)
}
// 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;
}

View File

@ -55,11 +55,10 @@ nsRepeatService::Start(Callback aCallback, void* aCallbackData,
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);
}
}

View File

@ -15,6 +15,8 @@
#include "nsXULElement.h"
#include "nsIDOMXULMenuListElement.h"
#include "nsIXULDocument.h"
#include "nsIDOMXULDocument.h"
#include "nsIDOMXULCommandDispatcher.h"
#include "nsIXULTemplateBuilder.h"
#include "nsCSSFrameConstructor.h"
#include "nsGlobalWindow.h"
@ -1243,18 +1245,19 @@ nsXULPopupManager::HidePopupAfterDelay(nsMenuPopupFrame* aPopup)
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
@ -1974,6 +1977,16 @@ nsXULPopupManager::UpdateMenuItems(nsIContent* aPopup)
return;
}
// When a menu is opened, make sure that command updating is unlocked first.
nsCOMPtr<nsIDOMXULDocument> xulDoc = do_QueryInterface(document);
if (xulDoc) {
nsCOMPtr<nsIDOMXULCommandDispatcher> xulCommandDispatcher;
xulDoc->GetCommandDispatcher(getter_AddRefs(xulCommandDispatcher));
if (xulCommandDispatcher) {
xulCommandDispatcher->Unlock();
}
}
for (nsCOMPtr<nsIContent> grandChild = aPopup->GetFirstChild();
grandChild;
grandChild = grandChild->GetNextSibling()) {

View File

@ -195,21 +195,18 @@ nsXULTooltipListener::MouseMove(nsIDOMEvent* aEvent)
}
}
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;

View File

@ -13,6 +13,7 @@
#include "mozilla/Likely.h"
#include "mozilla/MathAlgorithms.h"
#include "mozilla/MouseEvents.h"
#include "mozilla/ResultExtensions.h"
#include "mozilla/TextEditRules.h"
#include "gfxUtils.h"
@ -1810,16 +1811,12 @@ nsTreeBodyFrame::CreateTimer(const LookAndFeel::IntID aID,
// 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;
}

Some files were not shown because too many files have changed in this diff Show More