Skip to content

Commit

Permalink
Rebuild the SVGResources for <pattern> after changing SVGResource
Browse files Browse the repository at this point in the history
Since we reassociate the SVGResource synchronously, we need to also make
sure that the associated SVGResources object is updated, else it could
end up pointing to the old <pattern> LayoutObject.

Bug: 845040
Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel;master.tryserver.chromium.linux:linux_layout_tests_slimming_paint_v2
Change-Id: I026b46abcd510485ddfe33622cb5f5aa1bab9610
Reviewed-on: https://chromium-review.googlesource.com/1065779
Reviewed-by: Stephen Chenney <schenney@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#560300}
  • Loading branch information
Fredrik Söderquist authored and Commit Bot committed May 21, 2018
1 parent 2baea13 commit 20d5cc2
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
<!DOCTYPE html>
<div style="width: 100px; height: 100px; background-color: green"></div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<svg>
<defs>
<pattern width="100" height="100" id="ref_pattern1" patternUnits="userSpaceOnUse">
<rect width="100" height="100" fill="red"/>
</pattern>
<pattern href="#ref_pattern1" id="pattern1"></pattern>
</defs>
<rect width="100" height="100" fill="url(#pattern1) green"/>
</svg>
<script>
document.addEventListener("DOMContentLoaded", function() {
document.documentElement.offsetTop;

let ref_pattern1 = document.getElementById("ref_pattern1");
ref_pattern1.style.display = "inline-block";

let pattern1 = document.getElementById("pattern1");
pattern1.removeAttribute('href');
}, false);
</script>
3 changes: 3 additions & 0 deletions third_party/blink/renderer/core/svg/svg_pattern_element.cc
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#include "third_party/blink/renderer/core/css/style_change_reason.h"
#include "third_party/blink/renderer/core/dom/element_traversal.h"
#include "third_party/blink/renderer/core/layout/svg/layout_svg_resource_pattern.h"
#include "third_party/blink/renderer/core/layout/svg/svg_resources_cache.h"
#include "third_party/blink/renderer/core/svg/pattern_attributes.h"
#include "third_party/blink/renderer/core/svg/svg_resource.h"
#include "third_party/blink/renderer/core/svg/svg_tree_scope_resources.h"
Expand Down Expand Up @@ -103,6 +104,8 @@ void SVGPatternElement::BuildPendingResource() {
resource_->AddClient(EnsureSVGResourceClient());

InvalidatePattern(LayoutInvalidationReason::kSvgResourceInvalidated);
if (auto* layout_object = GetLayoutObject())
SVGResourcesCache::ResourceReferenceChanged(*layout_object);
}

void SVGPatternElement::ClearResourceReferences() {
Expand Down

0 comments on commit 20d5cc2

Please sign in to comment.