Preheat the oven to 350 degrees. Grease an 8x8x2-inch cake pan with cooking spray or softened butter. Line with parchment.
In a medium bowl, whisk together the flours, baking powder and salt.
In a large mixing bowl, whisk the oil and sugar until smooth, about 30 seconds. Add the eggs one at a time, whisking after each. Add the extracts and whisk again until just combined.
Add the dry ingredients in three additions, whisking after each and alternating with the water in two.
Fold in the coconut. Transfer the batter to the prepared pan and bake for 25 to 30 minutes, rotating the pan at the halfway mark. The cake is ready when a cake tester inserted in the middle comes out with a moist crumb or two.
Let cool to room temperature before frosting. You can speed this up by placing the cake in the freezer.
To make the frosting, place the butter in the bowl of a stand mixer fitted with the paddle attachment and beat on low to medium-low until smooth, about 2 minutes. Begin slowly adding the sugar, about a cup at a time, alternating with the heavy cream, and keeping the mixer at the same low-ish speed.
Continue slowly mixing in this fashion (adding sugar and cream, scraping with a spatula periodically, and taking time to let the mixer run between additions), until most of the sugar and cream has been incorporated. Add the extracts, vinegar and salt and mix again.
Add the remaining sugar and cream and continue mixing on medium-low (at the highest) for at least 5 to 10 minutes, if not longer. The frosting will be quite light, creamy, and fluffy when it is done. Gently fold the coconut into the frosting.
Generously frost the cake, either right in the pan, or remove it before doing so. Sprinkle with the toasted coconut and serve.