Changeset 37656 in webkit
- Timestamp:
- Oct 17, 2008 9:51:03 AM (16 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r37655 r37656 1 2008-10-17 Timothy Hatcher <timothy@apple.com> 2 3 Fixes a regression where starting a debugging session in 4 another Web Inspector window would not show any scripts. 5 Also only attach the debugger to only the required Pages. 6 7 https://bugs.webkit.org/show_bug.cgi?id=21708 8 9 Reviewed by Darin Adler. 10 11 * inspector/JavaScriptDebugServer.cpp: 12 (WebCore::JavaScriptDebugServer::addListener): Add an assert and 13 remove the call to willAddFirstListener(). Add a call to 14 didAddListener(). 15 (WebCore::JavaScriptDebugServer::removeListener): Add an assert 16 and call to didRemoveListener(). 17 (WebCore::JavaScriptDebugServer::pageCreated): Attach the debugger 18 if there is a listener interested in the new Page. 19 (WebCore::JavaScriptDebugServer::hasListenersInterestedInPage): 20 Use hasGlobalListeners() instead of isEmpty(). 21 (WebCore::JavaScriptDebugServer::sourceParsed): Ditto. 22 (WebCore::JavaScriptDebugServer::didAddListener): Added. Attach the 23 debugger to the page if non-null, or all pages if page is null. 24 (WebCore::JavaScriptDebugServer::didRemoveListener): Added. Detach 25 the debugger only if there are no interested listeners. 26 (WebCore::JavaScriptDebugServer::didRemoveLastListener): Remove the 27 call to Page::setDebuggerForAllPages(). 28 * inspector/JavaScriptDebugServer.h: 29 (WebCore::JavaScriptDebugServer::hasGlobalListeners): Added. 30 1 31 2008-10-15 Brett Wilson <brettw@chromium.org> 2 32 -
trunk/WebCore/inspector/JavaScriptDebugServer.cpp
r37622 r37656 84 84 void JavaScriptDebugServer::addListener(JavaScriptDebugListener* listener) 85 85 { 86 if (!hasListeners()) 87 willAddFirstListener(); 86 ASSERT_ARG(listener, listener); 88 87 89 88 m_listeners.add(listener); 89 90 didAddListener(0); 90 91 } 91 92 92 93 void JavaScriptDebugServer::removeListener(JavaScriptDebugListener* listener) 93 94 { 95 ASSERT_ARG(listener, listener); 96 94 97 m_listeners.remove(listener); 98 99 didRemoveListener(0); 95 100 if (!hasListeners()) 96 101 didRemoveLastListener(); … … 99 104 void JavaScriptDebugServer::addListener(JavaScriptDebugListener* listener, Page* page) 100 105 { 106 ASSERT_ARG(listener, listener); 101 107 ASSERT_ARG(page, page); 102 103 if (!hasListeners())104 willAddFirstListener();105 108 106 109 pair<PageListenersMap::iterator, bool> result = m_pageListenersMap.add(page, 0); 107 110 if (result.second) 108 111 result.first->second = new ListenerSet; 112 109 113 ListenerSet* listeners = result.first->second; 110 111 114 listeners->add(listener); 115 116 didAddListener(page); 112 117 } 113 118 114 119 void JavaScriptDebugServer::removeListener(JavaScriptDebugListener* listener, Page* page) 115 120 { 121 ASSERT_ARG(listener, listener); 116 122 ASSERT_ARG(page, page); 117 123 … … 127 133 } 128 134 135 didRemoveListener(page); 129 136 if (!hasListeners()) 130 137 didRemoveLastListener(); … … 133 140 void JavaScriptDebugServer::pageCreated(Page* page) 134 141 { 135 if (!hasListeners()) 136 return; 137 142 ASSERT_ARG(page, page); 143 144 if (!hasListenersInterestedInPage(page)) 145 return; 138 146 page->setDebugger(this); 139 147 } … … 143 151 ASSERT_ARG(page, page); 144 152 145 if ( !m_listeners.isEmpty())153 if (hasGlobalListeners()) 146 154 return true; 147 155 … … 282 290 bool isError = errorLine != -1; 283 291 284 if ( !m_listeners.isEmpty()) {292 if (hasGlobalListeners()) { 285 293 if (isError) 286 294 dispatchFailedToParseSource(m_listeners, exec, source, errorLine, errorMessage); … … 318 326 319 327 WebCore::dispatchFunctionToListeners(m_listeners, callback); 328 320 329 if (ListenerSet* pageListeners = m_pageListenersMap.get(page)) { 321 330 ASSERT(!pageListeners->isEmpty()); … … 510 519 if (m_paused) 511 520 return; 512 521 513 522 ASSERT(m_currentCallFrame); 514 523 if (!m_currentCallFrame) … … 524 533 JSLock lock(false); 525 534 JSGlobalData* globalData = JSDOMWindow::commonJSGlobalData(); 526 535 527 536 // If JavaScript is running, it's not safe to recompile, since we'll end 528 537 // up throwing away code that is live on the stack. … … 543 552 FunctionBodyMap functionBodies; 544 553 SourceProviderSet sourceProviders; 545 554 546 555 size_t size = functions.size(); 547 556 for (size_t i = 0; i < size; ++i) { 548 557 JSFunction* function = functions[i]; 549 558 550 559 FunctionBodyNode* oldBody = function->m_body.get(); 551 560 pair<FunctionBodyMap::iterator, bool> result = functionBodies.add(oldBody, 0); … … 561 570 ASSERT(newBody); 562 571 newBody->finishParsing(oldBody->copyParameters(), oldBody->parameterCount()); 563 572 564 573 result.first->second = newBody; 565 574 function->m_body = newBody.release(); … … 573 582 } 574 583 575 void JavaScriptDebugServer::willAddFirstListener() 576 { 577 Page::setDebuggerForAllPages(this); 584 void JavaScriptDebugServer::didAddListener(Page* page) 585 { 578 586 m_recompileTimer.startOneShot(0); 587 588 if (page) 589 page->setDebugger(this); 590 else 591 Page::setDebuggerForAllPages(this); 592 } 593 594 void JavaScriptDebugServer::didRemoveListener(Page* page) 595 { 596 if (hasGlobalListeners() || (page && hasListenersInterestedInPage(page))) 597 return; 598 599 if (page) 600 page->setDebugger(0); 601 else 602 Page::setDebuggerForAllPages(0); 579 603 } 580 604 581 605 void JavaScriptDebugServer::didRemoveLastListener() 582 606 { 583 Page::setDebuggerForAllPages(0);584 607 m_doneProcessingDebuggerEvents = true; 585 608 m_recompileTimer.startOneShot(0); -
trunk/WebCore/inspector/JavaScriptDebugServer.h
r37622 r37656 88 88 89 89 bool hasListeners() const { return !m_listeners.isEmpty() || !m_pageListenersMap.isEmpty(); } 90 bool hasGlobalListeners() const { return !m_listeners.isEmpty(); } 90 91 bool hasListenersInterestedInPage(Page*); 91 92 … … 107 108 virtual void didReachBreakpoint(const JSC::DebuggerCallFrame&, intptr_t sourceID, int lineno); 108 109 109 void willAddFirstListener(); 110 void didAddListener(Page*); 111 void didRemoveListener(Page*); 110 112 void didRemoveLastListener(); 111 113
Note: See TracChangeset
for help on using the changeset viewer.