WebGPU: implement initial swapchain

This implements GPUCanvasContext that's mostly a proxy for a
GPUSwapChain because the swapchain can be reconfigured on the
GPUCanvasContext multiple times.

GPUSwapChain mostly wraps in a GPUTexture the DawnTextures it receives
from the WebGPUSwapBufferProvider. They are split for memory management
reasons with the GPUSwapChain that's GCed and the
WebGPUSwapBufferProvider that's refcounted, and because the
WebGPUSwapBufferProvider needs to live in blink_platform.

Textures for the swapchains are created from shared images, associated
with Dawn textures while the application is rendering to them, and then
sent to the compositor for presentation.

A stub version of WebGPUInterface is added to help mock/fake it for
testing.

BUG=chromium:877147

Change-Id: I5e08cf1bb6d178fb42aacee5fc67284eda764822
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1581969
Commit-Queue: Corentin Wallez <[email protected]>
Reviewed-by: Eric Karl <[email protected]>
Reviewed-by: Kenneth Russell <[email protected]>
Reviewed-by: Kai Ninomiya <[email protected]>
Cr-Commit-Position: refs/heads/master@{#654384}
33 files changed