diff options
Diffstat (limited to 'third_party/WebKit/Source/bindings/core/v8/Microtask.h')
-rw-r--r-- | third_party/WebKit/Source/bindings/core/v8/Microtask.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/third_party/WebKit/Source/bindings/core/v8/Microtask.h b/third_party/WebKit/Source/bindings/core/v8/Microtask.h new file mode 100644 index 0000000..89ecd0f --- /dev/null +++ b/third_party/WebKit/Source/bindings/core/v8/Microtask.h @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2013 Google Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer + * in the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name of Google Inc. nor the names of its contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef Microtask_h +#define Microtask_h + +#include "core/CoreExport.h" +#include "public/platform/WebTaskRunner.h" +#include "wtf/Allocator.h" +#include "wtf/Functional.h" +#include "wtf/PassOwnPtr.h" +#include <v8.h> + +namespace blink { + +// C++ calls into script contexts which are "owned" by blink (created in a +// process where WebKit.cpp initializes v8) must declare their type: +// +// 1. Calls into page/author script from a frame +// 2. Calls into page/author script from a worker +// 3. Calls into internal script (typically setup/teardown work) +// +// Debug-time checking of this is enforced via v8::MicrotasksScope. +// +// Calls of type (1) should generally go through ScriptController, as inspector +// instrumentation is needed. ScriptController allocates V8RecursionScope for you. +// +// Calls of type (2) should always stack-allocate a v8::MicrotasksScope(kRunMicrtoasks) +// in the same block as the call into script. +// +// Calls of type (3) should stack allocate a v8::MicrotasksScope(kDoNotRunMicrotasks) -- +// this skips work that is spec'd to happen at the end of the outer-most +// script stack frame of calls into page script: +// http://www.whatwg.org/specs/web-apps/current-work/#perform-a-microtask-checkpoint +class CORE_EXPORT Microtask { + STATIC_ONLY(Microtask); +public: + static void performCheckpoint(v8::Isolate*); + + // TODO(jochen): Make all microtasks pass in the ScriptState they want to be + // executed in. Until then, all microtasks have to keep track of their + // ScriptState themselves. + static void enqueueMicrotask(PassOwnPtr<WebTaskRunner::Task>); + static void enqueueMicrotask(PassOwnPtr<SameThreadClosure>); +}; + +} // namespace blink + +#endif // Microtask_h |