/** * */ package com.google.gwt.chrome.crx.client.events; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.GWT.UncaughtExceptionHandler; import com.google.gwt.core.client.JavaScriptObject; /** * Wraps event from chrome.extension.onRequest. * * See documentation at: <a href= * "http://code.google.com/chrome/extensions/extension.html#event-onConnect" * >Content Script Messaging</a> * */ public final class RequestEvent extends Event { /** * The {@link RequestEvent} listener. * * @author webdizz * */ public interface Listener { /** * This is a callback method will be called when message from extension * or extension' content script will be received. * * @param message * the {@link Message} with data */ void onRequest(Message message); } protected RequestEvent() { } /** * Add a {@link Listener} to handle event. * * @param listener * the {@link Listener} * @return {@link ListenerHandle} */ public ListenerHandle addListener(Listener listener) { return new ListenerHandle(this, addListenerImpl(listener)); } private static void onRequestImpl(Listener listener, Message message) { UncaughtExceptionHandler ueh = GWT.getUncaughtExceptionHandler(); if (ueh != null) { try { listener.onRequest(message); } catch (Exception ex) { ueh.onUncaughtException(ex); } } else { listener.onRequest(message); } } private native JavaScriptObject addListenerImpl(Listener listener) /*-{ var handle = function(message, sender, response) { //TODO: do something with sender @com.google.gwt.chrome.crx.client.events.RequestEvent::onRequestImpl(Lcom/google/gwt/chrome/crx/client/events/RequestEvent$Listener;Lcom/google/gwt/chrome/crx/client/events/Message;) (listener, message); } this.addListener(handle); return handle; }-*/; }