blob: edbea950cacdc99e87ceaf584944aa8bc81d5c69 [file] [log] [blame]
// Copyright 2014 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 SKY_ENGINE_BINDINGS_EXCEPTION_STATE_H_
#define SKY_ENGINE_BINDINGS_EXCEPTION_STATE_H_
#include "sky/engine/tonic/dart_persistent_value.h"
#include "sky/engine/wtf/Noncopyable.h"
#include "sky/engine/wtf/text/WTFString.h"
namespace blink {
typedef int ExceptionCode;
class ExceptionState {
WTF_MAKE_NONCOPYABLE(ExceptionState);
public:
enum Context {
ConstructionContext,
ExecutionContext,
DeletionContext,
GetterContext,
SetterContext,
EnumerationContext,
QueryContext,
IndexedGetterContext,
IndexedSetterContext,
IndexedDeletionContext,
UnknownContext, // FIXME: Remove this once we've flipped over to the new
// API.
};
ExceptionState();
ExceptionState(Context context, const char* interfaceName);
ExceptionState(Context context,
const char* propertyName,
const char* interfaceName);
~ExceptionState();
void ThrowDOMException(const ExceptionCode& code, const String& message);
void ThrowTypeError(const String& message);
void ThrowRangeError(const String& message);
bool ThrowIfNeeded();
void ClearException();
ExceptionCode code() const { return code_; }
const String& message() const { return message_; }
bool had_exception() const { return had_exception_ || code_; }
Dart_Handle GetDartException(Dart_NativeArguments args, bool auto_scope);
private:
ExceptionCode code_;
String message_;
bool had_exception_;
DartPersistentValue exception_;
};
class NonThrowableExceptionState final : public ExceptionState {};
class TrackExceptionState final : public ExceptionState {};
} // namespace blink
#endif // SKY_ENGINE_BINDINGS_EXCEPTION_STATE_H_