Merge f-t to m-c, a=merge
authorPhil Ringnalda <philringnalda@gmail.com>
Sat, 10 Sep 2016 22:38:09 -0700
changeset 313474 7e873393cc11d326338779e5a3ed2da031e30936
parent 313469 27eb464e6302b06350ced8a0129af4a82f041546 (current diff)
parent 313473 2a9bff2793079f0581b7c3e68b9b940b3e9c20bd (diff)
child 313475 8d2a514d0f23060d95b4f705c98ed37baff46422
child 313476 e44c3152e4bc0877449994c613571676e4ff7c17
push id30685
push userphilringnalda@gmail.com
push dateSun, 11 Sep 2016 05:38:20 +0000
treeherdermozilla-central@7e873393cc11 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmerge
milestone51.0a1
first release with
nightly linux32
7e873393cc11 / 51.0a1 / 20160911030419 / files
nightly linux64
7e873393cc11 / 51.0a1 / 20160911030419 / files
nightly mac
7e873393cc11 / 51.0a1 / 20160911030419 / files
nightly win32
7e873393cc11 / 51.0a1 / 20160911030419 / files
nightly win64
7e873393cc11 / 51.0a1 / 20160911030419 / files
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
releases
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge f-t to m-c, a=merge
--- a/devtools/client/inspector/test/browser.ini
+++ b/devtools/client/inspector/test/browser.ini
@@ -29,16 +29,17 @@ support-files =
   doc_inspector_outerhtml.html
   doc_inspector_remove-iframe-during-load.html
   doc_inspector_search.html
   doc_inspector_search-reserved.html
   doc_inspector_search-suggestions.html
   doc_inspector_search-svg.html
   doc_inspector_select-last-selected-01.html
   doc_inspector_select-last-selected-02.html
+  doc_inspector_svg.svg
   head.js
   shared-head.js
   !/devtools/client/commandline/test/helpers.js
   !/devtools/client/framework/test/shared-head.js
   !/devtools/client/shared/test/test-actor.js
   !/devtools/client/shared/test/test-actor-registry.js
 
 [browser_inspector_addNode_01.js]
@@ -115,16 +116,18 @@ skip-if = (e10s && debug) # Bug 1250058 
 subsuite = clipboard
 [browser_inspector_keyboard-shortcuts.js]
 [browser_inspector_menu-01-sensitivity.js]
 subsuite = clipboard
 [browser_inspector_menu-02-copy-items.js]
 subsuite = clipboard
 [browser_inspector_menu-03-paste-items.js]
 subsuite = clipboard
+[browser_inspector_menu-03-paste-items-svg.js]
+subsuite = clipboard
 [browser_inspector_menu-04-use-in-console.js]
 [browser_inspector_menu-05-attribute-items.js]
 [browser_inspector_menu-06-other.js]
 [browser_inspector_navigation.js]
 [browser_inspector_pane-toggle-01.js]
 [browser_inspector_pane-toggle-02.js]
 [browser_inspector_pane-toggle-03.js]
 [browser_inspector_pane-toggle-04.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/test/browser_inspector_menu-03-paste-items-svg.js
@@ -0,0 +1,42 @@
+/* vim: set ts=2 et sw=2 tw=80: */
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+"use strict";
+
+// Test that HTML can be pasted in SVG elements.
+
+const TEST_URL = URL_ROOT + "doc_inspector_svg.svg";
+const PASTE_AS_FIRST_CHILD = '<circle xmlns="http://www.w3.org/2000/svg" cx="42" cy="42" r="5"/>';
+const PASTE_AS_LAST_CHILD = '<circle xmlns="http://www.w3.org/2000/svg" cx="42" cy="42" r="15"/>';
+
+add_task(function* () {
+  let clipboard = require("sdk/clipboard");
+
+  let { inspector, testActor } = yield openInspectorForURL(TEST_URL);
+
+  let refSelector = "svg";
+  let oldHTML = yield testActor.getProperty(refSelector, "innerHTML");
+  yield selectNode(refSelector, inspector);
+  let markupTagLine = getContainerForSelector(refSelector, inspector).tagLine;
+
+  yield pasteContent("node-menu-pastefirstchild", PASTE_AS_FIRST_CHILD);
+  yield pasteContent("node-menu-pastelastchild", PASTE_AS_LAST_CHILD);
+
+  let html = yield testActor.getProperty(refSelector, "innerHTML");
+  let expectedHtml = PASTE_AS_FIRST_CHILD + oldHTML + PASTE_AS_LAST_CHILD;
+  is(html, expectedHtml, "The innerHTML of the SVG node is correct");
+
+  // Helpers
+  function* pasteContent(menuId, clipboardData) {
+    let allMenuItems = openContextMenuAndGetAllItems(inspector, {
+      target: markupTagLine,
+    });
+    info(`Testing ${menuId} for ${clipboardData}`);
+    clipboard.set(clipboardData);
+
+    let onMutation = inspector.once("markupmutation");
+    allMenuItems.find(item => item.id === menuId).click();
+    info("Waiting for mutation to occur");
+    yield onMutation;
+  }
+});
new file mode 100644
--- /dev/null
+++ b/devtools/client/inspector/test/doc_inspector_svg.svg
@@ -0,0 +1,3 @@
+<svg xmlns="http://www.w3.org/2000/svg">
+  <circle r="5"/>
+</svg>
--- a/devtools/server/actors/inspector.js
+++ b/devtools/server/actors/inspector.js
@@ -1982,28 +1982,22 @@ var WalkerActor = protocol.ActorClassWit
    * @param {string} value The HTML content.
    */
   insertAdjacentHTML: function (node, position, value) {
     if (isNodeDead(node)) {
       return {node: [], newParents: []};
     }
 
     let rawNode = node.rawNode;
-    // Don't insert anything adjacent to the document element,
-    // the head or the body.
-    if (node.isDocumentElement()) {
-      throw new Error("Can't insert adjacent element to the root.");
-    }
-
     let isInsertAsSibling = position === "beforeBegin" ||
       position === "afterEnd";
-    if ((rawNode.tagName === "BODY" || rawNode.tagName === "HEAD") &&
-      isInsertAsSibling) {
-      throw new Error("Can't insert element before or after the body " +
-        "or the head.");
+
+    // Don't insert anything adjacent to the document element.
+    if (isInsertAsSibling && node.isDocumentElement()) {
+      throw new Error("Can't insert adjacent element to the root.");
     }
 
     let rawParentNode = rawNode.parentNode;
     if (!rawParentNode && isInsertAsSibling) {
       throw new Error("Can't insert as sibling without parent node.");
     }
 
     // We can't use insertAdjacentHTML, because we want to return the nodes