I think this method would be a little cleaner if the two "odd" cases of webview == null and !safeToFireEvents were written as early-exit tests up top, and the middle else statement was the main body of this method.

I would also consider moving the webview == null handler into a helper method, making it much clearer what this method is doing.
Alternatively, move the middle section of this method out into a helper, which is called in places you know it is safe to do so, such as the fireStartupEvents handler.