/* * Copyright (C) 2004-2019 Apple Inc. All rights reserved. * Copyright (C) 2006 James G. Speth (speth@end.com) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #import "DOMAbstractViewInternal.h" #import "DOMCSSRuleInternal.h" #import "DOMCSSRuleListInternal.h" #import "DOMCSSStyleDeclarationInternal.h" #import "DOMCSSValueInternal.h" #import "DOMCounterInternal.h" #import "DOMEventInternal.h" #import "DOMHTMLCollectionInternal.h" #import "DOMImplementationInternal.h" #import "DOMInternal.h" #import "DOMMediaListInternal.h" #import "DOMNamedNodeMapInternal.h" #import "DOMNodeInternal.h" #import "DOMNodeIteratorInternal.h" #import "DOMNodeListInternal.h" #import "DOMRGBColorInternal.h" #import "DOMRangeInternal.h" #import "DOMRectInternal.h" #import "DOMStyleSheetInternal.h" #import "DOMStyleSheetListInternal.h" #import "DOMTreeWalkerInternal.h" #import "DOMXPathExpressionInternal.h" #import "DOMXPathResultInternal.h" #import <WebCore/JSCSSRule.h> #import <WebCore/JSCSSRuleList.h> #import <WebCore/JSCSSStyleDeclaration.h> #import <WebCore/JSDOMImplementation.h> #import <WebCore/JSDeprecatedCSSOMCounter.h> #import <WebCore/JSDeprecatedCSSOMRGBColor.h> #import <WebCore/JSDeprecatedCSSOMRect.h> #import <WebCore/JSDeprecatedCSSOMValue.h> #import <WebCore/JSEvent.h> #import <WebCore/JSHTMLCollection.h> #import <WebCore/JSHTMLOptionsCollection.h> #import <WebCore/JSMediaList.h> #import <WebCore/JSNamedNodeMap.h> #import <WebCore/JSNode.h> #import <WebCore/JSNodeIterator.h> #import <WebCore/JSNodeList.h> #import <WebCore/JSRange.h> #import <WebCore/JSStyleSheet.h> #import <WebCore/JSStyleSheetList.h> #import <WebCore/JSTreeWalker.h> #import <WebCore/JSWindowProxy.h> #import <WebCore/JSXPathExpression.h> #import <WebCore/JSXPathResult.h> #import <WebCore/SimpleRange.h> #import <WebCore/WebScriptObjectPrivate.h> static WebScriptObject *createDOMWrapper(JSC::JSObject& jsWrapper) { JSC::VM& vm = jsWrapper.vm(); #define WRAP(className) \ if (auto* wrapped = WebCore::JS##className::toWrapped(vm, &jsWrapper)) \ return kit(wrapped); WRAP(CSSRule) WRAP(CSSRuleList) WRAP(CSSStyleDeclaration) WRAP(DeprecatedCSSOMValue) WRAP(DeprecatedCSSOMCounter) WRAP(DOMImplementation) WRAP(Event) WRAP(HTMLOptionsCollection) WRAP(MediaList) WRAP(NamedNodeMap) WRAP(Node) WRAP(NodeIterator) WRAP(NodeList) WRAP(DeprecatedCSSOMRGBColor) WRAP(Range) WRAP(DeprecatedCSSOMRect) WRAP(StyleSheet) WRAP(StyleSheetList) WRAP(TreeWalker) WRAP(WindowProxy) WRAP(XPathExpression) WRAP(XPathResult) // This must be after HTMLOptionsCollection, because JSHTMLCollection is a base class of // JSHTMLOptionsCollection, and HTMLCollection is *not* a base class of HTMLOptionsCollection. WRAP(HTMLCollection) #undef WRAP return nil; } static void disconnectWindowWrapper(WebScriptObject *windowWrapper) { ASSERT([windowWrapper isKindOfClass:[DOMAbstractView class]]); [(DOMAbstractView *)windowWrapper _disconnectFrame]; } void initializeDOMWrapperHooks() { WebCore::initializeDOMWrapperHooks(createDOMWrapper, disconnectWindowWrapper); }