It’s important to note that Chrome is incorrect here. IE10 and Firefox are properly compliant.
This is more obvious in a simple example, for example:
ctx.fillStyle = 'rgba(255,0,0,.4)'; ctx.beginPath(); ctx.arc(50,50,20,Math.PI*2, 0); ctx.arc(50,150,20,Math.PI*2, 0); ctx.arc(150,100,20,Math.PI*2, 0); ctx.stroke(); ctx.fill();
http://jsfiddle.net/ZMKEG/
The results are as follows:

According to the specification, the arc command adds two points to the subpath and the arc between them. It does not close the subpath, and it only adds an implicit moveTo if it is at the beginning of the current path. IE and Firefox do the right thing here.
Chrome (half), assuming a kind of moveTo between arc calls, but only to fill.
In other words, there should be straight lines between multiple arc commands, as Chrome shows when stroke() is applied. Chrome does not comply with these lines to fill in and that error.
source share