12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef EXTENSIONS_RENDERER_BINDINGS_JS_RUNNER_H_
- #define EXTENSIONS_RENDERER_BINDINGS_JS_RUNNER_H_
- #include <memory>
- #include "base/callback.h"
- #include "v8/include/v8.h"
- namespace extensions {
- // A helper class to execute JS functions safely.
- class JSRunner {
- public:
- // Returns the instance of the JSRunner for the specified |context|.
- static JSRunner* Get(v8::Local<v8::Context> context);
- // Sets the instance for a given |context|.
- static void SetInstanceForContext(v8::Local<v8::Context> context,
- std::unique_ptr<JSRunner> runner);
- // Clears the instance for a given |context|.
- static void ClearInstanceForContext(v8::Local<v8::Context> context);
- virtual ~JSRunner() {}
- // Called with the result of executing the function, as well as the context
- // it was executed in. Note: This callback is *not* guaranteed to be invoked
- // (and won't be if, for instance, the context is destroyed before this is
- // ran).
- // NOTE(devlin): We could easily change that if desired.
- using ResultCallback = base::OnceCallback<void(v8::Local<v8::Context>,
- v8::MaybeLocal<v8::Value>)>;
- // Calls the given |function| in the specified |context| and with the provided
- // arguments. JS may be executed asynchronously if it has been suspended in
- // the context.
- void RunJSFunction(v8::Local<v8::Function> function,
- v8::Local<v8::Context> context,
- int argc,
- v8::Local<v8::Value> argv[]);
- // Same as above, but if a |callback| is provided, it will be called with the
- // results of the function running.
- virtual void RunJSFunction(v8::Local<v8::Function> function,
- v8::Local<v8::Context> context,
- int argc,
- v8::Local<v8::Value> argv[],
- ResultCallback callback) = 0;
- // Executes the given |function| synchronously and returns the result. This
- // should *only* be called in direct response to script running, since it
- // bypasses script suspension.
- virtual v8::MaybeLocal<v8::Value> RunJSFunctionSync(
- v8::Local<v8::Function> function,
- v8::Local<v8::Context> context,
- int argc,
- v8::Local<v8::Value> argv[]) = 0;
- // Sets a global instance for testing that will be returned instead of the
- // per-context version (if any).
- static void SetInstanceForTesting(JSRunner* runner);
- // Returns the global testing instance.
- static JSRunner* GetInstanceForTesting();
- };
- } // namespace extensions
- #endif // EXTENSIONS_RENDERER_BINDINGS_JS_RUNNER_H_
|