| Index: ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm | 
| diff --git a/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm b/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm | 
| index 3c5dd7ef592427126c4398c3a24f53a77a17b85c..e8cabcd6d9437611691722814e45a0204594e9ed 100644 | 
| --- a/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm | 
| +++ b/ui/accelerated_widget_mac/ca_layer_tree_unittest_mac.mm | 
| @@ -39,6 +39,9 @@ | 
| float scale_factor = 1.0f; | 
| unsigned filter = GL_LINEAR; | 
| scoped_refptr<gl::GLImageIOSurface> gl_image; | 
| + | 
| +  bool allow_av_layers = true; | 
| +  bool allow_solid_color_layers = true; | 
| }; | 
|  | 
| scoped_refptr<gl::GLImageIOSurface> CreateGLImage(const gfx::Size& size, | 
| @@ -74,20 +77,8 @@ void UpdateCALayerTree(std::unique_ptr<ui::CARendererLayerTree>& ca_layer_tree, | 
| CALayerProperties* properties, | 
| CALayer* superlayer) { | 
| std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -      new ui::CARendererLayerTree(true)); | 
| -  bool result = ScheduleCALayer(new_ca_layer_tree.get(), properties); | 
| -  EXPECT_TRUE(result); | 
| -  new_ca_layer_tree->CommitScheduledCALayers( | 
| -      superlayer, std::move(ca_layer_tree), properties->scale_factor); | 
| -  std::swap(new_ca_layer_tree, ca_layer_tree); | 
| -} | 
| - | 
| -void UpdateCALayerTreeWithAVDisabled( | 
| -    std::unique_ptr<ui::CARendererLayerTree>& ca_layer_tree, | 
| -    CALayerProperties* properties, | 
| -    CALayer* superlayer) { | 
| -  std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -      new ui::CARendererLayerTree(false)); | 
| +      new ui::CARendererLayerTree(properties->allow_av_layers, | 
| +                                  properties->allow_solid_color_layers)); | 
| bool result = ScheduleCALayer(new_ca_layer_tree.get(), properties); | 
| EXPECT_TRUE(result); | 
| new_ca_layer_tree->CommitScheduledCALayers( | 
| @@ -110,352 +101,385 @@ void SetUp() override { | 
| }; | 
|  | 
| // Test updating each layer's properties. | 
| -TEST_F(CALayerTreeTest, PropertyUpdates) { | 
| -  CALayerProperties properties; | 
| -  properties.clip_rect = gfx::Rect(2, 4, 8, 16); | 
| -  properties.transform.Translate(10, 20); | 
| -  properties.contents_rect = gfx::RectF(0.0f, 0.25f, 0.5f, 0.75f); | 
| -  properties.rect = gfx::Rect(16, 32, 64, 128); | 
| -  properties.background_color = SkColorSetARGB(0xFF, 0xFF, 0, 0); | 
| -  properties.edge_aa_mask = GL_CA_LAYER_EDGE_LEFT_CHROMIUM; | 
| -  properties.opacity = 0.5f; | 
| -  properties.gl_image = | 
| -      CreateGLImage(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888, false); | 
| - | 
| -  std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree; | 
| -  CALayer* root_layer = nil; | 
| -  CALayer* clip_and_sorting_layer = nil; | 
| -  CALayer* transform_layer = nil; | 
| -  CALayer* content_layer = nil; | 
| - | 
| -  // Validate the initial values. | 
| -  { | 
| -    std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -        new ui::CARendererLayerTree(true)); | 
| - | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    root_layer = [[superlayer_ sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    clip_and_sorting_layer = [[root_layer sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    transform_layer = [[clip_and_sorting_layer sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    content_layer = [[transform_layer sublayers] objectAtIndex:0]; | 
| - | 
| -    // Validate the clip and sorting context layer. | 
| -    EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| -    EXPECT_EQ(gfx::Rect(properties.clip_rect.size()), | 
| -              gfx::Rect([clip_and_sorting_layer bounds])); | 
| -    EXPECT_EQ(properties.clip_rect.origin(), | 
| -              gfx::Point([clip_and_sorting_layer position])); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().x(), | 
| -              [clip_and_sorting_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().y(), | 
| -              [clip_and_sorting_layer sublayerTransform].m42); | 
| - | 
| -    // Validate the transform layer. | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 0), | 
| -              [transform_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 1), | 
| -              [transform_layer sublayerTransform].m42); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| -              [content_layer contents]); | 
| -    EXPECT_EQ(properties.contents_rect, | 
| -              gfx::RectF([content_layer contentsRect])); | 
| -    EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| -    EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| -              gfx::Rect([content_layer bounds])); | 
| -    EXPECT_EQ(kCALayerLeftEdge, [content_layer edgeAntialiasingMask]); | 
| -    EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| -    EXPECT_NSEQ(kCAFilterLinear, [content_layer minificationFilter]); | 
| -    EXPECT_NSEQ(kCAFilterLinear, [content_layer magnificationFilter]); | 
| -    if ([content_layer respondsToSelector:(@selector(contentsScale))]) | 
| -      EXPECT_EQ(properties.scale_factor, [content_layer contentsScale]); | 
| -  } | 
| - | 
| -  // Update just the clip rect and re-commit. | 
| -  { | 
| -    properties.clip_rect = gfx::Rect(4, 8, 16, 32); | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the clip and sorting context layer. | 
| -    EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| -    EXPECT_EQ(gfx::Rect(properties.clip_rect.size()), | 
| -              gfx::Rect([clip_and_sorting_layer bounds])); | 
| -    EXPECT_EQ(properties.clip_rect.origin(), | 
| -              gfx::Point([clip_and_sorting_layer position])); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().x(), | 
| -              [clip_and_sorting_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().y(), | 
| -              [clip_and_sorting_layer sublayerTransform].m42); | 
| -  } | 
| - | 
| -  // Disable clipping and re-commit. | 
| -  { | 
| -    properties.is_clipped = false; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the clip and sorting context layer. | 
| -    EXPECT_FALSE([clip_and_sorting_layer masksToBounds]); | 
| -    EXPECT_EQ(gfx::Rect(), gfx::Rect([clip_and_sorting_layer bounds])); | 
| -    EXPECT_EQ(gfx::Point(), gfx::Point([clip_and_sorting_layer position])); | 
| -    EXPECT_EQ(0.0, [clip_and_sorting_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(0.0, [clip_and_sorting_layer sublayerTransform].m42); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -  } | 
| - | 
| -  // Change the transform and re-commit. | 
| -  { | 
| -    properties.transform.Translate(5, 5); | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the transform layer. | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 0), | 
| -              [transform_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 1), | 
| -              [transform_layer sublayerTransform].m42); | 
| -  } | 
| - | 
| -  // Change the edge antialiasing mask and commit. | 
| -  { | 
| -    properties.edge_aa_mask = GL_CA_LAYER_EDGE_TOP_CHROMIUM; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. Note that top and bottom edges flip. | 
| -    EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| -  } | 
| - | 
| -  // Change the contents and commit. | 
| -  { | 
| -    properties.gl_image->Destroy(true); | 
| -    properties.gl_image = nullptr; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. Note that edge anti-aliasing no longer flips. | 
| -    EXPECT_EQ(nil, [content_layer contents]); | 
| -    EXPECT_EQ(kCALayerTopEdge, [content_layer edgeAntialiasingMask]); | 
| -  } | 
| - | 
| -  // Change the rect size. | 
| -  { | 
| -    properties.rect = gfx::Rect(properties.rect.origin(), gfx::Size(32, 16)); | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| -    EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| -              gfx::Rect([content_layer bounds])); | 
| -  } | 
| - | 
| -  // Change the rect position. | 
| -  { | 
| -    properties.rect = gfx::Rect(gfx::Point(16, 4), properties.rect.size()); | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| -    EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| -              gfx::Rect([content_layer bounds])); | 
| -  } | 
| - | 
| -  // Change the opacity. | 
| -  { | 
| -    properties.opacity = 1.0f; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| -  } | 
| - | 
| -  // Change the filter. | 
| -  { | 
| -    properties.filter = GL_NEAREST; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_NSEQ(kCAFilterNearest, [content_layer minificationFilter]); | 
| -    EXPECT_NSEQ(kCAFilterNearest, [content_layer magnificationFilter]); | 
| -  } | 
| - | 
| -  // Add the clipping and IOSurface contents back. | 
| -  { | 
| -    properties.is_clipped = true; | 
| +class CALayerTreePropertyUpdatesTest : public CALayerTreeTest { | 
| + public: | 
| +  void RunTest(bool allow_solid_color_layers) { | 
| +    CALayerProperties properties; | 
| +    properties.allow_solid_color_layers = allow_solid_color_layers; | 
| +    properties.clip_rect = gfx::Rect(2, 4, 8, 16); | 
| +    properties.transform.Translate(10, 20); | 
| +    properties.contents_rect = gfx::RectF(0.0f, 0.25f, 0.5f, 0.75f); | 
| +    properties.rect = gfx::Rect(16, 32, 64, 128); | 
| +    properties.background_color = SkColorSetARGB(0xFF, 0xFF, 0, 0); | 
| +    properties.edge_aa_mask = GL_CA_LAYER_EDGE_LEFT_CHROMIUM; | 
| +    properties.opacity = 0.5f; | 
| properties.gl_image = | 
| CreateGLImage(gfx::Size(256, 256), gfx::BufferFormat::BGRA_8888, false); | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
|  | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_EQ(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_EQ(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| +    std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree; | 
| +    CALayer* root_layer = nil; | 
| +    CALayer* clip_and_sorting_layer = nil; | 
| +    CALayer* transform_layer = nil; | 
| +    CALayer* content_layer = nil; | 
| + | 
| +    // Validate the initial values. | 
| +    { | 
| +      std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| +          new ui::CARendererLayerTree(true, allow_solid_color_layers)); | 
| + | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      root_layer = [[superlayer_ sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      clip_and_sorting_layer = [[root_layer sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      transform_layer = [[clip_and_sorting_layer sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      content_layer = [[transform_layer sublayers] objectAtIndex:0]; | 
| + | 
| +      // Validate the clip and sorting context layer. | 
| +      EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| +      EXPECT_EQ(gfx::Rect(properties.clip_rect.size()), | 
| +                gfx::Rect([clip_and_sorting_layer bounds])); | 
| +      EXPECT_EQ(properties.clip_rect.origin(), | 
| +                gfx::Point([clip_and_sorting_layer position])); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().x(), | 
| +                [clip_and_sorting_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().y(), | 
| +                [clip_and_sorting_layer sublayerTransform].m42); | 
| + | 
| +      // Validate the transform layer. | 
| +      EXPECT_EQ(properties.transform.matrix().get(3, 0), | 
| +                [transform_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(properties.transform.matrix().get(3, 1), | 
| +                [transform_layer sublayerTransform].m42); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| +                [content_layer contents]); | 
| +      EXPECT_EQ(properties.contents_rect, | 
| +                gfx::RectF([content_layer contentsRect])); | 
| +      EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| +      EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| +                gfx::Rect([content_layer bounds])); | 
| +      EXPECT_EQ(kCALayerLeftEdge, [content_layer edgeAntialiasingMask]); | 
| +      EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| +      EXPECT_NSEQ(kCAFilterLinear, [content_layer minificationFilter]); | 
| +      EXPECT_NSEQ(kCAFilterLinear, [content_layer magnificationFilter]); | 
| +      if ([content_layer respondsToSelector:(@selector(contentsScale))]) | 
| +        EXPECT_EQ(properties.scale_factor, [content_layer contentsScale]); | 
| +    } | 
| + | 
| +    // Update just the clip rect and re-commit. | 
| +    { | 
| +      properties.clip_rect = gfx::Rect(4, 8, 16, 32); | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the clip and sorting context layer. | 
| +      EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| +      EXPECT_EQ(gfx::Rect(properties.clip_rect.size()), | 
| +                gfx::Rect([clip_and_sorting_layer bounds])); | 
| +      EXPECT_EQ(properties.clip_rect.origin(), | 
| +                gfx::Point([clip_and_sorting_layer position])); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().x(), | 
| +                [clip_and_sorting_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().y(), | 
| +                [clip_and_sorting_layer sublayerTransform].m42); | 
| +    } | 
| + | 
| +    // Disable clipping and re-commit. | 
| +    { | 
| +      properties.is_clipped = false; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the clip and sorting context layer. | 
| +      EXPECT_FALSE([clip_and_sorting_layer masksToBounds]); | 
| +      EXPECT_EQ(gfx::Rect(), gfx::Rect([clip_and_sorting_layer bounds])); | 
| +      EXPECT_EQ(gfx::Point(), gfx::Point([clip_and_sorting_layer position])); | 
| +      EXPECT_EQ(0.0, [clip_and_sorting_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(0.0, [clip_and_sorting_layer sublayerTransform].m42); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +    } | 
| + | 
| +    // Change the transform and re-commit. | 
| +    { | 
| +      properties.transform.Translate(5, 5); | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the transform layer. | 
| +      EXPECT_EQ(properties.transform.matrix().get(3, 0), | 
| +                [transform_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(properties.transform.matrix().get(3, 1), | 
| +                [transform_layer sublayerTransform].m42); | 
| +    } | 
| + | 
| +    // Change the edge antialiasing mask and commit. | 
| +    { | 
| +      properties.edge_aa_mask = GL_CA_LAYER_EDGE_TOP_CHROMIUM; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. Note that top and bottom edges flip. | 
| +      EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| +    } | 
| + | 
| +    // Change the contents and commit. | 
| +    { | 
| +      properties.gl_image->Destroy(true); | 
| +      properties.gl_image = nullptr; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. Note that edge anti-aliasing does not flip | 
| +      // for solid colors. | 
| +      if (allow_solid_color_layers) { | 
| +        EXPECT_EQ(nil, [content_layer contents]); | 
| +        EXPECT_EQ(kCALayerTopEdge, [content_layer edgeAntialiasingMask]); | 
| +      } else { | 
| +        EXPECT_EQ(ca_layer_tree->ContentsForSolidColorForTesting( | 
| +                      properties.background_color), | 
| +                  [content_layer contents]); | 
| +        EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| +      } | 
| +    } | 
| + | 
| +    // Change the rect size. | 
| +    { | 
| +      properties.rect = gfx::Rect(properties.rect.origin(), gfx::Size(32, 16)); | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| +      EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| +                gfx::Rect([content_layer bounds])); | 
| +    } | 
| + | 
| +    // Change the rect position. | 
| +    { | 
| +      properties.rect = gfx::Rect(gfx::Point(16, 4), properties.rect.size()); | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(properties.rect.origin(), gfx::Point([content_layer position])); | 
| +      EXPECT_EQ(gfx::Rect(properties.rect.size()), | 
| +                gfx::Rect([content_layer bounds])); | 
| +    } | 
| + | 
| +    // Change the opacity. | 
| +    { | 
| +      properties.opacity = 1.0f; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| +    } | 
| + | 
| +    // Change the filter. | 
| +    { | 
| +      properties.filter = GL_NEAREST; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_NSEQ(kCAFilterNearest, [content_layer minificationFilter]); | 
| +      EXPECT_NSEQ(kCAFilterNearest, [content_layer magnificationFilter]); | 
| +    } | 
| + | 
| +    // Add the clipping and IOSurface contents back. | 
| +    { | 
| +      properties.is_clipped = true; | 
| +      properties.gl_image = CreateGLImage(gfx::Size(256, 256), | 
| +                                          gfx::BufferFormat::BGRA_8888, false); | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_EQ(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_EQ(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_EQ(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_EQ(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| +                [content_layer contents]); | 
| +      EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| +    } | 
| + | 
| +    // Change the scale factor. This should result in a new tree being created. | 
| +    { | 
| +      properties.scale_factor = 2.0f; | 
| +      UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| + | 
| +      // Validate the tree structure. | 
| +      EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| +      EXPECT_NE(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| +      root_layer = [[superlayer_ sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| +      EXPECT_NE(clip_and_sorting_layer, | 
| +                [[root_layer sublayers] objectAtIndex:0]); | 
| +      clip_and_sorting_layer = [[root_layer sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| +      EXPECT_NE(transform_layer, | 
| +                [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| +      transform_layer = [[clip_and_sorting_layer sublayers] objectAtIndex:0]; | 
| +      EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| +      EXPECT_NE(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| +      content_layer = [[transform_layer sublayers] objectAtIndex:0]; | 
| + | 
| +      // Validate the clip and sorting context layer. | 
| +      EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| +      EXPECT_EQ(gfx::ConvertRectToDIP(properties.scale_factor, | 
| +                                      gfx::Rect(properties.clip_rect.size())), | 
| +                gfx::Rect([clip_and_sorting_layer bounds])); | 
| +      EXPECT_EQ(gfx::ConvertPointToDIP(properties.scale_factor, | 
| +                                       properties.clip_rect.origin()), | 
| +                gfx::Point([clip_and_sorting_layer position])); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().x() / properties.scale_factor, | 
| +                [clip_and_sorting_layer sublayerTransform].m41); | 
| +      EXPECT_EQ(-properties.clip_rect.origin().y() / properties.scale_factor, | 
| +                [clip_and_sorting_layer sublayerTransform].m42); | 
| + | 
| +      // Validate the transform layer. | 
| +      EXPECT_EQ( | 
| +          properties.transform.matrix().get(3, 0) / properties.scale_factor, | 
| +          [transform_layer sublayerTransform].m41); | 
| +      EXPECT_EQ( | 
| +          properties.transform.matrix().get(3, 1) / properties.scale_factor, | 
| +          [transform_layer sublayerTransform].m42); | 
| + | 
| +      // Validate the content layer. | 
| +      EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| +                [content_layer contents]); | 
| +      EXPECT_EQ(properties.contents_rect, | 
| +                gfx::RectF([content_layer contentsRect])); | 
| +      EXPECT_EQ(gfx::ConvertPointToDIP(properties.scale_factor, | 
| +                                       properties.rect.origin()), | 
| +                gfx::Point([content_layer position])); | 
| +      EXPECT_EQ(gfx::ConvertRectToDIP(properties.scale_factor, | 
| +                                      gfx::Rect(properties.rect.size())), | 
| +                gfx::Rect([content_layer bounds])); | 
| +      EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| +      EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| +      if ([content_layer respondsToSelector:(@selector(contentsScale))]) | 
| +        EXPECT_EQ(properties.scale_factor, [content_layer contentsScale]); | 
| +    } | 
|  | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| -              [content_layer contents]); | 
| -    EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| +    properties.gl_image->Destroy(true); | 
| } | 
| +}; | 
|  | 
| -  // Change the scale factor. This should result in a new tree being created. | 
| -  { | 
| -    properties.scale_factor = 2.0f; | 
| -    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
| - | 
| -    // Validate the tree structure. | 
| -    EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| -    EXPECT_NE(root_layer, [[superlayer_ sublayers] objectAtIndex:0]); | 
| -    root_layer = [[superlayer_ sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[root_layer sublayers] count]); | 
| -    EXPECT_NE(clip_and_sorting_layer, [[root_layer sublayers] objectAtIndex:0]); | 
| -    clip_and_sorting_layer = [[root_layer sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[clip_and_sorting_layer sublayers] count]); | 
| -    EXPECT_NE(transform_layer, | 
| -              [[clip_and_sorting_layer sublayers] objectAtIndex:0]); | 
| -    transform_layer = [[clip_and_sorting_layer sublayers] objectAtIndex:0]; | 
| -    EXPECT_EQ(1u, [[transform_layer sublayers] count]); | 
| -    EXPECT_NE(content_layer, [[transform_layer sublayers] objectAtIndex:0]); | 
| -    content_layer = [[transform_layer sublayers] objectAtIndex:0]; | 
| - | 
| -    // Validate the clip and sorting context layer. | 
| -    EXPECT_TRUE([clip_and_sorting_layer masksToBounds]); | 
| -    EXPECT_EQ(gfx::ConvertRectToDIP(properties.scale_factor, | 
| -                                    gfx::Rect(properties.clip_rect.size())), | 
| -              gfx::Rect([clip_and_sorting_layer bounds])); | 
| -    EXPECT_EQ(gfx::ConvertPointToDIP(properties.scale_factor, | 
| -                                     properties.clip_rect.origin()), | 
| -              gfx::Point([clip_and_sorting_layer position])); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().x() / properties.scale_factor, | 
| -              [clip_and_sorting_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(-properties.clip_rect.origin().y() / properties.scale_factor, | 
| -              [clip_and_sorting_layer sublayerTransform].m42); | 
| - | 
| -    // Validate the transform layer. | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 0) / properties.scale_factor, | 
| -              [transform_layer sublayerTransform].m41); | 
| -    EXPECT_EQ(properties.transform.matrix().get(3, 1) / properties.scale_factor, | 
| -              [transform_layer sublayerTransform].m42); | 
| - | 
| -    // Validate the content layer. | 
| -    EXPECT_EQ(static_cast<id>(properties.gl_image->io_surface().get()), | 
| -              [content_layer contents]); | 
| -    EXPECT_EQ(properties.contents_rect, | 
| -              gfx::RectF([content_layer contentsRect])); | 
| -    EXPECT_EQ(gfx::ConvertPointToDIP(properties.scale_factor, | 
| -                                     properties.rect.origin()), | 
| -              gfx::Point([content_layer position])); | 
| -    EXPECT_EQ(gfx::ConvertRectToDIP(properties.scale_factor, | 
| -                                    gfx::Rect(properties.rect.size())), | 
| -              gfx::Rect([content_layer bounds])); | 
| -    EXPECT_EQ(kCALayerBottomEdge, [content_layer edgeAntialiasingMask]); | 
| -    EXPECT_EQ(properties.opacity, [content_layer opacity]); | 
| -    if ([content_layer respondsToSelector:(@selector(contentsScale))]) | 
| -      EXPECT_EQ(properties.scale_factor, [content_layer contentsScale]); | 
| -  } | 
| +TEST_F(CALayerTreePropertyUpdatesTest, AllowSolidColors) { | 
| +  RunTest(true); | 
| +} | 
|  | 
| -  properties.gl_image->Destroy(true); | 
| +TEST_F(CALayerTreePropertyUpdatesTest, DisallowSolidColors) { | 
| +  RunTest(false); | 
| } | 
|  | 
| // Verify that sorting context zero is split at non-flat transforms. | 
| @@ -485,7 +509,7 @@ void SetUp() override { | 
|  | 
| // Schedule and commit the layers. | 
| std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree( | 
| -      new ui::CARendererLayerTree(true)); | 
| +      new ui::CARendererLayerTree(true, true)); | 
| for (size_t i = 0; i < 5; ++i) { | 
| properties.gl_image = gl_images[i]; | 
| properties.transform = transforms[i]; | 
| @@ -568,7 +592,7 @@ void SetUp() override { | 
|  | 
| // Schedule and commit the layers. | 
| std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree( | 
| -      new ui::CARendererLayerTree(true)); | 
| +      new ui::CARendererLayerTree(true, true)); | 
| for (size_t i = 0; i < 3; ++i) { | 
| properties.sorting_context_id = sorting_context_ids[i]; | 
| properties.gl_image = gl_images[i]; | 
| @@ -632,7 +656,7 @@ void SetUp() override { | 
| }; | 
|  | 
| std::unique_ptr<ui::CARendererLayerTree> ca_layer_tree( | 
| -      new ui::CARendererLayerTree(true)); | 
| +      new ui::CARendererLayerTree(true, true)); | 
| // First send the various clip parameters to sorting context zero. This is | 
| // legitimate. | 
| for (size_t i = 0; i < 3; ++i) { | 
| @@ -807,7 +831,8 @@ void SetUp() override { | 
| } | 
|  | 
| { | 
| -    UpdateCALayerTreeWithAVDisabled(ca_layer_tree, &properties, superlayer_); | 
| +    properties.allow_av_layers = false; | 
| +    UpdateCALayerTree(ca_layer_tree, &properties, superlayer_); | 
|  | 
| // Validate the tree structure. | 
| EXPECT_EQ(1u, [[superlayer_ sublayers] count]); | 
| @@ -845,7 +870,7 @@ void SetUp() override { | 
| // Test a configuration with no background. | 
| { | 
| std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -        new ui::CARendererLayerTree(true)); | 
| +        new ui::CARendererLayerTree(true, true)); | 
| bool result = ScheduleCALayer(new_ca_layer_tree.get(), &properties); | 
| EXPECT_TRUE(result); | 
| new_ca_layer_tree->CommitScheduledCALayers( | 
| @@ -875,7 +900,7 @@ void SetUp() override { | 
| // Test a configuration with a black background. | 
| { | 
| std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -        new ui::CARendererLayerTree(true)); | 
| +        new ui::CARendererLayerTree(true, true)); | 
| bool result = ScheduleCALayer(new_ca_layer_tree.get(), &properties_black); | 
| EXPECT_TRUE(result); | 
| result = ScheduleCALayer(new_ca_layer_tree.get(), &properties); | 
| @@ -907,7 +932,7 @@ void SetUp() override { | 
| // Test a configuration with a white background. It will fail. | 
| { | 
| std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -        new ui::CARendererLayerTree(true)); | 
| +        new ui::CARendererLayerTree(true, true)); | 
| bool result = ScheduleCALayer(new_ca_layer_tree.get(), &properties_white); | 
| EXPECT_TRUE(result); | 
| result = ScheduleCALayer(new_ca_layer_tree.get(), &properties); | 
| @@ -939,7 +964,7 @@ void SetUp() override { | 
| // Test a configuration with a black foreground. It too will fail. | 
| { | 
| std::unique_ptr<ui::CARendererLayerTree> new_ca_layer_tree( | 
| -        new ui::CARendererLayerTree(true)); | 
| +        new ui::CARendererLayerTree(true, true)); | 
| bool result = ScheduleCALayer(new_ca_layer_tree.get(), &properties); | 
| EXPECT_TRUE(result); | 
| result = ScheduleCALayer(new_ca_layer_tree.get(), &properties_black); | 
|  |