// Copyright 2017 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.

typedef record<DOMString, long> RecordTypedef;

interface RecordTest {
    void setStringLongRecord(RecordTypedef arg);
    RecordTypedef getStringLongRecord();

    void setNullableStringLongRecord(RecordTypedef? arg);
    RecordTypedef? getNullableStringLongRecord();

    void setByteStringByteStringRecord(record<ByteString, ByteString> arg);

    void setStringElementRecord(record<DOMString, Element> arg);
    record<DOMString, Element> getStringElementRecord();

    void setUSVStringUSVStringBooleanRecordRecord(record<USVString, record<USVString, boolean>> arg);
    record<USVString, record<USVString, boolean>> getUSVStringUSVStringBooleanRecordRecord();

    record<DOMString, sequence<ByteString>> returnStringByteStringSequenceRecord();

    boolean unionReceivedARecord((boolean or record<ByteString, ByteString>) arg);

    // Test the bindings generator code: unions and dictionaries must trace a
    // record when it's represented as a HeapVector.
    void setFloatOrStringElementRecord((float or record<DOMString, Element>) arg);
};
