From 7e5d2b90e31d77d68604a6420e3c8c67727cda6b Mon Sep 17 00:00:00 2001 From: Roan Kattouw Date: Tue, 15 Sep 2015 15:25:36 +0200 Subject: [PATCH] Ignore exceptions from document.querySelector() In Firefox and Safari, passing selectors with pseudo-elements into querySelector() can cause it to throw an exception. Ignore these exceptions rather than aborting the selector audit. Bug: T112650 Change-Id: I9a1bd5eb6ff5ea11eb70ff5bda994b4e51d2431e --- resources/src/mediawiki/mediawiki.inspect.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/resources/src/mediawiki/mediawiki.inspect.js b/resources/src/mediawiki/mediawiki.inspect.js index 6bebf4d3e6..4859953dbe 100644 --- a/resources/src/mediawiki/mediawiki.inspect.js +++ b/resources/src/mediawiki/mediawiki.inspect.js @@ -117,9 +117,15 @@ rules = sheet.cssRules || sheet.rules; $.each( rules, function ( index, rule ) { selectors.total++; - if ( document.querySelector( rule.selectorText ) !== null ) { - selectors.matched++; - } + // document.querySelector() on prefixed pseudo-elements can throw exceptions + // in Firefox and Safari. Ignore these exceptions. + // https://bugs.webkit.org/show_bug.cgi?id=149160 + // https://bugzilla.mozilla.org/show_bug.cgi?id=1204880 + try { + if ( document.querySelector( rule.selectorText ) !== null ) { + selectors.matched++; + } + } catch ( e ) {} } ); document.body.removeChild( style ); return selectors; -- 2.20.1