Anyway, why can't you hook the ChatEdit_InsertLink() function? It only fires when [Shift] is down and, as far as I know, it's not protected.
Orig_ChatEdit_InsertLink = ChatEdit_InsertLink
-- YourEditBox takes priority. If you want the default frames to take priority, then you will have to copy the entire function from FrameXML\ChatFrame.lua (replace rather than hook).
if text and YourEditBox:IsVisible() then