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

Side by Side Diff: third_party/WebKit/Source/bindings/core/v8/ScriptValueSerializer.cpp

Issue 2009233002: [Binding] [Refactoring] Remove ScriptValueCompositeCreator (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "bindings/core/v8/ScriptValueSerializer.h" 5 #include "bindings/core/v8/ScriptValueSerializer.h"
6 6
7 #include "bindings/core/v8/Transferables.h" 7 #include "bindings/core/v8/Transferables.h"
8 #include "bindings/core/v8/V8ArrayBuffer.h" 8 #include "bindings/core/v8/V8ArrayBuffer.h"
9 #include "bindings/core/v8/V8ArrayBufferView.h" 9 #include "bindings/core/v8/V8ArrayBufferView.h"
10 #include "bindings/core/v8/V8Blob.h" 10 #include "bindings/core/v8/V8Blob.h"
(...skipping 1231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1242 long long size = -1; 1242 long long size = -1;
1243 double lastModifiedMS = invalidFileTime(); 1243 double lastModifiedMS = invalidFileTime();
1244 file->captureSnapshot(size, lastModifiedMS); 1244 file->captureSnapshot(size, lastModifiedMS);
1245 *index = m_blobInfo->size(); 1245 *index = m_blobInfo->size();
1246 // FIXME: transition WebBlobInfo.lastModified to be milliseconds-based also. 1246 // FIXME: transition WebBlobInfo.lastModified to be milliseconds-based also.
1247 double lastModified = lastModifiedMS / msPerSecond; 1247 double lastModified = lastModifiedMS / msPerSecond;
1248 m_blobInfo->append(WebBlobInfo(file->uuid(), file->path(), file->name(), fil e->type(), lastModified, size)); 1248 m_blobInfo->append(WebBlobInfo(file->uuid(), file->path(), file->name(), fil e->type(), lastModified, size));
1249 return true; 1249 return true;
1250 } 1250 }
1251 1251
1252 bool SerializedScriptValueReader::read(v8::Local<v8::Value>* value, ScriptValueC ompositeCreator& creator) 1252 bool SerializedScriptValueReader::read(v8::Local<v8::Value>* value, ScriptValueD eserializer& deserializer)
1253 { 1253 {
1254 SerializationTag tag; 1254 SerializationTag tag;
1255 if (!readTag(&tag)) 1255 if (!readTag(&tag))
1256 return false; 1256 return false;
1257 return readWithTag(tag, value, creator); 1257 return readWithTag(tag, value, deserializer);
1258 } 1258 }
1259 1259
1260 bool SerializedScriptValueReader::readWithTag(SerializationTag tag, v8::Local<v8 ::Value>* value, ScriptValueCompositeCreator& creator) 1260 bool SerializedScriptValueReader::readWithTag(SerializationTag tag, v8::Local<v8 ::Value>* value, ScriptValueDeserializer& deserializer)
1261 { 1261 {
1262 switch (tag) { 1262 switch (tag) {
1263 case ReferenceCountTag: { 1263 case ReferenceCountTag: {
1264 if (!m_version) 1264 if (!m_version)
1265 return false; 1265 return false;
1266 uint32_t referenceTableSize; 1266 uint32_t referenceTableSize;
1267 if (!doReadUint32(&referenceTableSize)) 1267 if (!doReadUint32(&referenceTableSize))
1268 return false; 1268 return false;
1269 // If this test fails, then the serializer and deserializer disagree abo ut the assignment 1269 // If this test fails, then the serializer and deserializer disagree abo ut the assignment
1270 // of object reference IDs. On the deserialization side, this means ther e are too many or too few 1270 // of object reference IDs. On the deserialization side, this means ther e are too many or too few
1271 // calls to pushObjectReference. 1271 // calls to pushObjectReference.
1272 if (referenceTableSize != creator.objectReferenceCount()) 1272 if (referenceTableSize != deserializer.objectReferenceCount())
1273 return false; 1273 return false;
1274 return true; 1274 return true;
1275 } 1275 }
1276 case InvalidTag: 1276 case InvalidTag:
1277 return false; 1277 return false;
1278 case PaddingTag: 1278 case PaddingTag:
1279 return true; 1279 return true;
1280 case UndefinedTag: 1280 case UndefinedTag:
1281 *value = v8::Undefined(isolate()); 1281 *value = v8::Undefined(isolate());
1282 break; 1282 break;
1283 case NullTag: 1283 case NullTag:
1284 *value = v8::Null(isolate()); 1284 *value = v8::Null(isolate());
1285 break; 1285 break;
1286 case TrueTag: 1286 case TrueTag:
1287 *value = v8Boolean(true, isolate()); 1287 *value = v8Boolean(true, isolate());
1288 break; 1288 break;
1289 case FalseTag: 1289 case FalseTag:
1290 *value = v8Boolean(false, isolate()); 1290 *value = v8Boolean(false, isolate());
1291 break; 1291 break;
1292 case TrueObjectTag: 1292 case TrueObjectTag:
1293 *value = v8::BooleanObject::New(isolate(), true); 1293 *value = v8::BooleanObject::New(isolate(), true);
1294 creator.pushObjectReference(*value); 1294 deserializer.pushObjectReference(*value);
1295 break; 1295 break;
1296 case FalseObjectTag: 1296 case FalseObjectTag:
1297 *value = v8::BooleanObject::New(isolate(), false); 1297 *value = v8::BooleanObject::New(isolate(), false);
1298 creator.pushObjectReference(*value); 1298 deserializer.pushObjectReference(*value);
1299 break; 1299 break;
1300 case StringTag: 1300 case StringTag:
1301 if (!readString(value)) 1301 if (!readString(value))
1302 return false; 1302 return false;
1303 break; 1303 break;
1304 case StringUCharTag: 1304 case StringUCharTag:
1305 if (!readUCharString(value)) 1305 if (!readUCharString(value))
1306 return false; 1306 return false;
1307 break; 1307 break;
1308 case StringObjectTag: 1308 case StringObjectTag:
1309 if (!readStringObject(value)) 1309 if (!readStringObject(value))
1310 return false; 1310 return false;
1311 creator.pushObjectReference(*value); 1311 deserializer.pushObjectReference(*value);
1312 break; 1312 break;
1313 case Int32Tag: 1313 case Int32Tag:
1314 if (!readInt32(value)) 1314 if (!readInt32(value))
1315 return false; 1315 return false;
1316 break; 1316 break;
1317 case Uint32Tag: 1317 case Uint32Tag:
1318 if (!readUint32(value)) 1318 if (!readUint32(value))
1319 return false; 1319 return false;
1320 break; 1320 break;
1321 case DateTag: 1321 case DateTag:
1322 if (!readDate(value)) 1322 if (!readDate(value))
1323 return false; 1323 return false;
1324 creator.pushObjectReference(*value); 1324 deserializer.pushObjectReference(*value);
1325 break; 1325 break;
1326 case NumberTag: 1326 case NumberTag:
1327 if (!readNumber(value)) 1327 if (!readNumber(value))
1328 return false; 1328 return false;
1329 break; 1329 break;
1330 case NumberObjectTag: 1330 case NumberObjectTag:
1331 if (!readNumberObject(value)) 1331 if (!readNumberObject(value))
1332 return false; 1332 return false;
1333 creator.pushObjectReference(*value); 1333 deserializer.pushObjectReference(*value);
1334 break; 1334 break;
1335 case BlobTag: 1335 case BlobTag:
1336 case BlobIndexTag: 1336 case BlobIndexTag:
1337 if (!readBlob(value, tag == BlobIndexTag)) 1337 if (!readBlob(value, tag == BlobIndexTag))
1338 return false; 1338 return false;
1339 creator.pushObjectReference(*value); 1339 deserializer.pushObjectReference(*value);
1340 break; 1340 break;
1341 case FileTag: 1341 case FileTag:
1342 case FileIndexTag: 1342 case FileIndexTag:
1343 if (!readFile(value, tag == FileIndexTag)) 1343 if (!readFile(value, tag == FileIndexTag))
1344 return false; 1344 return false;
1345 creator.pushObjectReference(*value); 1345 deserializer.pushObjectReference(*value);
1346 break; 1346 break;
1347 case FileListTag: 1347 case FileListTag:
1348 case FileListIndexTag: 1348 case FileListIndexTag:
1349 if (!readFileList(value, tag == FileListIndexTag)) 1349 if (!readFileList(value, tag == FileListIndexTag))
1350 return false; 1350 return false;
1351 creator.pushObjectReference(*value); 1351 deserializer.pushObjectReference(*value);
1352 break; 1352 break;
1353 case CompositorProxyTag: 1353 case CompositorProxyTag:
1354 if (!readCompositorProxy(value)) 1354 if (!readCompositorProxy(value))
1355 return false; 1355 return false;
1356 creator.pushObjectReference(*value); 1356 deserializer.pushObjectReference(*value);
1357 break; 1357 break;
1358 1358
1359 case ImageDataTag: 1359 case ImageDataTag:
1360 if (!readImageData(value)) 1360 if (!readImageData(value))
1361 return false; 1361 return false;
1362 creator.pushObjectReference(*value); 1362 deserializer.pushObjectReference(*value);
1363 break; 1363 break;
1364 case ImageBitmapTag: 1364 case ImageBitmapTag:
1365 if (!readImageBitmap(value)) 1365 if (!readImageBitmap(value))
1366 return false; 1366 return false;
1367 creator.pushObjectReference(*value); 1367 deserializer.pushObjectReference(*value);
1368 break; 1368 break;
1369 1369
1370 case RegExpTag: 1370 case RegExpTag:
1371 if (!readRegExp(value)) 1371 if (!readRegExp(value))
1372 return false; 1372 return false;
1373 creator.pushObjectReference(*value); 1373 deserializer.pushObjectReference(*value);
1374 break; 1374 break;
1375 case ObjectTag: { 1375 case ObjectTag: {
1376 uint32_t numProperties; 1376 uint32_t numProperties;
1377 if (!doReadUint32(&numProperties)) 1377 if (!doReadUint32(&numProperties))
1378 return false; 1378 return false;
1379 if (!creator.completeObject(numProperties, value)) 1379 if (!deserializer.completeObject(numProperties, value))
1380 return false; 1380 return false;
1381 break; 1381 break;
1382 } 1382 }
1383 case SparseArrayTag: { 1383 case SparseArrayTag: {
1384 uint32_t numProperties; 1384 uint32_t numProperties;
1385 uint32_t length; 1385 uint32_t length;
1386 if (!doReadUint32(&numProperties)) 1386 if (!doReadUint32(&numProperties))
1387 return false; 1387 return false;
1388 if (!doReadUint32(&length)) 1388 if (!doReadUint32(&length))
1389 return false; 1389 return false;
1390 if (!creator.completeSparseArray(numProperties, length, value)) 1390 if (!deserializer.completeSparseArray(numProperties, length, value))
1391 return false; 1391 return false;
1392 break; 1392 break;
1393 } 1393 }
1394 case DenseArrayTag: { 1394 case DenseArrayTag: {
1395 uint32_t numProperties; 1395 uint32_t numProperties;
1396 uint32_t length; 1396 uint32_t length;
1397 if (!doReadUint32(&numProperties)) 1397 if (!doReadUint32(&numProperties))
1398 return false; 1398 return false;
1399 if (!doReadUint32(&length)) 1399 if (!doReadUint32(&length))
1400 return false; 1400 return false;
1401 if (!creator.completeDenseArray(numProperties, length, value)) 1401 if (!deserializer.completeDenseArray(numProperties, length, value))
1402 return false; 1402 return false;
1403 break; 1403 break;
1404 } 1404 }
1405 case MapTag: { 1405 case MapTag: {
1406 uint32_t length; 1406 uint32_t length;
1407 if (!doReadUint32(&length)) 1407 if (!doReadUint32(&length))
1408 return false; 1408 return false;
1409 if (!creator.completeMap(length, value)) 1409 if (!deserializer.completeMap(length, value))
1410 return false; 1410 return false;
1411 break; 1411 break;
1412 } 1412 }
1413 case SetTag: { 1413 case SetTag: {
1414 uint32_t length; 1414 uint32_t length;
1415 if (!doReadUint32(&length)) 1415 if (!doReadUint32(&length))
1416 return false; 1416 return false;
1417 if (!creator.completeSet(length, value)) 1417 if (!deserializer.completeSet(length, value))
1418 return false; 1418 return false;
1419 break; 1419 break;
1420 } 1420 }
1421 case ArrayBufferViewTag: { 1421 case ArrayBufferViewTag: {
1422 if (!m_version) 1422 if (!m_version)
1423 return false; 1423 return false;
1424 if (!readArrayBufferView(value, creator)) 1424 if (!readArrayBufferView(value, deserializer))
1425 return false; 1425 return false;
1426 creator.pushObjectReference(*value); 1426 deserializer.pushObjectReference(*value);
1427 break; 1427 break;
1428 } 1428 }
1429 case ArrayBufferTag: { 1429 case ArrayBufferTag: {
1430 if (!m_version) 1430 if (!m_version)
1431 return false; 1431 return false;
1432 if (!readArrayBuffer(value)) 1432 if (!readArrayBuffer(value))
1433 return false; 1433 return false;
1434 creator.pushObjectReference(*value); 1434 deserializer.pushObjectReference(*value);
1435 break; 1435 break;
1436 } 1436 }
1437 case GenerateFreshObjectTag: { 1437 case GenerateFreshObjectTag: {
1438 if (!m_version) 1438 if (!m_version)
1439 return false; 1439 return false;
1440 if (!creator.newObject()) 1440 if (!deserializer.newObject())
1441 return false; 1441 return false;
1442 return true; 1442 return true;
1443 } 1443 }
1444 case GenerateFreshSparseArrayTag: { 1444 case GenerateFreshSparseArrayTag: {
1445 if (!m_version) 1445 if (!m_version)
1446 return false; 1446 return false;
1447 uint32_t length; 1447 uint32_t length;
1448 if (!doReadUint32(&length)) 1448 if (!doReadUint32(&length))
1449 return false; 1449 return false;
1450 if (!creator.newSparseArray(length)) 1450 if (!deserializer.newSparseArray(length))
1451 return false; 1451 return false;
1452 return true; 1452 return true;
1453 } 1453 }
1454 case GenerateFreshDenseArrayTag: { 1454 case GenerateFreshDenseArrayTag: {
1455 if (!m_version) 1455 if (!m_version)
1456 return false; 1456 return false;
1457 uint32_t length; 1457 uint32_t length;
1458 if (!doReadUint32(&length)) 1458 if (!doReadUint32(&length))
1459 return false; 1459 return false;
1460 if (!creator.newDenseArray(length)) 1460 if (!deserializer.newDenseArray(length))
1461 return false; 1461 return false;
1462 return true; 1462 return true;
1463 } 1463 }
1464 case GenerateFreshMapTag: { 1464 case GenerateFreshMapTag: {
1465 if (!m_version) 1465 if (!m_version)
1466 return false; 1466 return false;
1467 if (!creator.newMap()) 1467 if (!deserializer.newMap())
1468 return false; 1468 return false;
1469 return true; 1469 return true;
1470 } 1470 }
1471 case GenerateFreshSetTag: { 1471 case GenerateFreshSetTag: {
1472 if (!m_version) 1472 if (!m_version)
1473 return false; 1473 return false;
1474 if (!creator.newSet()) 1474 if (!deserializer.newSet())
1475 return false; 1475 return false;
1476 return true; 1476 return true;
1477 } 1477 }
1478 case MessagePortTag: { 1478 case MessagePortTag: {
1479 if (!m_version) 1479 if (!m_version)
1480 return false; 1480 return false;
1481 uint32_t index; 1481 uint32_t index;
1482 if (!doReadUint32(&index)) 1482 if (!doReadUint32(&index))
1483 return false; 1483 return false;
1484 if (!creator.tryGetTransferredMessagePort(index, value)) 1484 if (!deserializer.tryGetTransferredMessagePort(index, value))
1485 return false; 1485 return false;
1486 break; 1486 break;
1487 } 1487 }
1488 case ArrayBufferTransferTag: { 1488 case ArrayBufferTransferTag: {
1489 if (!m_version) 1489 if (!m_version)
1490 return false; 1490 return false;
1491 uint32_t index; 1491 uint32_t index;
1492 if (!doReadUint32(&index)) 1492 if (!doReadUint32(&index))
1493 return false; 1493 return false;
1494 if (!creator.tryGetTransferredArrayBuffer(index, value)) 1494 if (!deserializer.tryGetTransferredArrayBuffer(index, value))
1495 return false; 1495 return false;
1496 break; 1496 break;
1497 } 1497 }
1498 case ImageBitmapTransferTag: { 1498 case ImageBitmapTransferTag: {
1499 if (!m_version) 1499 if (!m_version)
1500 return false; 1500 return false;
1501 uint32_t index; 1501 uint32_t index;
1502 if (!doReadUint32(&index)) 1502 if (!doReadUint32(&index))
1503 return false; 1503 return false;
1504 if (!creator.tryGetTransferredImageBitmap(index, value)) 1504 if (!deserializer.tryGetTransferredImageBitmap(index, value))
1505 return false; 1505 return false;
1506 break; 1506 break;
1507 } 1507 }
1508 case OffscreenCanvasTransferTag: { 1508 case OffscreenCanvasTransferTag: {
1509 if (!m_version) 1509 if (!m_version)
1510 return false; 1510 return false;
1511 uint32_t index, width, height, id; 1511 uint32_t index, width, height, id;
1512 if (!doReadUint32(&index)) 1512 if (!doReadUint32(&index))
1513 return false; 1513 return false;
1514 if (!doReadUint32(&width)) 1514 if (!doReadUint32(&width))
1515 return false; 1515 return false;
1516 if (!doReadUint32(&height)) 1516 if (!doReadUint32(&height))
1517 return false; 1517 return false;
1518 if (!doReadUint32(&id)) 1518 if (!doReadUint32(&id))
1519 return false; 1519 return false;
1520 if (!creator.tryGetTransferredOffscreenCanvas(index, width, height, id, value)) 1520 if (!deserializer.tryGetTransferredOffscreenCanvas(index, width, height, id, value))
1521 return false; 1521 return false;
1522 break; 1522 break;
1523 } 1523 }
1524 case SharedArrayBufferTransferTag: { 1524 case SharedArrayBufferTransferTag: {
1525 if (!m_version) 1525 if (!m_version)
1526 return false; 1526 return false;
1527 uint32_t index; 1527 uint32_t index;
1528 if (!doReadUint32(&index)) 1528 if (!doReadUint32(&index))
1529 return false; 1529 return false;
1530 if (!creator.tryGetTransferredSharedArrayBuffer(index, value)) 1530 if (!deserializer.tryGetTransferredSharedArrayBuffer(index, value))
1531 return false; 1531 return false;
1532 break; 1532 break;
1533 } 1533 }
1534 case ObjectReferenceTag: { 1534 case ObjectReferenceTag: {
1535 if (!m_version) 1535 if (!m_version)
1536 return false; 1536 return false;
1537 uint32_t reference; 1537 uint32_t reference;
1538 if (!doReadUint32(&reference)) 1538 if (!doReadUint32(&reference))
1539 return false; 1539 return false;
1540 if (!creator.tryGetObjectFromObjectReference(reference, value)) 1540 if (!deserializer.tryGetObjectFromObjectReference(reference, value))
1541 return false; 1541 return false;
1542 break; 1542 break;
1543 } 1543 }
1544 case DOMFileSystemTag: 1544 case DOMFileSystemTag:
1545 case CryptoKeyTag: 1545 case CryptoKeyTag:
1546 ASSERT_NOT_REACHED(); 1546 ASSERT_NOT_REACHED();
1547 default: 1547 default:
1548 return false; 1548 return false;
1549 } 1549 }
1550 return !value->IsEmpty(); 1550 return !value->IsEmpty();
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1763 1763
1764 bool SerializedScriptValueReader::readArrayBuffer(v8::Local<v8::Value>* value) 1764 bool SerializedScriptValueReader::readArrayBuffer(v8::Local<v8::Value>* value)
1765 { 1765 {
1766 DOMArrayBuffer* arrayBuffer = doReadArrayBuffer(); 1766 DOMArrayBuffer* arrayBuffer = doReadArrayBuffer();
1767 if (!arrayBuffer) 1767 if (!arrayBuffer)
1768 return false; 1768 return false;
1769 *value = toV8(arrayBuffer, m_scriptState->context()->Global(), isolate()); 1769 *value = toV8(arrayBuffer, m_scriptState->context()->Global(), isolate());
1770 return !value->IsEmpty(); 1770 return !value->IsEmpty();
1771 } 1771 }
1772 1772
1773 bool SerializedScriptValueReader::readArrayBufferView(v8::Local<v8::Value>* valu e, ScriptValueCompositeCreator& creator) 1773 bool SerializedScriptValueReader::readArrayBufferView(v8::Local<v8::Value>* valu e, ScriptValueDeserializer& deserializer)
1774 { 1774 {
1775 ArrayBufferViewSubTag subTag; 1775 ArrayBufferViewSubTag subTag;
1776 uint32_t byteOffset; 1776 uint32_t byteOffset;
1777 uint32_t byteLength; 1777 uint32_t byteLength;
1778 DOMArrayBufferBase* arrayBuffer = nullptr; 1778 DOMArrayBufferBase* arrayBuffer = nullptr;
1779 v8::Local<v8::Value> arrayBufferV8Value; 1779 v8::Local<v8::Value> arrayBufferV8Value;
1780 if (!readArrayBufferViewSubTag(&subTag)) 1780 if (!readArrayBufferViewSubTag(&subTag))
1781 return false; 1781 return false;
1782 if (!doReadUint32(&byteOffset)) 1782 if (!doReadUint32(&byteOffset))
1783 return false; 1783 return false;
1784 if (!doReadUint32(&byteLength)) 1784 if (!doReadUint32(&byteLength))
1785 return false; 1785 return false;
1786 if (!creator.consumeTopOfStack(&arrayBufferV8Value)) 1786 if (!deserializer.consumeTopOfStack(&arrayBufferV8Value))
1787 return false; 1787 return false;
1788 if (arrayBufferV8Value.IsEmpty()) 1788 if (arrayBufferV8Value.IsEmpty())
1789 return false; 1789 return false;
1790 if (arrayBufferV8Value->IsArrayBuffer()) { 1790 if (arrayBufferV8Value->IsArrayBuffer()) {
1791 arrayBuffer = V8ArrayBuffer::toImpl(arrayBufferV8Value.As<v8::Object>()) ; 1791 arrayBuffer = V8ArrayBuffer::toImpl(arrayBufferV8Value.As<v8::Object>()) ;
1792 if (!arrayBuffer) 1792 if (!arrayBuffer)
1793 return false; 1793 return false;
1794 } else if (arrayBufferV8Value->IsSharedArrayBuffer()) { 1794 } else if (arrayBufferV8Value->IsSharedArrayBuffer()) {
1795 arrayBuffer = V8SharedArrayBuffer::toImpl(arrayBufferV8Value.As<v8::Obje ct>()); 1795 arrayBuffer = V8SharedArrayBuffer::toImpl(arrayBufferV8Value.As<v8::Obje ct>());
1796 if (!arrayBuffer) 1796 if (!arrayBuffer)
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
2380 return false; 2380 return false;
2381 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe renceStack.size() - 1]; 2381 uint32_t objectReference = m_openCompositeReferenceStack[m_openCompositeRefe renceStack.size() - 1];
2382 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - 1); 2382 m_openCompositeReferenceStack.shrink(m_openCompositeReferenceStack.size() - 1);
2383 if (objectReference >= m_objectPool.size()) 2383 if (objectReference >= m_objectPool.size())
2384 return false; 2384 return false;
2385 *object = m_objectPool[objectReference]; 2385 *object = m_objectPool[objectReference];
2386 return true; 2386 return true;
2387 } 2387 }
2388 2388
2389 } // namespace blink 2389 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698