This source file includes following definitions.
- m_which
- dispatch
- m_newValue
- dispatch
- isCreated
- dispatch
- createInvocation
- createAttributeChangedInvocation
#include "config.h"
#include "core/dom/custom/CustomElementCallbackInvocation.h"
#include "core/dom/Element.h"
#include "core/dom/custom/CustomElementScheduler.h"
namespace WebCore {
class AttachedDetachedInvocation : public CustomElementCallbackInvocation {
public:
AttachedDetachedInvocation(PassRefPtr<CustomElementLifecycleCallbacks>, CustomElementLifecycleCallbacks::CallbackType which);
private:
virtual void dispatch(Element*) OVERRIDE;
CustomElementLifecycleCallbacks::CallbackType m_which;
};
AttachedDetachedInvocation::AttachedDetachedInvocation(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, CustomElementLifecycleCallbacks::CallbackType which)
: CustomElementCallbackInvocation(callbacks)
, m_which(which)
{
ASSERT(m_which == CustomElementLifecycleCallbacks::Attached || m_which == CustomElementLifecycleCallbacks::Detached);
}
void AttachedDetachedInvocation::dispatch(Element* element)
{
switch (m_which) {
case CustomElementLifecycleCallbacks::Attached:
callbacks()->attached(element);
break;
case CustomElementLifecycleCallbacks::Detached:
callbacks()->detached(element);
break;
default:
ASSERT_NOT_REACHED();
}
}
class AttributeChangedInvocation : public CustomElementCallbackInvocation {
public:
AttributeChangedInvocation(PassRefPtr<CustomElementLifecycleCallbacks>, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue);
private:
virtual void dispatch(Element*) OVERRIDE;
AtomicString m_name;
AtomicString m_oldValue;
AtomicString m_newValue;
};
AttributeChangedInvocation::AttributeChangedInvocation(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue)
: CustomElementCallbackInvocation(callbacks)
, m_name(name)
, m_oldValue(oldValue)
, m_newValue(newValue)
{
}
void AttributeChangedInvocation::dispatch(Element* element)
{
callbacks()->attributeChanged(element, m_name, m_oldValue, m_newValue);
}
class CreatedInvocation : public CustomElementCallbackInvocation {
public:
CreatedInvocation(PassRefPtr<CustomElementLifecycleCallbacks> callbacks)
: CustomElementCallbackInvocation(callbacks)
{
}
private:
virtual void dispatch(Element*) OVERRIDE;
virtual bool isCreated() const OVERRIDE { return true; }
};
void CreatedInvocation::dispatch(Element* element)
{
if (element->inDocument() && element->document().domWindow())
CustomElementScheduler::scheduleCallback(callbacks(), element, CustomElementLifecycleCallbacks::Attached);
callbacks()->created(element);
}
PassOwnPtr<CustomElementCallbackInvocation> CustomElementCallbackInvocation::createInvocation(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, CustomElementLifecycleCallbacks::CallbackType which)
{
switch (which) {
case CustomElementLifecycleCallbacks::Created:
return adoptPtr(new CreatedInvocation(callbacks));
case CustomElementLifecycleCallbacks::Attached:
case CustomElementLifecycleCallbacks::Detached:
return adoptPtr(new AttachedDetachedInvocation(callbacks, which));
default:
ASSERT_NOT_REACHED();
return PassOwnPtr<CustomElementCallbackInvocation>();
}
}
PassOwnPtr<CustomElementCallbackInvocation> CustomElementCallbackInvocation::createAttributeChangedInvocation(PassRefPtr<CustomElementLifecycleCallbacks> callbacks, const AtomicString& name, const AtomicString& oldValue, const AtomicString& newValue)
{
return adoptPtr(new AttributeChangedInvocation(callbacks, name, oldValue, newValue));
}
}