Could it be nested rather inside AppEventRouter? I would even go further and inherit AppEventRouter from content::WebContentsObserver : 1) do not need a separate entity (MainDocObserver) 2) Some of AppEventRouter public methods can be removed.