17242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
27242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Use of this source code is governed by a BSD-style license that can be
37242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// found in the LICENSE file.
47242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
57242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#ifndef DictionaryTest_h
67242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#define DictionaryTest_h
77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
87242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/Nullable.h"
97242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/ScriptValue.h"
107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/ScriptWrappable.h"
117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/dom/Element.h"
127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "platform/heap/Handle.h"
137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "wtf/text/WTFString.h"
147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccinamespace blink {
167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass InternalDictionary;
187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass DictionaryTest : public GarbageCollectedFinalized<DictionaryTest>, public ScriptWrappable {
207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DEFINE_WRAPPERTYPEINFO();
217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccipublic:
227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    static DictionaryTest* create()
237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    {
247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci        return new DictionaryTest();
257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    }
267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    virtual ~DictionaryTest();
277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // Stores all members into corresponding fields
297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void set(const InternalDictionary&);
307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // Creates a TestDictionary instnace from fields and returns it
317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    InternalDictionary* get();
327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void trace(Visitor*);
347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciprivate:
367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    DictionaryTest();
377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void reset();
397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // The reason to use Nullable<T> is convenience; we use Nullable<T> here to
417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // record whether the member field is set or not. Some members are not
427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    // wrapped with Nullable because:
437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    //  - |longMemberWithDefault| has a non-null default value
447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    //  - String and PtrTypes can express whether they are null
457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<int> m_longMember;
467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    int m_longMemberWithDefault;
477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<int> m_longOrNullMember;
487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<int> m_longOrNullMemberWithDefault;
497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<bool> m_booleanMember;
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<double> m_doubleMember;
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String m_stringMember;
527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String m_stringMemberWithDefault;
537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<Vector<String> > m_stringSequenceMember;
547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    Nullable<Vector<String> > m_stringSequenceOrNullMember;
557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String m_enumMember;
567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String m_enumMemberWithDefault;
577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    String m_enumOrNullMember;
587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtrWillBeMember<Element> m_elementMember;
597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    RefPtrWillBeMember<Element> m_elementOrNullMember;
607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ScriptValue m_objectMember;
617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    ScriptValue m_objectOrNullMemberWithDefault;
627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci};
637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} // namespace blink
657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif // DictionaryTest_h
67