The problem of who decides is a fundamental problem. All these terms, regardless of what you put in the statute, always have to be interpreted by someone.
What I would suggest is that, if you want to avoid needlessly polarizing these debates, using “hate speech”, for example, as a concept to police what people can and cannot do is probably not the appropriate way of doing it. No one likes to have their political views labelled “hateful”, especially when they're expressing views that are held by, in some cases, a plurality or a majority of Canadians. To have those views labelled “hateful” is something that leads to needless polarization. If you want to resolve these issues in a healthy way, then things like, for example, restricting who can use public spaces in a viewpoint-neutral way would be a preferable solution.