Make EGL image extensions enableable.

BUG=angleproject:1523

Change-Id: I6e890380bafb9f81595ab603996259fe6177e9e0
Reviewed-on: https://chromium-review.googlesource.com/744447
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
diff --git a/src/tests/gl_tests/WebGLCompatibilityTest.cpp b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
index f43ac28..a777e24 100644
--- a/src/tests/gl_tests/WebGLCompatibilityTest.cpp
+++ b/src/tests/gl_tests/WebGLCompatibilityTest.cpp
@@ -427,6 +427,74 @@
     }
 }
 
+// Test enabling the EGL image extensions
+TEST_P(WebGLCompatibilityTest, EnableExtensionEGLImage)
+{
+    EXPECT_FALSE(extensionEnabled("GL_OES_EGL_image"));
+    EXPECT_FALSE(extensionEnabled("GL_OES_EGL_image_external"));
+    EXPECT_FALSE(extensionEnabled("GL_OES_EGL_image_external_essl3"));
+    EXPECT_FALSE(extensionEnabled("NV_EGL_stream_consumer_external"));
+
+    const std::string &fragES2 =
+        "#extension GL_OES_EGL_image_external : require\n"
+        "precision highp float;\n"
+        "uniform samplerExternalOES sampler;\n"
+        "void main()\n"
+        "{\n"
+        "    gl_FragColor = texture2D(sampler, vec2(0, 0));\n"
+        "}";
+    EXPECT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, fragES2));
+
+    const std::string &fragES3 =
+        "#version 300 es\n"
+        "#extension GL_OES_EGL_image_external : require\n"
+        "precision highp float;\n"
+        "uniform samplerExternalOES sampler;\n"
+        "void main()\n"
+        "{\n"
+        "    gl_FragColor = texture(sampler, vec2(0, 0));\n"
+        "}";
+    if (getClientMajorVersion() > 3)
+    {
+        EXPECT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, fragES3));
+    }
+
+    glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
+    EXPECT_GL_ERROR(GL_INVALID_ENUM);
+
+    GLint result;
+    glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &result);
+    EXPECT_GL_ERROR(GL_INVALID_ENUM);
+
+    if (extensionRequestable("GL_OES_EGL_image_external"))
+    {
+        glRequestExtensionANGLE("GL_OES_EGL_image_external");
+        EXPECT_GL_NO_ERROR();
+        EXPECT_TRUE(extensionEnabled("GL_OES_EGL_image_external"));
+
+        EXPECT_NE(0u, CompileShader(GL_FRAGMENT_SHADER, fragES2));
+
+        glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
+        EXPECT_GL_NO_ERROR();
+
+        glGetIntegerv(GL_TEXTURE_BINDING_EXTERNAL_OES, &result);
+        EXPECT_GL_NO_ERROR();
+
+        if (getClientMajorVersion() > 3 && extensionRequestable("GL_OES_EGL_image_external_essl3"))
+        {
+            glRequestExtensionANGLE("GL_OES_EGL_image_external_essl3");
+            EXPECT_GL_NO_ERROR();
+            EXPECT_TRUE(extensionEnabled("GL_OES_EGL_image_external_essl3"));
+
+            EXPECT_NE(0u, CompileShader(GL_FRAGMENT_SHADER, fragES3));
+        }
+        else
+        {
+            EXPECT_EQ(0u, CompileShader(GL_FRAGMENT_SHADER, fragES3));
+        }
+    }
+}
+
 // Verify that shaders are of a compatible spec when the extension is enabled.
 TEST_P(WebGLCompatibilityTest, ExtensionCompilerSpec)
 {