ozone: Introduce ClientPixmap and ClientPixmapFactory for non-GPU processes.

It's part of "native GpuMemoryBuffer on ChromeOS Freon" implementation.
 * Design doc: https://docs.google.com/document/d/1qpLLo4mBkzHBh5cuBtBjJZAzXK2X9BgBJtpESh-mNn8

Renderer needs to use Ozone platform interface because of native
GpuMemoryBuffer support. However 99% of OzonePlatform isn't usable
from the Renderer. So this CL introduces ClientPixmapFactory.

ClientPixmapFactory allows external implementations to
hook into Chromium to provide a client pixmap for non-GPU processes.

GPU process creates NativePixmap and sends GpuMemoryBufferHandle to Browser
or Renderer. The non-GPU processes will import a client pixmap from the handle in
https://codereview.chromium.org/1134993003/

To demonstrate why this interface is needed, make
GpuMemoryBufferFactoryOzoneNativeBuffer use this interface.
IsGpuMemoryBufferConfigurationSupported() must answer if the configuration is
supported with respect to each Ozone platform, but currently the answer is hardcoded,
which is true only on Ozone GBM. This CL makes each Ozone platform answer this question.

Browser and Renderer have the singleton ClientPixmapFactory instance like Android and MacOS.

For more information why a pixmap is created by SurfaceFactoryOzone, instead of ClientPixmapFactory,

(1) The privileged (GPU process) API.
  This is SurfaceFactoryOzone. It's used to allocate buffer objects and swap onto
  a surface/display, etc. By design there's only one process using this API. It's
  extremely driver specific under the hood, including in userspace.
  CreateNativePixmap goes here.

(2) The unprivileged API.
  This is ClientPixmapFactory. It can only take handles to existing objects and
  map them, and it should work under the sandbox. It's only driver specific
  in the kernel; the userland part doesn't require loading drivers.
  ImportClientPixmap goes here.

TEST=content_unittests --gtest_filter=GpuMemoryBuffer* --ozone-platform=gbm --ozone-use-surfaceless
Run amd64_generic_freon image
BUG=475633

Review URL: https://codereview.chromium.org/1128113011

Cr-Commit-Position: refs/heads/master@{#342094}
41 files changed