#ifndef ANDROID_WEBVIEW_JS_SANDBOX_SERVICE_JS_SANDBOX_ISOLATE_CALLBACK_H_
#define ANDROID_WEBVIEW_JS_SANDBOX_SERVICE_JS_SANDBOX_ISOLATE_CALLBACK_H_
#include <jni.h>
#include "base/android/scoped_java_ref.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_refptr.h"
namespace android_webview {
class JsSandboxIsolateCallback final
: public base::RefCounted<JsSandboxIsolateCallback> {
public:
enum class ErrorType {
kJsEvaluationError = 0,
kMemoryLimitExceeded = 1,
kFileDescriptorIOFailedError = 2,
};
explicit JsSandboxIsolateCallback(
base::android::ScopedJavaGlobalRef<jobject>&& callback,
bool use_fd);
JsSandboxIsolateCallback(const JsSandboxIsolateCallback&) = delete;
JsSandboxIsolateCallback& operator=(const JsSandboxIsolateCallback&) = delete;
void ReportResult(const std::string& result);
void ReportError(ErrorType error_type, const std::string& error);
void ReportJsEvaluationError(const std::string& error);
void ReportFileDescriptorIOFailedError(const std::string& error);
void ReportMemoryLimitExceededError(uint64_t memory_limit,
uint64_t v8_heap_usage,
uint64_t non_v8_heap_usage);
private:
friend class base::RefCounted<JsSandboxIsolateCallback>;
~JsSandboxIsolateCallback();
base::android::ScopedJavaGlobalRef<jobject> UseCallback();
base::android::ScopedJavaGlobalRef<jobject> callback_;
bool use_fd;
};
}
#endif