package org.ovirt.engine.ui.webadmin.system;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.event.shared.GwtEvent;
import com.google.gwt.event.shared.HasHandlers;
import com.google.inject.Inject;
/**
* Intercepts HTML5 {@code message} events triggered via {@code window.postMessage} API.
*/
public class PostMessageDispatcher implements HasHandlers {
private final EventBus eventBus;
@Inject
public PostMessageDispatcher(EventBus eventBus) {
this.eventBus = eventBus;
registerMessageEventListener();
}
@Override
public void fireEvent(GwtEvent<?> event) {
eventBus.fireEvent(event);
}
void onMessage(String origin, Object data, JavaScriptObject sourceWindow) {
MessageReceivedEvent.fire(this, new MessageEventData(origin, data, sourceWindow));
}
private native void registerMessageEventListener() /*-{
var context = this;
var callback = function(event) {
context.@org.ovirt.engine.ui.webadmin.system.PostMessageDispatcher::onMessage(Ljava/lang/String;Ljava/lang/Object;Lcom/google/gwt/core/client/JavaScriptObject;)(event.origin,event.data,event.source);
};
$wnd.addEventListener('message', callback, false);
}-*/;
}