Changeset 76348 in webkit
- Timestamp:
- Jan 21, 2011 8:08:45 AM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r76347 r76348 1 2011-01-21 Pavel Podivilov <podivilov@chromium.org> 2 3 Reviewed by Pavel Feldman. 4 5 Web Inspector: move sticky breakpoints management from InspectorController to InspectorBrowserDebuggerAgent. 6 https://bugs.webkit.org/show_bug.cgi?id=52874 7 8 This is the first step of debugger api refactoring (see bug 52879). 9 JavaScript breakpoints are still in the same list as native breakpoints and are restored by InspectorBrowserDebuggerAgent. 10 The second step will be to move sticky JavaScript breakpoints to InspectorDebuggerAgent. 11 12 * inspector/Inspector.idl: 13 * inspector/InspectorBrowserDebuggerAgent.cpp: 14 (WebCore::InspectorBrowserDebuggerAgent::setAllBrowserBreakpoints): 15 (WebCore::InspectorBrowserDebuggerAgent::inspectedURLChanged): 16 (WebCore::InspectorBrowserDebuggerAgent::restoreStickyBreakpoint): 17 (WebCore::InspectorBrowserDebuggerAgent::discardBindings): 18 (WebCore::InspectorBrowserDebuggerAgent::didInsertDOMNode): 19 (WebCore::InspectorBrowserDebuggerAgent::didRemoveDOMNode): 20 (WebCore::InspectorBrowserDebuggerAgent::setDOMBreakpoint): 21 (WebCore::InspectorBrowserDebuggerAgent::removeDOMBreakpoint): 22 (WebCore::InspectorBrowserDebuggerAgent::descriptionForDOMEvent): 23 (WebCore::InspectorBrowserDebuggerAgent::hasBreakpoint): 24 (WebCore::InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints): 25 * inspector/InspectorBrowserDebuggerAgent.h: 26 * inspector/InspectorController.cpp: 27 (WebCore::InspectorController::restoreInspectorStateFromCookie): 28 (WebCore::InspectorController::connectFrontend): 29 (WebCore::InspectorController::didCommitLoad): 30 (WebCore::InspectorController::enableDebugger): 31 (WebCore::InspectorController::resume): 32 (WebCore::InspectorController::inspectedURL): 33 * inspector/InspectorController.h: 34 * inspector/InspectorState.cpp: 35 (WebCore::InspectorState::InspectorState): 36 * inspector/InspectorState.h: 37 * inspector/front-end/BreakpointManager.js: 38 (WebInspector.BreakpointManager): 39 (WebInspector.BreakpointManager.prototype._saveBreakpoints): 40 1 41 2011-01-21 John Knottenbelt <jknotten@chromium.org> 2 42 -
trunk/Source/WebCore/inspector/Inspector.idl
r76249 r76348 243 243 [domain=Inspector] void disableDebugger(in boolean always); 244 244 245 [domain=Inspector] void set StickyBreakpoints(in Object breakpoints);245 [domain=Inspector] void setAllBrowserBreakpoints(in Object breakpoints); 246 246 247 247 [notify, domain=Debugger] void debuggerWasEnabled(); -
trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.cpp
r76240 r76348 72 72 } 73 73 74 void InspectorBrowserDebuggerAgent::inspectedURLChanged(const KURL& url) 75 { 76 m_eventListenerBreakpoints.clear(); 77 m_XHRBreakpoints.clear(); 78 m_hasXHRBreakpointWithEmptyURL = false; 79 80 RefPtr<InspectorObject> allBreakpoints = m_inspectorController->state()->getObject(InspectorState::browserBreakpoints); 81 KURL urlCopy = url; 82 urlCopy.removeFragmentIdentifier(); 83 RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(urlCopy); 84 if (!breakpoints) 85 return; 86 for (unsigned i = 0; i < breakpoints->length(); ++i) 87 restoreStickyBreakpoint(breakpoints->get(i)->asObject()); 88 } 89 90 void InspectorBrowserDebuggerAgent::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint) 91 { 92 DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener")); 93 DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS")); 94 DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR")); 95 96 if (!breakpoint) 97 return; 98 String type; 99 if (!breakpoint->getString("type", &type)) 100 return; 101 bool enabled; 102 if (!breakpoint->getBoolean("enabled", &enabled)) 103 return; 104 RefPtr<InspectorObject> condition = breakpoint->getObject("condition"); 105 if (!condition) 106 return; 107 108 if (type == eventListenerBreakpointType) { 109 if (!enabled) 110 return; 111 String eventName; 112 if (!condition->getString("eventName", &eventName)) 113 return; 114 setEventListenerBreakpoint(eventName); 115 } else if (type == javaScriptBreakpointType && m_inspectorController->debuggerAgent()) { 116 String url; 117 if (!condition->getString("url", &url)) 118 return; 119 double lineNumber; 120 if (!condition->getNumber("lineNumber", &lineNumber)) 121 return; 122 String javaScriptCondition; 123 if (!condition->getString("condition", &javaScriptCondition)) 124 return; 125 m_inspectorController->debuggerAgent()->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled); 126 } else if (type == xhrBreakpointType) { 127 if (!enabled) 128 return; 129 String url; 130 if (!condition->getString("url", &url)) 131 return; 132 setXHRBreakpoint(url); 133 } 134 } 135 74 136 void InspectorBrowserDebuggerAgent::discardBindings() 75 137 { 76 m_ breakpoints.clear();138 m_domBreakpoints.clear(); 77 139 } 78 140 … … 89 151 void InspectorBrowserDebuggerAgent::didInsertDOMNode(Node* node) 90 152 { 91 if (m_ breakpoints.size()) {92 uint32_t mask = m_ breakpoints.get(InspectorDOMAgent::innerParentNode(node));153 if (m_domBreakpoints.size()) { 154 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode(node)); 93 155 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTypeShift)) & inheritableDOMBreakpointTypesMask; 94 156 if (inheritableTypesMask) … … 99 161 void InspectorBrowserDebuggerAgent::didRemoveDOMNode(Node* node) 100 162 { 101 if (m_ breakpoints.size()) {163 if (m_domBreakpoints.size()) { 102 164 // Remove subtree breakpoints. 103 m_ breakpoints.remove(node);165 m_domBreakpoints.remove(node); 104 166 Vector<Node*> stack(1, InspectorDOMAgent::innerFirstChild(node)); 105 167 do { … … 108 170 if (!node) 109 171 continue; 110 m_ breakpoints.remove(node);172 m_domBreakpoints.remove(node); 111 173 stack.append(InspectorDOMAgent::innerFirstChild(node)); 112 174 stack.append(InspectorDOMAgent::innerNextSibling(node)); … … 122 184 123 185 uint32_t rootBit = 1 << type; 124 m_ breakpoints.set(node, m_breakpoints.get(node) | rootBit);186 m_domBreakpoints.set(node, m_domBreakpoints.get(node) | rootBit); 125 187 if (rootBit & inheritableDOMBreakpointTypesMask) { 126 188 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) … … 136 198 137 199 uint32_t rootBit = 1 << type; 138 uint32_t mask = m_ breakpoints.get(node) & ~rootBit;200 uint32_t mask = m_domBreakpoints.get(node) & ~rootBit; 139 201 if (mask) 140 m_ breakpoints.set(node, mask);141 else 142 m_ breakpoints.remove(node);202 m_domBreakpoints.set(node, mask); 203 else 204 m_domBreakpoints.remove(node); 143 205 144 206 if ((rootBit & inheritableDOMBreakpointTypesMask) && !(mask & (rootBit << domBreakpointDerivedTypeShift))) { … … 211 273 breakpointOwner = InspectorDOMAgent::innerParentNode(target); 212 274 ASSERT(breakpointOwner); 213 while (!(m_ breakpoints.get(breakpointOwner) & (1 << breakpointType))) {275 while (!(m_domBreakpoints.get(breakpointOwner) & (1 << breakpointType))) { 214 276 breakpointOwner = InspectorDOMAgent::innerParentNode(breakpointOwner); 215 277 ASSERT(breakpointOwner); … … 230 292 uint32_t rootBit = 1 << type; 231 293 uint32_t derivedBit = rootBit << domBreakpointDerivedTypeShift; 232 return m_ breakpoints.get(node) & (rootBit | derivedBit);294 return m_domBreakpoints.get(node) & (rootBit | derivedBit); 233 295 } 234 296 235 297 void InspectorBrowserDebuggerAgent::updateSubtreeBreakpoints(Node* node, uint32_t rootMask, bool set) 236 298 { 237 uint32_t oldMask = m_ breakpoints.get(node);299 uint32_t oldMask = m_domBreakpoints.get(node); 238 300 uint32_t derivedMask = rootMask << domBreakpointDerivedTypeShift; 239 301 uint32_t newMask = set ? oldMask | derivedMask : oldMask & ~derivedMask; 240 302 if (newMask) 241 m_ breakpoints.set(node, newMask);242 else 243 m_ breakpoints.remove(node);303 m_domBreakpoints.set(node, newMask); 304 else 305 m_domBreakpoints.remove(node); 244 306 245 307 uint32_t newRootMask = rootMask & ~newMask; … … 314 376 } 315 377 316 void InspectorBrowserDebuggerAgent::clearForPageNavigation()317 {318 m_eventListenerBreakpoints.clear();319 m_XHRBreakpoints.clear();320 m_hasXHRBreakpointWithEmptyURL = false;321 }322 323 378 } // namespace WebCore 324 379 -
trunk/Source/WebCore/inspector/InspectorBrowserDebuggerAgent.h
r76248 r76348 47 47 class InspectorController; 48 48 class InspectorObject; 49 class KURL; 49 50 class Node; 50 51 … … 58 59 59 60 virtual ~InspectorBrowserDebuggerAgent(); 61 62 void inspectedURLChanged(const KURL&); 60 63 61 64 // BrowserDebugger API for InspectorFrontend … … 76 79 void pauseOnNativeEventIfNeeded(const String& categoryType, const String& eventName, bool synchronous); 77 80 78 void clearForPageNavigation();79 81 private: 80 82 InspectorBrowserDebuggerAgent(InspectorController*); 83 84 void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint); 81 85 82 86 void descriptionForDOMEvent(Node* target, long breakpointType, bool insertion, InspectorObject* description); … … 86 90 87 91 InspectorController* m_inspectorController; 88 HashMap<Node*, uint32_t> m_ breakpoints;92 HashMap<Node*, uint32_t> m_domBreakpoints; 89 93 HashSet<String> m_eventListenerBreakpoints; 90 94 HashSet<String> m_XHRBreakpoints; -
trunk/Source/WebCore/inspector/InspectorController.cpp
r76344 r76348 223 223 connectFrontend(); 224 224 m_frontend->frontendReused(); 225 m_frontend->inspectedURLChanged( m_inspectedPage->mainFrame()->loader()->url().string());225 m_frontend->inspectedURLChanged(inspectedURL().string()); 226 226 m_domAgent->setDocument(m_inspectedPage->mainFrame()->document()); 227 227 pushDataCollectedOffline(); … … 400 400 401 401 // Initialize Web Inspector title. 402 m_frontend->inspectedURLChanged( m_inspectedPage->mainFrame()->loader()->url().string());402 m_frontend->inspectedURLChanged(inspectedURL().string()); 403 403 404 404 #if ENABLE(OFFLINE_WEB_APPLICATIONS) … … 644 644 m_debuggerAgent->clearForPageNavigation(); 645 645 if (m_browserDebuggerAgent) 646 m_browserDebuggerAgent->clearForPageNavigation(); 647 restoreStickyBreakpoints(); 646 m_browserDebuggerAgent->inspectedURLChanged(inspectedURL()); 648 647 } 649 648 #endif … … 1051 1050 m_debuggerAgent = InspectorDebuggerAgent::create(this, m_frontend.get()); 1052 1051 m_browserDebuggerAgent = InspectorBrowserDebuggerAgent::create(this); 1053 restoreStickyBreakpoints();1052 m_browserDebuggerAgent->inspectedURLChanged(inspectedURL()); 1054 1053 1055 1054 m_frontend->debuggerWasEnabled(); … … 1081 1080 } 1082 1081 1083 void InspectorController::setStickyBreakpoints(PassRefPtr<InspectorObject> breakpoints) 1084 { 1085 m_state->setObject(InspectorState::stickyBreakpoints, breakpoints); 1086 } 1087 1088 void InspectorController::restoreStickyBreakpoints() 1089 { 1090 RefPtr<InspectorObject> allBreakpoints = m_state->getObject(InspectorState::stickyBreakpoints); 1091 KURL url = m_inspectedPage->mainFrame()->loader()->url(); 1092 url.removeFragmentIdentifier(); 1093 RefPtr<InspectorArray> breakpoints = allBreakpoints->getArray(url); 1094 if (!breakpoints) 1095 return; 1096 for (unsigned i = 0; i < breakpoints->length(); ++i) 1097 restoreStickyBreakpoint(breakpoints->get(i)->asObject()); 1098 } 1099 1100 void InspectorController::restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint) 1101 { 1102 DEFINE_STATIC_LOCAL(String, eventListenerBreakpointType, ("EventListener")); 1103 DEFINE_STATIC_LOCAL(String, javaScriptBreakpointType, ("JS")); 1104 DEFINE_STATIC_LOCAL(String, xhrBreakpointType, ("XHR")); 1105 1106 if (!breakpoint) 1107 return; 1108 String type; 1109 if (!breakpoint->getString("type", &type)) 1110 return; 1111 bool enabled; 1112 if (!breakpoint->getBoolean("enabled", &enabled)) 1113 return; 1114 RefPtr<InspectorObject> condition = breakpoint->getObject("condition"); 1115 if (!condition) 1116 return; 1117 1118 if (type == eventListenerBreakpointType && m_browserDebuggerAgent) { 1119 if (!enabled) 1120 return; 1121 String eventName; 1122 if (!condition->getString("eventName", &eventName)) 1123 return; 1124 m_browserDebuggerAgent->setEventListenerBreakpoint(eventName); 1125 } else if (type == javaScriptBreakpointType && m_debuggerAgent) { 1126 String url; 1127 if (!condition->getString("url", &url)) 1128 return; 1129 double lineNumber; 1130 if (!condition->getNumber("lineNumber", &lineNumber)) 1131 return; 1132 String javaScriptCondition; 1133 if (!condition->getString("condition", &javaScriptCondition)) 1134 return; 1135 m_debuggerAgent->setStickyBreakpoint(url, static_cast<unsigned>(lineNumber), javaScriptCondition, enabled); 1136 } else if (type == xhrBreakpointType && m_browserDebuggerAgent) { 1137 if (!enabled) 1138 return; 1139 String url; 1140 if (!condition->getString("url", &url)) 1141 return; 1142 m_browserDebuggerAgent->setXHRBreakpoint(url); 1143 } 1082 void InspectorController::setAllBrowserBreakpoints(PassRefPtr<InspectorObject> breakpoints) 1083 { 1084 m_state->setObject(InspectorState::browserBreakpoints, breakpoints); 1144 1085 } 1145 1086 #endif … … 1442 1383 } 1443 1384 1385 KURL InspectorController::inspectedURL() const 1386 { 1387 return m_inspectedPage->mainFrame()->loader()->url(); 1388 } 1389 1444 1390 void InspectorController::reloadPage() 1445 1391 { -
trunk/Source/WebCore/inspector/InspectorController.h
r76344 r76348 126 126 127 127 Page* inspectedPage() const { return m_inspectedPage; } 128 KURL inspectedURL() const; 128 129 void reloadPage(); 129 130 … … 243 244 void resume(); 244 245 245 void set StickyBreakpoints(PassRefPtr<InspectorObject> breakpoints);246 void setAllBrowserBreakpoints(PassRefPtr<InspectorObject>); 246 247 #endif 247 248 … … 288 289 #if ENABLE(JAVASCRIPT_DEBUGGER) 289 290 void toggleRecordButton(bool); 290 void restoreStickyBreakpoints();291 void restoreStickyBreakpoint(PassRefPtr<InspectorObject> breakpoint);292 291 #endif 293 292 -
trunk/Source/WebCore/inspector/InspectorState.cpp
r76249 r76348 43 43 registerBoolean(timelineProfilerEnabled, false); 44 44 registerBoolean(searchingForNode, false); 45 registerObject( stickyBreakpoints);45 registerObject(browserBreakpoints); 46 46 registerBoolean(consoleMessagesEnabled, false); 47 47 registerBoolean(monitoringXHR, false); -
trunk/Source/WebCore/inspector/InspectorState.h
r76249 r76348 50 50 consoleMessagesEnabled, 51 51 userInitiatedProfiling, 52 stickyBreakpoints,52 browserBreakpoints, 53 53 resourceAgentEnabled, 54 54 lastPropertyId -
trunk/Source/WebCore/inspector/front-end/BreakpointManager.js
r74477 r76348 35 35 for (var projectId in breakpoints) 36 36 this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]); 37 InspectorBackend.set StickyBreakpoints(this._stickyBreakpoints);37 InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints); 38 38 39 39 this._breakpoints = {}; … … 304 304 305 305 this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints; 306 InspectorBackend.set StickyBreakpoints(this._stickyBreakpoints);306 InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints); 307 307 }, 308 308
Note: See TracChangeset
for help on using the changeset viewer.