2016-10-02 21:22:49 +00:00
// Copyright 2016 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
2017-05-19 00:35:45 +00:00
let { session , contextGroup , Protocol } = InspectorTest . start ( "Check that while Runtime.getProperties call on proxy object no user defined trap will be executed." ) ;
2016-10-02 21:22:49 +00:00
2017-05-19 00:35:45 +00:00
contextGroup . addScript ( `
2016-10-02 21:22:49 +00:00
var self = this ;
2018-01-10 10:16:23 +00:00
function testFunction ( revocable )
2016-10-02 21:22:49 +00:00
{
2018-01-10 10:16:23 +00:00
self . counter = 0 ;
var handler = {
get : function ( target , name ) {
self . counter ++ ;
return Reflect . get . apply ( this , arguments ) ;
} ,
set : function ( target , name ) {
self . counter ++ ;
return Reflect . set . apply ( this , arguments ) ;
} ,
getPrototypeOf : function ( target ) {
self . counter ++ ;
return Reflect . getPrototypeOf . apply ( this , arguments ) ;
} ,
setPrototypeOf : function ( target ) {
self . counter ++ ;
return Reflect . setPrototypeOf . apply ( this , arguments ) ;
} ,
isExtensible : function ( target ) {
self . counter ++ ;
return Reflect . isExtensible . apply ( this , arguments ) ;
} ,
isExtensible : function ( target ) {
self . counter ++ ;
return Reflect . isExtensible . apply ( this , arguments ) ;
} ,
isExtensible : function ( target ) {
self . counter ++ ;
return Reflect . isExtensible . apply ( this , arguments ) ;
} ,
preventExtensions : function ( ) {
self . counter ++ ;
return Reflect . preventExtensions . apply ( this , arguments ) ;
} ,
getOwnPropertyDescriptor : function ( ) {
self . counter ++ ;
return Reflect . getOwnPropertyDescriptor . apply ( this , arguments ) ;
} ,
defineProperty : function ( ) {
self . counter ++ ;
return Reflect . defineProperty . apply ( this , arguments ) ;
} ,
has : function ( ) {
self . counter ++ ;
return Reflect . has . apply ( this , arguments ) ;
} ,
get : function ( ) {
self . counter ++ ;
return Reflect . get . apply ( this , arguments ) ;
} ,
set : function ( ) {
self . counter ++ ;
return Reflect . set . apply ( this , arguments ) ;
} ,
deleteProperty : function ( ) {
self . counter ++ ;
return Reflect . deleteProperty . apply ( this , arguments ) ;
} ,
ownKeys : function ( ) {
self . counter ++ ;
return Reflect . ownKeys . apply ( this , arguments ) ;
} ,
apply : function ( ) {
self . counter ++ ;
return Reflect . apply . apply ( this , arguments ) ;
} ,
construct : function ( ) {
self . counter ++ ;
return Reflect . construct . apply ( this , arguments ) ;
}
} ;
var obj = { a : 1 } ;
if ( revocable ) {
var revocableProxy = Proxy . revocable ( obj , handler ) ;
return [ revocableProxy . proxy , revocableProxy . revoke ]
} else {
return new Proxy ( obj , handler ) ;
}
2016-10-02 21:22:49 +00:00
} ` );
2018-01-10 10:16:23 +00:00
function getArrayElement ( arrayObjectId , idx ) {
return Protocol . Runtime . callFunctionOn ( {
functionDeclaration : ` function() { return this[ ${ idx } ]; } ` ,
objectId : arrayObjectId
} ) ;
}
2016-10-02 21:22:49 +00:00
2018-01-10 10:16:23 +00:00
async function testRegular ( ) {
InspectorTest . logMessage ( "Testing regular Proxy" ) ;
var result = await Protocol . Runtime . evaluate ( { expression : "testFunction(false)" , generatePreview : true } ) ;
InspectorTest . logMessage ( result ) ;
var proxyId = result . result . result . objectId ;
InspectorTest . logMessage ( await Protocol . Runtime . getProperties ( { objectId : proxyId , generatePreview : true } ) ) ;
2016-10-02 21:22:49 +00:00
}
2018-01-10 10:16:23 +00:00
async function testRevocable ( ) {
InspectorTest . logMessage ( "Testing revocable Proxy" ) ;
var result = await Protocol . Runtime . evaluate ( { expression : "testFunction(true)" } ) ;
var proxyInfo = await getArrayElement ( result . result . result . objectId , 0 ) ;
var revokeInfo = await getArrayElement ( result . result . result . objectId , 1 ) ;
var proxyId = proxyInfo . result . result . objectId ;
InspectorTest . logMessage ( await Protocol . Runtime . callFunctionOn ( {
functionDeclaration : ` function() { return this; } ` ,
objectId : proxyId ,
generatePreview : true
} ) )
InspectorTest . logMessage ( await Protocol . Runtime . getProperties ( { objectId : proxyId , generatePreview : true } ) ) ;
await Protocol . Runtime . callFunctionOn ( {
functionDeclaration : ` function() { this(); } ` ,
objectId : revokeInfo . result . result . objectId
} ) ;
InspectorTest . logMessage ( await Protocol . Runtime . callFunctionOn ( {
functionDeclaration : ` function() { return this; } ` ,
objectId : proxyId ,
generatePreview : true
} ) )
InspectorTest . logMessage ( await Protocol . Runtime . getProperties ( { objectId : proxyId , generatePreview : true } ) ) ;
2016-10-02 21:22:49 +00:00
}
2018-01-10 10:16:23 +00:00
async function checkCounter ( ) {
InspectorTest . logMessage ( "Checking counter" ) ;
var result = await Protocol . Runtime . evaluate ( { expression : "self.counter" } ) ;
2016-10-03 23:32:52 +00:00
InspectorTest . logMessage ( result ) ;
2016-10-02 21:22:49 +00:00
}
2018-01-10 10:16:23 +00:00
( async function test ( ) {
await testRegular ( ) ;
await testRevocable ( ) ;
await checkCounter ( ) ;
InspectorTest . completeTest ( ) ;
} ) ( ) ;