I believe the UI is the only usage of a SparkListener that builds storage status from events. If the SparkContext is alive, then you can just ask the driver for this information. So I think it should live in the UI.

As for whether to extend this class... I need to give more thought to it. One reason why it's not a good idea is because we end up maintaining two separate storage status lists with exactly the same information (because both ExecutorsUI and BlockManagerUI use this). The alternative is to keep it in SparkUI.