Add GL_PROGRAM_COMPLETION_QUERY_CHROMIUM

This makes the query of GL_COMPLETION_STATUS_KHR to programs much
cheaper by minimizing the round-trip to the GPU thread.

Bug: 881152, 957001
Change-Id: Iadfa798af29225e752c710ca5c25f50b3dd3101a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1586630
Commit-Queue: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Kentaro Hara <haraken@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#657568}
ScriptPromise WebGLRenderingContextBase::makeXRCompatible(
    ScriptState* script_state) {
  if (isContextLost()) {
    return ScriptPromise::RejectWithDOMException(
        script_state, DOMException::Create(DOMExceptionCode::kInvalidStateError,
                                           "Context lost."));
  }

  if (xr_compatible_) {
    return ScriptPromise::CastUndefined(script_state);
  }

  if (ContextCreatedOnXRCompatibleAdapter()) {
    xr_compatible_ = true;
    return ScriptPromise::CastUndefined(script_state);
  }

  return ScriptPromise::RejectWithDOMException(
      script_state,
      DOMException::Create(
          DOMExceptionCode::kNotSupportedError,
          "Context is not compatible. Switching not yet implemented."));
}

ScriptPromise WebGLRenderingContextBase::makeXRCompatible(
    ScriptState* script_state) {
  if (isContextLost()) {
    return ScriptPromise::RejectWithDOMException(
        script_state, DOMException::Create(DOMExceptionCode::kInvalidStateError,
                                           "Context lost."));
  }

  if (xr_compatible_) {
    return ScriptPromise::CastUndefined(script_state);
  }

  if (ContextCreatedOnXRCompatibleAdapter()) {
    xr_compatible_ = true;
    return ScriptPromise::CastUndefined(script_state);
  }

  return ScriptPromise::RejectWithDOMException(
      script_state,
      DOMException::Create(
          DOMExceptionCode::kNotSupportedError,
          "Context is not compatible. Switching not yet implemented."));
}
