blob: 29b898c021cbe3aba0d021ae35a55f66460e13ab [file] [log] [blame]
// Copyright 2016 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 DictionaryIterator_h
#define DictionaryIterator_h
#include "core/CoreExport.h"
#include "wtf/Allocator.h"
#include <v8.h>
namespace WTF {
class String;
} // namespace WTF
namespace blink {
class Dictionary;
class ExceptionState;
class ExecutionContext;
class CORE_EXPORT DictionaryIterator {
STACK_ALLOCATED();
public:
DictionaryIterator(std::nullptr_t) : m_isolate(nullptr), m_done(true) {}
DictionaryIterator(v8::Local<v8::Object> iterator, v8::Isolate*);
bool isNull() const { return m_iterator.IsEmpty(); }
// Returns true if the iterator is still not done.
bool next(ExecutionContext*, ExceptionState&);
v8::MaybeLocal<v8::Value> value() { return m_value; }
bool valueAsDictionary(Dictionary& result, ExceptionState&);
bool valueAsString(WTF::String& result);
private:
v8::Isolate* m_isolate;
v8::Local<v8::Object> m_iterator;
v8::Local<v8::String> m_nextKey;
v8::Local<v8::String> m_doneKey;
v8::Local<v8::String> m_valueKey;
bool m_done;
v8::MaybeLocal<v8::Value> m_value;
};
} // namespace blink
#endif // DictionaryIterator_h