Bug 921023 - Properly re-enable mixed content blocking. r=mfinkle, a=akeybl
authorMargaret Leibovic <margaret.leibovic@gmail.com>
Tue, 01 Oct 2013 11:42:42 -0400
changeset 154171 db9a81f5ff911eb1d143b22fd4754c242763d84b
parent 154170 45d2971e30028f5a1798f239d4eb7bc686b1471c
child 154172 80716548b986020310fcb182d0274d9ca5853bf8
push id2903
push userryanvm@gmail.com
push dateSat, 05 Oct 2013 16:26:58 +0000
treeherdermozilla-beta@80716548b986 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmfinkle, akeybl
bugs921023
milestone25.0
Bug 921023 - Properly re-enable mixed content blocking. r=mfinkle, a=akeybl
mobile/android/base/SiteIdentityPopup.java
mobile/android/chrome/content/browser.js
--- a/mobile/android/base/SiteIdentityPopup.java
+++ b/mobile/android/base/SiteIdentityPopup.java
@@ -118,30 +118,23 @@ public class SiteIdentityPopup extends A
             // between the popup arrow and the mixed content notification.
             mContent.setPadding(0, (int) mResources.getDimension(R.dimen.identity_padding_top), 0, 0);
             mIdentity.setVisibility(View.GONE);
         }
     }
 
     @Override
     public void onButtonClick(DoorHanger dh, String tag) {
-        if (tag.equals("disable")) {
-            // To disable mixed content blocking, reload the page with a flag to load mixed content.
-            try {
-                JSONObject data = new JSONObject();
-                data.put("allowMixedContent", true);
-                GeckoEvent e = GeckoEvent.createBroadcastEvent("Session:Reload", data.toString());
-                GeckoAppShell.sendEventToGecko(e);
-            } catch (JSONException e) {
-                Log.e(LOGTAG, "Exception creating message to allow mixed content", e);
-            }
-        } else if (tag.equals("enable")) {
-            // To enable mixed content blocking, reload the page without any flags.
-            GeckoEvent e = GeckoEvent.createBroadcastEvent("Session:Reload", "");
+        try {
+            JSONObject data = new JSONObject();
+            data.put("allowMixedContent", tag.equals("disable"));
+            GeckoEvent e = GeckoEvent.createBroadcastEvent("Session:Reload", data.toString());
             GeckoAppShell.sendEventToGecko(e);
+        } catch (JSONException e) {
+            Log.e(LOGTAG, "Exception creating message to enable/disable mixed content blocking", e);
         }
 
         dismiss();
     }
 
     private void addMixedContentNotification(boolean blocked) {
         // Remove any exixting mixed content notification.
         removeMixedContentNotification();
--- a/mobile/android/chrome/content/browser.js
+++ b/mobile/android/chrome/content/browser.js
@@ -1344,27 +1344,34 @@ var BrowserApp = {
         browser.goBack();
         break;
 
       case "Session:Forward":
         browser.goForward();
         break;
 
       case "Session:Reload": {
-        let allowMixedContent = false;
+        let flags = Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
+
+        // Check to see if this is a message to enable/disable mixed content blocking.
         if (aData) {
-            let data = JSON.parse(aData);
-            allowMixedContent = data.allowMixedContent;
+          let allowMixedContent = JSON.parse(aData).allowMixedContent;
+          if (allowMixedContent) {
+            // Set a flag to disable mixed content blocking.
+            flags = Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT;
+          } else {
+            // Set mixedContentChannel to null to re-enable mixed content blocking.
+            let docShell = browser.webNavigation.QueryInterface(Ci.nsIDocShell);
+            docShell.mixedContentChannel = null;
+          }
         }
 
         // Try to use the session history to reload so that framesets are
         // handled properly. If the window has no session history, fall back
         // to using the web navigation's reload method.
-        let flags = allowMixedContent ? Ci.nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT :
-                    Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_PROXY | Ci.nsIWebNavigation.LOAD_FLAGS_BYPASS_CACHE;
         let webNav = browser.webNavigation;
         try {
           let sh = webNav.sessionHistory;
           if (sh)
             webNav = sh.QueryInterface(Ci.nsIWebNavigation);
         } catch (e) {}
         webNav.reload(flags);
         break;