package org.geogebra.web.html5.util; import com.google.gwt.core.client.impl.LoadingStrategyBase; import com.google.gwt.core.client.impl.ScriptTagLoadingStrategy.ScriptTagDownloadStrategy; import com.google.gwt.core.client.impl.XhrLoadingStrategy.XhrDownloadStrategy; import com.google.gwt.user.client.Window.Location; public class OfflineLoadingStrategy extends LoadingStrategyBase { public OfflineLoadingStrategy(DownloadStrategy downloadStrategy) { super(downloadStrategy); } private static DownloadStrategy makeDownloadStrategy() { return Location.getProtocol().startsWith("http") ? new XhrDownloadStrategy() { @Override public void tryDownload(final RequestData request) { setAsyncCallback(request.getFragment(), request); super.tryDownload(request); } } : new ScriptTagDownloadStrategy(); } private static native void setAsyncCallback(int fragment, RequestData request) /*-{ __gwtModuleFunction['runAsyncCallback' + fragment] = $entry(function(code, instance) { @com.google.gwt.core.client.impl.ScriptTagLoadingStrategy::asyncCallback(Lcom/google/gwt/core/client/impl/LoadingStrategyBase$RequestData;Ljava/lang/String;)( request, code); }); }-*/; public OfflineLoadingStrategy() { super(makeDownloadStrategy()); } }