package name.webdizz.clt.crx.contentscript.client.connection;
import name.webdizz.clt.crx.client.ActivationKeysHolder;
import name.webdizz.clt.crx.client.chrome.ChromePort;
import name.webdizz.clt.crx.client.event.message.SelectTextMessage;
import name.webdizz.clt.crx.contentscript.client.SelectionProvider;
import com.google.gwt.dom.client.NativeEvent;
import com.google.gwt.user.client.Event.NativePreviewEvent;
import com.google.gwt.user.client.Event.NativePreviewHandler;
/**
* Consumes events from hosted page content script was injected into.
*
* @author webdizz
*
*/
public final class ContentScriptEventHandler implements NativePreviewHandler {
private ChromePort port;
/**
* @param port
* the {@link ChromePort}
*/
public ContentScriptEventHandler(final ChromePort port) {
super();
this.port = port;
}
/*
* (non-Javadoc)
*
* @see
* com.google.gwt.user.client.Event.NativePreviewHandler#onPreviewNativeEvent
* (com.google.gwt.user.client.Event.NativePreviewEvent)
*/
public void onPreviewNativeEvent(final NativePreviewEvent preview) {
NativeEvent event = preview.getNativeEvent();
String selection = SelectionProvider.getSelection();
if (isConsumed(event, selection)) {
// Send event to background page
port.postMessage(SelectTextMessage.create(selection, event));
// Tell the event handler that this event has been consumed
preview.consume();
}
}
private boolean isConsumed(final NativeEvent event, final String selection) {
return "mouseup".equals(event.getType()) && ActivationKeysHolder.isKeysAllowed(event) && !selection.isEmpty();
}
}