Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 31 #include "core/inspector/InspectorDOMDebuggerAgent.h" | 31 #include "core/inspector/InspectorDOMDebuggerAgent.h" |
| 32 | 32 |
| 33 #include "bindings/core/v8/ScriptEventListener.h" | 33 #include "bindings/core/v8/ScriptEventListener.h" |
| 34 #include "bindings/core/v8/V8EventTarget.h" | 34 #include "bindings/core/v8/V8EventTarget.h" |
| 35 #include "core/dom/Element.h" | 35 #include "core/dom/Element.h" |
| 36 #include "core/dom/Node.h" | 36 #include "core/dom/Node.h" |
| 37 #include "core/events/Event.h" | 37 #include "core/events/Event.h" |
| 38 #include "core/events/EventTarget.h" | 38 #include "core/events/EventTarget.h" |
| 39 #include "core/frame/LocalDOMWindow.h" | 39 #include "core/frame/LocalDOMWindow.h" |
| 40 #include "core/inspector/InspectorDOMAgent.h" | 40 #include "core/inspector/InspectorDOMAgent.h" |
| 41 #include "core/inspector/V8InspectorStringConversion.h" | |
| 41 #include "platform/v8_inspector/public/V8InspectorSession.h" | 42 #include "platform/v8_inspector/public/V8InspectorSession.h" |
| 42 | 43 |
| 43 namespace { | 44 namespace { |
| 44 | 45 |
| 45 enum DOMBreakpointType { | 46 enum DOMBreakpointType { |
| 46 SubtreeModified = 0, | 47 SubtreeModified = 0, |
| 47 AttributeModified, | 48 AttributeModified, |
| 48 NodeRemoved, | 49 NodeRemoved, |
| 49 DOMBreakpointTypesCount | 50 DOMBreakpointTypesCount |
| 50 }; | 51 }; |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 302 else | 303 else |
| 303 breakpointsByTarget->remove(targetName.lower()); | 304 breakpointsByTarget->remove(targetName.lower()); |
| 304 didRemoveBreakpoint(); | 305 didRemoveBreakpoint(); |
| 305 } | 306 } |
| 306 | 307 |
| 307 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node) | 308 void InspectorDOMDebuggerAgent::didInvalidateStyleAttr(Node* node) |
| 308 { | 309 { |
| 309 if (hasBreakpoint(node, AttributeModified)) { | 310 if (hasBreakpoint(node, AttributeModified)) { |
| 310 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); | 311 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); |
| 311 descriptionForDOMEvent(node, AttributeModified, false, eventData.get()); | 312 descriptionForDOMEvent(node, AttributeModified, false, eventData.get()); |
| 312 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::D OM, eventData->toJSONString()); | 313 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::DOM, toV8InspectorString(eventData->toJSONString())); |
| 313 } | 314 } |
| 314 } | 315 } |
| 315 | 316 |
| 316 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node) | 317 void InspectorDOMDebuggerAgent::didInsertDOMNode(Node* node) |
| 317 { | 318 { |
| 318 if (m_domBreakpoints.size()) { | 319 if (m_domBreakpoints.size()) { |
| 319 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode( node)); | 320 uint32_t mask = m_domBreakpoints.get(InspectorDOMAgent::innerParentNode( node)); |
| 320 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTyp eShift)) & inheritableDOMBreakpointTypesMask; | 321 uint32_t inheritableTypesMask = (mask | (mask >> domBreakpointDerivedTyp eShift)) & inheritableDOMBreakpointTypesMask; |
| 321 if (inheritableTypesMask) | 322 if (inheritableTypesMask) |
| 322 updateSubtreeBreakpoints(node, inheritableTypesMask, true); | 323 updateSubtreeBreakpoints(node, inheritableTypesMask, true); |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 404 updateSubtreeBreakpoints(child, rootBit, false); | 405 updateSubtreeBreakpoints(child, rootBit, false); |
| 405 } | 406 } |
| 406 didRemoveBreakpoint(); | 407 didRemoveBreakpoint(); |
| 407 } | 408 } |
| 408 | 409 |
| 409 void InspectorDOMDebuggerAgent::getEventListeners(ErrorString* errorString, cons t String& objectId, std::unique_ptr<protocol::Array<protocol::DOMDebugger::Event Listener>>* listenersArray) | 410 void InspectorDOMDebuggerAgent::getEventListeners(ErrorString* errorString, cons t String& objectId, std::unique_ptr<protocol::Array<protocol::DOMDebugger::Event Listener>>* listenersArray) |
| 410 { | 411 { |
| 411 v8::HandleScope handles(m_isolate); | 412 v8::HandleScope handles(m_isolate); |
| 412 v8::Local<v8::Value> value; | 413 v8::Local<v8::Value> value; |
| 413 v8::Local<v8::Context> context; | 414 v8::Local<v8::Context> context; |
| 414 String16 objectGroup; | 415 v8_inspector::String16 objectGroup; |
| 415 if (!m_v8Session->unwrapObject(errorString, objectId, &value, &context, &obj ectGroup)) | 416 v8_inspector::String16 error; |
| 417 if (!m_v8Session->unwrapObject(&error, toV8InspectorString(objectId), &value , &context, &objectGroup)) { | |
| 418 *errorString = toCoreString(error); | |
| 416 return; | 419 return; |
| 420 } | |
| 417 v8::Context::Scope scope(context); | 421 v8::Context::Scope scope(context); |
| 418 *listenersArray = protocol::Array<protocol::DOMDebugger::EventListener>::cre ate(); | 422 *listenersArray = protocol::Array<protocol::DOMDebugger::EventListener>::cre ate(); |
| 419 eventListeners(context, value, objectGroup, listenersArray->get()); | 423 eventListeners(context, value, toCoreString(objectGroup), listenersArray->ge t()); |
| 420 } | 424 } |
| 421 | 425 |
| 422 void InspectorDOMDebuggerAgent::eventListeners(v8::Local<v8::Context> context, v 8::Local<v8::Value> object, const String16& objectGroup, protocol::Array<protoco l::DOMDebugger::EventListener>* listenersArray) | 426 void InspectorDOMDebuggerAgent::eventListeners(v8::Local<v8::Context> context, v 8::Local<v8::Value> object, const String& objectGroup, protocol::Array<protocol: :DOMDebugger::EventListener>* listenersArray) |
| 423 { | 427 { |
| 424 V8EventListenerInfoList eventInformation; | 428 V8EventListenerInfoList eventInformation; |
| 425 InspectorDOMDebuggerAgent::eventListenersInfoForTarget(context->GetIsolate() , object, eventInformation); | 429 InspectorDOMDebuggerAgent::eventListenersInfoForTarget(context->GetIsolate() , object, eventInformation); |
| 426 for (const auto& info : eventInformation) { | 430 for (const auto& info : eventInformation) { |
| 427 if (!info.useCapture) | 431 if (!info.useCapture) |
| 428 continue; | 432 continue; |
| 429 std::unique_ptr<protocol::DOMDebugger::EventListener> listenerObject = b uildObjectForEventListener(context, info, objectGroup); | 433 std::unique_ptr<protocol::DOMDebugger::EventListener> listenerObject = b uildObjectForEventListener(context, info, objectGroup); |
| 430 if (listenerObject) | 434 if (listenerObject) |
| 431 listenersArray->addItem(std::move(listenerObject)); | 435 listenersArray->addItem(std::move(listenerObject)); |
| 432 } | 436 } |
| 433 for (const auto& info : eventInformation) { | 437 for (const auto& info : eventInformation) { |
| 434 if (info.useCapture) | 438 if (info.useCapture) |
| 435 continue; | 439 continue; |
| 436 std::unique_ptr<protocol::DOMDebugger::EventListener> listenerObject = b uildObjectForEventListener(context, info, objectGroup); | 440 std::unique_ptr<protocol::DOMDebugger::EventListener> listenerObject = b uildObjectForEventListener(context, info, objectGroup); |
| 437 if (listenerObject) | 441 if (listenerObject) |
| 438 listenersArray->addItem(std::move(listenerObject)); | 442 listenersArray->addItem(std::move(listenerObject)); |
| 439 } | 443 } |
| 440 } | 444 } |
| 441 | 445 |
| 442 std::unique_ptr<protocol::DOMDebugger::EventListener> InspectorDOMDebuggerAgent: :buildObjectForEventListener(v8::Local<v8::Context> context, const V8EventListen erInfo& info, const String16& objectGroupId) | 446 std::unique_ptr<protocol::DOMDebugger::EventListener> InspectorDOMDebuggerAgent: :buildObjectForEventListener(v8::Local<v8::Context> context, const V8EventListen erInfo& info, const String& objectGroupId) |
| 443 { | 447 { |
| 444 if (info.handler.IsEmpty()) | 448 if (info.handler.IsEmpty()) |
| 445 return nullptr; | 449 return nullptr; |
| 446 | 450 |
| 447 v8::Isolate* isolate = context->GetIsolate(); | 451 v8::Isolate* isolate = context->GetIsolate(); |
| 448 v8::Local<v8::Function> function = eventListenerEffectiveFunction(isolate, i nfo.handler); | 452 v8::Local<v8::Function> function = eventListenerEffectiveFunction(isolate, i nfo.handler); |
| 449 if (function.IsEmpty()) | 453 if (function.IsEmpty()) |
| 450 return nullptr; | 454 return nullptr; |
| 451 | 455 |
| 452 String scriptId; | 456 String scriptId; |
| 453 int lineNumber; | 457 int lineNumber; |
| 454 int columnNumber; | 458 int columnNumber; |
| 455 getFunctionLocation(function, scriptId, lineNumber, columnNumber); | 459 getFunctionLocation(function, scriptId, lineNumber, columnNumber); |
| 456 | 460 |
| 457 std::unique_ptr<protocol::DOMDebugger::EventListener> value = protocol::DOMD ebugger::EventListener::create() | 461 std::unique_ptr<protocol::DOMDebugger::EventListener> value = protocol::DOMD ebugger::EventListener::create() |
| 458 .setType(info.eventType) | 462 .setType(info.eventType) |
| 459 .setUseCapture(info.useCapture) | 463 .setUseCapture(info.useCapture) |
| 460 .setPassive(info.passive) | 464 .setPassive(info.passive) |
| 461 .setScriptId(scriptId) | 465 .setScriptId(scriptId) |
| 462 .setLineNumber(lineNumber) | 466 .setLineNumber(lineNumber) |
| 463 .setColumnNumber(columnNumber).build(); | 467 .setColumnNumber(columnNumber).build(); |
| 464 if (!objectGroupId.isEmpty()) { | 468 if (!objectGroupId.isEmpty()) { |
| 465 value->setHandler(m_v8Session->wrapObject(context, function, objectGroup Id)); | 469 value->setHandler(m_v8Session->wrapObject(context, function, toV8Inspect orString(objectGroupId))); |
| 466 value->setOriginalHandler(m_v8Session->wrapObject(context, info.handler, objectGroupId)); | 470 value->setOriginalHandler(m_v8Session->wrapObject(context, info.handler, toV8InspectorString(objectGroupId))); |
| 467 v8::Local<v8::Function> removeFunction; | 471 v8::Local<v8::Function> removeFunction; |
| 468 if (info.removeFunction.ToLocal(&removeFunction)) | 472 if (info.removeFunction.ToLocal(&removeFunction)) |
| 469 value->setRemoveFunction(m_v8Session->wrapObject(context, removeFunc tion, objectGroupId)); | 473 value->setRemoveFunction(m_v8Session->wrapObject(context, removeFunc tion, toV8InspectorString(objectGroupId))); |
| 470 } | 474 } |
| 471 return value; | 475 return value; |
| 472 } | 476 } |
| 473 | 477 |
| 474 void InspectorDOMDebuggerAgent::allowNativeBreakpoint(const String& breakpointNa me, const String* targetName, bool sync) | 478 void InspectorDOMDebuggerAgent::allowNativeBreakpoint(const String& breakpointNa me, const String* targetName, bool sync) |
| 475 { | 479 { |
| 476 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(breakpointName, tar getName), sync); | 480 pauseOnNativeEventIfNeeded(preparePauseOnNativeEventData(breakpointName, tar getName), sync); |
| 477 } | 481 } |
| 478 | 482 |
| 479 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node* parent) | 483 void InspectorDOMDebuggerAgent::willInsertDOMNode(Node* parent) |
| 480 { | 484 { |
| 481 if (hasBreakpoint(parent, SubtreeModified)) { | 485 if (hasBreakpoint(parent, SubtreeModified)) { |
| 482 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); | 486 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); |
| 483 descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get()); | 487 descriptionForDOMEvent(parent, SubtreeModified, true, eventData.get()); |
| 484 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::D OM, eventData->toJSONString()); | 488 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::DOM, toV8InspectorString(eventData->toJSONString())); |
| 485 } | 489 } |
| 486 } | 490 } |
| 487 | 491 |
| 488 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node) | 492 void InspectorDOMDebuggerAgent::willRemoveDOMNode(Node* node) |
| 489 { | 493 { |
| 490 Node* parentNode = InspectorDOMAgent::innerParentNode(node); | 494 Node* parentNode = InspectorDOMAgent::innerParentNode(node); |
| 491 if (hasBreakpoint(node, NodeRemoved)) { | 495 if (hasBreakpoint(node, NodeRemoved)) { |
| 492 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); | 496 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); |
| 493 descriptionForDOMEvent(node, NodeRemoved, false, eventData.get()); | 497 descriptionForDOMEvent(node, NodeRemoved, false, eventData.get()); |
| 494 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::D OM, eventData->toJSONString()); | 498 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::DOM, toV8InspectorString(eventData->toJSONString())); |
| 495 } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) { | 499 } else if (parentNode && hasBreakpoint(parentNode, SubtreeModified)) { |
| 496 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); | 500 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); |
| 497 descriptionForDOMEvent(node, SubtreeModified, false, eventData.get()); | 501 descriptionForDOMEvent(node, SubtreeModified, false, eventData.get()); |
| 498 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::D OM, eventData->toJSONString()); | 502 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::DOM, toV8InspectorString(eventData->toJSONString())); |
| 499 } | 503 } |
| 500 didRemoveDOMNode(node); | 504 didRemoveDOMNode(node); |
| 501 } | 505 } |
| 502 | 506 |
| 503 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element, const Atomic String&, const AtomicString&) | 507 void InspectorDOMDebuggerAgent::willModifyDOMAttr(Element* element, const Atomic String&, const AtomicString&) |
| 504 { | 508 { |
| 505 if (hasBreakpoint(element, AttributeModified)) { | 509 if (hasBreakpoint(element, AttributeModified)) { |
| 506 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); | 510 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::Diction aryValue::create(); |
| 507 descriptionForDOMEvent(element, AttributeModified, false, eventData.get( )); | 511 descriptionForDOMEvent(element, AttributeModified, false, eventData.get( )); |
| 508 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::D OM, eventData->toJSONString()); | 512 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::DOM, toV8InspectorString(eventData->toJSONString())); |
| 509 } | 513 } |
| 510 } | 514 } |
| 511 | 515 |
| 512 void InspectorDOMDebuggerAgent::descriptionForDOMEvent(Node* target, int breakpo intType, bool insertion, protocol::DictionaryValue* description) | 516 void InspectorDOMDebuggerAgent::descriptionForDOMEvent(Node* target, int breakpo intType, bool insertion, protocol::DictionaryValue* description) |
| 513 { | 517 { |
| 514 ASSERT(hasBreakpoint(target, breakpointType)); | 518 ASSERT(hasBreakpoint(target, breakpointType)); |
| 515 | 519 |
| 516 Node* breakpointOwner = target; | 520 Node* breakpointOwner = target; |
| 517 if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { | 521 if ((1 << breakpointType) & inheritableDOMBreakpointTypesMask) { |
| 518 // For inheritable breakpoint types, target node isn't always the same a s the node that owns a breakpoint. | 522 // For inheritable breakpoint types, target node isn't always the same a s the node that owns a breakpoint. |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 565 | 569 |
| 566 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) | 570 for (Node* child = InspectorDOMAgent::innerFirstChild(node); child; child = InspectorDOMAgent::innerNextSibling(child)) |
| 567 updateSubtreeBreakpoints(child, newRootMask, set); | 571 updateSubtreeBreakpoints(child, newRootMask, set); |
| 568 } | 572 } |
| 569 | 573 |
| 570 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(std::unique_ptr<proto col::DictionaryValue> eventData, bool synchronous) | 574 void InspectorDOMDebuggerAgent::pauseOnNativeEventIfNeeded(std::unique_ptr<proto col::DictionaryValue> eventData, bool synchronous) |
| 571 { | 575 { |
| 572 if (!eventData) | 576 if (!eventData) |
| 573 return; | 577 return; |
| 574 if (synchronous) | 578 if (synchronous) |
| 575 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::E ventListener, eventData->toJSONString()); | 579 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused: :ReasonEnum::EventListener, toV8InspectorString(eventData->toJSONString())); |
| 576 else | 580 else |
| 577 m_v8Session->schedulePauseOnNextStatement(protocol::Debugger::API::Pause d::ReasonEnum::EventListener, eventData->toJSONString()); | 581 m_v8Session->schedulePauseOnNextStatement(v8_inspector::protocol::Debugg er::API::Paused::ReasonEnum::EventListener, toV8InspectorString(eventData->toJSO NString())); |
| 578 } | 582 } |
| 579 | 583 |
| 580 std::unique_ptr<protocol::DictionaryValue> InspectorDOMDebuggerAgent::preparePau seOnNativeEventData(const String& eventName, const String* targetName) | 584 std::unique_ptr<protocol::DictionaryValue> InspectorDOMDebuggerAgent::preparePau seOnNativeEventData(const String& eventName, const String* targetName) |
| 581 { | 585 { |
| 582 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta tionEventCategoryType) + eventName; | 586 String fullEventName = (targetName ? listenerEventCategoryType : instrumenta tionEventCategoryType) + eventName; |
| 583 protocol::DictionaryValue* breakpoints = eventListenerBreakpoints(); | 587 protocol::DictionaryValue* breakpoints = eventListenerBreakpoints(); |
| 584 protocol::Value* value = breakpoints->get(fullEventName); | 588 protocol::Value* value = breakpoints->get(fullEventName); |
| 585 if (!value) | 589 if (!value) |
| 586 return nullptr; | 590 return nullptr; |
| 587 bool match = false; | 591 bool match = false; |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 669 } | 673 } |
| 670 } | 674 } |
| 671 } | 675 } |
| 672 | 676 |
| 673 if (breakpointURL.isNull()) | 677 if (breakpointURL.isNull()) |
| 674 return; | 678 return; |
| 675 | 679 |
| 676 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::DictionaryV alue::create(); | 680 std::unique_ptr<protocol::DictionaryValue> eventData = protocol::DictionaryV alue::create(); |
| 677 eventData->setString("breakpointURL", breakpointURL); | 681 eventData->setString("breakpointURL", breakpointURL); |
| 678 eventData->setString("url", url); | 682 eventData->setString("url", url); |
| 679 m_v8Session->breakProgram(protocol::Debugger::API::Paused::ReasonEnum::XHR, eventData->toJSONString()); | 683 m_v8Session->breakProgram(v8_inspector::protocol::Debugger::API::Paused::Rea sonEnum::XHR, toV8InspectorString(eventData->toJSONString())); |
|
caseq
2016/08/19 02:50:36
It's seventh time we're invoking breakProgram here
| |
| 680 } | 684 } |
| 681 | 685 |
| 682 void InspectorDOMDebuggerAgent::didAddBreakpoint() | 686 void InspectorDOMDebuggerAgent::didAddBreakpoint() |
| 683 { | 687 { |
| 684 if (m_state->booleanProperty(DOMDebuggerAgentState::enabled, false)) | 688 if (m_state->booleanProperty(DOMDebuggerAgentState::enabled, false)) |
| 685 return; | 689 return; |
| 686 setEnabled(true); | 690 setEnabled(true); |
| 687 } | 691 } |
| 688 | 692 |
| 689 void InspectorDOMDebuggerAgent::didRemoveBreakpoint() | 693 void InspectorDOMDebuggerAgent::didRemoveBreakpoint() |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 709 m_instrumentingAgents->removeInspectorDOMDebuggerAgent(this); | 713 m_instrumentingAgents->removeInspectorDOMDebuggerAgent(this); |
| 710 } | 714 } |
| 711 } | 715 } |
| 712 | 716 |
| 713 void InspectorDOMDebuggerAgent::didCommitLoadForLocalFrame(LocalFrame*) | 717 void InspectorDOMDebuggerAgent::didCommitLoadForLocalFrame(LocalFrame*) |
| 714 { | 718 { |
| 715 m_domBreakpoints.clear(); | 719 m_domBreakpoints.clear(); |
| 716 } | 720 } |
| 717 | 721 |
| 718 } // namespace blink | 722 } // namespace blink |
| OLD | NEW |