Bug 1342051 - clear css grid pattern cache when destroying highlighter;r=zer0 draft
authorJulian Descottes <jdescottes@mozilla.com>
Mon, 27 Feb 2017 18:59:49 +0100
changeset 490447 f23974994ff8d10b61e4b6f79dffb69eb985822a
parent 490446 5ad7f23067c592c4615ac00528d3a4a1062d1ba7
child 547254 8c8933baf24ea1ef3eb5ae33e5d0bb6984b11c1e
push id47092
push userjdescottes@mozilla.com
push dateTue, 28 Feb 2017 11:27:13 +0000
reviewerszer0
bugs1342051
milestone54.0a1
Bug 1342051 - clear css grid pattern cache when destroying highlighter;r=zer0 MozReview-Commit-ID: 5LpjjzjZfs3
devtools/client/inspector/rules/test/browser_rules_grid-highlighter-on-reload.js
devtools/server/actors/highlighters/css-grid.js
--- a/devtools/client/inspector/rules/test/browser_rules_grid-highlighter-on-reload.js
+++ b/devtools/client/inspector/rules/test/browser_rules_grid-highlighter-on-reload.js
@@ -25,17 +25,17 @@ add_task(function* () {
 
   info("Check that the grid highlighter can be displayed");
   yield checkGridHighlighter();
 
   info("Close the toolbox before reloading the tab");
   let target = TargetFactory.forTab(gBrowser.selectedTab);
   yield gDevTools.closeToolbox(target);
 
-  refreshTab(gBrowser.selectedTab);
+  yield refreshTab(gBrowser.selectedTab);
 
   info("Check that the grid highlighter can be displayed after reloading the page");
   yield checkGridHighlighter();
 });
 
 function* checkGridHighlighter() {
   let {inspector, view} = yield openRuleView();
   let {highlighters} = view;
--- a/devtools/server/actors/highlighters/css-grid.js
+++ b/devtools/server/actors/highlighters/css-grid.js
@@ -236,16 +236,19 @@ CssGridHighlighter.prototype = extend(Au
     let { highlighterEnv } = this;
     highlighterEnv.off("navigate", this.onNavigate);
     highlighterEnv.off("will-navigate", this.onWillNavigate);
 
     let { pageListenerTarget } = highlighterEnv;
     pageListenerTarget.removeEventListener("pagehide", this.onPageHide);
 
     this.markup.destroy();
+
+    // Clear the pattern cache to avoid dead object exceptions (Bug 1342051).
+    this._clearCache();
     AutoRefreshHighlighter.prototype.destroy.call(this);
   },
 
   getElement(id) {
     return this.markup.getElement(this.ID_CLASS_PREFIX + id);
   },
 
   get ctx() {