| Index: Source/core/dom/EventTarget.cpp
|
| diff --git a/Source/core/dom/EventTarget.cpp b/Source/core/dom/EventTarget.cpp
|
| index c1ae36707aff494c2b79fe8117f9e86ac912a458..c06d6dd6787d6a18b59b3f932a0175312c225c04 100644
|
| --- a/Source/core/dom/EventTarget.cpp
|
| +++ b/Source/core/dom/EventTarget.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "config.h"
|
| #include "core/dom/EventTarget.h"
|
|
|
| +#include "bindings/v8/DOMWrapperWorld.h"
|
| #include "bindings/v8/ScriptController.h"
|
| #include "core/dom/Event.h"
|
| #include "core/dom/ExceptionCode.h"
|
| @@ -103,27 +104,38 @@ bool EventTarget::removeEventListener(const AtomicString& eventType, EventListen
|
| return true;
|
| }
|
|
|
| -bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener)
|
| +bool EventTarget::setAttributeEventListener(const AtomicString& eventType, PassRefPtr<EventListener> listener, DOMWrapperWorld* isolatedWorld)
|
| {
|
| - clearAttributeEventListener(eventType);
|
| + clearAttributeEventListener(eventType, isolatedWorld);
|
| if (!listener)
|
| return false;
|
| return addEventListener(eventType, listener, false);
|
| }
|
|
|
| -EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventType)
|
| +EventListener* EventTarget::getAttributeEventListener(const AtomicString& eventType, DOMWrapperWorld* isolatedWorld)
|
| {
|
| const EventListenerVector& entry = getEventListeners(eventType);
|
| for (size_t i = 0; i < entry.size(); ++i) {
|
| - if (entry[i].listener->isAttribute())
|
| - return entry[i].listener.get();
|
| + EventListener* listener = entry[i].listener.get();
|
| + if (listener->isAttribute()) {
|
| + DOMWrapperWorld* listenerWorld = listener->world();
|
| + // Worker listener
|
| + if (!listenerWorld) {
|
| + ASSERT(!isolatedWorld);
|
| + return listener;
|
| + }
|
| + if (listenerWorld->isMainWorld() && !isolatedWorld)
|
| + return listener;
|
| + if (listenerWorld == isolatedWorld)
|
| + return listener;
|
| + }
|
| }
|
| return 0;
|
| }
|
|
|
| -bool EventTarget::clearAttributeEventListener(const AtomicString& eventType)
|
| +bool EventTarget::clearAttributeEventListener(const AtomicString& eventType, DOMWrapperWorld* isolatedWorld)
|
| {
|
| - EventListener* listener = getAttributeEventListener(eventType);
|
| + EventListener* listener = getAttributeEventListener(eventType, isolatedWorld);
|
| if (!listener)
|
| return false;
|
| return removeEventListener(eventType, listener, false);
|
|
|