/* * ShinyDisconnectNotifier.java * * Copyright (C) 2009-14 by RStudio, Inc. * * Unless you have received this program directly from RStudio pursuant * to the terms of a commercial license agreement with RStudio, then * this program is licensed to you under the terms of version 3 of the * GNU Affero General Public License. This program is distributed WITHOUT * ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT, * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the * AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details. * */ package org.rstudio.studio.client.shiny; public class ShinyDisconnectNotifier { public interface ShinyDisconnectSource { public String getShinyUrl(); public void onShinyDisconnect(); } public ShinyDisconnectNotifier(ShinyDisconnectSource source) { source_ = source; initializeEvents(); } private native void initializeEvents() /*-{ var thiz = this; $wnd.addEventListener( "message", $entry(function(e) { if (typeof e.data != 'string') return; thiz.@org.rstudio.studio.client.shiny.ShinyDisconnectNotifier::onMessage(Ljava/lang/String;Ljava/lang/String;)(e.data, e.origin); }), true); }-*/; private void onMessage(String data, String origin) { if ("disconnected".equals(data)) { if (source_.getShinyUrl().startsWith(origin)) { source_.onShinyDisconnect(); } } } private ShinyDisconnectSource source_; }