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

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

Issue 19801002: Drop [LegacyImplementedInBaseClass] attribute from WindowTimers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: 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 e16c09e673a56886b62ae1954890af6ad0f33c3f..0dcbee6b6216f55fb8847293be8a430db6449434 100644
--- a/Source/bindings/v8/custom/V8WindowCustom.cpp
+++ b/Source/bindings/v8/custom/V8WindowCustom.cpp
@@ -55,6 +55,7 @@
#include "core/page/ContentSecurityPolicy.h"
#include "core/page/DOMTimer.h"
#include "core/page/DOMWindow.h"
+#include "core/page/DOMWindowTimers.h"
#include "core/page/Frame.h"
#include "core/page/FrameView.h"
#include "core/page/Location.h"
@@ -66,9 +67,12 @@
#include "core/storage/Storage.h"
#include "core/workers/SharedWorkerRepository.h"
#include "wtf/ArrayBuffer.h"
+#include "wtf/OwnArrayPtr.h"
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)
{
int argumentCount = args.Length();
@@ -85,7 +89,7 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
}
v8::Handle<v8::Value> function = args[0];
- WTF::String functionString;
+ String functionString;
if (!function->IsFunction()) {
if (function->IsString()) {
functionString = toWebCoreString(function);
@@ -105,19 +109,15 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
return;
}
- int32_t timeout = 0;
- if (argumentCount >= 2)
- timeout = args[1]->Int32Value();
-
if (!BindingSecurity::shouldAllowAccessToFrame(imp->frame()))
return;
- int id;
+ OwnPtr<ScheduledAction> action;
if (function->IsFunction()) {
int paramCount = argumentCount >= 2 ? argumentCount - 2 : 0;
- v8::Local<v8::Value>* params = 0;
+ OwnArrayPtr<v8::Local<v8::Value> > params;
if (paramCount > 0) {
- params = new v8::Local<v8::Value>[paramCount];
+ params = adoptArrayPtr(new v8::Local<v8::Value>[paramCount]);
for (int i = 0; i < paramCount; i++) {
// parameters must be globalized
params[i] = args[i+2];
@@ -126,21 +126,23 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
// params is passed to action, and released in action's destructor
ASSERT(imp->frame());
- OwnPtr<ScheduledAction> action = adoptPtr(new ScheduledAction(imp->frame()->script()->currentWorldContext(), v8::Handle<v8::Function>::Cast(function), paramCount, params, args.GetIsolate()));
-
- // FIXME: We should use OwnArrayPtr for params.
- delete[] params;
-
- id = DOMTimer::install(scriptContext, action.release(), timeout, singleShot);
+ 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());
- id = DOMTimer::install(scriptContext, adoptPtr(new ScheduledAction(imp->frame()->script()->currentWorldContext(), functionString, KURL(), args.GetIsolate())), timeout, singleShot);
+ 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)
+ timerId = DOMWindowTimers::setTimeout(imp, action.release(), timeout);
+ else
+ timerId = DOMWindowTimers::setInterval(imp, action.release(), timeout);
+
// 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.
if (timeout >= 0) {
@@ -148,7 +150,7 @@ void WindowSetTimeoutImpl(const v8::FunctionCallbackInfo<v8::Value>& args, bool
V8GCForContextDispose::instance().notifyIdleSooner(maximumFireInterval);
}
- v8SetReturnValue(args, id);
+ v8SetReturnValue(args, timerId);
}
void V8Window::eventAttrGetterCustom(v8::Local<v8::String> name, const v8::PropertyCallbackInfo<v8::Value>& info)
« no previous file with comments | « no previous file | Source/bindings/v8/custom/V8WorkerGlobalScopeCustom.cpp » ('j') | Source/core/page/DOMWindowTimers.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698