/* ****************************************************************************** * Copyright (c) 2006-2012 XMind Ltd. and others. * * This file is a part of XMind 3. XMind releases 3 and * above are dual-licensed under the Eclipse Public License (EPL), * which is available at http://www.eclipse.org/legal/epl-v10.html * and the GNU Lesser General Public License (LGPL), * which is available at http://www.gnu.org/licenses/lgpl.html * See http://www.xmind.net/license.html for details. * * Contributors: * XMind Ltd. - initial API and implementation *******************************************************************************/ package org.xmind.ui.internal.browser; import java.util.HashMap; import java.util.Map; import org.eclipse.core.net.proxy.IProxyChangeEvent; import org.eclipse.core.net.proxy.IProxyChangeListener; import org.eclipse.core.net.proxy.IProxyData; import org.eclipse.core.net.proxy.IProxyService; import org.eclipse.swt.browser.Browser; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.ui.PlatformUI; /** * @author briansun */ public class MozillaPref { private Browser browser; private IProxyService service; private Map<String, Object> preference = null; private IProxyChangeListener proxyChangeListener = new IProxyChangeListener() { public void proxyInfoChanged(IProxyChangeEvent event) { addProxyPref(); setPref(); } }; /** * @param viewer */ public MozillaPref(BrowserViewer viewer) { super(); this.browser = viewer.getBrowser(); if (viewer.isMozilla()) initPref(); } /** * */ private void initPref() { if (!PlatformUI.isWorkbenchRunning()) return; service = (IProxyService) PlatformUI.getWorkbench().getService( IProxyService.class);//Activator.getProxyService(); if (service == null) return; preference = new HashMap<String, Object>(); preference.put("security.warn_entering_secure", false); //$NON-NLS-1$ preference.put("security.warn_leaving_secure", false); //$NON-NLS-1$ addProxyPref(); setPref(); service.addProxyChangeListener(proxyChangeListener); browser.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (service != null) { service.removeProxyChangeListener(proxyChangeListener); service = null; } } }); } /** * */ private void addProxyPref() { IProxyData httpData = service.getProxyData(IProxyData.HTTP_PROXY_TYPE); preference.put("network.proxy.http", getHost(httpData)); //$NON-NLS-1$ preference.put("network.proxy.http_port", getPort(httpData)); //$NON-NLS-1$ IProxyData socksData = service .getProxyData(IProxyData.SOCKS_PROXY_TYPE); preference.put("network.proxy.socks", getHost(socksData)); //$NON-NLS-1$ preference.put("network.proxy.socks_port", getPort(socksData)); //$NON-NLS-1$ IProxyData sslData = service.getProxyData(IProxyData.HTTPS_PROXY_TYPE); preference.put("network.proxy.ssl", getHost(sslData)); //$NON-NLS-1$ preference.put("network.proxy.ssl_port", getPort(sslData)); //$NON-NLS-1$ String nonProxy = null; StringBuilder sb = new StringBuilder(); for (String host : service.getNonProxiedHosts()) { sb.append(host); sb.append(", "); //$NON-NLS-1$ } nonProxy = sb.length() > 2 ? sb.substring(0, sb.length() - 2) : sb .toString(); preference.put("network.proxy.no_proxies_on", nonProxy); //$NON-NLS-1$ int enabled = service.isProxiesEnabled() ? 1 : 0; preference.put("network.proxy.type", enabled); //$NON-NLS-1$ } /** * */ private void setPref() { StringBuilder sb = new StringBuilder(); String s = "javascript:var prefService = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService);"; //$NON-NLS-1$ sb.append(s); for (Map.Entry<String, Object> e : preference.entrySet()) { if (e.getValue() instanceof String) { String s2 = "prefService.setCharPref('%s', '%s');"; //$NON-NLS-1$ sb.append(String.format(s2, e.getKey(), e.getValue())); } else if (e.getValue() instanceof Integer) { String s3 = "prefService.setIntPref('%s', %s);"; //$NON-NLS-1$ sb.append(String.format(s3, e.getKey(), e.getValue())); } else if (e.getValue() instanceof Boolean) { String s4 = "prefService.setBoolPref('%s', %s);"; //$NON-NLS-1$ sb.append(String.format(s4, e.getKey(), e.getValue())); } } if (browser != null && !browser.isDisposed()) browser.setUrl(sb.toString()); } private String getHost(IProxyData pd) { return pd.getHost() == null ? "" : pd.getHost(); //$NON-NLS-1$ } private int getPort(IProxyData pd) { return pd.getPort() == -1 ? 0 : pd.getPort(); } }