You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by de...@apache.org on 2017/09/17 12:30:11 UTC

[myfaces-trinidad] 27/33: TRINIDAD-2306 - Use the trident version to detect the IE browser if available in the user agent string

This is an automated email from the ASF dual-hosted git repository.

deki pushed a commit to branch 2.0.0.x-branch
in repository https://gitbox.apache.org/repos/asf/myfaces-trinidad.git

commit b9fbbd5bccedb3a1d00a163d00ab7686f4a52cc9
Author: Matthew Cooper <mc...@apache.org>
AuthorDate: Thu Nov 29 20:02:23 2012 +0000

    TRINIDAD-2306 - Use the trident version to detect the IE browser if available in the user agent string
    
    Thanks to Gary van Matre for the patch.
---
 .../trinidadinternal/agent/AgentFactoryImpl.java   | 49 ++++++++++++++++++++--
 1 file changed, 46 insertions(+), 3 deletions(-)

diff --git a/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/agent/AgentFactoryImpl.java b/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/agent/AgentFactoryImpl.java
index 8e1fbdd..a126bf1 100644
--- a/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/agent/AgentFactoryImpl.java
+++ b/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/agent/AgentFactoryImpl.java
@@ -21,6 +21,7 @@ package org.apache.myfaces.trinidadinternal.agent;
 import java.util.Collections;
 import java.util.Map;
 
+import javax.faces.context.ExternalContext;
 import javax.faces.context.FacesContext;
 
 import org.apache.myfaces.trinidad.context.Agent;
@@ -285,7 +286,7 @@ public class AgentFactoryImpl implements AgentFactory
     // must check for gecko before checking for mozilla:
     else if (userAgent.startsWith("Mozilla"))
     {
-      _populateMozillaAgentImpl(userAgent,agent);
+      _populateMozillaAgentImpl(userAgent,agent, facesContext);
       return;
     }
 
@@ -895,7 +896,7 @@ public class AgentFactoryImpl implements AgentFactory
    * Returns an AgentEntry for the "Mozilla" family of browsers - which
    * most at least pretend to be.
    */
-  private void _populateMozillaAgentImpl(String agent,AgentImpl agentObj)
+  private void _populateMozillaAgentImpl(String agent,AgentImpl agentObj, FacesContext facesContext)
   {
     int paren = agent.indexOf('(');
     agentObj.setType(Agent.TYPE_DESKTOP); //Is this default realli okay??? These days Mobile agents also use Mozilla/xx.xx
@@ -939,7 +940,28 @@ public class AgentFactoryImpl implements AgentFactory
         else
         {
           agentObj.setAgent(Agent.AGENT_IE);
-          agentObj.setAgentVersion(_getVersion(agent, ieIndex + 4));
+
+          boolean useTridentVersionForIEAgent = false;
+          if (facesContext != null)
+            useTridentVersionForIEAgent = _useTridentVersionForIEAgent(facesContext.getExternalContext());
+          
+          // As of IE8, the Trident version is the most reliable method to find the 
+          // maximum capabilities of IE.  The IE WebBrowser Control by default is in IE7 
+          // compatability - MSIE 7.0;
+          int ieTridentIndex = !useTridentVersionForIEAgent ? -1 : agent.indexOf("Trident", ieIndex);
+          if (ieTridentIndex < 0)
+          { 
+            String ieVersion = _getVersion(agent, ieIndex + "MSIE ".length() - 1);
+            agentObj.setAgentVersion(ieVersion);
+          }
+          else 
+          {
+            //Trident/4.0 -> IE8
+            //Trident/5.0 -> IE9
+            //Trident/6.0 -> IE10
+            Double ieTridentVersion = Double.valueOf(_getVersion(agent, ieTridentIndex + "Trident/".length() - 1));
+            agentObj.setAgentVersion(String.valueOf(ieTridentVersion + 4.0));  
+          }
         }
       }
       else
@@ -1081,6 +1103,27 @@ public class AgentFactoryImpl implements AgentFactory
 
     return null;
   }
+  
+  /**
+   * Looks for the "org.apache.myfaces.trinidad.agent#OVERRIDE_IE_COMPATIBILITY_MODE" 
+   * context param that indicates that the Trident version in the user agent string 
+   * should be used for the IE agent over the browser version.
+   * 
+   * @param external faces external context
+   * @return <code>true</code> if the context params is "true".
+   */
+  private static boolean _useTridentVersionForIEAgent(ExternalContext external) 
+  {
+    String opt = external.getInitParameter(_USE_TRIDENT_VERSION_FOR_IE_AGENT);
+    if (Boolean.valueOf(opt))
+    {
+      return true;
+    }
+    return false;    
+  }
+
+  static final private String _USE_TRIDENT_VERSION_FOR_IE_AGENT = "org.apache.myfaces.trinidad.Agent#OVERRIDE_IE_COMPATIBILITY_MODE";
+  
   static private final String _EMAIL_PARAM =
     "org.apache.myfaces.trinidad.agent.email";
   static final private String _IASW_DEVICE_HINT_PARAM = "X-Oracle-Device.Class";

-- 
To stop receiving notification emails like this one, please contact
"commits@myfaces.apache.org" <co...@myfaces.apache.org>.