Bug 1341959: Part 2. Check if WebGL2 is blocked before creating it. r?jgilbert draft
authorMilan Sreckovic <milan@mozilla.com>
Thu, 02 Mar 2017 15:48:12 -0500
changeset 492121 70f7c856ef61a39f9cbce27fe2a542ad24097997
parent 492120 e05ad20bb1821f17863b2c120a52b2b22b41f018
child 547657 81442e966c343b1250713bcea0de23cefd705e20
push id47537
push userbmo:milan@mozilla.com
push dateThu, 02 Mar 2017 20:48:40 +0000
reviewersjgilbert
bugs1341959
milestone54.0a1
Bug 1341959: Part 2. Check if WebGL2 is blocked before creating it. r?jgilbert MozReview-Commit-ID: Div1umXOMV
dom/canvas/WebGLContext.cpp
--- a/dom/canvas/WebGLContext.cpp
+++ b/dom/canvas/WebGLContext.cpp
@@ -705,16 +705,32 @@ WebGLContext::CreateAndInitGLWith(FnCrea
 
     return true;
 }
 
 bool
 WebGLContext::CreateAndInitGL(bool forceEnabled,
                               std::vector<FailureReason>* const out_failReasons)
 {
+    // WebGL2 is separately blocked:
+    if (IsWebGL2()) {
+        const nsCOMPtr<nsIGfxInfo> gfxInfo = services::GetGfxInfo();
+        const auto feature = nsIGfxInfo::FEATURE_WEBGL2;
+
+        FailureReason reason;
+        if (IsFeatureInBlacklist(gfxInfo, feature, &reason.key)) {
+            reason.info = "Refused to create WebGL2 context because of blacklist"
+                          " entry: ";
+            reason.info.Append(reason.key);
+            out_failReasons->push_back(reason);
+            GenerateWarning("%s", reason.info.BeginReading());
+            return false;
+        }
+    }
+
     const gl::SurfaceCaps baseCaps = BaseCaps(mOptions, this);
     gl::CreateContextFlags flags = gl::CreateContextFlags::NO_VALIDATION;
     bool tryNativeGL = true;
     bool tryANGLE = false;
 
     if (forceEnabled) {
         flags |= gl::CreateContextFlags::FORCE_ENABLE_HARDWARE;
     }