Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Unified Diff: Source/bindings/v8/custom/V8WindowCustom.cpp

Issue 19494002: Distinguish actions registered with setTimeout() and setInterval(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebase again. Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/bindings/v8/custom/V8WindowCustom.cpp
diff --git a/Source/bindings/v8/custom/V8WindowCustom.cpp b/Source/bindings/v8/custom/V8WindowCustom.cpp
index 0dcbee6b6216f55fb8847293be8a430db6449434..320ac00b080652ec33de45c0a86e41a49e7e3257 100644
--- a/Source/bindings/v8/custom/V8WindowCustom.cpp
+++ b/Source/bindings/v8/custom/V8WindowCustom.cpp
@@ -73,7 +73,7 @@ namespace WebCore {
// FIXME: There is a lot of duplication with SetTimeoutOrInterval() in V8WorkerGlobalScopeCustom.cpp.
// We should refactor this.
-void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool singleShot)
+void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, DOMTimer::Type timerType)
{
int argumentCount = args.Length();
@@ -112,6 +112,8 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame()))
return;
+ ASSERT(imp->frame());
+
OwnPtr<ScheduledAction> action;
if (function->IsFunction()) {
int paramCount = argumentCount >= 2 ? argumentCount - 2 : 0;
@@ -125,23 +127,25 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
}
// params is passed to action, and released in action's destructor
- ASSERT(imp->frame());
action = adoptPtr(new ScheduledAction(imp->frame()->script()->currentWorldContext(), v8::Handle<v8::Function>::Cast(function), paramCount, params.get(), args.GetIsolate()));
} else {
if (imp->document() && !imp->document()->contentSecurityPolicy()->allowEval()) {
v8SetReturnValue(args, 0);
return;
}
- ASSERT(imp->frame());
action = adoptPtr(new ScheduledAction(imp->frame()->script()->currentWorldContext(), functionString, KURL(), args.GetIsolate()));
}
int32_t timeout = argumentCount >= 2 ? args[1]->Int32Value() : 0;
int timerId;
- if (singleShot)
+ switch (timerType) {
+ case DOMTimer::TimeoutType:
timerId = DOMWindowTimers::setTimeout(imp, action.release(), timeout);
- else
+ break;
+ case DOMTimer::IntervalType:
timerId = DOMWindowTimers::setInterval(imp, action.release(), timeout);
+ break;
+ }
// Try to do the idle notification before the timeout expires to get better
// use of any idle time. Aim for the middle of the interval for simplicity.
@@ -421,13 +425,13 @@ void V8Window::namedPropertyGetterCustom(v8::Local<v8::String> name, const v8::P
void V8Window::setTimeoutMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- WindowSetTimeoutImpl(args, true);
+ WindowSetTimeoutImpl(args, DOMTimer::TimeoutType);
}
void V8Window::setIntervalMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args)
{
- WindowSetTimeoutImpl(args, false);
+ WindowSetTimeoutImpl(args, DOMTimer::IntervalType);
}
bool V8Window::namedSecurityCheckCustom(v8::Local<v8::Object> host, v8::Local<v8::Value> key, v8::AccessType type, v8::Local<v8::Value>)

Powered by Google App Engine
This is Rietveld 408576698