  HTML5 applications normally have a large set of CSS (Cascading Style Sheets)
rules for data display. Each CSS rule consists of a node selector (given in an
XPath-like query language) and a declaration block (assigning values to
selected nodes' display attributes). As web applications evolve, maintaining
CSS files can easily become problematic. Some CSS rules will be replaced by new
ones, but these obsolete (hence redundant) CSS rules often remain in the
applications. Not only does this "bloat" the applications, but it also
significantly increases web browsers' processing time. Most works on detecting
redundant CSS rules in HTML5 applications do not consider the dynamic behaviors
of HTML5 (specified in JavaScript); in fact, the only proposed method that
takes these into account is dynamic analysis (a.k.a. testing), which cannot
soundly prove redundancy of CSS rules. In this paper, we introduce an
abstraction of HTML5 applications based on monotonic tree-rewriting and study
its "redundancy problem". We establish the precise complexity of the problem
and various subproblems of practical importance (ranging from P to EXP). In
particular, our algorithm relies on an efficient reduction to an analysis of
symbolic pushdown systems (for which highly optimised solvers are available),
which yields a fast method for checking redundancy in practice. We implemented
our algorithm and demonstrated its efficacy in detecting redundant CSS rules in
HTML5 applications.
