15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006, 2007, 2008, 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 32197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8AbstractEventListener.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 34197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8Binding.h" 35f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "bindings/core/v8/V8Event.h" 36197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8EventListenerList.h" 37f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "bindings/core/v8/V8EventTarget.h" 38197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8HiddenValue.h" 3906f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/BeforeUnloadEvent.h" 4006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/Event.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorCounters.h" 42591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "core/workers/WorkerGlobalScope.h" 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 44c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)V8AbstractEventListener::V8AbstractEventListener(bool isAttribute, ScriptState* scriptState) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : EventListener(JSEventListenerType) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isAttribute(isAttribute) 49f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) , m_scriptState(scriptState) 50f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) , m_isolate(scriptState->isolate()) 51f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 52f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (isMainThread()) 53f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) InspectorCounters::incrementCounter(InspectorCounters::JSEventListenerCounter); 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 55f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 56f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)V8AbstractEventListener::V8AbstractEventListener(bool isAttribute, v8::Isolate* isolate) 57f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) : EventListener(JSEventListenerType) 58f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) , m_isAttribute(isAttribute) 59f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) , m_scriptState(nullptr) 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_isolate(isolate) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (isMainThread()) 631e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) InspectorCounters::incrementCounter(InspectorCounters::JSEventListenerCounter); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)V8AbstractEventListener::~V8AbstractEventListener() 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_listener.isEmpty()) { 69521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) v8::HandleScope scope(m_isolate); 70f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) V8EventListenerList::clearWrapper(m_listener.newLocal(isolate()), m_isAttribute, isolate()); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 721e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (isMainThread()) 731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) InspectorCounters::decrementCounter(InspectorCounters::JSEventListenerCounter); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void V8AbstractEventListener::handleEvent(ExecutionContext*, Event* event) 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (scriptState()->contextIsValid()) 79c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 80c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!scriptState()->executionContext()) 81c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Don't reenter V8 if execution was terminated in this instance of V8. 83f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (scriptState()->executionContext()->isJSExecutionForbidden()) 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(event); 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The callback function on XMLHttpRequest can clear the event listener and destroys 'this' object. Keep a local reference to it. 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // See issue 889829. 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<V8AbstractEventListener> protect(this); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ScriptState::Scope scope(scriptState()); 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Get the V8 wrapper for the event object. 95f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) v8::Handle<v8::Value> jsEvent = toV8(event, scriptState()->context()->Global(), isolate()); 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (jsEvent.IsEmpty()) 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 98f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) invokeEventHandler(event, v8::Local<v8::Value>::New(isolate(), jsEvent)); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void V8AbstractEventListener::setListenerObject(v8::Handle<v8::Object> listener) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) m_listener.set(isolate(), listener); 104a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) m_listener.setWeak(this, &setWeakCallback); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 107f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)void V8AbstractEventListener::invokeEventHandler(Event* event, v8::Local<v8::Value> jsEvent) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If jsEvent is empty, attempt to set it as a hidden value would crash v8. 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (jsEvent.IsEmpty()) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(!scriptState()->contextIsValid()); 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::Local<v8::Value> returnValue; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Catch exceptions thrown in the event handler so they do not propagate to javascript code that caused the event to fire. 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) v8::TryCatch tryCatch; 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tryCatch.SetVerbose(true); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Save the old 'event' property so we can restore it later. 121f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) v8::Local<v8::Value> savedEvent = V8HiddenValue::getHiddenValue(isolate(), scriptState()->context()->Global(), V8HiddenValue::event(isolate())); 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tryCatch.Reset(); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) // Make the event available in the global object, so LocalDOMWindow can expose it. 125f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) V8HiddenValue::setHiddenValue(isolate(), scriptState()->context()->Global(), V8HiddenValue::event(isolate()), jsEvent); 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tryCatch.Reset(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) returnValue = callListenerFunction(jsEvent, event); 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (tryCatch.HasCaught()) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->target()->uncaughtExceptionInEventHandler(); 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!tryCatch.CanContinue()) { // Result of TerminateExecution(). 133f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (scriptState()->executionContext()->isWorkerGlobalScope()) 134f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) toWorkerGlobalScope(scriptState()->executionContext())->script()->forbidExecution(); 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tryCatch.Reset(); 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Restore the old event. This must be done for all exit paths through this method. 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (savedEvent.IsEmpty()) 141f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) V8HiddenValue::setHiddenValue(isolate(), scriptState()->context()->Global(), V8HiddenValue::event(isolate()), v8::Undefined(isolate())); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 143f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) V8HiddenValue::setHiddenValue(isolate(), scriptState()->context()->Global(), V8HiddenValue::event(isolate()), savedEvent); 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tryCatch.Reset(); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (returnValue.IsEmpty()) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_isAttribute && !returnValue->IsNull() && !returnValue->IsUndefined() && event->isBeforeUnloadEvent()) { 1516f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch TOSTRING_VOID(V8StringResource<>, stringReturnValue, returnValue); 1529bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) toBeforeUnloadEvent(event)->setReturnValue(stringReturnValue); 1539bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_isAttribute && shouldPreventDefault(returnValue)) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->preventDefault(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool V8AbstractEventListener::shouldPreventDefault(v8::Local<v8::Value> returnValue) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Prevent default action if the return value is false in accord with the spec 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // http://www.w3.org/TR/html5/webappapis.html#event-handler-attributes 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return returnValue->IsBoolean() && !returnValue->BooleanValue(); 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 166f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)v8::Local<v8::Object> V8AbstractEventListener::getReceiverObject(Event* event) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 168f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) v8::Local<v8::Object> listener = m_listener.newLocal(isolate()); 16993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (!m_listener.isEmpty() && !listener->IsFunction()) 17093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return listener; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) EventTarget* target = event->currentTarget(); 173f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) v8::Handle<v8::Value> value = toV8(target, scriptState()->context()->Global(), isolate()); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (value.IsEmpty()) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return v8::Local<v8::Object>(); 176f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return v8::Local<v8::Object>::New(isolate(), v8::Handle<v8::Object>::Cast(value)); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool V8AbstractEventListener::belongsToTheCurrentWorld() const 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 181f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return isolate()->InContext() && &world() == &DOMWrapperWorld::current(isolate()); 18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 184a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void V8AbstractEventListener::setWeakCallback(const v8::WeakCallbackData<v8::Object, V8AbstractEventListener> &data) 18593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 186a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) data.GetParameter()->m_listener.clear(); 18793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 18893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 189c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 190