#include "config.h"
#include "PopStateEvent.h"
#include "EventNames.h"
#include "History.h"
#include <runtime/JSCInlines.h>
namespace WebCore {
PopStateEvent::PopStateEvent(JSC::ExecState& state, const AtomicString& type, const Init& initializer, IsTrusted isTrusted)
: Event(type, initializer, isTrusted)
, m_state(state.vm(), initializer.state)
{
}
PopStateEvent::PopStateEvent(PassRefPtr<SerializedScriptValue> serializedState, PassRefPtr<History> history)
: Event(eventNames().popstateEvent, false, true)
, m_serializedState(serializedState)
, m_history(history)
{
}
PopStateEvent::~PopStateEvent()
{
}
Ref<PopStateEvent> PopStateEvent::create(RefPtr<SerializedScriptValue>&& serializedState, PassRefPtr<History> history)
{
return adoptRef(*new PopStateEvent(WTFMove(serializedState), history));
}
Ref<PopStateEvent> PopStateEvent::create(JSC::ExecState& state, const AtomicString& type, const Init& initializer, IsTrusted isTrusted)
{
return adoptRef(*new PopStateEvent(state, type, initializer, isTrusted));
}
Ref<PopStateEvent> PopStateEvent::createForBindings()
{
return adoptRef(*new PopStateEvent);
}
RefPtr<SerializedScriptValue> PopStateEvent::trySerializeState(JSC::ExecState* exec)
{
ASSERT(!m_state.hasNoValue());
if (!m_serializedState && !m_triedToSerialize) {
m_serializedState = SerializedScriptValue::create(*exec, m_state.jsValue(), SerializationErrorMode::NonThrowing);
m_triedToSerialize = true;
}
return m_serializedState;
}
EventInterface PopStateEvent::eventInterface() const
{
return PopStateEventInterfaceType;
}
}