blob: 52f2850a838cc81e367572563ca5d792c88c5ca7 [file] [log] [blame]
namespace khtml {
class CachedXBLDocument;
class BindingURI;
}
namespace DOM {
class DocumentImpl;
class NodeImpl;
class ElementImpl;
}
namespace XBL {
class XBLBindingChain;
class XBLChildNodeList;
// This class handles all access to XBL bindings and XBL binding information. It also handles the loading/installation of XBL
// bindings. In the comments below, the term "decorated DOM" is used to describe the final DOM that can be walked after all
// bindings have been installed.
class XBLBindingManager
{
public:
XBLBindingManager(DOM::DocumentImpl* doc);
~XBLBindingManager();
bool loadBindings(DOM::NodeImpl* node, khtml::BindingURI* bindingURIs, bool isStyleBinding, bool* resolveStyle);
void checkLoadState(DOM::ElementImpl* elt);
XBLBindingChain* getBindingChain(DOM::NodeImpl* node);
void setBindingChain(DOM::NodeImpl* node, XBLBindingChain* binding);
private:
// The document whose bindings we manage.
DOM::DocumentImpl* m_document;
// A mapping from a DOM::NodeImpl* to the XBL::XBLBindingChain* that is
// installed on that element.
QPtrDict<XBLBindingChain>* m_bindingChainTable;
// A mapping from DOM::NodeImpl* to an XBLChildNodeListImpl*.
// This list contains an accurate reflection of our *explicit* children (once intermingled with
// insertion points) in the decorated DOM.
QPtrDict<XBLChildNodeList>* m_explicitChildNodesTable;
// A mapping from DOM::NodeImpl* to an XBLChildNodeListImpl*. This list contains an accurate
// reflection of our *anonymous* children (if and only if they are
// intermingled with insertion points) in the decorated DOM. This
// table is not used if no insertion points were defined directly
// underneath a <content> tag in a binding. The NodeList from the
// binding's cloned <content> element is used instead as a performance optimization.
QPtrDict<XBLChildNodeList>* m_anonymousChildNodesTable;
// A mapping from a DOM::NodeImpl* to a DOM::NodeImpl*. Used to obtain the node's parent
// element in the decorated DOM.
QPtrDict<DOM::NodeImpl>* m_parentElementTable;
// A mapping from
};
}