Commit 4b599bd4 authored by Gregor Wagner's avatar Gregor Wagner
Browse files

Bug 781355 - Hook up mozBrowser to Permission Manager. r=jlebar

parent 1a407cda
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -364,6 +364,7 @@ function checkIFrame(aFrame, data) {

  checkedCount++;
  if (checkedCount == checksTodo) {
    SpecialPowers.removePermission("browser", "http://example.org");
    SimpleTest.finish();
  } else {
    gTestRunner.next();
@@ -428,8 +429,8 @@ function runTest() {

var gTestRunner = runTest();

SpecialPowers.pushPrefEnv({'set': [["dom.mozBrowserFramesEnabled", true],
                                   ["dom.mozBrowserFramesWhitelist", "http://example.org"]]},
SpecialPowers.addPermission("browser", true, "http://example.org");
SpecialPowers.pushPrefEnv({'set':[["dom.mozBrowserFramesEnabled", true]]},
                           function() { gTestRunner.next(); });

</script>
+2 −11
Original line number Diff line number Diff line
@@ -73,6 +73,7 @@
             messages[receivedMessageIndex++],
             "Got correct round-tripped response");
          if (receivedMessageIndex == messages.length) {
            SpecialPowers.removePermission("browser", document);
            SimpleTest.finish();
          }
        });
@@ -90,21 +91,11 @@
    addEventListener("load", function() {
      info("Got load event.");

      let whitelist;
      try {
        whitelist =
          SpecialPowers.getCharPref("dom.mozBrowserFramesWhitelist") + ", ";
      } catch (e) {
        whitelist = "";
      }

      whitelist += window.location.protocol + "//" + window.location.host;

      SpecialPowers.addPermission("browser", true, document);
      SpecialPowers.pushPrefEnv({
        "set": [
          ["dom.ipc.browser_frames.oop_by_default", true],
          ["dom.mozBrowserFramesEnabled", true],
          ["dom.mozBrowserFramesWhitelist", whitelist],
          ["browser.pageThumbs.enabled", false]
        ]
      }, runTests);
+9 −11
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include "nsIAppsService.h"
#include "nsServiceManagerUtils.h"
#include "nsIDOMApplicationRegistry.h"
#include "nsIPermissionManager.h"

using namespace mozilla;
using namespace mozilla::dom;
@@ -290,18 +291,15 @@ nsGenericHTMLFrameElement::GetReallyIsBrowser(bool *aOut)
  }

  // Fail if the node principal isn't trusted.
  // TODO: check properly for mozApps rights when mozApps will be less hacky.
  nsIPrincipal *principal = NodePrincipal();
  nsCOMPtr<nsIURI> principalURI;
  principal->GetURI(getter_AddRefs(principalURI));
  if (!nsContentUtils::IsSystemPrincipal(principal) &&
      !nsContentUtils::URIIsChromeOrInPref(principalURI,
                                           "dom.mozBrowserFramesWhitelist")) {
    return NS_OK;
  }

  // Otherwise, succeed.
  *aOut = true;
  nsCOMPtr<nsIPermissionManager> permMgr =
    do_GetService(NS_PERMISSIONMANAGER_CONTRACTID);
  NS_ENSURE_STATE(permMgr);

  PRUint32 permission = nsIPermissionManager::DENY_ACTION;
  nsresult rv = permMgr->TestPermissionFromPrincipal(principal, "browser", &permission);
  NS_ENSURE_SUCCESS(rv, NS_OK);
  *aOut = permission == nsIPermissionManager::ALLOW_ACTION;
  return NS_OK;
}

+16 −15
Original line number Diff line number Diff line
@@ -49,14 +49,6 @@ const browserElementTestHelpers = {
    this._setBoolPref('dom.mozBrowserFramesEnabled', value);
  },

  getWhitelistPref: function() {
    return this._getCharPref('dom.mozBrowserFramesWhitelist');
  },

  setWhitelistPref: function(whitelist) {
    this._setCharPref('dom.mozBrowserFramesWhitelist', whitelist);
  },

  getOOPDisabledPref: function() {
    return this._getBoolPref('dom.ipc.tabs.disabled');
  },
@@ -81,25 +73,35 @@ const browserElementTestHelpers = {
    this._setBoolPref('browser.pageThumbs.enabled', value);
  },

  addToWhitelist: function() {
    var whitelist = this.getWhitelistPref();
    whitelist += ',  http://' + window.location.host + ',  ';
    this.setWhitelistPref(whitelist);
  addPermission: function() {
    SpecialPowers.addPermission("browser", true, document);
    this.tempPermissions.push(location.href)
  },

  removeAllTempPermissions: function() {
    for(var i = 0; i < this.tempPermissions.length; i++) {
      SpecialPowers.removePermission("browser", this.tempPermissions[i]);
    }
  },

  addPermissionForUrl: function(url) {
    SpecialPowers.addPermission("browser", true, url);
    this.tempPermissions.push(url);
  },

  restoreOriginalPrefs: function() {
    this.setEnabledPref(this.origEnabledPref);
    this.setWhitelistPref(this.origWhitelistPref);
    this.setOOPDisabledPref(this.origOOPDisabledPref);
    this.setOOPByDefaultPref(this.origOOPByDefaultPref);
    this.setPageThumbsEnabledPref(this.origPageThumbsEnabledPref);
    this.removeAllTempPermissions();
  },

  'origEnabledPref': null,
  'origWhitelistPref': null,
  'origOOPDisabledPref': null,
  'origOOPByDefaultPref': null,
  'origPageThumbsEnabledPref': null,
  'tempPermissions': [],

  // Some basically-empty pages from different domains you can load.
  'emptyPage1': 'http://example.com' +
@@ -117,7 +119,6 @@ const browserElementTestHelpers = {
};

browserElementTestHelpers.origEnabledPref = browserElementTestHelpers.getEnabledPref();
browserElementTestHelpers.origWhitelistPref = browserElementTestHelpers.getWhitelistPref();
browserElementTestHelpers.origOOPDisabledPref = browserElementTestHelpers.getOOPDisabledPref();
browserElementTestHelpers.origOOPByDefaultPref = browserElementTestHelpers.getOOPByDefaultPref();
browserElementTestHelpers.origPageThumbsEnabledPref = browserElementTestHelpers.getPageThumbsEnabledPref();
+1 −1
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ var mm;

function runTest() {
  browserElementTestHelpers.setEnabledPref(true);
  browserElementTestHelpers.addToWhitelist();
  browserElementTestHelpers.addPermission();

  iframe = document.createElement('iframe');
  iframe.mozbrowser = true;
Loading