From 8940a260d02c90623d55448fb84ddaf548469aac Mon Sep 17 00:00:00 2001 From: Mark Finkle Date: Tue, 11 Nov 2014 15:03:43 -0500 Subject: [PATCH] Bug 1063831 - Support tracking protection in SiteIdentity.java r=margaret --- mobile/android/base/SiteIdentity.java | 141 ++++++++++++++++++++++---- 1 file changed, 119 insertions(+), 22 deletions(-) diff --git a/mobile/android/base/SiteIdentity.java b/mobile/android/base/SiteIdentity.java index b4b78196fc0..540aae29902 100644 --- a/mobile/android/base/SiteIdentity.java +++ b/mobile/android/base/SiteIdentity.java @@ -11,20 +11,20 @@ import android.text.TextUtils; public class SiteIdentity { private SecurityMode mSecurityMode; + private MixedMode mMixedMode; + private TrackingMode mTrackingMode; private String mHost; private String mOwner; private String mSupplemental; private String mVerifier; private String mEncrypted; - // The order of the items here correspond to image - // levels in site_security_level.xml + // The order of the items here relate to image levels in + // site_security_level.xml public enum SecurityMode { UNKNOWN("unknown"), IDENTIFIED("identified"), - VERIFIED("verified"), - MIXED_CONTENT_BLOCKED("mixed_content_blocked"), - MIXED_CONTENT_LOADED("mixed_content_loaded"); + VERIFIED("verified"); private final String mId; @@ -52,12 +52,81 @@ public class SiteIdentity { } } - public SiteIdentity() { - reset(SecurityMode.UNKNOWN); + // The order of the items here relate to image levels in + // site_security_level.xml + public enum MixedMode { + UNKNOWN("unknown"), + MIXED_CONTENT_BLOCKED("mixed_content_blocked"), + MIXED_CONTENT_LOADED("mixed_content_loaded"); + + private final String mId; + + private MixedMode(String id) { + mId = id; + } + + public static MixedMode fromString(String id) { + if (id == null) { + throw new IllegalArgumentException("Can't convert null String to MixedMode"); + } + + for (MixedMode mode : MixedMode.values()) { + if (TextUtils.equals(mode.mId, id.toLowerCase())) { + return mode; + } + } + + throw new IllegalArgumentException("Could not convert String id to MixedMode"); + } + + @Override + public String toString() { + return mId; + } } - private void reset(SecurityMode securityMode) { - mSecurityMode = securityMode; + // The order of the items here relate to image levels in + // site_security_level.xml + public enum TrackingMode { + UNKNOWN("unknown"), + TRACKING_CONTENT_BLOCKED("tracking_content_blocked"), + TRACKING_CONTENT_LOADED("tracking_content_loaded"); + + private final String mId; + + private TrackingMode(String id) { + mId = id; + } + + public static TrackingMode fromString(String id) { + if (id == null) { + throw new IllegalArgumentException("Can't convert null String to TrackingMode"); + } + + for (TrackingMode mode : TrackingMode.values()) { + if (TextUtils.equals(mode.mId, id.toLowerCase())) { + return mode; + } + } + + throw new IllegalArgumentException("Could not convert String id to TrackingMode"); + } + + @Override + public String toString() { + return mId; + } + } + + public SiteIdentity() { + resetIdentityData(); + + mMixedMode = MixedMode.UNKNOWN; + mTrackingMode = TrackingMode.UNKNOWN; + } + + private void resetIdentityData() { + mSecurityMode = SecurityMode.UNKNOWN; mHost = null; mOwner = null; mSupplemental = null; @@ -67,20 +136,40 @@ public class SiteIdentity { void update(JSONObject identityData) { try { - mSecurityMode = SecurityMode.fromString(identityData.getString("mode")); - } catch (Exception e) { - reset(SecurityMode.UNKNOWN); - return; - } + JSONObject mode = identityData.getJSONObject("mode"); - try { - mHost = identityData.getString("host"); - mOwner = identityData.getString("owner"); - mSupplemental = identityData.optString("supplemental", null); - mVerifier = identityData.getString("verifier"); - mEncrypted = identityData.getString("encrypted"); + try { + mMixedMode = MixedMode.fromString(mode.getString("mixed")); + } catch (Exception e) { + mMixedMode = MixedMode.UNKNOWN; + } + + try { + mTrackingMode = TrackingMode.fromString(mode.getString("tracking")); + } catch (Exception e) { + mTrackingMode = TrackingMode.UNKNOWN; + } + + try { + mSecurityMode = SecurityMode.fromString(mode.getString("identity")); + } catch (Exception e) { + resetIdentityData(); + return; + } + + try { + mHost = identityData.getString("host"); + mOwner = identityData.getString("owner"); + mSupplemental = identityData.optString("supplemental", null); + mVerifier = identityData.getString("verifier"); + mEncrypted = identityData.getString("encrypted"); + } catch (Exception e) { + resetIdentityData(); + } } catch (Exception e) { - reset(mSecurityMode); + resetIdentityData(); + mMixedMode = MixedMode.UNKNOWN; + mTrackingMode = TrackingMode.UNKNOWN; } } @@ -107,4 +196,12 @@ public class SiteIdentity { public String getEncrypted() { return mEncrypted; } -} \ No newline at end of file + + public MixedMode getMixedMode() { + return mMixedMode; + } + + public TrackingMode getTrackingMode() { + return mTrackingMode; + } +}