| 
									
										
										
										
											2016-05-03 18:41:07 -07:00
										 |  |  | import * as t from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-05-09 16:46:31 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | import {getDOM} from '../../src/dom/dom_adapter'; | 
					
						
							| 
									
										
										
										
											2016-05-03 18:41:07 -07:00
										 |  |  | import {sanitizeStyle} from '../../src/security/style_sanitizer'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   t.describe('Style sanitizer', () => { | 
					
						
							| 
									
										
										
										
											2016-05-09 16:46:31 +02:00
										 |  |  |     let logMsgs: string[]; | 
					
						
							|  |  |  |     let originalLog: (msg: any) => any; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     t.beforeEach(() => { | 
					
						
							|  |  |  |       logMsgs = []; | 
					
						
							|  |  |  |       originalLog = getDOM().log;  // Monkey patch DOM.log.
 | 
					
						
							|  |  |  |       getDOM().log = (msg) => logMsgs.push(msg); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     t.afterEach(() => { getDOM().log = originalLog; }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-09 09:57:07 +02:00
										 |  |  |     function expectSanitize(v: string) { return t.expect(sanitizeStyle(v)); } | 
					
						
							| 
									
										
										
										
											2016-05-09 16:46:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-03 18:41:07 -07:00
										 |  |  |     t.it('sanitizes values', () => { | 
					
						
							| 
									
										
										
										
											2016-05-09 09:57:07 +02:00
										 |  |  |       expectSanitize('abc').toEqual('abc'); | 
					
						
							|  |  |  |       expectSanitize('50px').toEqual('50px'); | 
					
						
							|  |  |  |       expectSanitize('rgb(255, 0, 0)').toEqual('rgb(255, 0, 0)'); | 
					
						
							|  |  |  |       expectSanitize('expression(haha)').toEqual('unsafe'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     t.it('rejects unblanaced quotes', () => { expectSanitize('"value" "').toEqual('unsafe'); }); | 
					
						
							|  |  |  |     t.it('accepts transform functions', () => { | 
					
						
							|  |  |  |       expectSanitize('rotate(90deg)').toEqual('rotate(90deg)'); | 
					
						
							|  |  |  |       expectSanitize('rotate(javascript:evil())').toEqual('unsafe'); | 
					
						
							|  |  |  |       expectSanitize('translateX(12px, -5px)').toEqual('translateX(12px, -5px)'); | 
					
						
							|  |  |  |       expectSanitize('scale3d(1, 1, 2)').toEqual('scale3d(1, 1, 2)'); | 
					
						
							| 
									
										
										
										
											2016-05-03 18:41:07 -07:00
										 |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-05-15 11:33:47 +02:00
										 |  |  |     t.it('sanitizes URLs', () => { | 
					
						
							|  |  |  |       expectSanitize('url(foo/bar.png)').toEqual('url(foo/bar.png)'); | 
					
						
							| 
									
										
										
										
											2016-05-26 08:00:34 -07:00
										 |  |  |       expectSanitize('url( foo/bar.png\n )').toEqual('url( foo/bar.png\n )'); | 
					
						
							| 
									
										
										
										
											2016-05-15 11:33:47 +02:00
										 |  |  |       expectSanitize('url(javascript:evil())').toEqual('unsafe'); | 
					
						
							|  |  |  |       expectSanitize('url(strangeprotocol:evil)').toEqual('unsafe'); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-05-26 08:00:34 -07:00
										 |  |  |     t.it('accepts quoted URLs', () => { | 
					
						
							|  |  |  |       expectSanitize('url("foo/bar.png")').toEqual('url("foo/bar.png")'); | 
					
						
							|  |  |  |       expectSanitize(`url('foo/bar.png')`).toEqual(`url('foo/bar.png')`); | 
					
						
							|  |  |  |       expectSanitize(`url(  'foo/bar.png'\n )`).toEqual(`url(  'foo/bar.png'\n )`); | 
					
						
							|  |  |  |       expectSanitize('url("javascript:evil()")').toEqual('unsafe'); | 
					
						
							|  |  |  |       expectSanitize('url( " javascript:evil() " )').toEqual('unsafe'); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2016-05-03 18:41:07 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |