| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   APP_ID, | 
					
						
							|  |  |  |   NgZone, | 
					
						
							|  |  |  |   PLATFORM_COMMON_PROVIDERS, | 
					
						
							|  |  |  |   PLATFORM_INITIALIZER, | 
					
						
							|  |  |  |   APPLICATION_COMMON_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-05-19 14:31:21 -07:00
										 |  |  |   RootRenderer | 
					
						
							|  |  |  | } from "@angular/core"; | 
					
						
							|  |  |  | import {DirectiveResolver, ViewResolver, XHR, COMPILER_PROVIDERS} from "@angular/compiler"; | 
					
						
							| 
									
										
										
										
											2016-05-01 22:50:37 -07:00
										 |  |  | import { | 
					
						
							| 
									
										
										
										
											2016-05-19 14:31:21 -07:00
										 |  |  |   TestComponentBuilder, | 
					
						
							|  |  |  |   MockDirectiveResolver, | 
					
						
							|  |  |  |   MockViewResolver, | 
					
						
							|  |  |  |   TestComponentRenderer | 
					
						
							|  |  |  | } from "@angular/compiler/testing"; | 
					
						
							|  |  |  | import {Parse5DomAdapter} from "../index"; | 
					
						
							|  |  |  | import {AnimationBuilder} from "../../platform-browser/src/animate/animation_builder"; | 
					
						
							|  |  |  | import {MockAnimationBuilder} from "../../platform-browser/testing/animation_builder_mock"; | 
					
						
							|  |  |  | import {MockLocationStrategy} from "../../common/testing/mock_location_strategy"; | 
					
						
							|  |  |  | import {BrowserDetection, DOMTestComponentRenderer} from "@angular/platform-browser/testing"; | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  | import { | 
					
						
							| 
									
										
										
										
											2016-05-19 14:31:21 -07:00
										 |  |  |   DOCUMENT, | 
					
						
							|  |  |  |   BROWSER_SANITIZATION_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-04-12 09:40:37 -07:00
										 |  |  |   EventManager, | 
					
						
							|  |  |  |   EVENT_MANAGER_PLUGINS, | 
					
						
							| 
									
										
										
										
											2016-05-19 14:31:21 -07:00
										 |  |  |   ELEMENT_PROBE_PROVIDERS, | 
					
						
							|  |  |  |   DomEventsPlugin | 
					
						
							|  |  |  | } from "@angular/platform-browser"; | 
					
						
							|  |  |  | import {getDOM} from "../platform_browser_private"; | 
					
						
							|  |  |  | import {DomRootRenderer, DomRootRenderer_} from "../../platform-browser/src/dom/dom_renderer"; | 
					
						
							|  |  |  | import {DomSharedStylesHost, SharedStylesHost} from "../../platform-browser/src/dom/shared_styles_host"; | 
					
						
							|  |  |  | import {LocationStrategy} from "@angular/common"; | 
					
						
							|  |  |  | import {Log} from "@angular/core/testing"; | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function initServerTests() { | 
					
						
							|  |  |  |   Parse5DomAdapter.makeCurrent(); | 
					
						
							|  |  |  |   BrowserDetection.setup(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							| 
									
										
										
										
											2016-04-15 11:59:44 +08:00
										 |  |  |  * Default platform providers for testing. | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2016-04-25 21:47:33 -07:00
										 |  |  | export const TEST_SERVER_PLATFORM_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |     /*@ts2dart_const*/[ | 
					
						
							| 
									
										
										
										
											2016-04-25 21:47:33 -07:00
										 |  |  |       PLATFORM_COMMON_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |       /*@ts2dart_Provider*/ {provide: PLATFORM_INITIALIZER, useValue: initServerTests, multi: true} | 
					
						
							| 
									
										
										
										
											2016-04-25 21:58:48 -07:00
										 |  |  |     ]; | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | function appDoc() { | 
					
						
							|  |  |  |   try { | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |     return getDOM().defaultDoc(); | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |   } catch (e) { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function createNgZone(): NgZone { | 
					
						
							|  |  |  |   return new NgZone({enableLongStackTrace: true}); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Default application providers for testing. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | export const TEST_SERVER_APPLICATION_PROVIDERS: Array<any /*Type | Provider | any[]*/> = | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |     /*@ts2dart_const*/[ | 
					
						
							| 
									
										
										
										
											2016-04-25 21:47:33 -07:00
										 |  |  |       // TODO(julie: when angular2/platform/server is available, use that instead of making our own
 | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |       // list here.
 | 
					
						
							|  |  |  |       APPLICATION_COMMON_PROVIDERS, | 
					
						
							|  |  |  |       COMPILER_PROVIDERS, | 
					
						
							| 
									
										
											  
											
												feat: security implementation in Angular 2.
Summary:
This adds basic security hooks to Angular 2.
* `SecurityContext` is a private API between core, compiler, and
  platform-browser. `SecurityContext` communicates what context a value is used
  in across template parser, compiler, and sanitization at runtime.
* `SanitizationService` is the bare bones interface to sanitize values for a
  particular context.
* `SchemaElementRegistry.securityContext(tagName, attributeOrPropertyName)`
  determines the security context for an attribute or property (it turns out
  attributes and properties match for the purposes of sanitization).
Based on these hooks:
* `DomSchemaElementRegistry` decides what sanitization applies in a particular
  context.
* `DomSanitizationService` implements `SanitizationService` and adds *Safe
  Value*s, i.e. the ability to mark a value as safe and not requiring further
  sanitization.
* `url_sanitizer` and `style_sanitizer` sanitize URLs and Styles, respectively
  (surprise!).
`DomSanitizationService` is the default implementation bound for browser
applications, in the three contexts (browser rendering, web worker rendering,
server side rendering).
BREAKING CHANGES:
*** SECURITY WARNING ***
Angular 2 Release Candidates do not implement proper contextual escaping yet.
Make sure to correctly escape all values that go into the DOM.
*** SECURITY WARNING ***
Reviewers: IgorMinar
Differential Revision: https://reviews.angular.io/D103
											
										 
											2016-04-29 16:04:08 -07:00
										 |  |  |       BROWSER_SANITIZATION_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |       /* @ts2dart_Provider */ {provide: DOCUMENT, useFactory: appDoc}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: DomRootRenderer, useClass: DomRootRenderer_}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: RootRenderer, useExisting: DomRootRenderer}, | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |       EventManager, | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |       /* @ts2dart_Provider */ {provide: EVENT_MANAGER_PLUGINS, useClass: DomEventsPlugin, multi: true}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: XHR, useClass: XHR}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: APP_ID, useValue: 'a'}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: SharedStylesHost, useExisting: DomSharedStylesHost}, | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |       DomSharedStylesHost, | 
					
						
							|  |  |  |       ELEMENT_PROBE_PROVIDERS, | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |       /* @ts2dart_Provider */ {provide: DirectiveResolver, useClass: MockDirectiveResolver}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: ViewResolver, useClass: MockViewResolver}, | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |       Log, | 
					
						
							| 
									
										
										
										
											2016-04-28 17:50:03 -07:00
										 |  |  |       /* @ts2dart_Provider */ {provide: TestComponentRenderer, useClass: DOMTestComponentRenderer}, | 
					
						
							| 
									
										
										
										
											2015-12-15 16:38:27 -08:00
										 |  |  |       TestComponentBuilder, | 
					
						
							| 
									
										
										
										
											2016-04-25 22:25:21 -07:00
										 |  |  |       /* @ts2dart_Provider */ {provide: NgZone, useFactory: createNgZone}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: LocationStrategy, useClass: MockLocationStrategy}, | 
					
						
							|  |  |  |       /* @ts2dart_Provider */ {provide: AnimationBuilder, useClass: MockAnimationBuilder}, | 
					
						
							| 
									
										
										
										
											2016-04-25 21:58:48 -07:00
										 |  |  |     ]; |