Changeset 56931 in webkit


Ignore:
Timestamp:
Apr 1, 2010 12:58:34 PM (14 years ago)
Author:
eric@webkit.org
Message:

2010-04-01 Ilya Tikhonovsky <loislo@chromium.org>

Reviewed by Pavel Feldman.

Web Inspector: Sometimes js code can detach page from it's frame and in that case
Dispatch Events will stay in the TimelineAgent's events stack. Only immediate events will
appear at frontend.
https://bugs.webkit.org/show_bug.cgi?id=36890

  • bindings/v8/V8Proxy.cpp: (WebCore::V8Proxy::callFunction):
  • dom/Node.cpp: (WebCore::Node::dispatchGenericEvent):
  • page/DOMWindow.cpp: (WebCore::DOMWindow::dispatchEvent):
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56930 r56931  
     12010-04-01  Ilya Tikhonovsky  <loislo@chromium.org>
     2
     3        Reviewed by Pavel Feldman.
     4
     5        Web Inspector: Sometimes js code can detach page from it's frame and in that case
     6        Dispatch Events will stay in the TimelineAgent's events stack. Only immediate events will
     7        appear at frontend.
     8        https://bugs.webkit.org/show_bug.cgi?id=36890
     9
     10        * bindings/v8/V8Proxy.cpp:
     11        (WebCore::V8Proxy::callFunction):
     12        * dom/Node.cpp:
     13        (WebCore::Node::dispatchGenericEvent):
     14        * page/DOMWindow.cpp:
     15        (WebCore::DOMWindow::dispatchEvent):
     16
    1172010-04-01  Chris Fleizach  <cfleizach@apple.com>
    218
  • trunk/WebCore/bindings/v8/V8Proxy.cpp

    r56461 r56931  
    477477
    478478#if ENABLE(INSPECTOR)
    479         InspectorTimelineAgent* timelineAgent = 0;
    480         if (InspectorTimelineAgent::instanceCount()) {
    481             timelineAgent = m_frame->page() ? m_frame->page()->inspectorTimelineAgent() : 0;
    482             if (timelineAgent) {
     479        Page* inspectedPage = InspectorTimelineAgent::instanceCount() ? m_frame->page(): 0;
     480        if (inspectedPage)
     481            if (InspectorTimelineAgent* timelineAgent = inspectedPage->inspectorTimelineAgent()) {
    483482                v8::ScriptOrigin origin = function->GetScriptOrigin();
    484                 if (!origin.ResourceName().IsEmpty())
    485                     timelineAgent->willCallFunction(v8ValueToWebCoreString(origin.ResourceName()), function->GetScriptLineNumber() + 1);
    486                 else
    487                     timelineAgent = 0;
    488             }
    489         }
     483                String resourceName("undefined");
     484                int lineNumber = 1;
     485                if (!origin.ResourceName().IsEmpty()) {
     486                    resourceName = toWebCoreString(origin.ResourceName());
     487                    lineNumber = function->GetScriptLineNumber() + 1;
     488                }
     489                timelineAgent->willCallFunction(resourceName, lineNumber);
     490            } else
     491                inspectedPage = 0;
    490492#endif // !ENABLE(INSPECTOR)
    491493
     
    495497
    496498#if ENABLE(INSPECTOR)
    497         if (timelineAgent && m_frame->page() && timelineAgent == m_frame->page()->inspectorTimelineAgent())
    498             timelineAgent->didCallFunction();
     499        if (inspectedPage)
     500            if (InspectorTimelineAgent* timelineAgent = inspectedPage->inspectorTimelineAgent())
     501                timelineAgent->didCallFunction();
    499502#endif // !ENABLE(INSPECTOR)
    500503
  • trunk/WebCore/dom/Node.cpp

    r56825 r56931  
    26112611
    26122612#if ENABLE(INSPECTOR)
    2613     InspectorTimelineAgent* timelineAgent = document()->inspectorTimelineAgent();
    2614     bool timelineAgentIsActive = timelineAgent && eventHasListeners(event->type(), targetForWindowEvents, this, ancestors);
    2615     if (timelineAgentIsActive)
    2616         timelineAgent->willDispatchEvent(*event);
     2613    Page* inspectedPage = InspectorTimelineAgent::instanceCount() ? document()->page() : 0;
     2614    if (inspectedPage)
     2615        if (InspectorTimelineAgent* timelineAgent = eventHasListeners(event->type(), targetForWindowEvents, this, ancestors) ? inspectedPage->inspectorTimelineAgent() : 0)
     2616            timelineAgent->willDispatchEvent(*event);
     2617        else
     2618            inspectedPage = 0;
    26172619#endif
    26182620
     
    26982700doneWithDefault:
    26992701#if ENABLE(INSPECTOR)
    2700     if (timelineAgentIsActive && (timelineAgent = document()->inspectorTimelineAgent()))
    2701         timelineAgent->didDispatchEvent();
     2702    if (inspectedPage)
     2703        if (InspectorTimelineAgent* timelineAgent = inspectedPage->inspectorTimelineAgent())
     2704            timelineAgent->didDispatchEvent();
    27022705#endif
    27032706
  • trunk/WebCore/page/DOMWindow.cpp

    r56825 r56931  
    14341434
    14351435#if ENABLE(INSPECTOR)
    1436     InspectorTimelineAgent* timelineAgent = inspectorTimelineAgent();
    1437     bool timelineAgentIsActive = timelineAgent && hasEventListeners(event->type());
    1438     if (timelineAgentIsActive)
    1439         timelineAgent->willDispatchEvent(*event);
     1436    Page* inspectedPage = InspectorTimelineAgent::instanceCount() && frame() ? frame()->page() : 0;
     1437    if (inspectedPage)
     1438        if (InspectorTimelineAgent* timelineAgent = hasEventListeners(event->type()) ? inspectedPage->inspectorTimelineAgent() : 0)
     1439            timelineAgent->willDispatchEvent(*event);
     1440        else
     1441            inspectedPage = 0;
    14401442#endif
    14411443
     
    14431445
    14441446#if ENABLE(INSPECTOR)
    1445     if (timelineAgentIsActive) {
    1446       timelineAgent = inspectorTimelineAgent();
    1447       if (timelineAgent)
     1447    if (inspectedPage)
     1448        if (InspectorTimelineAgent* timelineAgent = inspectedPage->inspectorTimelineAgent())
    14481449            timelineAgent->didDispatchEvent();
    1449     }
    14501450#endif
    14511451
Note: See TracChangeset for help on using the changeset viewer.