Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(16)

Side by Side Diff: third_party/WebKit/Source/platform/v8_inspector/V8DebuggerAgentImpl.cpp

Issue 1745423002: DevTools: migrate protocol values from RefPtr to OwnPtr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "platform/v8_inspector/V8DebuggerAgentImpl.h" 5 #include "platform/v8_inspector/V8DebuggerAgentImpl.h"
6 6
7 #include "platform/inspector_protocol/Values.h" 7 #include "platform/inspector_protocol/Values.h"
8 #include "platform/v8_inspector/AsyncCallChain.h" 8 #include "platform/v8_inspector/AsyncCallChain.h"
9 #include "platform/v8_inspector/IgnoreExceptionsScope.h" 9 #include "platform/v8_inspector/IgnoreExceptionsScope.h"
10 #include "platform/v8_inspector/InjectedScript.h" 10 #include "platform/v8_inspector/InjectedScript.h"
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 { 229 {
230 if (depth <= 0) { 230 if (depth <= 0) {
231 m_maxAsyncCallStackDepth = 0; 231 m_maxAsyncCallStackDepth = 0;
232 resetAsyncCallTracker(); 232 resetAsyncCallTracker();
233 } else { 233 } else {
234 m_maxAsyncCallStackDepth = depth; 234 m_maxAsyncCallStackDepth = depth;
235 } 235 }
236 m_v8AsyncCallTracker->asyncCallTrackingStateChanged(m_maxAsyncCallStackDepth ); 236 m_v8AsyncCallTracker->asyncCallTrackingStateChanged(m_maxAsyncCallStackDepth );
237 } 237 }
238 238
239 void V8DebuggerAgentImpl::setInspectorState(PassRefPtr<protocol::DictionaryValue > state) 239 void V8DebuggerAgentImpl::setInspectorState(protocol::DictionaryValue* state)
240 { 240 {
241 m_state = state; 241 m_state = state;
242 } 242 }
243 243
244 void V8DebuggerAgentImpl::clearFrontend() 244 void V8DebuggerAgentImpl::clearFrontend()
245 { 245 {
246 ErrorString error; 246 ErrorString error;
247 disable(&error); 247 disable(&error);
248 ASSERT(m_frontend); 248 ASSERT(m_frontend);
249 m_frontend = nullptr; 249 m_frontend = nullptr;
(...skipping 30 matching lines...) Expand all
280 { 280 {
281 m_skipAllPauses = skipped; 281 m_skipAllPauses = skipped;
282 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses); 282 m_state->setBoolean(DebuggerAgentState::skipAllPauses, m_skipAllPauses);
283 } 283 }
284 284
285 bool V8DebuggerAgentImpl::isPaused() 285 bool V8DebuggerAgentImpl::isPaused()
286 { 286 {
287 return debugger().isPaused(); 287 return debugger().isPaused();
288 } 288 }
289 289
290 static PassRefPtr<protocol::DictionaryValue> buildObjectForBreakpointCookie(cons t String& url, int lineNumber, int columnNumber, const String& condition, bool i sRegex) 290 static PassOwnPtr<protocol::DictionaryValue> buildObjectForBreakpointCookie(cons t String& url, int lineNumber, int columnNumber, const String& condition, bool i sRegex)
291 { 291 {
292 RefPtr<protocol::DictionaryValue> breakpointObject = protocol::DictionaryVal ue::create(); 292 OwnPtr<protocol::DictionaryValue> breakpointObject = protocol::DictionaryVal ue::create();
293 breakpointObject->setString(DebuggerAgentState::url, url); 293 breakpointObject->setString(DebuggerAgentState::url, url);
294 breakpointObject->setNumber(DebuggerAgentState::lineNumber, lineNumber); 294 breakpointObject->setNumber(DebuggerAgentState::lineNumber, lineNumber);
295 breakpointObject->setNumber(DebuggerAgentState::columnNumber, columnNumber); 295 breakpointObject->setNumber(DebuggerAgentState::columnNumber, columnNumber);
296 breakpointObject->setString(DebuggerAgentState::condition, condition); 296 breakpointObject->setString(DebuggerAgentState::condition, condition);
297 breakpointObject->setBoolean(DebuggerAgentState::isRegex, isRegex); 297 breakpointObject->setBoolean(DebuggerAgentState::isRegex, isRegex);
298 return breakpointObject.release(); 298 return breakpointObject.release();
299 } 299 }
300 300
301 static bool matches(V8DebuggerImpl* debugger, const String& url, const String& p attern, bool isRegex) 301 static bool matches(V8DebuggerImpl* debugger, const String& url, const String& p attern, bool isRegex)
302 { 302 {
(...skipping 25 matching lines...) Expand all
328 columnNumber = optionalColumnNumber.fromJust(); 328 columnNumber = optionalColumnNumber.fromJust();
329 if (columnNumber < 0) { 329 if (columnNumber < 0) {
330 *errorString = "Incorrect column number"; 330 *errorString = "Incorrect column number";
331 return; 331 return;
332 } 332 }
333 } 333 }
334 String condition = optionalCondition.fromMaybe(""); 334 String condition = optionalCondition.fromMaybe("");
335 bool isRegex = optionalURLRegex.isJust(); 335 bool isRegex = optionalURLRegex.isJust();
336 336
337 String breakpointId = (isRegex ? "/" + url + "/" : url) + ':' + String::numb er(lineNumber) + ':' + String::number(columnNumber); 337 String breakpointId = (isRegex ? "/" + url + "/" : url) + ':' + String::numb er(lineNumber) + ':' + String::number(columnNumber);
338 RefPtr<protocol::DictionaryValue> breakpointsCookie = m_state->getObject(Deb uggerAgentState::javaScriptBreakpoints); 338 protocol::DictionaryValue* breakpointsCookie = m_state->getObject(DebuggerAg entState::javaScriptBreakpoints);
339 if (!breakpointsCookie) { 339 if (!breakpointsCookie) {
340 breakpointsCookie = protocol::DictionaryValue::create(); 340 OwnPtr<protocol::DictionaryValue> newValue = protocol::DictionaryValue:: create();
341 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, breakpoint sCookie); 341 breakpointsCookie = newValue.get();
342 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, newValue.r elease());
342 } 343 }
343 if (breakpointsCookie->find(breakpointId) != breakpointsCookie->end()) { 344 if (breakpointsCookie->get(breakpointId)) {
344 *errorString = "Breakpoint at specified location already exists."; 345 *errorString = "Breakpoint at specified location already exists.";
345 return; 346 return;
346 } 347 }
347 348
348 breakpointsCookie->setObject(breakpointId, buildObjectForBreakpointCookie(ur l, lineNumber, columnNumber, condition, isRegex)); 349 breakpointsCookie->setObject(breakpointId, buildObjectForBreakpointCookie(ur l, lineNumber, columnNumber, condition, isRegex));
349 m_state->setObject(DebuggerAgentState::javaScriptBreakpoints, breakpointsCoo kie);
350 350
351 ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition); 351 ScriptBreakpoint breakpoint(lineNumber, columnNumber, condition);
352 for (auto& script : m_scripts) { 352 for (auto& script : m_scripts) {
353 if (!matches(m_debugger, script.value.sourceURL(), url, isRegex)) 353 if (!matches(m_debugger, script.value.sourceURL(), url, isRegex))
354 continue; 354 continue;
355 OwnPtr<protocol::Debugger::Location> location = resolveBreakpoint(breakp ointId, script.key, breakpoint, UserBreakpointSource); 355 OwnPtr<protocol::Debugger::Location> location = resolveBreakpoint(breakp ointId, script.key, breakpoint, UserBreakpointSource);
356 if (location) 356 if (location)
357 (*locations)->addItem(location.release()); 357 (*locations)->addItem(location.release());
358 } 358 }
359 359
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 if (*actualLocation) 393 if (*actualLocation)
394 *outBreakpointId = breakpointId; 394 *outBreakpointId = breakpointId;
395 else 395 else
396 *errorString = "Could not resolve breakpoint"; 396 *errorString = "Could not resolve breakpoint";
397 } 397 }
398 398
399 void V8DebuggerAgentImpl::removeBreakpoint(ErrorString* errorString, const Strin g& breakpointId) 399 void V8DebuggerAgentImpl::removeBreakpoint(ErrorString* errorString, const Strin g& breakpointId)
400 { 400 {
401 if (!checkEnabled(errorString)) 401 if (!checkEnabled(errorString))
402 return; 402 return;
403 RefPtr<protocol::DictionaryValue> breakpointsCookie = m_state->getObject(Deb uggerAgentState::javaScriptBreakpoints); 403 protocol::DictionaryValue* breakpointsCookie = m_state->getObject(DebuggerAg entState::javaScriptBreakpoints);
404 if (breakpointsCookie) 404 if (breakpointsCookie)
405 breakpointsCookie->remove(breakpointId); 405 breakpointsCookie->remove(breakpointId);
406 removeBreakpoint(breakpointId); 406 removeBreakpoint(breakpointId);
407 } 407 }
408 408
409 void V8DebuggerAgentImpl::removeBreakpoint(const String& breakpointId) 409 void V8DebuggerAgentImpl::removeBreakpoint(const String& breakpointId)
410 { 410 {
411 ASSERT(enabled()); 411 ASSERT(enabled());
412 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId); 412 BreakpointIdToDebuggerBreakpointIdsMap::iterator debuggerBreakpointIdsIterat or = m_breakpointIdToDebuggerBreakpointIds.find(breakpointId);
413 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd()) 413 if (debuggerBreakpointIdsIterator == m_breakpointIdToDebuggerBreakpointIds.e nd())
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
720 return; 720 return;
721 } 721 }
722 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (remoteId.get()); 722 InjectedScript* injectedScript = m_injectedScriptManager->findInjectedScript (remoteId.get());
723 if (!injectedScript) { 723 if (!injectedScript) {
724 *errorString = "Inspected frame has gone"; 724 *errorString = "Inspected frame has gone";
725 return; 725 return;
726 } 726 }
727 injectedScript->getCollectionEntries(errorString, objectId, entries); 727 injectedScript->getCollectionEntries(errorString, objectId, entries);
728 } 728 }
729 729
730 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String& breakReason , PassRefPtr<protocol::DictionaryValue> data) 730 void V8DebuggerAgentImpl::schedulePauseOnNextStatement(const String& breakReason , PassOwnPtr<protocol::DictionaryValue> data)
731 { 731 {
732 ASSERT(enabled()); 732 ASSERT(enabled());
733 if (m_scheduledDebuggerStep == StepInto || m_javaScriptPauseScheduled || isP aused()) 733 if (m_scheduledDebuggerStep == StepInto || m_javaScriptPauseScheduled || isP aused())
734 return; 734 return;
735 m_breakReason = breakReason; 735 m_breakReason = breakReason;
736 m_breakAuxData = data; 736 m_breakAuxData = data;
737 m_pausingOnNativeEvent = true; 737 m_pausingOnNativeEvent = true;
738 m_skipNextDebuggerStepOut = false; 738 m_skipNextDebuggerStepOut = false;
739 debugger().setPauseOnNextStatement(true); 739 debugger().setPauseOnNextStatement(true);
740 } 740 }
(...skipping 236 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 } 977 }
978 injectedScript = m_injectedScriptManager->findInjectedScript(remoteId.ge t()); 978 injectedScript = m_injectedScriptManager->findInjectedScript(remoteId.ge t());
979 if (!injectedScript) { 979 if (!injectedScript) {
980 *errorString = "Function object id cannot be resolved"; 980 *errorString = "Function object id cannot be resolved";
981 return; 981 return;
982 } 982 }
983 } else { 983 } else {
984 *errorString = "Either call frame or function object must be specified"; 984 *errorString = "Either call frame or function object must be specified";
985 return; 985 return;
986 } 986 }
987 String newValueString = protocol::toValue(newValue)->toJSONString(); 987 String newValueString = protocol::toValue(newValue.get())->toJSONString();
988 v8::HandleScope scope(m_isolate); 988 v8::HandleScope scope(m_isolate);
989 v8::Local<v8::Object> currentCallStack = m_currentCallStack.Get(m_isolate); 989 v8::Local<v8::Object> currentCallStack = m_currentCallStack.Get(m_isolate);
990 injectedScript->setVariableValue(errorString, currentCallStack, callFrameId, functionObjectId, scopeNumber, variableName, newValueString); 990 injectedScript->setVariableValue(errorString, currentCallStack, callFrameId, functionObjectId, scopeNumber, variableName, newValueString);
991 } 991 }
992 992
993 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth) 993 void V8DebuggerAgentImpl::setAsyncCallStackDepth(ErrorString* errorString, int d epth)
994 { 994 {
995 if (!checkEnabled(errorString)) 995 if (!checkEnabled(errorString))
996 return; 996 return;
997 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, depth); 997 m_state->setNumber(DebuggerAgentState::asyncCallStackDepth, depth);
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
1438 if (parsedScript.success) 1438 if (parsedScript.success)
1439 m_frontend->scriptParsed(parsedScript.scriptId, scriptURL, script.startL ine(), script.startColumn(), script.endLine(), script.endColumn(), executionCont extId, isContentScriptParam, isInternalScriptParam, isLiveEditParam, sourceMapUR LParam, hasSourceURLParam, deprecatedCommentWasUsedParam); 1439 m_frontend->scriptParsed(parsedScript.scriptId, scriptURL, script.startL ine(), script.startColumn(), script.endLine(), script.endColumn(), executionCont extId, isContentScriptParam, isInternalScriptParam, isLiveEditParam, sourceMapUR LParam, hasSourceURLParam, deprecatedCommentWasUsedParam);
1440 else 1440 else
1441 m_frontend->scriptFailedToParse(parsedScript.scriptId, scriptURL, script .startLine(), script.startColumn(), script.endLine(), script.endColumn(), execut ionContextId, isContentScriptParam, isInternalScriptParam, sourceMapURLParam, ha sSourceURLParam, deprecatedCommentWasUsedParam); 1441 m_frontend->scriptFailedToParse(parsedScript.scriptId, scriptURL, script .startLine(), script.startColumn(), script.endLine(), script.endColumn(), execut ionContextId, isContentScriptParam, isInternalScriptParam, sourceMapURLParam, ha sSourceURLParam, deprecatedCommentWasUsedParam);
1442 1442
1443 m_scripts.set(parsedScript.scriptId, script); 1443 m_scripts.set(parsedScript.scriptId, script);
1444 1444
1445 if (scriptURL.isEmpty() || !parsedScript.success) 1445 if (scriptURL.isEmpty() || !parsedScript.success)
1446 return; 1446 return;
1447 1447
1448 RefPtr<protocol::DictionaryValue> breakpointsCookie = m_state->getObject(Deb uggerAgentState::javaScriptBreakpoints); 1448 protocol::DictionaryValue* breakpointsCookie = m_state->getObject(DebuggerAg entState::javaScriptBreakpoints);
1449 if (!breakpointsCookie) 1449 if (!breakpointsCookie)
1450 return; 1450 return;
1451 1451
1452 for (auto& cookie : *breakpointsCookie) { 1452 for (auto& cookie : *breakpointsCookie) {
1453 RefPtr<protocol::DictionaryValue> breakpointObject = protocol::Dictionar yValue::cast(cookie.value); 1453 protocol::DictionaryValue* breakpointObject = protocol::DictionaryValue: :cast(cookie.value.get());
1454 bool isRegex; 1454 bool isRegex;
1455 breakpointObject->getBoolean(DebuggerAgentState::isRegex, &isRegex); 1455 breakpointObject->getBoolean(DebuggerAgentState::isRegex, &isRegex);
1456 String url; 1456 String url;
1457 breakpointObject->getString(DebuggerAgentState::url, &url); 1457 breakpointObject->getString(DebuggerAgentState::url, &url);
1458 if (!matches(m_debugger, scriptURL, url, isRegex)) 1458 if (!matches(m_debugger, scriptURL, url, isRegex))
1459 continue; 1459 continue;
1460 ScriptBreakpoint breakpoint; 1460 ScriptBreakpoint breakpoint;
1461 breakpointObject->getNumber(DebuggerAgentState::lineNumber, &breakpoint. lineNumber); 1461 breakpointObject->getNumber(DebuggerAgentState::lineNumber, &breakpoint. lineNumber);
1462 breakpointObject->getNumber(DebuggerAgentState::columnNumber, &breakpoin t.columnNumber); 1462 breakpointObject->getNumber(DebuggerAgentState::columnNumber, &breakpoin t.columnNumber);
1463 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition); 1463 breakpointObject->getString(DebuggerAgentState::condition, &breakpoint.c ondition);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1521 1521
1522 BreakpointSource source = breakpointIterator->value.second; 1522 BreakpointSource source = breakpointIterator->value.second;
1523 if (m_breakReason == protocol::Debugger::Paused::ReasonEnum::Other & & source == DebugCommandBreakpointSource) 1523 if (m_breakReason == protocol::Debugger::Paused::ReasonEnum::Other & & source == DebugCommandBreakpointSource)
1524 m_breakReason = protocol::Debugger::Paused::ReasonEnum::DebugCom mand; 1524 m_breakReason = protocol::Debugger::Paused::ReasonEnum::DebugCom mand;
1525 } 1525 }
1526 } 1526 }
1527 1527
1528 if (!m_asyncOperationNotifications.isEmpty()) 1528 if (!m_asyncOperationNotifications.isEmpty())
1529 flushAsyncOperationEvents(nullptr); 1529 flushAsyncOperationEvents(nullptr);
1530 1530
1531 m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData, hitBr eakpointIds.release(), currentAsyncStackTrace()); 1531 m_frontend->paused(currentCallFrames(), m_breakReason, m_breakAuxData.releas e(), hitBreakpointIds.release(), currentAsyncStackTrace());
1532 m_scheduledDebuggerStep = NoStep; 1532 m_scheduledDebuggerStep = NoStep;
1533 m_javaScriptPauseScheduled = false; 1533 m_javaScriptPauseScheduled = false;
1534 m_steppingFromFramework = false; 1534 m_steppingFromFramework = false;
1535 m_pausingOnNativeEvent = false; 1535 m_pausingOnNativeEvent = false;
1536 m_skippedStepFrameCount = 0; 1536 m_skippedStepFrameCount = 0;
1537 m_recursionLevelForStepFrame = 0; 1537 m_recursionLevelForStepFrame = 0;
1538 clearStepIntoAsync(); 1538 clearStepIntoAsync();
1539 1539
1540 if (!m_continueToLocationBreakpointId.isEmpty()) { 1540 if (!m_continueToLocationBreakpointId.isEmpty()) {
1541 debugger().removeBreakpoint(m_continueToLocationBreakpointId); 1541 debugger().removeBreakpoint(m_continueToLocationBreakpointId);
1542 m_continueToLocationBreakpointId = ""; 1542 m_continueToLocationBreakpointId = "";
1543 } 1543 }
1544 return result; 1544 return result;
1545 } 1545 }
1546 1546
1547 void V8DebuggerAgentImpl::didContinue() 1547 void V8DebuggerAgentImpl::didContinue()
1548 { 1548 {
1549 m_pausedContext.Reset(); 1549 m_pausedContext.Reset();
1550 m_currentCallStack.Reset(); 1550 m_currentCallStack.Reset();
1551 clearBreakDetails(); 1551 clearBreakDetails();
1552 m_frontend->resumed(); 1552 m_frontend->resumed();
1553 } 1553 }
1554 1554
1555 bool V8DebuggerAgentImpl::canBreakProgram() 1555 bool V8DebuggerAgentImpl::canBreakProgram()
1556 { 1556 {
1557 return debugger().canBreakProgram(); 1557 return debugger().canBreakProgram();
1558 } 1558 }
1559 1559
1560 void V8DebuggerAgentImpl::breakProgram(const String& breakReason, PassRefPtr<pro tocol::DictionaryValue> data) 1560 void V8DebuggerAgentImpl::breakProgram(const String& breakReason, PassOwnPtr<pro tocol::DictionaryValue> data)
1561 { 1561 {
1562 ASSERT(enabled()); 1562 ASSERT(enabled());
1563 if (m_skipAllPauses || !m_pausedContext.IsEmpty() || isCallStackEmptyOrBlack boxed()) 1563 if (m_skipAllPauses || !m_pausedContext.IsEmpty() || isCallStackEmptyOrBlack boxed())
1564 return; 1564 return;
1565 m_breakReason = breakReason; 1565 m_breakReason = breakReason;
1566 m_breakAuxData = data; 1566 m_breakAuxData = data;
1567 m_scheduledDebuggerStep = NoStep; 1567 m_scheduledDebuggerStep = NoStep;
1568 m_steppingFromFramework = false; 1568 m_steppingFromFramework = false;
1569 m_pausingOnNativeEvent = false; 1569 m_pausingOnNativeEvent = false;
1570 clearStepIntoAsync(); 1570 clearStepIntoAsync();
1571 debugger().breakProgram(); 1571 debugger().breakProgram();
1572 } 1572 }
1573 1573
1574 void V8DebuggerAgentImpl::breakProgramOnException(const String& breakReason, Pas sRefPtr<protocol::DictionaryValue> data) 1574 void V8DebuggerAgentImpl::breakProgramOnException(const String& breakReason, Pas sOwnPtr<protocol::DictionaryValue> data)
1575 { 1575 {
1576 if (m_debugger->pauseOnExceptionsState() == V8DebuggerImpl::DontPauseOnExcep tions) 1576 if (m_debugger->pauseOnExceptionsState() == V8DebuggerImpl::DontPauseOnExcep tions)
1577 return; 1577 return;
1578 breakProgram(breakReason, data); 1578 breakProgram(breakReason, data);
1579 } 1579 }
1580 1580
1581 void V8DebuggerAgentImpl::clearStepIntoAsync() 1581 void V8DebuggerAgentImpl::clearStepIntoAsync()
1582 { 1582 {
1583 m_startingStepIntoAsync = false; 1583 m_startingStepIntoAsync = false;
1584 m_pausingOnAsyncOperation = false; 1584 m_pausingOnAsyncOperation = false;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1618 m_scripts.clear(); 1618 m_scripts.clear();
1619 m_blackboxedPositions.clear(); 1619 m_blackboxedPositions.clear();
1620 m_breakpointIdToDebuggerBreakpointIds.clear(); 1620 m_breakpointIdToDebuggerBreakpointIds.clear();
1621 resetAsyncCallTracker(); 1621 resetAsyncCallTracker();
1622 m_promiseTracker->clear(); 1622 m_promiseTracker->clear();
1623 if (m_frontend) 1623 if (m_frontend)
1624 m_frontend->globalObjectCleared(); 1624 m_frontend->globalObjectCleared();
1625 } 1625 }
1626 1626
1627 } // namespace blink 1627 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698