2525using  System . Text . Json . Nodes ; 
2626using  System . Xml ; 
2727
28- 
28+ #nullable enable 
2929
3030namespace  OpenQA . Selenium . Firefox 
3131{ 
@@ -38,8 +38,8 @@ public class FirefoxExtension
3838        private  const  string  RdfManifestFileName  =  "install.rdf" ; 
3939        private  const  string  JsonManifestFileName  =  "manifest.json" ; 
4040
41-         private  string  extensionFileName ; 
42-         private  string  extensionResourceId ; 
41+         private  readonly   string  extensionFileName ; 
42+         private  readonly   string  extensionResourceId ; 
4343
4444        /// <summary> 
4545        /// Initializes a new instance of the <see cref="FirefoxExtension"/> class. 
@@ -48,6 +48,7 @@ public class FirefoxExtension
4848        /// <remarks>WebDriver attempts to resolve the <paramref name="fileName"/> parameter 
4949        /// by looking first for the specified file in the directory of the calling assembly, 
5050        /// then using the full path to the file, if a full path is provided.</remarks> 
51+         /// <exception cref="ArgumentNullException">If <paramref name="fileName"/> is <see langword="null"/>.</exception> 
5152        public  FirefoxExtension ( string  fileName ) 
5253            :  this ( fileName ,  string . Empty ) 
5354        { 
@@ -65,16 +66,18 @@ public FirefoxExtension(string fileName)
6566        /// not found in the file system, WebDriver attempts to locate a resource in the 
6667        /// executing assembly with the name specified by the <paramref name="resourceId"/> 
6768        /// parameter.</remarks> 
69+         /// <exception cref="ArgumentNullException">If <paramref name="fileName"/> or <paramref name="resourceId"/> are <see langword="null"/>.</exception> 
6870        internal  FirefoxExtension ( string  fileName ,  string  resourceId ) 
6971        { 
70-             this . extensionFileName  =  fileName ; 
71-             this . extensionResourceId  =  resourceId ; 
72+             this . extensionFileName  =  fileName   ??   throw   new   ArgumentNullException ( nameof ( fileName ) ) ; 
73+             this . extensionResourceId  =  resourceId   ??   throw   new   ArgumentNullException ( nameof ( resourceId ) ) ; 
7274        } 
7375
7476        /// <summary> 
7577        /// Installs the extension into a profile directory. 
7678        /// </summary> 
7779        /// <param name="profileDirectory">The Firefox profile directory into which to install the extension.</param> 
80+         /// <exception cref="ArgumentNullException">If <paramref name="profileDirectory"/> is <see langword="null"/>.</exception> 
7881        public  void  Install ( string  profileDirectory ) 
7982        { 
8083            DirectoryInfo  info  =  new  DirectoryInfo ( profileDirectory ) ; 
@@ -132,7 +135,7 @@ private static string GetExtensionId(string root)
132135
133136        private  static   string  ReadIdFromInstallRdf ( string  root ) 
134137        { 
135-             string  id   =   null ; 
138+             string  id ; 
136139            string  installRdf  =  Path . Combine ( root ,  "install.rdf" ) ; 
137140            try 
138141            { 
@@ -143,11 +146,11 @@ private static string ReadIdFromInstallRdf(string root)
143146                rdfNamespaceManager . AddNamespace ( "em" ,  EmNamespaceUri ) ; 
144147                rdfNamespaceManager . AddNamespace ( "RDF" ,  "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ) ; 
145148
146-                 XmlNode  node  =  rdfXmlDocument . SelectSingleNode ( "//em:id" ,  rdfNamespaceManager ) ; 
149+                 XmlNode ?  node  =  rdfXmlDocument . SelectSingleNode ( "//em:id" ,  rdfNamespaceManager ) ; 
147150                if  ( node  ==  null ) 
148151                { 
149-                     XmlNode  descriptionNode  =  rdfXmlDocument . SelectSingleNode ( "//RDF:Description" ,  rdfNamespaceManager ) ; 
150-                     XmlAttribute  attribute  =  descriptionNode . Attributes [ "id" ,  EmNamespaceUri ] ; 
152+                     XmlNode ?  descriptionNode  =  rdfXmlDocument . SelectSingleNode ( "//RDF:Description" ,  rdfNamespaceManager ) ; 
153+                     XmlAttribute ?  attribute  =  descriptionNode ? . Attributes ? [ "id" ,  EmNamespaceUri ] ; 
151154                    if  ( attribute  ==  null ) 
152155                    { 
153156                        throw  new  WebDriverException ( "Cannot locate node containing extension id: "  +  installRdf ) ; 
@@ -175,26 +178,19 @@ private static string ReadIdFromInstallRdf(string root)
175178
176179        private  static   string  ReadIdFromManifestJson ( string  root ) 
177180        { 
178-             string  id  =  null ; 
181+             string  id  =  string . Empty ; 
179182            string  manifestJsonPath  =  Path . Combine ( root ,  JsonManifestFileName ) ; 
183+ 
180184            var  manifestObject  =  JsonNode . Parse ( File . ReadAllText ( manifestJsonPath ) ) ; 
181-             if  ( manifestObject [ "applications" ]   !=   null ) 
185+             if  ( manifestObject ! [ "applications" ] ? [ "gecko" ] ? [ "id" ]   is   {   }   idNode ) 
182186            { 
183-                 var  applicationObject  =  manifestObject [ "applications" ] ; 
184-                 if  ( applicationObject [ "gecko" ]  !=  null ) 
185-                 { 
186-                     var  geckoObject  =  applicationObject [ "gecko" ] ; 
187-                     if  ( geckoObject [ "id" ]  !=  null ) 
188-                     { 
189-                         id  =  geckoObject [ "id" ] . ToString ( ) . Trim ( ) ; 
190-                     } 
191-                 } 
187+                 id  =  idNode . ToString ( ) . Trim ( ) ; 
192188            } 
193189
194190            if  ( string . IsNullOrEmpty ( id ) ) 
195191            { 
196-                 string  addInName  =  manifestObject [ "name" ] . ToString ( ) . Replace ( " " ,  "" ) ; 
197-                 string  addInVersion  =  manifestObject [ "version" ] . ToString ( ) ; 
192+                 string  addInName  =  manifestObject [ "name" ] ! . ToString ( ) . Replace ( " " ,  "" ) ; 
193+                 string  addInVersion  =  manifestObject [ "version" ] ! . ToString ( ) ; 
198194                id  =  string . Format ( CultureInfo . InvariantCulture ,  "{0}@{1}" ,  addInName ,  addInVersion ) ; 
199195            } 
200196
0 commit comments