@@ -11,12 +11,12 @@ import { CancellationError, getErrorMessage, isCancellationError } from '../../.
1111import { IPager } from '../../../base/common/paging.js' ;
1212import { isWeb , platform } from '../../../base/common/platform.js' ;
1313import { arch } from '../../../base/common/process.js' ;
14- import { isBoolean , isString } from '../../../base/common/types.js' ;
14+ import { isBoolean , isNumber , isString } from '../../../base/common/types.js' ;
1515import { URI } from '../../../base/common/uri.js' ;
1616import { IHeaders , IRequestContext , IRequestOptions , isOfflineError } from '../../../base/parts/request/common/request.js' ;
1717import { IConfigurationService } from '../../configuration/common/configuration.js' ;
1818import { IEnvironmentService } from '../../environment/common/environment.js' ;
19- import { getTargetPlatform , IExtensionGalleryService , IExtensionIdentifier , IExtensionInfo , IGalleryExtension , IGalleryExtensionAsset , IGalleryExtensionAssets , IGalleryExtensionVersion , InstallOperation , IQueryOptions , IExtensionsControlManifest , isNotWebExtensionInWebTargetPlatform , isTargetPlatformCompatible , ITranslation , SortOrder , StatisticType , toTargetPlatform , WEB_EXTENSION_TAG , IExtensionQueryOptions , IDeprecationInfo , ISearchPrefferedResults , ExtensionGalleryError , ExtensionGalleryErrorCode , IProductVersion , IAllowedExtensionsService , EXTENSION_IDENTIFIER_REGEX , SortBy , FilterType , MaliciousExtensionInfo } from './extensionManagement.js' ;
19+ import { getTargetPlatform , IExtensionGalleryService , IExtensionIdentifier , IExtensionInfo , IGalleryExtension , IGalleryExtensionAsset , IGalleryExtensionAssets , IGalleryExtensionVersion , InstallOperation , IQueryOptions , IExtensionsControlManifest , isNotWebExtensionInWebTargetPlatform , isTargetPlatformCompatible , ITranslation , SortOrder , StatisticType , toTargetPlatform , WEB_EXTENSION_TAG , IExtensionQueryOptions , IDeprecationInfo , ISearchPrefferedResults , ExtensionGalleryError , ExtensionGalleryErrorCode , IProductVersion , IAllowedExtensionsService , EXTENSION_IDENTIFIER_REGEX , SortBy , FilterType , MaliciousExtensionInfo , ExtensionRequestsTimeoutConfigKey } from './extensionManagement.js' ;
2020import { adoptToGalleryExtensionId , areSameExtensions , getGalleryExtensionId , getGalleryExtensionTelemetryData } from './extensionManagementUtil.js' ;
2121import { IExtensionManifest , TargetPlatform } from '../../extensions/common/extensions.js' ;
2222import { areApiProposalsCompatible , isEngineValid } from '../../extensions/common/extensionValidator.js' ;
@@ -37,7 +37,6 @@ const SEARCH_ACTIVITY_HEADER_NAME = 'X-Market-Search-Activity-Id';
3737const ACTIVITY_HEADER_NAME = 'Activityid' ;
3838const SERVER_HEADER_NAME = 'Server' ;
3939const END_END_ID_HEADER_NAME = 'X-Vss-E2eid' ;
40- const REQUEST_TIME_OUT = 10_000 ;
4140
4241interface IRawGalleryExtensionFile {
4342 readonly assetType : string ;
@@ -1452,7 +1451,7 @@ export abstract class AbstractExtensionGalleryService implements IExtensionGalle
14521451 type : 'GET' ,
14531452 url : uri . toString ( true ) ,
14541453 headers,
1455- timeout : REQUEST_TIME_OUT
1454+ timeout : this . getRequestTimeout ( )
14561455 } , token ) ;
14571456
14581457 if ( context . res . statusCode === 404 ) {
@@ -1745,7 +1744,7 @@ export abstract class AbstractExtensionGalleryService implements IExtensionGalle
17451744
17461745 const url = asset . uri ;
17471746 const fallbackUrl = asset . fallbackUri ;
1748- const firstOptions = { ...options , url, timeout : REQUEST_TIME_OUT } ;
1747+ const firstOptions = { ...options , url, timeout : this . getRequestTimeout ( ) } ;
17491748
17501749 let context ;
17511750 try {
@@ -1791,7 +1790,7 @@ export abstract class AbstractExtensionGalleryService implements IExtensionGalle
17911790 endToEndId : this . getHeaderValue ( context ?. res . headers , END_END_ID_HEADER_NAME ) ,
17921791 } ) ;
17931792
1794- const fallbackOptions = { ...options , url : fallbackUrl , timeout : REQUEST_TIME_OUT } ;
1793+ const fallbackOptions = { ...options , url : fallbackUrl , timeout : this . getRequestTimeout ( ) } ;
17951794 return this . requestService . request ( fallbackOptions , token ) ;
17961795 }
17971796 }
@@ -1810,7 +1809,7 @@ export abstract class AbstractExtensionGalleryService implements IExtensionGalle
18101809 const context = await this . requestService . request ( {
18111810 type : 'GET' ,
18121811 url : this . extensionsControlUrl ,
1813- timeout : REQUEST_TIME_OUT
1812+ timeout : this . getRequestTimeout ( )
18141813 } , CancellationToken . None ) ;
18151814
18161815 if ( context . res . statusCode !== 200 ) {
@@ -1862,6 +1861,11 @@ export abstract class AbstractExtensionGalleryService implements IExtensionGalle
18621861 return { malicious, deprecated, search, autoUpdate } ;
18631862 }
18641863
1864+ private getRequestTimeout ( ) : number {
1865+ const configuredTimeout = this . configurationService . getValue < number > ( ExtensionRequestsTimeoutConfigKey ) ;
1866+ return isNumber ( configuredTimeout ) && configuredTimeout >= 0 ? configuredTimeout : 60_000 ;
1867+ }
1868+
18651869}
18661870
18671871export class ExtensionGalleryService extends AbstractExtensionGalleryService {
0 commit comments