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

[
    GarbageCollected
] interface PrivateScriptTest {
    [ImplementedInPrivateScript] void doNothing();
    [ImplementedInPrivateScript] short return123();
    [ImplementedInPrivateScript] short echoInteger(short value);
    [ImplementedInPrivateScript] DOMString echoString(DOMString value);
    [ImplementedInPrivateScript] Node echoNode(Node value);
    [ImplementedInPrivateScript] short addInteger(short value1, short value2);
    [ImplementedInPrivateScript] DOMString addString(DOMString value1, DOMString value2);
    [ImplementedInPrivateScript] void setIntegerToPrototype(short value);
    [ImplementedInPrivateScript] short getIntegerFromPrototype();
    [ImplementedInPrivateScript] void setIntegerToDocument(Document document, short value);
    [ImplementedInPrivateScript] short getIntegerFromDocument(Document document);
    [ImplementedInPrivateScript] Node createElement(Document document);
    [ImplementedInPrivateScript] void appendChild(Node node1, Node node2);
    [ImplementedInPrivateScript] Node firstChild(Node node);
    [ImplementedInPrivateScript] Node nextSibling(Node node);
    [ImplementedInPrivateScript] DOMString innerHTML(Node node);
    [ImplementedInPrivateScript] void setInnerHTML(Node node, DOMString string);
    [ImplementedInPrivateScript] void addClickListener(Node node);
    [ImplementedInPrivateScript] void clickNode(Document document, Node node);
    [ImplementedInPrivateScript] readonly attribute short readonlyShortAttribute;
    [ImplementedInPrivateScript] attribute short shortAttribute;
    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
    [ImplementedInPrivateScript] attribute Node nodeAttribute;
    [ImplementedInPrivateScript] attribute Node nodeAttributeThrowsIndexSizeError;
    [ImplementedInPrivateScript] void voidMethodThrowsDOMSyntaxError();
    [ImplementedInPrivateScript] void voidMethodThrowsError();
    [ImplementedInPrivateScript] void voidMethodThrowsTypeError();
    [ImplementedInPrivateScript] void voidMethodThrowsRangeError();
    [ImplementedInPrivateScript] void voidMethodThrowsSyntaxError();
    [ImplementedInPrivateScript] void voidMethodThrowsReferenceError();
    [ImplementedInPrivateScript] void voidMethodThrowsStackOverflowError();
    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] short addIntegerForPrivateScriptOnly(short value1, short value2);
    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString stringAttributeForPrivateScriptOnly;
    [ImplementedInPrivateScript] short addIntegerImplementedInCPP(short value1, short value2);
    [OnlyExposedToPrivateScript] short addIntegerImplementedInCPPForPrivateScriptOnly(short value1, short value2);
    [ImplementedInPrivateScript] attribute DOMString stringAttributeImplementedInCPP;
    [OnlyExposedToPrivateScript] attribute DOMString stringAttributeImplementedInCPPForPrivateScriptOnly;
    [ImplementedInPrivateScript] void dispatchDocumentOnload(Document document);
};
