@@ -17,7 +17,8 @@ module SecureHeaders
1717 FIREFOX_23 = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0"
1818 CHROME = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.99 Safari/533.4"
1919 CHROME_25 = "Mozilla/5.0 (Macintosh; Intel Mac OS X 1084) AppleWebKit/537.22 (KHTML like Gecko) Chrome/25.0.1364.99 Safari/537.22"
20-
20+ SAFARI = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
21+ OPERA = "Opera/9.80 (X11; Linux i686; Ubuntu/14.10) Presto/2.12.388 Version/12.16"
2122
2223 def request_for user_agent , request_uri = nil , options = { :ssl => false }
2324 double ( :ssl? => options [ :ssl ] , :env => { 'HTTP_USER_AGENT' => user_agent } , :url => ( request_uri || 'http://areallylongdomainexample.com' ) )
@@ -184,11 +185,33 @@ def request_for user_agent, request_uri=nil, options={:ssl => false}
184185 end
185186
186187 context "when using a nonce" do
187- it "adds a nonce and unsafe-inline to the script-src value" do
188+ it "adds a nonce and unsafe-inline to the script-src value when using chrome " do
188189 header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( CHROME ) )
189190 expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
190191 end
191192
193+ it "adds a nonce and unsafe-inline to the script-src value when using firefox" do
194+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( FIREFOX ) )
195+ expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
196+ end
197+
198+ it "adds a nonce and unsafe-inline to the script-src value when using opera" do
199+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( OPERA ) )
200+ expect ( header . value ) . to include ( "script-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
201+ end
202+
203+ it "does not add a nonce and unsafe-inline to the script-src value when using Safari" do
204+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( SAFARI ) )
205+ expect ( header . value ) . to include ( "script-src 'self' 'unsafe-inline'" )
206+ expect ( header . value ) . not_to include ( "nonce" )
207+ end
208+
209+ it "does not add a nonce and unsafe-inline to the script-src value when using IE" do
210+ header = ContentSecurityPolicy . new ( default_opts . merge ( :script_src => "self nonce" ) , :request => request_for ( IE ) )
211+ expect ( header . value ) . to include ( "script-src 'self' 'unsafe-inline'" )
212+ expect ( header . value ) . not_to include ( "nonce" )
213+ end
214+
192215 it "adds a nonce and unsafe-inline to the style-src value" do
193216 header = ContentSecurityPolicy . new ( default_opts . merge ( :style_src => "self nonce" ) , :request => request_for ( CHROME ) )
194217 expect ( header . value ) . to include ( "style-src 'self' 'nonce-#{ header . nonce } ' 'unsafe-inline'" )
0 commit comments