Updated: Comment #57
Stream wrappers are yet another info hook/callback pairing, and those have moved to annotated plugins. They are low-level and better implemented as tagged container services. In addition, it helps clean up and modernize file.inc.
Rewrite stream wrappers as tagged services on the container. The service container is used as a mechanism to "expose" (not register) stream wrapper classes via service providers, so as to collect them during a compiler pass and register them when the kernel boots (and unregister them when it shuts down).
Leave the procedural wrappers intact for now.
User interface changes
hook_stream_wrappers() is gone. Stream wrappers are now classes implementing \Drupal\Core\StreamWrapper\StreamWrapperInterface and exposed as tagged services via *.services.yml files.
|PASSED: [[SimpleTest]]: [PHP 5.4 MySQL] 79,376 pass(es).|
|FAILED: [[SimpleTest]]: [PHP 5.4 MySQL] Failed to run tests: failed during invocation of run-tests.sh --clean.|
|FAILED: [[SimpleTest]]: [PHP 5.4 MySQL] 79,048 pass(es), 17 fail(s), and 0 exception(s).|