#include "misc/loader_client.h"
#include "dom/dom_string.h"
namespace khtml
{
class CachedXBLDocument;
}
namespace DOM
{
class ElementImpl;
}
namespace XBL
{
class XBLPrototypeBinding;
class XBLBindingChain;
class XBLBinding: public khtml::CachedObjectClient
{
public:
XBLBinding(XBLBindingChain* chain, const DOM::DOMString& uri, XBLBinding* derivedBinding = 0);
virtual ~XBLBinding();
bool loaded() const;
bool hasStylesheets() const { return false; }
XBLBindingChain* chain() const { return m_chain; }
void setNextBinding(XBLBinding* n) { m_nextBinding = n; }
void setPreviousBinding(XBLBinding* p) { m_previousBinding = p; }
void setXBLDocument(const DOM::DOMString& url, XBL::XBLDocumentImpl* doc);
private:
XBLBindingChain* m_chain; khtml::CachedXBLDocument* m_xblDocument; XBLPrototypeBinding* m_prototype; DOM::DOMString m_id;
XBLBinding* m_previousBinding; XBLBinding* m_nextBinding; };
class XBLBindingChain
{
public:
XBLBindingChain(DOM::ElementImpl* elt, const DOM::DOMString& uri, bool isStyleChain);
~XBLBindingChain();
const DOM::DOMString& uri() const { return m_uri; }
XBLBindingChain* firstStyleBindingChain();
XBLBindingChain* lastBindingChain() ;
void insertBindingChain(XBLBindingChain* bindingChain);
XBLBindingChain* nextChain() const { return m_nextChain; }
XBLBindingChain* previousChain() const { return m_previousChain; }
void setNextBindingChain(XBLBindingChain* bindingChain) { m_nextChain = bindingChain; }
void setPreviousBindingChain(XBLBindingChain* bindingChain) { m_previousChain = bindingChain; }
bool markedForDeath() const { return m_markedForDeath; }
void markForDeath();
bool loaded() const;
bool hasStylesheets() const;
DOM::ElementImpl* element() const { return m_element; }
void failed();
private:
DOM::DOMString m_uri; DOM::ElementImpl* m_element; XBLBinding* m_binding; XBLBindingChain* m_previousChain; XBLBindingChain* m_nextChain;
bool m_isStyleChain : 1;
bool m_markedForDeath : 1;
};
}