Commit ac728120 authored by rmcilroy's avatar rmcilroy Committed by Commit bot

RequestIdleCallback: Avoid retaining ScriptedIdleTaskController while a...

RequestIdleCallback: Avoid retaining ScriptedIdleTaskController while a cancelled timeout is pending

Ensure that ScriptedIdleTaskController does not get unnecessarily retained by a cancelled timeout task if the
idle task has been triggered, but the document has gone away.

BUG=595155

Committed: https://crrev.com/82f18cd2a7b718c4d5356222017d9855a53eb6f3
Cr-Commit-Position: refs/heads/master@{#381489}

Review URL: https://codereview.chromium.org/1808643003

Cr-Commit-Position: refs/heads/master@{#381710}
parent 631eb392
......@@ -34,12 +34,21 @@ public:
static void idleTaskFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWrapper, double deadlineSeconds)
{
// TODO(rmcilroy): Implement clamping of deadline in some form.
callbackWrapper->controller()->callbackFired(callbackWrapper->id(), deadlineSeconds, IdleDeadline::CallbackType::CalledWhenIdle);
if (RefPtrWillBeRawPtr<ScriptedIdleTaskController> controller = callbackWrapper->controller())
controller->callbackFired(callbackWrapper->id(), deadlineSeconds, IdleDeadline::CallbackType::CalledWhenIdle);
callbackWrapper->cancel();
}
static void timeoutFired(PassRefPtr<IdleRequestCallbackWrapper> callbackWrapper)
{
callbackWrapper->controller()->callbackFired(callbackWrapper->id(), monotonicallyIncreasingTime(), IdleDeadline::CallbackType::CalledByTimeout);
if (RefPtrWillBeRawPtr<ScriptedIdleTaskController> controller = callbackWrapper->controller())
controller->callbackFired(callbackWrapper->id(), monotonicallyIncreasingTime(), IdleDeadline::CallbackType::CalledByTimeout);
callbackWrapper->cancel();
}
void cancel()
{
m_controller = nullptr;
}
ScriptedIdleTaskController::CallbackId id() const { return m_id; }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment