Hi Oliver, (Chris -> BCC)
The fuzzer is black-box, yes. Basically, it randomly generates a web page, executes JavaScript on it, and the result of the JS execution tells us if there's a correctness bug (think of the JS as returning a boolean). Right now, we run Chromium through Selenium, and we also have a second frontend for Grizzly, Mozilla's fuzzing system. Unlike the fuzzers you are using, it doesn't do any kind of mutation or seeds, since it's already generating valid HTML and CSS and so on. It also doesn't need a build with santizers—we've been using official builds for our tests—because we don't expect to crash Chrome. (Though, I mean, it could use a sanitizer-on version of Chrome, and in principle might find a crash.)
Here's some more details about what LQC is doing and the bugs it is finding. Basically, when some JS code make a change to the page's CSS (by modifying a node's style field) the browser can reach a different layout than if that style was there when the page was loaded. Basically whenever that happens, it's a bug. So LQC generates: a web page; an initial CSS file for it; and a set of new CSS properties to set. It loads the initial page, with its initial CSS, and then runs JavaScript that sets the new properties. It then saves the layout data, asks Chrome to recompute the layout from scratch, and checks if any layout data changes. If it does, that means the web page + changes form a bug.
In terms of surfacing assertions, what we do for Mozilla's frontend is we trigger a custom JS function that they expose in test mode, which causes a crash. We could do the same for Chrome if a function like that is available. (Specifically, the function crashes Firefox and also accepts a string to print as the "stack trace" for their bug bucketing to work.) Or we could output special text with console.log, if that's accessible to ClusterFuzz, or make a web request to a service. Can the fuzzers communicate directly with Chrome (to run JS and get outputs back)? If yes, we could also have the fuzzer itself write out a file or even manually kill Chrome (though that would slow it down). Happy to meet to hammer this out.