Merge m-c to inbound
authorWes Kocher <wkocher@mozilla.com>
Mon, 09 Dec 2013 20:45:54 -0800
changeset 159631 cd37573496575d867f6951fba24584da42787081
parent 159630 712628797f219e9ecc406a176702b65d4cae4b82 (current diff)
parent 159607 038269f529a2b427ad0f5f15d2d44fe7870cd06e (diff)
child 159632 b9a394d1c11e63e456be047b659097577f38e873
push id25808
push usercbook@mozilla.com
push dateTue, 10 Dec 2013 12:03:31 +0000
treeherdermozilla-central@7fb91a422c5e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone29.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge m-c to inbound
browser/devtools/webconsole/test/Makefile.in
dom/media/tests/mochitest/test_getUserMedia_permission.html
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,4 +1,4 @@
 {
-    "revision": "d5f4a104c0b79b8fe13b7883dd531249ed251146", 
+    "revision": "bb23044d4a97be1381be924064817dddbd2ea47b", 
     "repo_path": "/integration/gaia-central"
 }
--- a/browser/components/sessionstore/src/DocumentUtils.jsm
+++ b/browser/components/sessionstore/src/DocumentUtils.jsm
@@ -50,17 +50,18 @@ this.DocumentUtils = {
 
       // Only generate a limited number of XPath expressions for perf reasons
       // (cf. bug 477564)
       if (!nId && generatedCount > MAX_TRAVERSED_XPATHS) {
         continue;
       }
 
       if (node instanceof Ci.nsIDOMHTMLInputElement ||
-          node instanceof Ci.nsIDOMHTMLTextAreaElement) {
+          node instanceof Ci.nsIDOMHTMLTextAreaElement ||
+          node instanceof Ci.nsIDOMXULTextBoxElement) {
         switch (node.type) {
           case "checkbox":
           case "radio":
             value = node.checked;
             hasDefaultValue = value == node.defaultChecked;
             break;
           case "file":
             value = { type: "file", fileList: node.mozGetFileNameArray() };
@@ -197,20 +198,20 @@ this.DocumentUtils = {
       if (aNode.options[aNode.selectedIndex].value == aValue.value) {
         return;
       }
 
       // find first option with matching aValue if possible
       for (let i = 0; i < aNode.options.length; i++) {
         if (aNode.options[i].value == aValue.value) {
           aNode.selectedIndex = i;
+          eventType = "change";
           break;
         }
       }
-      eventType = "change";
     } else if (aValue && aValue.fileList && aValue.type == "file" &&
       aNode.type == "file") {
       aNode.mozSetFileNameArray(aValue.fileList, aValue.fileList.length);
       eventType = "input";
     } else if (aValue && typeof aValue.indexOf == "function" && aNode.options) {
       Array.forEach(aNode.options, function(opt, index) {
         // don't worry about malformed options with same values
         opt.selected = aValue.indexOf(opt.value) > -1;
--- a/browser/components/sessionstore/src/TextAndScrollData.jsm
+++ b/browser/components/sessionstore/src/TextAndScrollData.jsm
@@ -81,23 +81,16 @@ let TextAndScrollDataInternal = {
 
     // get scroll position from nsIDOMWindowUtils, since it allows avoiding a
     // flush of layout
     let domWindowUtils = content.QueryInterface(Ci.nsIInterfaceRequestor)
                                 .getInterface(Ci.nsIDOMWindowUtils);
     let scrollX = {}, scrollY = {};
     domWindowUtils.getScrollXY(false, scrollX, scrollY);
     entry.scroll = scrollX.value + "," + scrollY.value;
-
-    if (topURL == "about:config") {
-      entry.formdata = {
-        id: { "textbox": content.top.document.getElementById("textbox").value },
-        xpath: {}
-      };
-    }
   },
 
   isAboutSessionRestore: function (url) {
     return url == "about:sessionrestore" || url == "about:welcomeback";
   },
 
   restore: function (frameList) {
     for (let [frame, data] of frameList) {
--- a/browser/components/sessionstore/src/XPathGenerator.jsm
+++ b/browser/components/sessionstore/src/XPathGenerator.jsm
@@ -3,18 +3,24 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 "use strict";
 
 this.EXPORTED_SYMBOLS = ["XPathGenerator"];
 
 this.XPathGenerator = {
   // these two hashes should be kept in sync
-  namespaceURIs:     { "xhtml": "http://www.w3.org/1999/xhtml" },
-  namespacePrefixes: { "http://www.w3.org/1999/xhtml": "xhtml" },
+  namespaceURIs:     {
+    "xhtml": "http://www.w3.org/1999/xhtml",
+    "xul": "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+  },
+  namespacePrefixes: {
+    "http://www.w3.org/1999/xhtml": "xhtml",
+    "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul": "xul"
+  },
 
   /**
    * Generates an approximate XPath query to an (X)HTML node
    */
   generate: function sss_xph_generate(aNode) {
     // have we reached the document node already?
     if (!aNode.parentNode)
       return "";
@@ -88,12 +94,15 @@ this.XPathGenerator = {
     let ignoreTypes = ["password", "hidden", "button", "image", "submit", "reset"];
     // XXXzeniko work-around until lower-case has been implemented (bug 398389)
     let toLowerCase = '"ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz"';
     let ignore = "not(translate(@type, " + toLowerCase + ")='" +
       ignoreTypes.join("' or translate(@type, " + toLowerCase + ")='") + "')";
     let formNodesXPath = "//textarea|//select|//xhtml:textarea|//xhtml:select|" +
       "//input[" + ignore + "]|//xhtml:input[" + ignore + "]";
 
+    // Special case for about:config's search field.
+    formNodesXPath += '|/xul:window[@id="config"]//xul:textbox[@id="textbox"]';
+
     delete this.restorableFormNodes;
     return (this.restorableFormNodes = formNodesXPath);
   }
 };
--- a/browser/devtools/commandline/test/browser.ini
+++ b/browser/devtools/commandline/test/browser.ini
@@ -5,43 +5,50 @@ support-files =
   mockCommands.js
 
 [browser_cmd_addon.js]
 [browser_cmd_calllog.js]
 skip-if = true # Bug 845831
 [browser_cmd_calllog_chrome.js]
 skip-if = true # Bug 845831
 [browser_cmd_appcache_invalid.js]
-[browser_cmd_appcache_invalid_appcache.appcache]
-[browser_cmd_appcache_invalid_appcache.appcache^headers^]
-[browser_cmd_appcache_invalid_index.html]
-[browser_cmd_appcache_invalid_page1.html]
-[browser_cmd_appcache_invalid_page2.html]
-[browser_cmd_appcache_invalid_page3.html]
-[browser_cmd_appcache_invalid_page3.html^headers^]
+support-files =
+  browser_cmd_appcache_invalid_appcache.appcache
+  browser_cmd_appcache_invalid_appcache.appcache^headers^
+  browser_cmd_appcache_invalid_index.html
+  browser_cmd_appcache_invalid_page1.html
+  browser_cmd_appcache_invalid_page2.html
+  browser_cmd_appcache_invalid_page3.html
+  browser_cmd_appcache_invalid_page3.html^headers^
 [browser_cmd_appcache_valid.js]
-[browser_cmd_appcache_valid_appcache.appcache]
-[browser_cmd_appcache_valid_appcache.appcache^headers^]
-[browser_cmd_appcache_valid_index.html]
-[browser_cmd_appcache_valid_page1.html]
-[browser_cmd_appcache_valid_page2.html]
-[browser_cmd_appcache_valid_page3.html]
+support-files =
+  browser_cmd_appcache_valid_appcache.appcache
+  browser_cmd_appcache_valid_appcache.appcache^headers^
+  browser_cmd_appcache_valid_index.html
+  browser_cmd_appcache_valid_page1.html
+  browser_cmd_appcache_valid_page2.html
+  browser_cmd_appcache_valid_page3.html
 [browser_cmd_commands.js]
-[browser_cmd_cookie.html]
 [browser_cmd_cookie.js]
+support-files =
+ browser_cmd_cookie.html
 [browser_cmd_jsb.js]
-[browser_cmd_jsb_script.jsi]
-[browser_cmd_media.html]
+support-files =
+  browser_cmd_jsb_script.jsi
 [browser_cmd_media.js]
-[browser_cmd_pagemod_export.html]
+support-files =
+  browser_cmd_media.html
 [browser_cmd_pagemod_export.js]
+support-files =
+  browser_cmd_pagemod_export.html
 [browser_cmd_pref.js]
 [browser_cmd_restart.js]
-[browser_cmd_screenshot.html]
 [browser_cmd_screenshot.js]
+support-files =
+  browser_cmd_screenshot.html
 [browser_cmd_settings.js]
 [browser_gcli_async.js]
 [browser_gcli_canon.js]
 [browser_gcli_cli.js]
 [browser_gcli_completion.js]
 [browser_gcli_date.js]
 skip-if = true # Disabled until TZ bug is fixed
 [browser_gcli_exec.js]
deleted file mode 100644
--- a/browser/devtools/webconsole/test/Makefile.in
+++ /dev/null
@@ -1,16 +0,0 @@
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-
-ifeq ($(OS_ARCH), Darwin)
-MOCHITEST_BROWSER_FILES += \
-	browser_webconsole_bug_804845_ctrl_key_nav.js \
-        $(NULL)
-endif
-
-ifeq ($(OS_ARCH),WINNT)
-MOCHITEST_BROWSER_FILES += \
-	browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js \
-	$(NULL)
-endif
-
--- a/browser/devtools/webconsole/test/browser.ini
+++ b/browser/devtools/webconsole/test/browser.ini
@@ -180,16 +180,18 @@ support-files =
 [browser_webconsole_bug_613280_jsterm_copy.js]
 [browser_webconsole_bug_613642_maintain_scroll.js]
 [browser_webconsole_bug_613642_prune_scroll.js]
 [browser_webconsole_bug_614793_jsterm_scroll.js]
 [browser_webconsole_bug_618078_network_exceptions.js]
 [browser_webconsole_bug_618311_close_panels.js]
 [browser_webconsole_bug_621644_jsterm_dollar.js]
 [browser_webconsole_bug_622303_persistent_filters.js]
+[browser_webconsole_bug_623749_ctrl_a_select_all_winnt.js]
+run-if = os == "win"
 [browser_webconsole_bug_630733_response_redirect_headers.js]
 [browser_webconsole_bug_632275_getters_document_width.js]
 [browser_webconsole_bug_632347_iterators_generators.js]
 [browser_webconsole_bug_632817.js]
 [browser_webconsole_bug_642108_pruneTest.js]
 [browser_webconsole_bug_642615_autocomplete.js]
 [browser_webconsole_bug_644419_log_limits.js]
 [browser_webconsole_bug_646025_console_file_location.js]
@@ -205,16 +207,18 @@ support-files =
 [browser_webconsole_bug_737873_mixedcontent.js]
 [browser_webconsole_bug_762593_insecure_passwords_about_blank_web_console_warning.js]
 [browser_webconsole_bug_762593_insecure_passwords_web_console_warning.js]
 [browser_webconsole_bug_764572_output_open_url.js]
 [browser_webconsole_bug_766001_JS_Console_in_Debugger.js]
 [browser_webconsole_bug_770099_bad_policyuri.js]
 [browser_webconsole_bug_770099_violation.js]
 [browser_webconsole_bug_782653_CSS_links_in_Style_Editor.js]
+[browser_webconsole_bug_804845_ctrl_key_nav.js]
+run-if = os == "mac"
 [browser_webconsole_bug_817834_add_edited_input_to_history.js]
 [browser_webconsole_bug_821877_csp_errors.js]
 [browser_webconsole_bug_837351_securityerrors.js]
 [browser_webconsole_bug_846918_hsts_invalid-headers.js]
 [browser_webconsole_cached_autocomplete.js]
 [browser_webconsole_change_font_size.js]
 [browser_webconsole_chrome.js]
 [browser_webconsole_closure_inspection.js]
--- a/dom/apps/src/Webapps.jsm
+++ b/dom/apps/src/Webapps.jsm
@@ -446,16 +446,41 @@ this.DOMApplicationRegistry = {
       destDir.remove(true);
       delete this.webapps[aId];
     } finally {
       zipReader.close();
     }
 #endif
   },
 
+  // For hosted apps, uninstall an app served from http:// if we have
+  // one installed from the same url with an https:// scheme.
+  removeIfHttpsDuplicate: function(aId) {
+#ifdef MOZ_WIDGET_GONK
+    let app = this.webapps[aId];
+    if (!app || !app.origin.startsWith("http://")) {
+      return;
+    }
+
+    let httpsManifestURL =
+      "https://" + app.manifestURL.substring("http://".length);
+
+    // This will uninstall the http apps and remove any data hold by this
+    // app. Bug 948105 tracks data migration from http to https apps.
+    for (let id in this.webapps) {
+       if (this.webapps[id].manifestURL === httpsManifestURL) {
+         debug("Found a http/https match: " + app.manifestURL + " / " +
+               this.webapps[id].manifestURL);
+         this.uninstall(app.manifestURL, function() {}, function() {});
+         return;
+       }
+    }
+#endif
+  },
+
   // Implements the core of bug 787439
   // if at first run, go through these steps:
   //   a. load the core apps registry.
   //   b. uninstall any core app from the current registry but not in the
   //      new core apps registry.
   //   c. for all apps in the new core registry, install them if they are not
   //      yet in the current registry, and run installPermissions()
   installSystemApps: function installSystemApps(aNext) {
@@ -550,16 +575,17 @@ this.DOMApplicationRegistry = {
     }
 #endif
 
     let onAppsLoaded = (function onAppsLoaded() {
       if (runUpdate) {
         // At first run, install preloaded apps and set up their permissions.
         for (let id in this.webapps) {
           this.installPreinstalledApp(id);
+          this.removeIfHttpsDuplicate(id);
           if (!this.webapps[id]) {
             continue;
           }
           this.updateOfflineCacheForApp(id);
           this.updatePermissionsForApp(id);
         }
         // Need to update the persisted list of apps since
         // installPreinstalledApp() removes the ones failing to install.
--- a/dom/media/tests/mochitest/Makefile.in
+++ b/dom/media/tests/mochitest/Makefile.in
@@ -2,14 +2,8 @@
 # License, v. 2.0. If a copy of the MPL was not distributed with this
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 # The following tests are leaking and cannot be run by default yet
 ifdef MOZ_WEBRTC_LEAKING_TESTS
 MOCHITEST_FILES += \
   $(NULL)
 endif
-
-ifdef MOZ_B2G_CAMERA
-MOCHITEST_FILES += \
-  test_getUserMedia_permission.html \
-  $(NULL)
-endif
deleted file mode 100644
--- a/dom/media/tests/mochitest/test_getUserMedia_permission.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<!--
-https://bugzilla.mozilla.org/show_bug.cgi?id=853356
--->
-<head>
-  <meta charset="utf-8">
-  <title>mozGetUserMedia Permission Test</title>
-  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
-  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
-  <script type="application/javascript" src="head.js"></script>
-  <script type="application/javascript" src="mediaStreamPlayback.js"></script>
-</head>
-<body>
-<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=853356">Display camera/microphone permission acquisition prompt</a>
-<script type="application/javascript">
-
-var gCount = 0;
-var gTests = [
-  {
-    constraints: {video: true, audio: false}
-  }
-  ,
-  {
-    constraints: {video: false, audio: true}
-  }
-  ,
-  {
-    constraints: {video: true, audio: true},
-  }
-  ];
-
-function gUM(data) {
-  var gum_success = function (stream) {
-    SimpleTest.info("TEST-INFO | Got succss callback for " + JSON.stringify(data.constraints));
-
-    var hasAudioTrack = stream.getAudioTracks().length > 0;
-    var hasVideoTrack = stream.getVideoTracks().length > 0;
-
-    is(data.constraints.audio, hasAudioTrack, "Request audio track:" +
-                  data.constraints.audio + " contain audio track:" + hasAudioTrack);
-    is(data.constraints.video, hasVideoTrack, "Request video track:" +
-                  data.constraints.video + " contain audio track:" + hasVideoTrack);
-    gCount++;
-    if (gCount < gTests.length) {
-      gUM(gTests[gCount]);
-    } else {
-      SimpleTest.finish();
-    }
-  }
-
-  var gum_fail = function () {
-    ok(false, "permission not granted for " + JSON.stringify(data.constraints));
-
-    SimpleTest.finish();
-  }
-
-  SimpleTest.info("TEST-INFO | Call getUserMedia for " + JSON.stringify(data.constraints));
-  navigator.mozGetUserMedia(data.constraints, gum_success, gum_fail);
-}
-
-SpecialPowers.pushPrefEnv({"set": [["media.navigator.permission.disabled", false]]},
-  function () {
-    SpecialPowers.addPermission('video-capture',
-                                Ci.nsIPermissionManager.ALLOW_ACTION, document);
-    SpecialPowers.addPermission('audio-capture',
-                                Ci.nsIPermissionManager.ALLOW_ACTION, document);
-
-    gUM(gTests[gCount]);
-  });
-SimpleTest.waitForExplicitFinish();
-</script>
-</pre>
-</body>
-</html>