@@ -46,6 +46,11 @@ type seleniumGridScalerMetadata struct {
4646	TargetValue  int64 
4747}
4848
49+ type  Platform  struct  {
50+ 	name    string 
51+ 	family  * Platform 
52+ }
53+ 
4954type  SeleniumResponse  struct  {
5055	Data  Data  `json:"data"` 
5156}
@@ -350,9 +355,8 @@ func checkRequestCapabilitiesMatch(request map[string]interface{}, browserName s
350355		(_browserVersion  !=  ""  &&  strings .HasPrefix (browserVersion , _browserVersion ))
351356
352357	// Check if platformName matches 
353- 	_platformName  :=  getPlatformName (request )
354- 	platformNameMatch  :=  (_platformName  ==  ""  ||  strings .EqualFold ("any" , _platformName ) ||  strings .EqualFold (platformName , _platformName )) && 
355- 		(platformName  ==  ""  ||  platformName  ==  "any"  ||  strings .EqualFold (platformName , _platformName ))
358+ 	platformNameMatch  :=  strings .EqualFold (GetPlatform (platformName ).name , GetPlatform (getPlatformName (request )).name ) || 
359+ 		isSameFamily (GetPlatform (platformName ), GetPlatform (getPlatformName (request )))
356360
357361	return  browserNameMatch  &&  browserVersionMatch  &&  platformNameMatch  &&  managedDownloadsEnabled (capabilities , request ) &&  extensionCapabilitiesMatch (request , capabilities )
358362}
@@ -371,9 +375,8 @@ func checkStereotypeCapabilitiesMatch(capability map[string]interface{}, browser
371375		(_browserVersion  !=  ""  &&  strings .HasPrefix (browserVersion , _browserVersion ))
372376
373377	// Check if platformName matches 
374- 	_platformVersion  :=  getPlatformName (capability )
375- 	platformNameMatch  :=  (_platformVersion  ==  ""  ||  strings .EqualFold ("any" , _platformVersion ) ||  strings .EqualFold (platformName , _platformVersion )) && 
376- 		(platformName  ==  ""  ||  platformName  ==  "any"  ||  strings .EqualFold (platformName , _platformVersion ))
378+ 	platformNameMatch  :=  strings .EqualFold (GetPlatform (platformName ).name , GetPlatform (getPlatformName (capability )).name ) || 
379+ 		isSameFamily (GetPlatform (platformName ), GetPlatform (getPlatformName (capability )))
377380
378381	return  browserNameMatch  &&  browserVersionMatch  &&  platformNameMatch  &&  managedDownloadsEnabled (capabilities , capability ) &&  extensionCapabilitiesMatch (capability , capabilities )
379382}
@@ -489,3 +492,107 @@ func getCountFromSeleniumResponse(b []byte, browserName string, browserVersion s
489492
490493	return  int64 (len (newRequestNodes )), onGoingSessions , nil 
491494}
495+ 
496+ // Mapping of platform name enum used in the Selenium Grid core 
497+ // https://github.com/SeleniumHQ/selenium/blob/trunk/java/src/org/openqa/selenium/Platform.java 
498+ var  (
499+ 	Windows       =  Platform {"windows" , nil }
500+ 	XP            =  Platform {"Windows XP" , & Windows }
501+ 	Vista         =  Platform {"Windows Vista" , & Windows }
502+ 	Win7          =  Platform {"Windows 7" , & Windows }
503+ 	Win8          =  Platform {"Windows 8" , & Windows }
504+ 	Win8_1        =  Platform {"Windows 8.1" , & Windows }
505+ 	Win10         =  Platform {"Windows 10" , & Windows }
506+ 	Win11         =  Platform {"Windows 11" , & Windows }
507+ 	Mac           =  Platform {"mac" , nil }
508+ 	SnowLeopard   =  Platform {"OS X 10.6" , & Mac }
509+ 	MountainLion  =  Platform {"OS X 10.8" , & Mac }
510+ 	Mavericks     =  Platform {"OS X 10.9" , & Mac }
511+ 	Yosemite      =  Platform {"OS X 10.10" , & Mac }
512+ 	ElCapitan     =  Platform {"OS X 10.11" , & Mac }
513+ 	Sierra        =  Platform {"macOS 10.12" , & Mac }
514+ 	HighSierra    =  Platform {"macOS 10.13" , & Mac }
515+ 	Mojave        =  Platform {"macOS 10.14" , & Mac }
516+ 	Catalina      =  Platform {"macOS 10.15" , & Mac }
517+ 	BigSur        =  Platform {"macOS 11.0" , & Mac }
518+ 	Monterey      =  Platform {"macOS 12.0" , & Mac }
519+ 	Ventura       =  Platform {"macOS 13.0" , & Mac }
520+ 	Sonoma        =  Platform {"macOS 14.0" , & Mac }
521+ 	Sequoia       =  Platform {"macOS 15.0" , & Mac }
522+ 	Unix          =  Platform {"unix" , nil }
523+ 	Linux         =  Platform {"linux" , & Unix }
524+ 	Bsd           =  Platform {"bsd" , & Unix }
525+ 	Solaris       =  Platform {"solaris" , & Unix }
526+ 	Android       =  Platform {"android" , nil }
527+ 	IOS           =  Platform {"iOS" , nil }
528+ 	Any           =  Platform {"any" , nil }
529+ )
530+ 
531+ func  isSameFamily (p1 , p2  Platform ) bool  {
532+ 	return  p1 .family  !=  nil  &&  p2 .family  !=  nil  &&  p1 .family  ==  p2 .family 
533+ }
534+ 
535+ func  GetPlatform (input  string ) Platform  {
536+ 	switch  strings .ToLower (input ) {
537+ 	case  "windows" :
538+ 		return  Windows 
539+ 	case  "windows server 2003" , "xp" , "winnt" , "windows_nt" , "windows nt" :
540+ 		return  XP 
541+ 	case  "windows server 2008" , "windows vista" :
542+ 		return  Vista 
543+ 	case  "windows 7" , "win7" :
544+ 		return  Win7 
545+ 	case  "windows server 2012" , "windows 8" , "win8" :
546+ 		return  Win8 
547+ 	case  "windows 8.1" , "win8.1" :
548+ 		return  Win8_1 
549+ 	case  "windows 10" , "win10" :
550+ 		return  Win10 
551+ 	case  "windows 11" , "win11" :
552+ 		return  Win11 
553+ 	case  "mac" , "darwin" , "macos" , "mac os x" , "os x" :
554+ 		return  Mac 
555+ 	case  "os x 10.6" , "macos 10.6" , "snow leopard" :
556+ 		return  SnowLeopard 
557+ 	case  "os x 10.8" , "macos 10.8" , "mountain lion" :
558+ 		return  MountainLion 
559+ 	case  "os x 10.9" , "macos 10.9" , "mavericks" :
560+ 		return  Mavericks 
561+ 	case  "os x 10.10" , "macos 10.10" , "yosemite" :
562+ 		return  Yosemite 
563+ 	case  "os x 10.11" , "macos 10.11" , "el capitan" :
564+ 		return  ElCapitan 
565+ 	case  "os x 10.12" , "macos 10.12" , "sierra" :
566+ 		return  Sierra 
567+ 	case  "os x 10.13" , "macos 10.13" , "high sierra" :
568+ 		return  HighSierra 
569+ 	case  "os x 10.14" , "macos 10.14" , "mojave" :
570+ 		return  Mojave 
571+ 	case  "os x 10.15" , "macos 10.15" , "catalina" :
572+ 		return  Catalina 
573+ 	case  "os x 11.0" , "macos 11.0" , "big sur" :
574+ 		return  BigSur 
575+ 	case  "os x 12.0" , "macos 12.0" , "monterey" :
576+ 		return  Monterey 
577+ 	case  "os x 13.0" , "macos 13.0" , "ventura" :
578+ 		return  Ventura 
579+ 	case  "os x 14.0" , "macos 14.0" , "sonoma" :
580+ 		return  Sonoma 
581+ 	case  "os x 15.0" , "macos 15.0" , "sequoia" :
582+ 		return  Sequoia 
583+ 	case  "linux" :
584+ 		return  Linux 
585+ 	case  "bsd" :
586+ 		return  Bsd 
587+ 	case  "solaris" :
588+ 		return  Solaris 
589+ 	case  "android" , "dalvik" :
590+ 		return  Android 
591+ 	case  "ios" :
592+ 		return  IOS 
593+ 	case  "any" , "" :
594+ 		return  Any 
595+ 	default :
596+ 		return  Platform {strings .ToLower (input ), nil }
597+ 	}
598+ }
0 commit comments