2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Copyright  2018  Google  Inc .  All  rights  reserved . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Modifications  copyright  ( c )  Microsoft  Corporation . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Licensed  under  the  Apache  License ,  Version  2.0  ( the  "License" ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  you  may  not  use  this  file  except  in  compliance  with  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  You  may  obtain  a  copy  of  the  License  at 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *      http : //www.apache.org/licenses/LICENSE-2.0
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  Unless  required  by  applicable  law  or  agreed  to  in  writing ,  software 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  distributed  under  the  License  is  distributed  on  an  "AS IS"  BASIS , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  WITHOUT  WARRANTIES  OR  CONDITIONS  OF  ANY  KIND ,  either  express  or  implied . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  See  the  License  for  the  specific  language  governing  permissions  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  limitations  under  the  License . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 12:43:38 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-03 08:42:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  type  {  IncomingHttpHeaders  }  from  'http' ;  
						 
					
						
							
								
									
										
										
										
											2022-12-15 07:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  type  {  Cookie  }  from  '@playwright/test' ;  
						 
					
						
							
								
									
										
										
										
											2022-03-26 07:05:50 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  {  contextTest  as  it ,  playwrightTest ,  expect  }  from  '../config/browserTest' ;  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-11 02:42:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should work @smoke' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'password' , 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-30 08:20:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    value :  '123456' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  document . cookie ) ) . toEqual ( 'password=123456' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should work with expires=-1' ,  async  ( {  context ,  page  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-12-15 08:03:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'username' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'John Doe' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'www.example.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 04:57:17 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-12-15 08:03:52 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . route ( '**/*' ,  route  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    route . fulfill ( {  body :  '<html></html>'  } ) . catch ( ( )  = >  { } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( 'https://www.example.com' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  document . cookie ) ) . toEqual ( 'username=John Doe' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-08 06:37:47 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should add cookies with empty value' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'marker' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'www.example.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Lax' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . route ( '**/*' ,  route  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    route . fulfill ( {  body :  '<html></html>'  } ) . catch ( ( )  = >  { } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( 'https://www.example.com' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  document . cookie ) ) . toEqual ( 'marker=' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should set cookies with SameSite attribute and no secure attribute' ,  async  ( {  context ,  browserName ,  isWindows ,  isLinux ,  defaultSameSiteCookieValue ,  channel  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2025-06-11 01:59:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Use domain instead of URL to ensure that the `secure` attribute is not set.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-unset' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-none' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite :  'None' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-lax' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Lax' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-strict' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Strict' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies  =  new  Set ( await  context . cookies ( [ 'https://foo.com' ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies ) . toEqual ( new  Set ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-unset' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite : defaultSameSiteCookieValue , 
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ,  . . . ( browserName  ===  'chromium'  ||  ( browserName  ===  'webkit'  &&  ( isLinux  ||  channel  ===  'webkit-wsl' ) )  ?  [ ]  :  [ { 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-11 01:59:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    name :  'same-site-none' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    sameSite :  'None' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-lax' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sameSite :  ( browserName  ===  'webkit'  &&  isWindows  &&  channel  !==  'webkit-wsl' )  ?  'None'  :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-11 01:59:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'same-site-strict' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'foo.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sameSite :  ( browserName  ===  'webkit'  &&  isWindows  &&  channel  !==  'webkit-wsl' )  ?  'None'  :  'Strict' , 
							 
						 
					
						
							
								
									
										
										
										
											2025-06-11 01:59:59 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } ] ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-06-17 01:36:37 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should roundtrip cookie' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // @see https://en.wikipedia.org/wiki/Year_2038_problem
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  date  =  + ( new  Date ( '1/1/2038' ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  documentCookie  =  await  page . evaluate ( timestamp  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  date  =  new  Date ( timestamp ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    document . cookie  =  ` username=John Doe;expires= ${ date . toUTCString ( ) } ` ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  document . cookie ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  date ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( documentCookie ) . toBe ( 'username=John Doe' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies  =  await  context . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . clearCookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  context . cookies ( ) ) . toEqual ( [ ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( cookies ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-12-15 07:24:54 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  // Slightly different rounding on chromium win.
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  normalizedExpires  =  ( cookies : Cookie [ ] )  = >  cookies . map ( c  = >  ( {  . . . c ,  expires : Math.floor ( c . expires )  } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( normalizedExpires ( await  context . cookies ( ) ) ) . toEqual ( normalizedExpires ( cookies ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should send cookie header' ,  async  ( {  server ,  context  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  cookie  =  '' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  server . setRoute ( '/empty.html' ,  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 00:31:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    cookie  =  req . headers . cookie ! ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    res . end ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ {  url : server.EMPTY_PAGE ,  name :  'cookie' ,  value :  'value'  } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookie ) . toBe ( 'cookie=value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should isolate cookies in browser contexts' ,  async  ( {  context ,  server ,  browser  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  anotherContext  =  await  browser . newContext ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ {  url : server.EMPTY_PAGE ,  name :  'isolatecookie' ,  value :  'page1value'  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  anotherContext . addCookies ( [ {  url : server.EMPTY_PAGE ,  name :  'isolatecookie' ,  value :  'page2value'  } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies1  =  await  context . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies2  =  await  anotherContext . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies2 . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 [ 0 ] . name ) . toBe ( 'isolatecookie' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 [ 0 ] . value ) . toBe ( 'page1value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies2 [ 0 ] . name ) . toBe ( 'isolatecookie' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies2 [ 0 ] . value ) . toBe ( 'page2value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  anotherContext . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should isolate session cookies' ,  async  ( {  context ,  server ,  browser  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  server . setRoute ( '/setcookie.html' ,  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . setHeader ( 'Set-Cookie' ,  'session=value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . end ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . goto ( server . PREFIX  +  '/setcookie.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  cookies  =  await  context . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( cookies . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( cookies . map ( c  = >  c . value ) . join ( ',' ) ) . toBe ( 'value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  context2  =  await  browser . newContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  page  =  await  context2 . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  cookies  =  await  context2 . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( cookies [ 0 ]  &&  cookies [ 0 ] . name ) . toBe ( undefined ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  context2 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should isolate persistent cookies' ,  async  ( {  context ,  server ,  browser  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  server . setRoute ( '/setcookie.html' ,  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . setHeader ( 'Set-Cookie' ,  'persistent=persistent-value; max-age=3600' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . end ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/setcookie.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  context1  =  context ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  context2  =  await  browser . newContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  [ page1 ,  page2 ]  =  await  Promise . all ( [ context1 . newPage ( ) ,  context2 . newPage ( ) ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  Promise . all ( [ page1 . goto ( server . EMPTY_PAGE ) ,  page2 . goto ( server . EMPTY_PAGE ) ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  [ cookies1 ,  cookies2 ]  =  await  Promise . all ( [ context1 . cookies ( ) ,  context2 . cookies ( ) ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 . length ) . toBe ( 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 [ 0 ] . name ) . toBe ( 'persistent' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies1 [ 0 ] . value ) . toBe ( 'persistent-value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies2 . length ) . toBe ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context2 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should isolate send cookie header' ,  async  ( {  server ,  context ,  browser  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-06 23:27:00 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  cookie  =  '' ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  server . setRoute ( '/empty.html' ,  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cookie  =  req . headers . cookie  ||  '' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . end ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ {  url : server.EMPTY_PAGE ,  name :  'sendcookie' ,  value :  'value'  } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( cookie ) . toBe ( 'sendcookie=value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  context  =  await  browser . newContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect ( cookie ) . toBe ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  context . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-28 10:00:06 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								playwrightTest ( 'should isolate cookies between launches' ,  async  ( {  browserType ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2021-05-08 06:25:55 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  playwrightTest . slow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-28 10:00:06 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  browser1  =  await  browserType . launch ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  context1  =  await  browser1 . newContext ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context1 . addCookies ( [ {  url : server.EMPTY_PAGE ,  name :  'cookie-in-context-1' ,  value :  'value' ,  expires : Date.now ( )  /  1000  +  10000  } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  browser1 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-10-28 10:00:06 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  browser2  =  await  browserType . launch ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  const  context2  =  await  browser2 . newContext ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies  =  await  context2 . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies . length ) . toBe ( 0 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  browser2 . close ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should set multiple cookies' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'multiple-1' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '123456' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'multiple-2' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'bar' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( ( )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  cookies  =  document . cookie . split ( ';' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  cookies . map ( cookie  = >  cookie . trim ( ) ) . sort ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ) . toEqual ( [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    'multiple-1=123456' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    'multiple-2=bar' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should have |expires| set to |-1| for session cookies' ,  async  ( {  context ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'expires' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '123456' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies  =  await  context . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies [ 0 ] . expires ) . toBe ( - 1 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2024-05-30 08:20:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should set cookie with reasonable defaults' ,  async  ( {  context ,  server ,  defaultSameSiteCookieValue  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'defaults' , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 04:57:17 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    value :  '123456' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  cookies  =  await  context . cookies ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookies . sort ( ( a ,  b )  = >  a . name . localeCompare ( b . name ) ) ) . toEqual ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'defaults' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  '123456' , 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-01 16:45:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    domain : server.HOSTNAME , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
									
										
										
										
											2024-05-30 08:20:38 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sameSite : defaultSameSiteCookieValue , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should set a cookie with a path' ,  async  ( {  context ,  page ,  server ,  browserName ,  isWindows ,  channel  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/grid.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-01 16:45:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    domain : server.HOSTNAME , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    path :  '/grid.html' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'gridcookie' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'GRID' , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 04:57:17 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  context . cookies ( ) ) . toEqual ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'gridcookie' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'GRID' , 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-01 16:45:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    domain : server.HOSTNAME , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    path :  '/grid.html' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : false , 
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sameSite :  ( browserName  ===  'webkit'  &&  isWindows  &&  channel  !==  'webkit-wsl' )  ?  'None'  :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( 'gridcookie=GRID' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . PREFIX  +  '/grid.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( 'gridcookie=GRID' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should not set a cookie with blank page URL' ,  async  function ( {  context ,  server  } )  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  error  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  try  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    await  context . addCookies ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      {  url : server.EMPTY_PAGE ,  name :  'example-cookie' ,  value :  'best'  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      {  url :  'about:blank' ,  name :  'example-cookie-blank' ,  value :  'best'  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  catch  ( e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    error  =  e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( error . message ) . toContain ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ` Blank page can not have cookie "example-cookie-blank" ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should not set a cookie on a data URL page' ,  async  function ( {  context  } )  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  let  error  =  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  try  { 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    await  context . addCookies ( [ {  url :  'data:,Hello%2C%20World!' ,  name :  'example-cookie' ,  value :  'best'  } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  }  catch  ( e )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    error  =  e ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( error . message ) . toContain ( 'Data URL page can not have cookie "example-cookie"' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should default to setting secure cookie for HTTPS websites' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  SECURE_URL  =  'https://example.com' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : SECURE_URL , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'foo' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'bar' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  [ cookie ]  =  await  context . cookies ( SECURE_URL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookie . secure ) . toBe ( true ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should be able to set unsecure cookie for HTTP website' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  HTTP_URL  =  'http://example.com' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : HTTP_URL , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'foo' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'bar' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  [ cookie ]  =  await  context . cookies ( HTTP_URL ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( cookie . secure ) . toBe ( false ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should set a cookie on a different domain' ,  async  ( {  context ,  page ,  server ,  browserName ,  isWindows ,  channel  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url :  'https://www.example.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'example-cookie' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'best' , 
							 
						 
					
						
							
								
									
										
										
										
											2021-08-10 04:57:17 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    sameSite :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  context . cookies ( 'https://www.example.com' ) ) . toEqual ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  'example-cookie' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'best' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    domain :  'www.example.com' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    path :  '/' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expires :  - 1 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    httpOnly : false , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    secure : true , 
							 
						 
					
						
							
								
									
										
										
										
											2025-09-09 18:34:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    sameSite :  ( browserName  ===  'webkit'  &&  isWindows  &&  channel  !==  'webkit-wsl' )  ?  'None'  :  'Lax' , 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should set cookies for a frame' ,  async  ( {  context ,  page ,  server  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ 
							 
						 
					
						
							
								
									
										
										
										
											2021-09-28 00:58:08 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    {  url : server.PREFIX ,  name :  'frame-cookie' ,  value :  'value'  } 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . evaluate ( src  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 00:31:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  fulfill ! :  ( value : unknown )  = >  void ; 
							 
						 
					
						
							
								
									
										
										
										
											2020-08-04 04:41:48 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    const  promise  =  new  Promise ( x  = >  fulfill  =  x ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  iframe  =  document . createElement ( 'iframe' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    document . body . appendChild ( iframe ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    iframe . onload  =  fulfill ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    iframe . src  =  src ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  promise ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ,  server . PREFIX  +  '/grid.html' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( await  page . frames ( ) [ 1 ] . evaluate ( 'document.cookie' ) ) . toBe ( 'frame-cookie=value' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2020-08-06 02:43:40 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2022-03-24 06:50:43 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								it ( 'should allow unnamed cookies' ,  async  ( {  page ,  context ,  server ,  browserName ,  platform  } )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  server . setRoute ( '/cookies' ,  ( req ,  res )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . write ( req . headers . cookie  ? ?  'undefined-on-server' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    res . end ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( [ { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    url : server.EMPTY_PAGE , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    name :  '' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    value :  'unnamed-via-add-cookies' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Round-trip behavior
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  resp  =  await  page . goto ( server . PREFIX  +  '/cookies' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( browserName  ===  'webkit'  &&  platform  ===  'darwin' )  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 00:31:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect . soft ( await  resp ! . text ( ) ) . toBe ( 'undefined-on-server' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-24 06:50:43 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    expect . soft ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
									
										
										
										
											2023-10-24 00:31:30 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    expect . soft ( await  resp ! . text ( ) ) . toBe ( 'unnamed-via-add-cookies' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2022-03-24 06:50:43 +08:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    expect . soft ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( 'unnamed-via-add-cookies' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // Within PW behavior
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( server . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . evaluate ( ( )  = >  document . cookie  =  '=unnamed-via-js;' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  context . addCookies ( await  context . cookies ( ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( browserName  ===  'webkit'  &&  platform  ===  'darwin' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect . soft ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( '' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  else 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    expect . soft ( await  page . evaluate ( 'document.cookie' ) ) . toBe ( 'unnamed-via-js' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;  
						 
					
						
							
								
									
										
										
										
											2023-02-03 08:42:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2023-02-22 06:49:14 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								it ( 'should set secure cookies on secure WebSocket' ,  async  ( {  contextFactory ,  httpsServer  } )  = >  {  
						 
					
						
							
								
									
										
										
										
											2023-10-05 10:56:42 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  let  resolveReceivedWebSocketHeaders  =  ( headers : IncomingHttpHeaders )  = >  {  } ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  receivedWebSocketHeaders  =  new  Promise < IncomingHttpHeaders > ( resolve  = >  resolveReceivedWebSocketHeaders  =  resolve ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  httpsServer . onceWebSocketConnection ( ( ws ,  req )  = >  resolveReceivedWebSocketHeaders ( req . headers ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-03 08:42:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  context  =  await  contextFactory ( {  ignoreHTTPSErrors : true  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  page  =  await  context . newPage ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . goto ( httpsServer . EMPTY_PAGE ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2025-07-01 16:45:45 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  await  context . addCookies ( [ {  domain : new  URL ( httpsServer . PREFIX ) . hostname ,  path :  '/' ,  name :  'foo' ,  value :  'bar' ,  secure : true  } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  await  page . evaluate ( hostname  = >  new  WebSocket ( ` wss:// ${ hostname } /ws ` ) ,  httpsServer . HOST ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2023-02-03 08:42:58 +08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  headers  =  await  receivedWebSocketHeaders ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  expect ( headers . cookie ) . toBe ( 'foo=bar' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ) ;