fix(ivy): ensure that the correct document is available (#33712)

Most of the use of `document` in the framework is within
the DI so they just inject the `DOCUMENT` token and are done.

Ivy is special because it does not rely upon the DI and must
get hold of the document some other way. There are a limited
number of places relevant to ivy that currently consume a global
document object.

The solution is modelled on the `LOCALE_ID` approach, which has
`getLocaleId()` and `setLocaleId()` top-level functions for ivy (see
`core/src/render3/i18n.ts`).  In the rest of Angular (i.e. using DI) the
`LOCALE_ID` token has a provider that also calls setLocaleId() to
ensure that ivy has the same value.

This commit defines `getDocument()` and `setDocument() `top-level
functions for ivy. Wherever ivy needs the global `document`, it calls
`getDocument()` instead.  Each of the platforms (e.g. Browser, Server,
WebWorker) have providers for `DOCUMENT`. In each of those providers
they also call `setDocument()` accordingly.

Fixes #33651

PR Close #33712
This commit is contained in:
Pete Bacon Darwin
2019-11-09 19:00:53 +00:00
committed by Kara Erickson
parent 5b292bf125
commit 83626962cf
12 changed files with 99 additions and 15 deletions

View File

@ -26,6 +26,9 @@
{
"name": "DECLARATION_VIEW"
},
{
"name": "DOCUMENT"
},
{
"name": "DepComponent"
},
@ -308,6 +311,9 @@
{
"name": "getDirectiveDef"
},
{
"name": "getDocument"
},
{
"name": "getElementDepthCount"
},

View File

@ -26,6 +26,9 @@
{
"name": "DECLARATION_VIEW"
},
{
"name": "DOCUMENT"
},
{
"name": "EMPTY_ARRAY"
},
@ -245,6 +248,9 @@
{
"name": "getDirectiveDef"
},
{
"name": "getDocument"
},
{
"name": "getFactoryDef"
},

View File

@ -47,6 +47,9 @@
{
"name": "DEFAULT_TOTAL_SOURCES"
},
{
"name": "DOCUMENT"
},
{
"name": "DefaultIterableDiffer"
},
@ -656,6 +659,9 @@
{
"name": "getDirectiveDef"
},
{
"name": "getDocument"
},
{
"name": "getElementDepthCount"
},