// 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_