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