| Index: lib/content/elemHideEmulation.js |
| =================================================================== |
| --- a/lib/content/elemHideEmulation.js |
| +++ b/lib/content/elemHideEmulation.js |
| @@ -448,20 +448,28 @@ |
| // one of the patterns. |
| return getCachedPropertyValue( |
| this, "_dependsOnCharacterData", |
| () => this.selectors.some(selector => selector.dependsOnCharacterData) |
| ); |
| } |
| }; |
| -function filterPatterns(patterns, {stylesheets, mutations}) |
| +function filterPatterns(patterns, {stylesheets, mutations}, document) |
| { |
| if (!stylesheets && !mutations) |
| + { |
| + // On initial load, skip DOM-only patterns if it's the top frame, because |
| + // there's usually nothing interesting to see and we can respond to any |
| + // mutations later. |
| + if (typeof top != "undefined" && document.defaultView == top) |
| + return patterns.filter(pattern => pattern.dependsOnStyles); |
| + |
| return patterns.slice(); |
| + } |
| return patterns.filter( |
| pattern => (stylesheets && pattern.dependsOnStyles) || |
| (mutations && pattern.dependsOnDOM) |
| ); |
| } |
| function shouldObserveAttributes(patterns) |
| @@ -572,17 +580,18 @@ |
| * made reprocessing necessary. This parameter shouldn't be passed in for |
| * the initial processing, the entire document will be considered |
| * then and all rules, including the ones not dependent on the DOM. |
| * @param {function} [done] |
| * Callback to call when done. |
| */ |
| _addSelectors(stylesheets, mutations, done) |
| { |
| - let patterns = filterPatterns(this.patterns, {stylesheets, mutations}); |
| + let patterns = filterPatterns(this.patterns, {stylesheets, mutations}, |
| + this.document); |
| let selectors = []; |
| let selectorFilters = []; |
| let elements = []; |
| let elementFilters = []; |
| let cssStyles = []; |