| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Apple Inc. All Rights Reserved. | 2 * Copyright (C) 2009 Apple Inc. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 */ | 25 */ |
| 26 | 26 |
| 27 #include "core/events/PopStateEvent.h" | 27 #include "core/events/PopStateEvent.h" |
| 28 | 28 |
| 29 #include "bindings/core/v8/SerializedScriptValue.h" | 29 #include "bindings/core/v8/SerializedScriptValue.h" |
| 30 #include "core/frame/History.h" | 30 #include "core/frame/History.h" |
| 31 | 31 |
| 32 namespace blink { | 32 namespace blink { |
| 33 | 33 |
| 34 PopStateEvent::PopStateEvent() | 34 PopStateEvent::PopStateEvent() |
| 35 : serialized_state_(nullptr), state_(this), history_(nullptr) {} | 35 : serialized_state_(nullptr), history_(nullptr) {} |
| 36 | 36 |
| 37 PopStateEvent::PopStateEvent(ScriptState* script_state, | 37 PopStateEvent::PopStateEvent(const AtomicString& type, |
| 38 const AtomicString& type, | |
| 39 const PopStateEventInit& initializer) | 38 const PopStateEventInit& initializer) |
| 40 : Event(type, initializer), state_(this), history_(nullptr) { | 39 : Event(type, initializer), history_(nullptr) { |
| 41 if (initializer.hasState()) { | 40 if (initializer.hasState()) |
| 42 world_ = RefPtr<DOMWrapperWorld>(script_state->World()); | 41 state_ = initializer.state(); |
| 43 state_.Set(initializer.state().GetIsolate(), initializer.state().V8Value()); | |
| 44 } | |
| 45 } | 42 } |
| 46 | 43 |
| 47 PopStateEvent::PopStateEvent(PassRefPtr<SerializedScriptValue> serialized_state, | 44 PopStateEvent::PopStateEvent(PassRefPtr<SerializedScriptValue> serialized_state, |
| 48 History* history) | 45 History* history) |
| 49 : Event(EventTypeNames::popstate, false, true), | 46 : Event(EventTypeNames::popstate, false, true), |
| 50 serialized_state_(std::move(serialized_state)), | 47 serialized_state_(std::move(serialized_state)), |
| 51 state_(this), | |
| 52 history_(history) {} | 48 history_(history) {} |
| 53 | 49 |
| 54 PopStateEvent::~PopStateEvent() {} | 50 PopStateEvent::~PopStateEvent() {} |
| 55 | 51 |
| 56 ScriptValue PopStateEvent::state(ScriptState* script_state) const { | |
| 57 if (state_.IsEmpty()) | |
| 58 return ScriptValue(); | |
| 59 | |
| 60 v8::Isolate* isolate = script_state->GetIsolate(); | |
| 61 if (world_->GetWorldId() != script_state->World().GetWorldId()) { | |
| 62 v8::Local<v8::Value> value = state_.NewLocal(isolate); | |
| 63 RefPtr<SerializedScriptValue> serialized = | |
| 64 SerializedScriptValue::SerializeAndSwallowExceptions(isolate, value); | |
| 65 return ScriptValue(script_state, serialized->Deserialize(isolate)); | |
| 66 } | |
| 67 return ScriptValue(script_state, state_.NewLocal(isolate)); | |
| 68 } | |
| 69 | |
| 70 PopStateEvent* PopStateEvent::Create() { | 52 PopStateEvent* PopStateEvent::Create() { |
| 71 return new PopStateEvent; | 53 return new PopStateEvent; |
| 72 } | 54 } |
| 73 | 55 |
| 74 PopStateEvent* PopStateEvent::Create( | 56 PopStateEvent* PopStateEvent::Create( |
| 75 PassRefPtr<SerializedScriptValue> serialized_state, | 57 PassRefPtr<SerializedScriptValue> serialized_state, |
| 76 History* history) { | 58 History* history) { |
| 77 return new PopStateEvent(std::move(serialized_state), history); | 59 return new PopStateEvent(std::move(serialized_state), history); |
| 78 } | 60 } |
| 79 | 61 |
| 80 PopStateEvent* PopStateEvent::Create(ScriptState* script_state, | 62 PopStateEvent* PopStateEvent::Create(const AtomicString& type, |
| 81 const AtomicString& type, | |
| 82 const PopStateEventInit& initializer) { | 63 const PopStateEventInit& initializer) { |
| 83 return new PopStateEvent(script_state, type, initializer); | 64 return new PopStateEvent(type, initializer); |
| 84 } | 65 } |
| 85 | 66 |
| 86 const AtomicString& PopStateEvent::InterfaceName() const { | 67 const AtomicString& PopStateEvent::InterfaceName() const { |
| 87 return EventNames::PopStateEvent; | 68 return EventNames::PopStateEvent; |
| 88 } | 69 } |
| 89 | 70 |
| 90 DEFINE_TRACE(PopStateEvent) { | 71 DEFINE_TRACE(PopStateEvent) { |
| 91 visitor->Trace(history_); | 72 visitor->Trace(history_); |
| 92 Event::Trace(visitor); | 73 Event::Trace(visitor); |
| 93 } | 74 } |
| 94 | 75 |
| 95 DEFINE_TRACE_WRAPPERS(PopStateEvent) { | |
| 96 visitor->TraceWrappers(state_); | |
| 97 Event::TraceWrappers(visitor); | |
| 98 } | |
| 99 | |
| 100 } // namespace blink | 76 } // namespace blink |
| OLD | NEW |