chromium/third_party/blink/renderer/platform/loader/README.md

# platform/loader/

## Loading and Freezing

Loaders (i.e., blink::ResourceLoaders and related objects) run on unfreezable
task runners, which means even when the associated page is frozen a loader is
still running. This is because having frozen loaders for a long time
confuses the network service and the resource scheduler in it. On the other
hand, it would be difficult for blink code authors to handle the situation
where the loading module is working while everything else is frozen
correctly, given that loading experts are not necessarily freezing experts.
To mitigate the pain, we run only part of the loading module when the page
is frozen. Namely,

- blink::MojoURLLoaderClient
- blink::ResponseBodyLoader
- blink::ResourceRequestClient implementations
- blink::ThrottlingURLLoader implementations
- blink::BackForwardCacheLoaderHelper implementations

may run when the associated context is frozen, and other modules won't run
(except for the case where they are called from outside of the loading
module). To guarantee this, blink::ResourceFetcher::SetDefersLoading needs
to be called when the associated context gets frozen and unfrozen.

## Directory organization

### cors

Contains Cross-Origin Resource Sharing (CORS) related files. Some functions
in this directory will be removed once CORS support is moved to
//services/network. Please contact {kinuko,toyoshim}@chromium.org when you need
to depend on this directory from new code.

### fetch

Contains files for low-level loading APIs.  The `PLATFORM_EXPORT` macro is
needed to use them from `core/`.  Otherwise they can be used only in
`platform/`.

The directory conceptually implements https://fetch.spec.whatwg.org/#fetching
(with lower-level components such as the network service). See also: [slides
describing the relationship with the fetch spec](https://docs.google.com/presentation/d/1r9KHuYbNlgqQ6UABAMiWz0ONTpSTnMaDJ8UeYZGWjls/)

### testing

Contains helper files for testing that are available in both
`blink_platform_unittests` and `blink_unittests`.
These files are built as a part of the `platform:test_support` static library.