| Index: third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp | 
| diff --git a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp b/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp | 
| deleted file mode 100644 | 
| index 1d7ee74b08fc27cf1e68ad4823b680da2fe7cf71..0000000000000000000000000000000000000000 | 
| --- a/third_party/WebKit/Source/core/inspector/AsyncCallTracker.cpp | 
| +++ /dev/null | 
| @@ -1,428 +0,0 @@ | 
| -/* | 
| - * Copyright (C) 2013 Google Inc. All rights reserved. | 
| - * | 
| - * Redistribution and use in source and binary forms, with or without | 
| - * modification, are permitted provided that the following conditions are | 
| - * met: | 
| - * | 
| - *     * Redistributions of source code must retain the above copyright | 
| - * notice, this list of conditions and the following disclaimer. | 
| - *     * Redistributions in binary form must reproduce the above | 
| - * copyright notice, this list of conditions and the following disclaimer | 
| - * in the documentation and/or other materials provided with the | 
| - * distribution. | 
| - *     * Neither the name of Google Inc. nor the names of its | 
| - * contributors may be used to endorse or promote products derived from | 
| - * this software without specific prior written permission. | 
| - * | 
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | 
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | 
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | 
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | 
| - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | 
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| - */ | 
| - | 
| -#include "core/inspector/AsyncCallTracker.h" | 
| - | 
| -#include "core/dom/ContextLifecycleObserver.h" | 
| -#include "core/dom/ExecutionContext.h" | 
| -#include "core/dom/ExecutionContextTask.h" | 
| -#include "core/events/Event.h" | 
| -#include "core/events/EventTarget.h" | 
| -#include "core/inspector/AsyncOperationMap.h" | 
| -#include "core/xmlhttprequest/XMLHttpRequest.h" | 
| -#include "core/xmlhttprequest/XMLHttpRequestUpload.h" | 
| -#include "platform/ScriptForbiddenScope.h" | 
| -#include "wtf/text/StringBuilder.h" | 
| -#include "wtf/text/StringHash.h" | 
| - | 
| -namespace { | 
| - | 
| -static const char setTimeoutName[] = "setTimeout"; | 
| -static const char setIntervalName[] = "setInterval"; | 
| -static const char requestAnimationFrameName[] = "requestAnimationFrame"; | 
| -static const char xhrSendName[] = "XMLHttpRequest.send"; | 
| -static const char enqueueMutationRecordName[] = "Mutation"; | 
| - | 
| -} | 
| - | 
| -namespace blink { | 
| - | 
| -class AsyncCallTracker::ExecutionContextData final : public GarbageCollectedFinalized<ExecutionContextData>, public ContextLifecycleObserver { | 
| -    USING_GARBAGE_COLLECTED_MIXIN(AsyncCallTracker::ExecutionContextData); | 
| -public: | 
| -    ExecutionContextData(AsyncCallTracker* tracker, ExecutionContext* executionContext) | 
| -        : ContextLifecycleObserver(executionContext) | 
| -        , m_tracker(tracker) | 
| -        , m_timerCallChains(tracker->m_debuggerAgent) | 
| -        , m_animationFrameCallChains(tracker->m_debuggerAgent) | 
| -        , m_eventCallChains(tracker->m_debuggerAgent) | 
| -        , m_xhrCallChains(tracker->m_debuggerAgent) | 
| -        , m_mutationObserverCallChains(tracker->m_debuggerAgent) | 
| -        , m_executionContextTaskCallChains(tracker->m_debuggerAgent) | 
| -        , m_asyncOperations(tracker->m_debuggerAgent) | 
| -    { | 
| -    } | 
| - | 
| -    void contextDestroyed() override | 
| -    { | 
| -        ASSERT(getExecutionContext()); | 
| -        RawPtr<ExecutionContextData> self = m_tracker->m_executionContextDataMap.take(getExecutionContext()); | 
| -        ASSERT_UNUSED(self, self == this); | 
| -        ContextLifecycleObserver::contextDestroyed(); | 
| -        disposeCallChains(); | 
| -    } | 
| - | 
| -    void unobserve() | 
| -    { | 
| -        disposeCallChains(); | 
| -        ContextLifecycleObserver::clearContext(); | 
| -    } | 
| - | 
| -    DEFINE_INLINE_VIRTUAL_TRACE() | 
| -    { | 
| -        visitor->trace(m_tracker); | 
| -        visitor->trace(m_timerCallChains); | 
| -        visitor->trace(m_animationFrameCallChains); | 
| -        visitor->trace(m_eventCallChains); | 
| -        visitor->trace(m_xhrCallChains); | 
| -        visitor->trace(m_mutationObserverCallChains); | 
| -        visitor->trace(m_executionContextTaskCallChains); | 
| -        visitor->trace(m_asyncOperations); | 
| -        ContextLifecycleObserver::trace(visitor); | 
| -    } | 
| - | 
| -    Member<AsyncCallTracker> m_tracker; | 
| -    HashSet<int> m_intervalTimerIds; | 
| -    AsyncOperationMap<int> m_timerCallChains; | 
| -    AsyncOperationMap<int> m_animationFrameCallChains; | 
| -    AsyncOperationMap<Member<Event>> m_eventCallChains; | 
| -    AsyncOperationMap<Member<EventTarget>> m_xhrCallChains; | 
| -    AsyncOperationMap<Member<MutationObserver>> m_mutationObserverCallChains; | 
| -    AsyncOperationMap<ExecutionContextTask*> m_executionContextTaskCallChains; | 
| -    AsyncOperationMap<int> m_asyncOperations; | 
| - | 
| -private: | 
| -    void disposeCallChains() | 
| -    { | 
| -        m_timerCallChains.dispose(); | 
| -        m_animationFrameCallChains.dispose(); | 
| -        m_eventCallChains.dispose(); | 
| -        m_xhrCallChains.dispose(); | 
| -        m_mutationObserverCallChains.dispose(); | 
| -        m_executionContextTaskCallChains.dispose(); | 
| -        m_asyncOperations.dispose(); | 
| -    } | 
| -}; | 
| - | 
| -static XMLHttpRequest* toXmlHttpRequest(EventTarget* eventTarget) | 
| -{ | 
| -    const AtomicString& interfaceName = eventTarget->interfaceName(); | 
| -    if (interfaceName == EventTargetNames::XMLHttpRequest) | 
| -        return static_cast<XMLHttpRequest*>(eventTarget); | 
| -    if (interfaceName == EventTargetNames::XMLHttpRequestUpload) | 
| -        return static_cast<XMLHttpRequestUpload*>(eventTarget)->xmlHttpRequest(); | 
| -    return nullptr; | 
| -} | 
| - | 
| -AsyncCallTracker::AsyncCallTracker(V8DebuggerAgent* debuggerAgent, InstrumentingAgents* instrumentingAgents) | 
| -    : m_debuggerAgent(debuggerAgent) | 
| -    , m_instrumentingAgents(instrumentingAgents) | 
| -{ | 
| -} | 
| - | 
| -AsyncCallTracker::~AsyncCallTracker() | 
| -{ | 
| -} | 
| - | 
| -void AsyncCallTracker::asyncCallTrackingStateChanged(bool tracking) | 
| -{ | 
| -    m_instrumentingAgents->setAsyncCallTracker(tracking ? this : nullptr); | 
| -} | 
| - | 
| -void AsyncCallTracker::resetAsyncOperations() | 
| -{ | 
| -    for (auto& it : m_executionContextDataMap) | 
| -        it.value->unobserve(); | 
| -    m_executionContextDataMap.clear(); | 
| -} | 
| - | 
| -void AsyncCallTracker::didInstallTimer(ExecutionContext* context, int timerId, int timeout, bool singleShot) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(singleShot ? setTimeoutName : setIntervalName); | 
| -    ASSERT(timerId > 0); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(context); | 
| -    data->m_timerCallChains.set(timerId, operationId); | 
| -    if (!singleShot) | 
| -        data->m_intervalTimerIds.add(timerId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didRemoveTimer(ExecutionContext* context, int timerId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (timerId <= 0) | 
| -        return; | 
| -    ExecutionContextData* data = m_executionContextDataMap.get(context); | 
| -    if (!data) | 
| -        return; | 
| -    data->m_intervalTimerIds.remove(timerId); | 
| -    data->m_timerCallChains.remove(timerId); | 
| -} | 
| - | 
| -bool AsyncCallTracker::willFireTimer(ExecutionContext* context, int timerId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    ASSERT(timerId > 0); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { | 
| -        willFireAsyncCall(data->m_timerCallChains.get(timerId)); | 
| -        if (!data->m_intervalTimerIds.contains(timerId)) | 
| -            data->m_timerCallChains.remove(timerId); | 
| -    } else { | 
| -        willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -    } | 
| -    return true; | 
| -} | 
| - | 
| -void AsyncCallTracker::didRequestAnimationFrame(ExecutionContext* context, int callbackId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(requestAnimationFrameName); | 
| -    ASSERT(callbackId > 0); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(context); | 
| -    data->m_animationFrameCallChains.set(callbackId, operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didCancelAnimationFrame(ExecutionContext* context, int callbackId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (callbackId <= 0) | 
| -        return; | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        data->m_animationFrameCallChains.remove(callbackId); | 
| -} | 
| - | 
| -bool AsyncCallTracker::willFireAnimationFrame(ExecutionContext* context, int callbackId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    ASSERT(callbackId > 0); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { | 
| -        willFireAsyncCall(data->m_animationFrameCallChains.get(callbackId)); | 
| -        data->m_animationFrameCallChains.remove(callbackId); | 
| -    } else { | 
| -        willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -    } | 
| -    return true; | 
| -} | 
| - | 
| -void AsyncCallTracker::didEnqueueEvent(EventTarget* eventTarget, Event* event) | 
| -{ | 
| -    ASSERT(eventTarget->getExecutionContext()); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    ScriptForbiddenScope::AllowUserAgentScript allowScripting; | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(event->type()); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(eventTarget->getExecutionContext()); | 
| -    data->m_eventCallChains.set(event, operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didRemoveEvent(EventTarget* eventTarget, Event* event) | 
| -{ | 
| -    ASSERT(eventTarget->getExecutionContext()); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(eventTarget->getExecutionContext())) | 
| -        data->m_eventCallChains.remove(event); | 
| -} | 
| - | 
| -void AsyncCallTracker::willHandleEvent(EventTarget* eventTarget, Event* event, EventListener* listener, bool useCapture) | 
| -{ | 
| -    ASSERT(eventTarget->getExecutionContext()); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (XMLHttpRequest* xhr = toXmlHttpRequest(eventTarget)) { | 
| -        willHandleXHREvent(xhr, event); | 
| -    } else { | 
| -        ExecutionContext* context = eventTarget->getExecutionContext(); | 
| -        if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -            willFireAsyncCall(data->m_eventCallChains.get(event)); | 
| -        else | 
| -            willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -    } | 
| -} | 
| - | 
| -void AsyncCallTracker::willLoadXHR(XMLHttpRequest* xhr, ThreadableLoaderClient*, const AtomicString&, const KURL&, bool async, PassRefPtr<EncodedFormData>, const HTTPHeaderMap&, bool) | 
| -{ | 
| -    ASSERT(xhr->getExecutionContext()); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (!async) | 
| -        return; | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(xhrSendName); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(xhr->getExecutionContext()); | 
| -    data->m_xhrCallChains.set(xhr, operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didDispatchXHRLoadendEvent(XMLHttpRequest* xhr) | 
| -{ | 
| -    ASSERT(xhr->getExecutionContext()); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(xhr->getExecutionContext())) | 
| -        data->m_xhrCallChains.remove(xhr); | 
| -} | 
| - | 
| -void AsyncCallTracker::willHandleXHREvent(XMLHttpRequest* xhr, Event* event) | 
| -{ | 
| -    ExecutionContext* context = xhr->getExecutionContext(); | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        willFireAsyncCall(data->m_xhrCallChains.get(xhr)); | 
| -    else | 
| -        willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didEnqueueMutationRecord(ExecutionContext* context, MutationObserver* observer) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(context); | 
| -    if (data->m_mutationObserverCallChains.contains(observer)) | 
| -        return; | 
| -    ScriptForbiddenScope::AllowUserAgentScript allowScripting; | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(enqueueMutationRecordName); | 
| -    data->m_mutationObserverCallChains.set(observer, operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didClearAllMutationRecords(ExecutionContext* context, MutationObserver* observer) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        data->m_mutationObserverCallChains.remove(observer); | 
| -} | 
| - | 
| -void AsyncCallTracker::willDeliverMutationRecords(ExecutionContext* context, MutationObserver* observer) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { | 
| -        willFireAsyncCall(data->m_mutationObserverCallChains.get(observer)); | 
| -        data->m_mutationObserverCallChains.remove(observer); | 
| -    } else { | 
| -        willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -    } | 
| -} | 
| - | 
| -void AsyncCallTracker::didPostExecutionContextTask(ExecutionContext* context, ExecutionContextTask* task) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (task->taskNameForInstrumentation().isEmpty()) | 
| -        return; | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(task->taskNameForInstrumentation()); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(context); | 
| -    data->m_executionContextTaskCallChains.set(task, operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didKillAllExecutionContextTasks(ExecutionContext* context) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        data->m_executionContextTaskCallChains.clear(); | 
| -} | 
| - | 
| -void AsyncCallTracker::willPerformExecutionContextTask(ExecutionContext* context, ExecutionContextTask* task) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) { | 
| -        willFireAsyncCall(data->m_executionContextTaskCallChains.get(task)); | 
| -        data->m_executionContextTaskCallChains.remove(task); | 
| -    } else { | 
| -        willFireAsyncCall(V8DebuggerAgent::unknownAsyncOperationId); | 
| -    } | 
| -} | 
| - | 
| -int AsyncCallTracker::traceAsyncOperationStarting(ExecutionContext* context, const String& operationName, int prevOperationId) | 
| -{ | 
| -    ScriptForbiddenScope::AllowUserAgentScript allowScripting; | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (prevOperationId) | 
| -        traceAsyncOperationCompleted(context, prevOperationId); | 
| -    int operationId = m_debuggerAgent->traceAsyncOperationStarting(operationName); | 
| -    ExecutionContextData* data = createContextDataIfNeeded(context); | 
| -    data->m_asyncOperations.set(operationId, operationId); | 
| -    return operationId; | 
| -} | 
| - | 
| -void AsyncCallTracker::traceAsyncOperationCompleted(ExecutionContext* context, int operationId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    if (operationId <= 0) | 
| -        return; | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        data->m_asyncOperations.remove(operationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::traceAsyncOperationCompletedCallbackStarting(ExecutionContext* context, int operationId) | 
| -{ | 
| -    traceAsyncCallbackStarting(context, operationId); | 
| -    traceAsyncOperationCompleted(context, operationId); | 
| -} | 
| - | 
| -bool AsyncCallTracker::isKnownAsyncOperationId(ExecutionContext* context, int operationId) const | 
| -{ | 
| -    if (operationId <= 0) | 
| -        return false; | 
| -    if (ExecutionContextData* data = m_executionContextDataMap.get(context)) | 
| -        return data->m_asyncOperations.contains(operationId); | 
| -    return false; | 
| -} | 
| - | 
| -void AsyncCallTracker::traceAsyncCallbackStarting(ExecutionContext* context, int operationId) | 
| -{ | 
| -    ASSERT(context); | 
| -    ASSERT(m_debuggerAgent->trackingAsyncCalls()); | 
| -    ASSERT(operationId <= 0 || isKnownAsyncOperationId(context, operationId)); | 
| -    willFireAsyncCall(operationId > 0 ? operationId : V8DebuggerAgent::unknownAsyncOperationId); | 
| -} | 
| - | 
| -void AsyncCallTracker::didFireAsyncCall() | 
| -{ | 
| -    m_debuggerAgent->traceAsyncCallbackCompleted(); | 
| -} | 
| - | 
| -void AsyncCallTracker::willFireAsyncCall(int operationId) | 
| -{ | 
| -    m_debuggerAgent->traceAsyncCallbackStarting(operationId); | 
| -} | 
| - | 
| -AsyncCallTracker::ExecutionContextData* AsyncCallTracker::createContextDataIfNeeded(ExecutionContext* context) | 
| -{ | 
| -    ExecutionContextData* data = m_executionContextDataMap.get(context); | 
| -    if (!data) { | 
| -        data = m_executionContextDataMap.set(context, new AsyncCallTracker::ExecutionContextData(this, context)) | 
| -            .storedValue->value.get(); | 
| -    } | 
| -    return data; | 
| -} | 
| - | 
| -DEFINE_TRACE(AsyncCallTracker) | 
| -{ | 
| -    visitor->trace(m_executionContextDataMap); | 
| -    visitor->trace(m_instrumentingAgents); | 
| -} | 
| - | 
| -} // namespace blink | 
|  |