  [PermissiveDictionaryConversion]
  dictionary CanvasContextCreationAttributesModule {
      // This is an experimental feature, but it is not hidden behind a flag in
-@@ -47,6 +53,7 @@ dictionary CanvasContextCreationAttributesModule {
+@@ -47,6 +47,7 @@ dictionary CanvasContextCreationAttributesModule {
      boolean antialias = true;
      boolean premultipliedAlpha = true;
      boolean preserveDrawingBuffer = false;
 +    CanvasPowerPreference powerPreference = "default";
      boolean failIfMajorPerformanceCaveat = false;
-     [RuntimeEnabled=WebXR] XRDevice compatibleXRDevice = null;
+     [OriginTrialEnabled=WebXR] XRDevice compatibleXRDevice = null;
  };
-diff --git a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
+diff --git a/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc b/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
 index 332fa9fb0547..e8fae4b01c39 100644
---- a/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
-+++ b/third_party/WebKit/Source/modules/webgl/WebGLContextAttributeHelpers.cpp
+--- a/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
++++ b/third_party/blink/renderer/modules/webgl/webgl_context_attribute_helpers.cc
 @@ -18,6 +18,7 @@ WebGLContextAttributes ToWebGLContextAttributes(
    result.setAntialias(attrs.antialias);
    result.setPremultipliedAlpha(attrs.premultiplied_alpha);

 
   attributes.fail_if_major_perf_caveat =
       web_attributes.fail_if_major_performance_caveat;
diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributesCore.h b/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributesCore.h
index ca4543a10e69..a1f5e5c9f906 100644
--- a/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributesCore.h
+++ b/third_party/WebKit/Source/core/html/canvas/CanvasContextCreationAttributesCore.h
@@ -30,6 +30,7 @@ class CORE_EXPORT CanvasContextCreationAttributesCore {
   String pixel_format = "8-8-8-8";
   bool premultiplied_alpha = true;

   result.setFailIfMajorPerformanceCaveat(
       attrs.fail_if_major_performance_caveat);
   result.setCompatibleXRDevice(
@@ -30,6 +30,7 @@ Platform::ContextAttributes ToPlatformContextAttributes(
     unsigned web_gl_version,
     bool support_own_offscreen_surface) {
   Platform::ContextAttributes result;
+  result.prefer_integrated_gpu = attrs.power_preference == "low-power";
   result.fail_if_major_performance_caveat =
       attrs.fail_if_major_performance_caveat;
   result.context_type = web_gl_version == 2 ? Platform::kWebGL2ContextType
diff --git a/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl b/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
index 180673be9bd0..0af29cbc9402 100644
--- a/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
+++ b/third_party/blink/renderer/modules/webgl/webgl_context_attributes.idl
@@ -26,6 +26,12 @@
 
 // https://www.khronos.org/registry/webgl/specs/latest/1.0/#5.2
