/* GNU GENERAL LICENSE Copyright (C) 2006 The Lobo Project. Copyright (C) 2014 - 2017 Lobo Evolution This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either verion 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General License for more details. You should have received a copy of the GNU General Public along with this program. If not, see <http://www.gnu.org/licenses/>. Contact info: lobochief@users.sourceforge.net; ivan.difrancesco@yahoo.it */ package org.lobobrowser.primary.clientlets.html; import java.net.URL; import java.security.AccessController; import java.security.Policy; import java.security.PrivilegedAction; import java.util.HashSet; import java.util.Set; import org.apache.logging.log4j.Level; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.lobobrowser.http.HttpRequest; import org.lobobrowser.http.UserAgentContext; import org.lobobrowser.request.RequestEngine; import org.lobobrowser.request.UserAgentImpl; import org.lobobrowser.security.LocalSecurityPolicy; import org.lobobrowser.settings.GeneralSettings; import org.lobobrowser.ua.NavigatorFrame; /** * The Class UserAgentContextImpl. */ public class UserAgentContextImpl implements UserAgentContext { /** The Constant logger. */ private static final Logger logger = LogManager.getLogger(UserAgentContextImpl.class); /** The Constant mediaNames. */ private static final Set<String> mediaNames = new HashSet<String>(); static { // Media names supported here Set<String> mn = mediaNames; mn.add("screen"); mn.add("tv"); mn.add("tty"); mn.add("all"); } /** * Instantiates a new user agent context impl. * * @param frame * the frame */ public UserAgentContextImpl(final NavigatorFrame frame) { } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#isMedia(java.lang.String) */ @Override public boolean isMedia(String mediaName) { return mediaNames.contains(mediaName.toLowerCase()); } /** * Warn. * * @param message * the message * @param throwable * the throwable */ public void warn(String message, Throwable throwable) { logger.error(message, throwable); } /** * Error. * * @param message * the message * @param throwable * the throwable */ public void error(String message, Throwable throwable) { logger.log(Level.ERROR, message, throwable); } /** * Warn. * * @param message * the message */ public void warn(String message) { logger.warn(message); } /** * Error. * * @param message * the message */ public void error(String message) { logger.log(Level.ERROR, message); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#createHttpRequest() */ @Override public HttpRequest createHttpRequest() { return new HttpRequest(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getAppCodeName() */ @Override public String getAppCodeName() { return UserAgentImpl.getInstance().getName(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getAppMinorVersion() */ @Override public String getAppMinorVersion() { return UserAgentImpl.getInstance().getMinorVersion(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getAppName() */ @Override public String getAppName() { return UserAgentImpl.getInstance().getName(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getAppVersion() */ @Override public String getAppVersion() { return UserAgentImpl.getInstance().getMajorVersion(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getBrowserLanguage() */ @Override public String getBrowserLanguage() { return "EN"; // TODO } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getPlatform() */ @Override public String getPlatform() { return System.getProperty("os.name"); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getUserAgent() */ @Override public String getUserAgent() { return UserAgentImpl.getInstance().getUserAgentString(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#isCookieEnabled() */ @Override public boolean isCookieEnabled() { // TODO: Settings return true; } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getCookie(java.net.URL) */ @Override public String getCookie(URL url) { // Requires privileges. return RequestEngine.getInstance().getCookie(url); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#isScriptingEnabled() */ @Override public boolean isScriptingEnabled() { GeneralSettings settings = AccessController .doPrivileged(new PrivilegedAction<GeneralSettings>() { @Override public GeneralSettings run() { return GeneralSettings.getInstance(); } }); return settings.isSpoofJS(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#setCookie(java.net.URL, * java.lang.String) */ @Override public void setCookie(URL url, String cookieSpec) { // Requires privileges. RequestEngine.getInstance().setCookie(url, cookieSpec); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getSecurityPolicy() */ @Override public Policy getSecurityPolicy() { return LocalSecurityPolicy.getInstance(); } /* * (non-Javadoc) * * @see * org.lobobrowser.html.UserAgentContext#getScriptingOptimizationLevel() */ @Override public int getScriptingOptimizationLevel() { // TODO: Settings return -1; } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getVendor() */ @Override public String getVendor() { return "The Lobo Evolution"; } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#getProduct() */ @Override public String getProduct() { return this.getAppName(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#isExternalCSSEnabled() */ @Override public boolean isExternalCSSEnabled() { GeneralSettings settings = AccessController .doPrivileged(new PrivilegedAction<GeneralSettings>() { @Override public GeneralSettings run() { return GeneralSettings.getInstance(); } }); return settings.isSpoofCSS(); } /* * (non-Javadoc) * * @see org.lobobrowser.html.UserAgentContext#isInternalCSSEnabled() */ @Override public boolean isInternalCSSEnabled() { GeneralSettings settings = AccessController .doPrivileged(new PrivilegedAction<GeneralSettings>() { @Override public GeneralSettings run() { return GeneralSettings.getInstance(); } }); return settings.isSpoofCSS(); } }