diff --git a/src/com/android/browser/BaseUi.java b/src/com/android/browser/BaseUi.java
index bce3257..0ae2fda 100644
--- a/src/com/android/browser/BaseUi.java
+++ b/src/com/android/browser/BaseUi.java
@@ -49,7 +49,7 @@
 import android.widget.LinearLayout;
 import android.widget.Toast;
 
-import com.android.browser.Tab.LockIcon;
+import com.android.browser.Tab.SecurityState;
 import com.android.internal.view.menu.MenuBuilder;
 
 import java.util.List;
@@ -81,8 +81,8 @@
     protected Tab mActiveTab;
     private InputMethodManager mInputManager;
 
-    private Drawable mSecLockIcon;
-    private Drawable mMixLockIcon;
+    private Drawable mLockIconSecure;
+    private Drawable mLockIconMixed;
     protected Drawable mGenericFavicon;
 
     protected FrameLayout mContentView;
@@ -115,8 +115,8 @@
         Resources res = mActivity.getResources();
         mInputManager = (InputMethodManager)
                 browser.getSystemService(Activity.INPUT_METHOD_SERVICE);
-        mSecLockIcon = res.getDrawable(R.drawable.ic_secure_holo_dark);
-        mMixLockIcon = res.getDrawable(R.drawable.ic_secure_partial_holo_dark);
+        mLockIconSecure = res.getDrawable(R.drawable.ic_secure_holo_dark);
+        mLockIconMixed = res.getDrawable(R.drawable.ic_secure_partial_holo_dark);
 
         FrameLayout frameLayout = (FrameLayout) mActivity.getWindow()
                 .getDecorView().findViewById(android.R.id.content);
@@ -590,19 +590,19 @@
      */
     protected void updateLockIconToLatest(Tab t) {
         if (t != null && t.inForeground()) {
-            updateLockIconImage(t.getLockIconType());
+            updateLockIconImage(t.getSecurityState());
         }
     }
 
     /**
      * Updates the lock-icon image in the title-bar.
      */
-    private void updateLockIconImage(LockIcon lockIconType) {
+    private void updateLockIconImage(SecurityState securityState) {
         Drawable d = null;
-        if (lockIconType == LockIcon.LOCK_ICON_SECURE) {
-            d = mSecLockIcon;
-        } else if (lockIconType == LockIcon.LOCK_ICON_MIXED) {
-            d = mMixLockIcon;
+        if (securityState == SecurityState.SECURITY_STATE_SECURE) {
+            d = mLockIconSecure;
+        } else if (securityState == SecurityState.SECURITY_STATE_MIXED) {
+            d = mLockIconMixed;
         }
         mNavigationBar.setLock(d);
     }
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index 78d0077..602df06 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -880,7 +880,7 @@
     }
 
     @Override
-    public void onUpdatedLockIcon(Tab tab) {
+    public void onUpdatedSecurityState(Tab tab) {
         mUi.onTabDataChanged(tab);
     }
 
diff --git a/src/com/android/browser/PageDialogsHandler.java b/src/com/android/browser/PageDialogsHandler.java
index 14373cb..9c0f063 100644
--- a/src/com/android/browser/PageDialogsHandler.java
+++ b/src/com/android/browser/PageDialogsHandler.java
@@ -98,7 +98,7 @@
         mHttpAuthenticationDialog.setCancelListener(new HttpAuthenticationDialog.CancelListener() {
             public void onCancel() {
                 handler.cancel();
-                mController.onUpdatedLockIcon(tab);
+                mController.onUpdatedSecurityState(tab);
                 mHttpAuthenticationDialog = null;
             }
         });
diff --git a/src/com/android/browser/PreloadController.java b/src/com/android/browser/PreloadController.java
index dec22ff..5de5be0 100644
--- a/src/com/android/browser/PreloadController.java
+++ b/src/com/android/browser/PreloadController.java
@@ -209,8 +209,8 @@
     }
 
     @Override
-    public void onUpdatedLockIcon(Tab tab) {
-        if (LOGD_ENABLED) Log.d(LOGTAG, "onUpdatedLockIcon()");
+    public void onUpdatedSecurityState(Tab tab) {
+        if (LOGD_ENABLED) Log.d(LOGTAG, "onUpdatedSecurityState()");
     }
 
     @Override
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index 96920a4..ae52943 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -112,10 +112,17 @@
         sAlphaPaint.setColor(Color.TRANSPARENT);
     }
 
-    public enum LockIcon {
-        LOCK_ICON_UNSECURE,
-        LOCK_ICON_SECURE,
-        LOCK_ICON_MIXED,
+    public enum SecurityState {
+        // The page does not use SSL.
+        SECURITY_STATE_NOT_SECURE,
+        // The page uses SSL, the certificate is good and all elements are secure.
+        SECURITY_STATE_SECURE,
+        // The page uses SSL and the certificate is good, but some elements are insecure.
+        SECURITY_STATE_MIXED,
+        // TODO: Add SECURITY_STATE_BAD_CERTIFICATE
+        // See http://b/5403366
+        // The page uses SSL but there is a problem with the certificate.
+        //SECURITY_STATE_BAD_CERTIFICATE,
     }
 
     Context mContext;
@@ -198,7 +205,7 @@
         String mUrl;
         String mOriginalUrl;
         String mTitle;
-        LockIcon mLockIcon;
+        SecurityState mSecurityState;
         Bitmap mFavicon;
         boolean mIsBookmarkedSite = false;
         boolean mIncognito = false;
@@ -213,7 +220,7 @@
                 mTitle = c.getString(R.string.new_tab);
             }
             mFavicon = null;
-            mLockIcon = LockIcon.LOCK_ICON_UNSECURE;
+            mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
         }
 
         PageState(Context c, boolean incognito, String url, Bitmap favicon) {
@@ -221,9 +228,9 @@
             mOriginalUrl = mUrl = url;
             mTitle = null;
             if (URLUtil.isHttpsUrl(url)) {
-                mLockIcon = LockIcon.LOCK_ICON_SECURE;
+                mSecurityState = SecurityState.SECURITY_STATE_SECURE;
             } else {
-                mLockIcon = LockIcon.LOCK_ICON_UNSECURE;
+                mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
             }
             mFavicon = favicon;
         }
@@ -640,21 +647,22 @@
         }
 
         /**
-         * Updates the lock icon. This method is called when we discover another
-         * resource to be loaded for this page (for example, javascript). While
-         * we update the icon type, we do not update the lock icon itself until
-         * we are done loading, it is slightly more secure this way.
+         * Updates the security state. This method is called when we discover
+         * another resource to be loaded for this page (for example,
+         * javascript). While we update the security state, we do not update
+         * the lock icon until we are done loading, as it is slightly more
+         * secure this way.
          */
         @Override
         public void onLoadResource(WebView view, String url) {
             if (url != null && url.length() > 0) {
                 // It is only if the page claims to be secure that we may have
-                // to update the lock:
-                if (mCurrentState.mLockIcon == LockIcon.LOCK_ICON_SECURE) {
-                    // If NOT a 'safe' url, change the lock to mixed content!
+                // to update the security state:
+                if (mCurrentState.mSecurityState == SecurityState.SECURITY_STATE_SECURE) {
+                    // If NOT a 'safe' url, change the state to mixed content!
                     if (!(URLUtil.isHttpsUrl(url) || URLUtil.isDataUrl(url)
                             || URLUtil.isAboutUrl(url))) {
-                        mCurrentState.mLockIcon = LockIcon.LOCK_ICON_MIXED;
+                        mCurrentState.mSecurityState = SecurityState.SECURITY_STATE_MIXED;
                     }
                 }
             }
@@ -755,7 +763,7 @@
                 final SslErrorHandler handler, final SslError error) {
             if (!mInForeground) {
                 handler.cancel();
-                setLockIconType(LockIcon.LOCK_ICON_UNSECURE);
+                setSecurityState(SecurityState.SECURITY_STATE_NOT_SECURE);
                 return;
             }
             if (mSettings.showSecurityWarnings()) {
@@ -793,7 +801,7 @@
                             @Override
                             public void onCancel(DialogInterface dialog) {
                                 handler.cancel();
-                                setLockIconType(LockIcon.LOCK_ICON_UNSECURE);
+                                setSecurityState(SecurityState.SECURITY_STATE_NOT_SECURE);
                                 mWebViewController.onUserCanceledSsl(Tab.this);
                             }
                         })
@@ -900,7 +908,7 @@
         if (!URLUtil.isHttpsUrl(mCurrentState.mUrl)) {
             // In case we stop when loading an HTTPS page from an HTTP page
             // but before a provisional load occurred
-            mCurrentState.mLockIcon = LockIcon.LOCK_ICON_UNSECURE;
+            mCurrentState.mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
         }
         mCurrentState.mIncognito = view.isPrivateBrowsingEnabled();
     }
@@ -1881,16 +1889,16 @@
         return mErrorConsole;
     }
 
-    private void setLockIconType(LockIcon icon) {
-        mCurrentState.mLockIcon = icon;
-        mWebViewController.onUpdatedLockIcon(this);
+    private void setSecurityState(SecurityState securityState) {
+        mCurrentState.mSecurityState = securityState;
+        mWebViewController.onUpdatedSecurityState(this);
     }
 
     /**
-     * @return The tab's lock icon type.
+     * @return The tab's security state.
      */
-    LockIcon getLockIconType() {
-        return mCurrentState.mLockIcon;
+    SecurityState getSecurityState() {
+        return mCurrentState.mSecurityState;
     }
 
     int getLoadProgress() {
diff --git a/src/com/android/browser/WebViewController.java b/src/com/android/browser/WebViewController.java
index f4ff764..20027e0 100644
--- a/src/com/android/browser/WebViewController.java
+++ b/src/com/android/browser/WebViewController.java
@@ -95,7 +95,7 @@
 
     boolean shouldShowErrorConsole();
 
-    void onUpdatedLockIcon(Tab tab);
+    void onUpdatedSecurityState(Tab tab);
 
     void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType);
 
