--- a/android-browser.diff
+++ b/android-browser.diff
@@ -1,20 +1,20 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1372178155 25200
# Tue Jun 25 09:35:55 2013 -0700
-# Node ID 42bd9e0aa209aa6a36fe343fe7e20efaf286c730
-# Parent ca1a3b610988fcf9d867dcc0bc6a8f020a2be000
-imported patch android-crap.diff
+# Node ID 948bcf0c688a226117e9b94ac61bd95336f1ec95
+# Parent d3a25c9a42f47a6d070afc2e15d3e494ad792197
+Bug 888492 - Use the tab actor's _browser rather than _tabbrowser for load notifications. r=jwalker
diff --git a/toolkit/devtools/server/actors/inspector.js b/toolkit/devtools/server/actors/inspector.js
--- a/toolkit/devtools/server/actors/inspector.js
+++ b/toolkit/devtools/server/actors/inspector.js
-@@ -2006,17 +2006,17 @@ var InspectorActor = protocol.ActorClass
+@@ -1984,17 +1984,17 @@ var InspectorActor = protocol.ActorClass
getWalker: method(function(options={}) {
let deferred = promise.defer();
let window = this.window;
var domReady = () => {
let tabActor = this.tabActor;
window.removeEventListener("DOMContentLoaded", domReady, true);
--- a/copy-html.diff
+++ b/copy-html.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477175 25200
# Mon Jun 17 06:52:55 2013 -0700
-# Node ID 532e9ff4a7f442cda71c5ecca75a9868a245857e
-# Parent 4ffe34db39e7f507d4642b3136d1ce722b2f823d
+# Node ID c7c02144a5f57bba0435dca17b98b653b1427d52
+# Parent 71b348a1ba083f8d9febd362b6b6af4b0f2559f2
imported patch copy-html.diff
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -630,34 +630,38 @@ InspectorPanel.prototype = {
/**
* Copy the innerHTML of the selected Node to the clipboard.
new file mode 100644
--- /dev/null
+++ b/delete-nodes.diff
@@ -0,0 +1,297 @@
+# HG changeset patch
+# User Dave Camp <dcamp@mozilla.com>
+# Date 1371477173 25200
+# Mon Jun 17 06:52:53 2013 -0700
+# Node ID 9876c67d28d20a69cf5397424979f8e8bec33013
+# Parent 60e5fd5a379caaf2cb6dd42e701cc98a78797ded
+Bug 888528 - Add node deletion/insertion to the walker actor. r=jwalker
+
+diff --git a/toolkit/devtools/server/actors/inspector.js b/toolkit/devtools/server/actors/inspector.js
+--- a/toolkit/devtools/server/actors/inspector.js
++++ b/toolkit/devtools/server/actors/inspector.js
+@@ -1377,16 +1377,56 @@ var WalkerActor = protocol.ActorClass({
+ node: Arg(0, "domnode")
+ },
+ response: {
+ value: RetVal("longstring")
+ }
+ }),
+
+ /**
++ * Removes a node from its parent node.
++ *
++ * @returns The node's nextSibling before it was removed.
++ */
++ removeNode: method(function(node) {
++ if ((node.rawNode.ownerDocument &&
++ node.rawNode.ownerDocument.documentElement === this.rawNode) ||
++ node.rawNode.nodeType === Ci.nsIDOMNode.DOCUMENT_NODE) {
++ throw Error("Cannot remove document or document elements.");
++ }
++ let nextSibling = this.nextSibling(node);
++ if (node.rawNode.parentNode) {
++ node.rawNode.parentNode.removeChild(node.rawNode);
++ // Mutation events will take care of the rest.
++ }
++ return nextSibling;
++ }, {
++ request: {
++ node: Arg(0, "domnode")
++ },
++ response: {
++ nextSibling: RetVal("domnode", { optional: true })
++ }
++ }),
++
++ /**
++ * Insert a node into the DOM.
++ */
++ insertBefore: method(function(node, parent, sibling) {
++ parent.rawNode.insertBefore(node.rawNode, sibling ? sibling.rawNode : null);
++ }, {
++ request: {
++ node: Arg(0, "domnode"),
++ parent: Arg(1, "domnode"),
++ sibling: Arg(2, "domnode", { optional: true })
++ },
++ response: {}
++ }),
++
++ /**
+ * Get any pending mutation records. Must be called by the client after
+ * the `new-mutations` notification is received. Returns an array of
+ * mutation records.
+ *
+ * Mutation records have a basic structure:
+ *
+ * {
+ * type: attributes|characterData|childList,
+diff --git a/toolkit/devtools/server/tests/mochitest/Makefile.in b/toolkit/devtools/server/tests/mochitest/Makefile.in
+--- a/toolkit/devtools/server/tests/mochitest/Makefile.in
++++ b/toolkit/devtools/server/tests/mochitest/Makefile.in
+@@ -11,21 +11,23 @@ relativesrcdir = @relativesrcdir@
+
+ include $(DEPTH)/config/autoconf.mk
+
+ MOCHITEST_CHROME_FILES = \
+ inspector-helpers.js \
+ inspector-traversal-data.html \
+ test_inspector-changeattrs.html \
+ test_inspector-changevalue.html \
++ test_inspector-insert.html \
+ test_inspector-mutations-attr.html \
+ test_inspector-mutations-childlist.html \
+ test_inspector-mutations-frameload.html \
+ test_inspector-mutations-value.html \
+ test_inspector-release.html \
++ test_inspector-remove.html \
+ test_inspector-retain.html \
+ test_inspector-pseudoclass-lock.html \
+ test_inspector-traversal.html \
+ test_unsafeDereference.html \
+ nonchrome_unsafeDereference.html \
+ $(NULL)
+
+ include $(topsrcdir)/config/rules.mk
+diff --git a/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html b/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html
+new file mode 100644
+--- /dev/null
++++ b/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html
+@@ -0,0 +1,96 @@
++<!DOCTYPE HTML>
++<html>
++<!--
++https://bugzilla.mozilla.org/show_bug.cgi?id=
++-->
++<head>
++ <meta charset="utf-8">
++ <title>Test for Bug </title>
++
++ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
++ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
++ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
++ <script type="application/javascript;version=1.8">
++Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
++
++const promise = devtools.require("sdk/core/promise");
++const inspector = devtools.require("devtools/server/actors/inspector");
++
++window.onload = function() {
++ SimpleTest.waitForExplicitFinish();
++ runNextTest();
++}
++
++var gWalker = null;
++var gClient = null;
++
++function assertOwnership() {
++ return assertOwnershipTrees(gWalker);
++}
++
++addTest(function setup() {
++ let url = document.getElementById("inspectorContent").href;
++ attachURL(url, function(err, client, tab, doc) {
++ gInspectee = doc;
++ let {InspectorFront} = devtools.require("devtools/server/actors/inspector");
++ let inspector = InspectorFront(client, tab);
++ promiseDone(inspector.getWalker().then(walker => {
++ ok(walker, "getWalker() should return an actor.");
++ gClient = client;
++ gWalker = walker;
++ }).then(runNextTest));
++ });
++});
++
++addTest(function testRearrange() {
++ let longlist = null;
++ let nodeA = null;
++ let nextNode = null;
++
++ promiseDone(gWalker.querySelector(gWalker.rootNode, "#longlist").then(listFront => {
++ longlist = listFront;
++ }).then(() => {
++ return gWalker.children(longlist);
++ }).then(response => {
++ nodeA = response.nodes[0];
++ is(nodeA.id, "a", "Got the expected node.");
++ // Move nodeA to the end of the list.
++ return gWalker.insertBefore(nodeA, longlist, null);
++ }).then(() => {
++ ok(!gInspectee.querySelector("#a").nextSibling, "a should now be at the end of the list.");
++ return gWalker.children(longlist);
++ }).then(response => {
++ is(nodeA, response.nodes[response.nodes.length - 1], "a should now be the last returned child.");
++ // Now move it to the middle of the list.
++ nextNode = response.nodes[13];
++ return gWalker.insertBefore(nodeA, longlist, nextNode);
++ }).then(response => {
++ let sibling = inspector._documentWalker(gInspectee.querySelector("#a")).nextSibling();
++ is(sibling, nextNode.rawNode(), "Node should match the expected next node.");
++ return gWalker.children(longlist);
++ }).then(response => {
++ is(nodeA, response.nodes[13], "a should be where we expect it.");
++ is(nextNode, response.nodes[14], "next node should be where we expect it.");
++ }).then(runNextTest));
++});
++
++addTest(function cleanup() {
++ delete gWalker;
++ delete gClient;
++ runNextTest();
++});
++
++
++ </script>
++</head>
++<body>
++<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
++<a id="inspectorContent" target="_blank" href="inspector-traversal-data.html">Test Document</a>
++<p id="display"></p>
++<div id="content" style="display: none">
++
++</div>
++<pre id="test">
++</pre>
++</body>
++</html>
+diff --git a/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html b/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html
+new file mode 100644
+--- /dev/null
++++ b/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html
+@@ -0,0 +1,96 @@
++<!DOCTYPE HTML>
++<html>
++<!--
++https://bugzilla.mozilla.org/show_bug.cgi?id=
++-->
++<head>
++ <meta charset="utf-8">
++ <title>Test for Bug </title>
++
++ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
++ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
++ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
++ <script type="application/javascript;version=1.8">
++Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
++
++const promise = devtools.require("sdk/core/promise");
++const inspector = devtools.require("devtools/server/actors/inspector");
++
++window.onload = function() {
++ SimpleTest.waitForExplicitFinish();
++ runNextTest();
++}
++
++var gWalker = null;
++var gClient = null;
++
++function assertOwnership() {
++ return assertOwnershipTrees(gWalker);
++}
++
++addTest(function setup() {
++ let url = document.getElementById("inspectorContent").href;
++ attachURL(url, function(err, client, tab, doc) {
++ gInspectee = doc;
++ let {InspectorFront} = devtools.require("devtools/server/actors/inspector");
++ let inspector = InspectorFront(client, tab);
++ promiseDone(inspector.getWalker().then(walker => {
++ ok(walker, "getWalker() should return an actor.");
++ gClient = client;
++ gWalker = walker;
++ }).then(runNextTest));
++ });
++});
++
++addTest(function testRemoveSubtree() {
++ let originalOwnershipSize = 0;
++ let longlist = null;
++ let longlistID = null;
++
++ let nextSibling = gInspectee.querySelector("#longlist").nextSibling;
++ // Duplicate the walker logic to skip blank nodes...
++ while (nextSibling && nextSibling.nodeType === Components.interfaces.nsIDOMNode.TEXT_NODE && !/[^\s]/.exec(nextSibling.nodeValue)) {
++ nextSibling = nextSibling.nextSibling;
++ }
++
++ promiseDone(gWalker.querySelector(gWalker.rootNode, "#longlist").then(listFront => {
++ longlist = listFront;
++ longlistID = longlist.actorID;
++ }).then(() => {
++ return gWalker.children(longlist);
++ }).then((items)=> {
++ originalOwnershipSize = assertOwnership();
++ ok(originalOwnershipSize > 26, "Should have at least 26 items in our ownership tree");
++ return gWalker.removeNode(longlist);
++ }).then(nextSiblingFront => {
++ is(nextSiblingFront.rawNode(), nextSibling, "Should have returned the next sibling.");
++ return waitForMutation(gWalker, isChildList);
++ }).then(() => {
++ // Our ownership size should now be 26 fewer (we forgot about #longlist + 26 children, but learned about #longlist's next sibling)
++ let newOwnershipSize = assertOwnership();
++ is(newOwnershipSize, originalOwnershipSize - 26, "Ownership tree should have dropped by 27 nodes");
++ // Now verify that some nodes have gone away
++ return checkMissing(gClient, longlistID);
++ }).then(runNextTest));
++});
++
++addTest(function cleanup() {
++ delete gWalker;
++ delete gClient;
++ runNextTest();
++});
++
++
++ </script>
++</head>
++<body>
++<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
++<a id="inspectorContent" target="_blank" href="inspector-traversal-data.html">Test Document</a>
++<p id="display"></p>
++<div id="content" style="display: none">
++
++</div>
++<pre id="test">
++</pre>
++</body>
++</html>
deleted file mode 100644
--- a/inspector-delete-node.diff
+++ /dev/null
@@ -1,319 +0,0 @@
-# HG changeset patch
-# User Dave Camp <dcamp@mozilla.com>
-# Date 1371477173 25200
-# Mon Jun 17 06:52:53 2013 -0700
-# Node ID 877aba69dfd4ad1f638be4691802b721d6ee54c0
-# Parent 0346910d331ca63edf112851e7efe2213c436bf3
-imported patch inspector-delete-node.diff
-
-diff --git a/toolkit/devtools/server/actors/inspector.js b/toolkit/devtools/server/actors/inspector.js
---- a/toolkit/devtools/server/actors/inspector.js
-+++ b/toolkit/devtools/server/actors/inspector.js
-@@ -1377,16 +1377,56 @@ var WalkerActor = protocol.ActorClass({
- node: Arg(0, "domnode")
- },
- response: {
- value: RetVal("longstring")
- }
- }),
-
- /**
-+ * Removes a node from its parent node.
-+ *
-+ * @returns The node's nextSibling before it was removed.
-+ */
-+ removeNode: method(function(node) {
-+ if ((node.rawNode.ownerDocument &&
-+ node.rawNode.ownerDocument.documentElement === this.rawNode) ||
-+ node.rawNode.nodeType === Ci.nsIDOMNode.DOCUMENT_NODE) {
-+ throw Error("Cannot remove document or document elements.");
-+ }
-+ let nextSibling = this.nextSibling(node);
-+ if (node.rawNode.parentNode) {
-+ node.rawNode.parentNode.removeChild(node.rawNode);
-+ // Mutation events will take care of the rest.
-+ }
-+ return nextSibling;
-+ }, {
-+ request: {
-+ node: Arg(0, "domnode")
-+ },
-+ response: {
-+ nextSibling: RetVal("domnode", { optional: true })
-+ }
-+ }),
-+
-+ /**
-+ * Insert a node into the DOM.
-+ */
-+ insertBefore: method(function(node, parent, sibling) {
-+ parent.rawNode.insertBefore(node.rawNode, sibling ? sibling.rawNode : null);
-+ }, {
-+ request: {
-+ node: Arg(0, "domnode"),
-+ parent: Arg(1, "domnode"),
-+ sibling: Arg(2, "domnode", { optional: true })
-+ },
-+ response: {}
-+ }),
-+
-+ /**
- * Get any pending mutation records. Must be called by the client after
- * the `new-mutations` notification is received. Returns an array of
- * mutation records.
- *
- * Mutation records have a basic structure:
- *
- * {
- * type: attributes|characterData|childList,
-diff --git a/toolkit/devtools/server/tests/mochitest/Makefile.in b/toolkit/devtools/server/tests/mochitest/Makefile.in
---- a/toolkit/devtools/server/tests/mochitest/Makefile.in
-+++ b/toolkit/devtools/server/tests/mochitest/Makefile.in
-@@ -11,21 +11,23 @@ relativesrcdir = @relativesrcdir@
-
- include $(DEPTH)/config/autoconf.mk
-
- MOCHITEST_CHROME_FILES = \
- inspector-helpers.js \
- inspector-traversal-data.html \
- test_inspector-changeattrs.html \
- test_inspector-changevalue.html \
-+ test_inspector-insert.html \
- test_inspector-mutations-attr.html \
- test_inspector-mutations-childlist.html \
- test_inspector-mutations-frameload.html \
- test_inspector-mutations-value.html \
- test_inspector-release.html \
-+ test_inspector-remove.html \
- test_inspector-retain.html \
- test_inspector-pseudoclass-lock.html \
- test_inspector-traversal.html \
- test_unsafeDereference.html \
- nonchrome_unsafeDereference.html \
- $(NULL)
-
- include $(topsrcdir)/config/rules.mk
-diff --git a/toolkit/devtools/server/tests/mochitest/inspector-helpers.js b/toolkit/devtools/server/tests/mochitest/inspector-helpers.js
---- a/toolkit/devtools/server/tests/mochitest/inspector-helpers.js
-+++ b/toolkit/devtools/server/tests/mochitest/inspector-helpers.js
-@@ -150,16 +150,18 @@ function ownershipTreeSize(tree) {
- return size;
- }
-
- function assertOwnershipTrees(walker) {
- let serverTree = serverOwnershipTree(walker);
- let clientTree = clientOwnershipTree(walker);
- is(JSON.stringify(clientTree, null, ' '), JSON.stringify(serverTree, null, ' '), "Server and client ownership trees should match.");
-
-+ dump("ownership tree: " + JSON.stringify(clientTree, null, ' ') + "\n");
-+
- return ownershipTreeSize(clientTree.root);
- }
-
- // Verify that an actorID is inaccessible both from the client library and the server.
- function checkMissing(client, actorID) {
- let deferred = Promise.defer();
- let front = client.getActor(actorID);
- ok(!front, "Front shouldn't be accessible from the client for actorID: " + actorID);
-diff --git a/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html b/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html
-new file mode 100644
---- /dev/null
-+++ b/toolkit/devtools/server/tests/mochitest/test_inspector-insert.html
-@@ -0,0 +1,96 @@
-+<!DOCTYPE HTML>
-+<html>
-+<!--
-+https://bugzilla.mozilla.org/show_bug.cgi?id=
-+-->
-+<head>
-+ <meta charset="utf-8">
-+ <title>Test for Bug </title>
-+
-+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
-+ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
-+ <script type="application/javascript;version=1.8">
-+Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
-+
-+const Promise = devtools.require("sdk/core/promise");
-+const inspector = devtools.require("devtools/server/actors/inspector");
-+
-+window.onload = function() {
-+ SimpleTest.waitForExplicitFinish();
-+ runNextTest();
-+}
-+
-+var gWalker = null;
-+var gClient = null;
-+
-+function assertOwnership() {
-+ return assertOwnershipTrees(gWalker);
-+}
-+
-+addTest(function setup() {
-+ let url = document.getElementById("inspectorContent").href;
-+ attachURL(url, function(err, client, tab, doc) {
-+ gInspectee = doc;
-+ let {InspectorFront} = devtools.require("devtools/server/actors/inspector");
-+ let inspector = InspectorFront(client, tab);
-+ promiseDone(inspector.getWalker().then(walker => {
-+ ok(walker, "getWalker() should return an actor.");
-+ gClient = client;
-+ gWalker = walker;
-+ }).then(runNextTest));
-+ });
-+});
-+
-+addTest(function testRearrange() {
-+ let longlist = null;
-+ let nodeA = null;
-+ let nextNode = null;
-+
-+ promiseDone(gWalker.querySelector(gWalker.rootNode, "#longlist").then(listFront => {
-+ longlist = listFront;
-+ }).then(() => {
-+ return gWalker.children(longlist);
-+ }).then(response => {
-+ nodeA = response.nodes[0];
-+ is(nodeA.id, "a", "Got the expected node.");
-+ // Move nodeA to the end of the list.
-+ return gWalker.insertBefore(nodeA, longlist, null);
-+ }).then(() => {
-+ ok(!gInspectee.querySelector("#a").nextSibling, "a should now be at the end of the list.");
-+ return gWalker.children(longlist);
-+ }).then(response => {
-+ is(nodeA, response.nodes[response.nodes.length - 1], "a should now be the last returned child.");
-+ // Now move it to the middle of the list.
-+ nextNode = response.nodes[13];
-+ return gWalker.insertBefore(nodeA, longlist, nextNode);
-+ }).then(response => {
-+ let sibling = inspector._documentWalker(gInspectee.querySelector("#a")).nextSibling();
-+ is(sibling, nextNode.rawNode(), "Node should match the expected next node.");
-+ return gWalker.children(longlist);
-+ }).then(response => {
-+ is(nodeA, response.nodes[13], "a should be where we expect it.");
-+ is(nextNode, response.nodes[14], "next node should be where we expect it.");
-+ }).then(runNextTest));
-+});
-+
-+addTest(function cleanup() {
-+ delete gWalker;
-+ delete gClient;
-+ runNextTest();
-+});
-+
-+
-+ </script>
-+</head>
-+<body>
-+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
-+<a id="inspectorContent" target="_blank" href="inspector-traversal-data.html">Test Document</a>
-+<p id="display"></p>
-+<div id="content" style="display: none">
-+
-+</div>
-+<pre id="test">
-+</pre>
-+</body>
-+</html>
-diff --git a/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html b/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html
-new file mode 100644
---- /dev/null
-+++ b/toolkit/devtools/server/tests/mochitest/test_inspector-remove.html
-@@ -0,0 +1,96 @@
-+<!DOCTYPE HTML>
-+<html>
-+<!--
-+https://bugzilla.mozilla.org/show_bug.cgi?id=
-+-->
-+<head>
-+ <meta charset="utf-8">
-+ <title>Test for Bug </title>
-+
-+ <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-+ <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
-+ <script type="application/javascript;version=1.8" src="inspector-helpers.js"></script>
-+ <script type="application/javascript;version=1.8">
-+Components.utils.import("resource://gre/modules/devtools/Loader.jsm");
-+
-+const Promise = devtools.require("sdk/core/promise");
-+const inspector = devtools.require("devtools/server/actors/inspector");
-+
-+window.onload = function() {
-+ SimpleTest.waitForExplicitFinish();
-+ runNextTest();
-+}
-+
-+var gWalker = null;
-+var gClient = null;
-+
-+function assertOwnership() {
-+ return assertOwnershipTrees(gWalker);
-+}
-+
-+addTest(function setup() {
-+ let url = document.getElementById("inspectorContent").href;
-+ attachURL(url, function(err, client, tab, doc) {
-+ gInspectee = doc;
-+ let {InspectorFront} = devtools.require("devtools/server/actors/inspector");
-+ let inspector = InspectorFront(client, tab);
-+ promiseDone(inspector.getWalker().then(walker => {
-+ ok(walker, "getWalker() should return an actor.");
-+ gClient = client;
-+ gWalker = walker;
-+ }).then(runNextTest));
-+ });
-+});
-+
-+addTest(function testRemoveSubtree() {
-+ let originalOwnershipSize = 0;
-+ let longlist = null;
-+ let longlistID = null;
-+
-+ let nextSibling = gInspectee.querySelector("#longlist").nextSibling;
-+ // Duplicate the walker logic to skip blank nodes...
-+ while (nextSibling && nextSibling.nodeType === Components.interfaces.nsIDOMNode.TEXT_NODE && !/[^\s]/.exec(nextSibling.nodeValue)) {
-+ nextSibling = nextSibling.nextSibling;
-+ }
-+
-+ promiseDone(gWalker.querySelector(gWalker.rootNode, "#longlist").then(listFront => {
-+ longlist = listFront;
-+ longlistID = longlist.actorID;
-+ }).then(() => {
-+ return gWalker.children(longlist);
-+ }).then((items)=> {
-+ originalOwnershipSize = assertOwnership();
-+ ok(originalOwnershipSize > 26, "Should have at least 26 items in our ownership tree");
-+ return gWalker.removeNode(longlist);
-+ }).then(nextSiblingFront => {
-+ is(nextSiblingFront.rawNode(), nextSibling, "Should have returned the next sibling.");
-+ return waitForMutation(gWalker, isChildList);
-+ }).then(() => {
-+ // Our ownership size should now be 26 fewer (we forgot about #longlist + 26 children, but learned about #longlist's next sibling)
-+ let newOwnershipSize = assertOwnership();
-+ is(newOwnershipSize, originalOwnershipSize - 26, "Ownership tree should have dropped by 27 nodes");
-+ // Now verify that some nodes have gone away
-+ return checkMissing(gClient, longlistID);
-+ }).then(runNextTest));
-+});
-+
-+addTest(function cleanup() {
-+ delete gWalker;
-+ delete gClient;
-+ runNextTest();
-+});
-+
-+
-+ </script>
-+</head>
-+<body>
-+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Mozilla Bug </a>
-+<a id="inspectorContent" target="_blank" href="inspector-traversal-data.html">Test Document</a>
-+<p id="display"></p>
-+<div id="content" style="display: none">
-+
-+</div>
-+<pre id="test">
-+</pre>
-+</body>
-+</html>
--- a/inspector-panel-default-node.diff
+++ b/inspector-panel-default-node.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477174 25200
# Mon Jun 17 06:52:54 2013 -0700
-# Node ID 00aba1b028d43fb8dc1604f6fa3c1df3243feae0
-# Parent 8e69c05917c43407a091f2086aa429d9b054fef2
+# Node ID 71b348a1ba083f8d9febd362b6b6af4b0f2559f2
+# Parent 948bcf0c688a226117e9b94ac61bd95336f1ec95
imported patch inspector-panel-default-node.diff
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -152,24 +152,34 @@ InspectorPanel.prototype = {
return deferred.promise;
@@ -41,17 +41,17 @@ diff --git a/browser/devtools/inspector/
},
/**
* Selection object (read only)
*/
get selection() {
return this._selection;
},
-@@ -272,16 +282,17 @@ InspectorPanel.prototype = {
+@@ -271,16 +281,17 @@ InspectorPanel.prototype = {
/**
* Reset the inspector on navigate away.
*/
onNavigatedAway: function InspectorPanel_onNavigatedAway(event, payload) {
let newWindow = payload._navPayload || payload;
this.walker.release().then(null, console.error);
this.walker = null;
@@ -59,17 +59,17 @@ diff --git a/browser/devtools/inspector/
this.selection.setNodeFront(null);
this.selection.setWalker(null);
this._destroyMarkup();
this.isDirty = false;
this.target.inspector.getWalker().then(walker => {
if (this._destroyPromise) {
walker.release().then(null, console.error);
-@@ -387,17 +398,17 @@ InspectorPanel.prototype = {
+@@ -386,17 +397,17 @@ InspectorPanel.prototype = {
},
/**
* When a node is deleted, select its parent node.
*/
onDetached: function InspectorPanel_onDetached(event, parentNode) {
this.cancelLayoutChange();
this.breadcrumbs.cutAfter(this.breadcrumbs.indexOf(parentNode));
--- a/inspector-remote-delete-node.diff
+++ b/inspector-remote-delete-node.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477175 25200
# Mon Jun 17 06:52:55 2013 -0700
-# Node ID d226c8a4645c57624d721ab57c3b8fb1c98d8822
-# Parent 39dfcd31bc12451e6ba0c7eab89fc34e28682c59
+# Node ID 9ba44475ec4e354f39d5cf98c7d7508100c46815
+# Parent 9a904486f94ac45b441f170aafd933161e5a39e7
imported patch inspector-remote-delete-node.diff
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -685,18 +685,17 @@ InspectorPanel.prototype = {
}
--- a/remote-edit-attributes.diff
+++ b/remote-edit-attributes.diff
@@ -1,20 +1,20 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477175 25200
# Mon Jun 17 06:52:55 2013 -0700
-# Node ID 477d7b2c7c75daf444a25ae728c0057c2b93487d
-# Parent 532e9ff4a7f442cda71c5ecca75a9868a245857e
+# Node ID 9f3e138ac09f11cdbc7030ff1fd771609ff7330b
+# Parent e551874cce8589cdab23bf7aa255bc312a34fdd8
imported patch remote-edit-attributes.diff
diff --git a/browser/devtools/markupview/markup-view.js b/browser/devtools/markupview/markup-view.js
--- a/browser/devtools/markupview/markup-view.js
+++ b/browser/devtools/markupview/markup-view.js
-@@ -1104,47 +1104,53 @@ function ElementEditor(aContainer, aNode
+@@ -1101,47 +1101,53 @@ function ElementEditor(aContainer, aNode
this.template("elementContentSummary", this);
}
// Create the closing tag
this.template("elementClose", this);
this.rawNode = aNode.rawNode();
@@ -83,17 +83,17 @@ diff --git a/browser/devtools/markupview
let tagName = this.node.nodeName.toLowerCase();
this.tag.textContent = tagName;
this.closeTag.textContent = tagName;
this.update();
}
ElementEditor.prototype = {
-@@ -1173,16 +1179,20 @@ ElementEditor.prototype = {
+@@ -1170,16 +1176,20 @@ ElementEditor.prototype = {
for (let i = 0; i < attrs.length; i++) {
let attr = this._createAttribute(attrs[i]);
if (!attr.inplaceEditor) {
attr.style.removeProperty("display");
}
}
},
@@ -104,17 +104,17 @@ diff --git a/browser/devtools/markupview
_createAttribute: function EE_createAttribute(aAttr, aBefore)
{
if (this.attrs.indexOf(aAttr.name) !== -1) {
var attr = this.attrs[aAttr.name];
var name = attr.querySelector(".attrname");
var val = attr.querySelector(".attrvalue");
} else {
// Create the template editor, which will save some variables here.
-@@ -1197,59 +1207,61 @@ ElementEditor.prototype = {
+@@ -1194,59 +1204,61 @@ ElementEditor.prototype = {
if (aAttr.name == "id") {
before = this.attrList.firstChild;
} else if (aAttr.name == "class") {
let idNode = this.attrs["id"];
before = idNode ? idNode.nextSibling : this.attrList.firstChild;
}
this.attrList.insertBefore(attr, before);
@@ -207,17 +207,17 @@ diff --git a/browser/devtools/markupview
this.attrs[aAttr.name] = attr;
}
name.textContent = aAttr.name;
val.textContent = aAttr.value;
return attr;
-@@ -1259,94 +1271,45 @@ ElementEditor.prototype = {
+@@ -1256,94 +1268,45 @@ ElementEditor.prototype = {
* Parse a user-entered attribute string and apply the resulting
* attributes to the node. This operation is undoable.
*
* @param string aValue the user-entered value.
* @param Element aAttrNode the attribute editor that created this
* set of attributes, used to place new attributes where the
* user put them.
*/
--- a/remote-edit-value.diff
+++ b/remote-edit-value.diff
@@ -1,20 +1,20 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477175 25200
# Mon Jun 17 06:52:55 2013 -0700
-# Node ID 8a0888a06e3fa6534c0bf8ebe1aa600a1e7852b0
-# Parent 22cacc2cf7356dfafddb93b5a6265ef1c7dad2b0
+# Node ID d3a25c9a42f47a6d070afc2e15d3e494ad792197
+# Parent 9f3e138ac09f11cdbc7030ff1fd771609ff7330b
imported patch remote-edit-value.diff
diff --git a/browser/devtools/markupview/markup-view.js b/browser/devtools/markupview/markup-view.js
--- a/browser/devtools/markupview/markup-view.js
+++ b/browser/devtools/markupview/markup-view.js
-@@ -1006,38 +1006,42 @@ function DoctypeEditor(aContainer, aNode
+@@ -1003,38 +1003,42 @@ function DoctypeEditor(aContainer, aNode
*/
function TextEditor(aContainer, aNode, aTemplate)
{
this.node = aNode;
this._selected = false;
aContainer.markup.template(aTemplate, this);
--- a/remote-markup.diff
+++ b/remote-markup.diff
@@ -1,19 +1,15 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1370924326 25200
# Mon Jun 10 21:18:46 2013 -0700
-# Node ID 0499ca738e7d86f14f81beb3978bddac8841329e
-# Parent eb6cf1052d776cb61c5a6189a72e39613e29d8ec
-imported patch remote-markup.diff
-* * *
-imported patch markup-fixes.diff
-* * *
-[mq]: fucking-around.diff
+# Node ID e551874cce8589cdab23bf7aa255bc312a34fdd8
+# Parent 9876c67d28d20a69cf5397424979f8e8bec33013
+Bug 886032 - Port the markup view to the inspector actor (readonly). r=paul
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -136,17 +136,17 @@ InspectorPanel.prototype = {
// All the components are initialized. Let's select a node.
this._selection.setNodeFront(defaultSelection);
@@ -386,17 +382,17 @@ diff --git a/browser/devtools/markupview
let doc = nodeDocument(aNode);
if (aNode === doc ||
aNode === doc.documentElement ||
aNode.nodeType == Ci.nsIDOMNode.DOCUMENT_TYPE_NODE) {
return;
}
let parentNode = aNode.parentNode;
-@@ -264,129 +278,129 @@ MarkupView.prototype = {
+@@ -264,136 +278,129 @@ MarkupView.prototype = {
*/
navigate: function MT__navigate(aContainer, aIgnoreFocus)
{
if (!aContainer) {
return;
}
let node = aContainer.node;
@@ -443,21 +439,23 @@ diff --git a/browser/devtools/markupview
- let walker = documentWalker(aNode);
- let parent = walker.parentNode();
- if (parent) {
- var container = new MarkupContainer(this, aNode);
- } else {
+ if (aNode === this.walker.rootNode) {
var container = new RootContainer(this, aNode);
this._elt.appendChild(container.elt);
+-
+- if (this._rootNode) {
+- this._rootNode.removeEventListener("load", this, true);
+- }
+-
this._rootNode = aNode;
-- aNode.addEventListener("load", function MP_watch_contentLoaded(aEvent) {
-- // Fake a childList mutation here.
-- this._mutationObserver([{target: aEvent.target, type: "childList"}]);
-- }.bind(this), true);
+- aNode.addEventListener("load", this, true);
+ } else {
+ var container = new MarkupContainer(this, aNode);
}
this._containers.set(aNode, container);
- // FIXME: set an expando to prevent the the wrapper from disappearing
- // See bug 819131 for details.
- aNode.__preserveHack = true;
@@ -468,17 +466,21 @@ diff --git a/browser/devtools/markupview
this._updateChildren(container);
- if (parent) {
- this.importNode(parent, true);
- }
return container;
},
-+
+- handleEvent: function MT_handleEvent(aEvent) {
+- // Fake a childList mutation here.
+- this._mutationObserver([{target: aEvent.target, type: "childList"}]);
+- },
+
/**
* Mutation observer used for included nodes.
*/
_mutationObserver: function MT__mutationObserver(aMutations)
{
for (let mutation of aMutations) {
- let container = this._containers.get(mutation.target);
+ let type = mutation.type;
@@ -558,17 +560,17 @@ diff --git a/browser/devtools/markupview
},
/**
* Expand the node's children.
*/
expandNode: function MT_expandNode(aNode)
{
let container = this._containers.get(aNode);
-@@ -395,45 +409,57 @@ MarkupView.prototype = {
+@@ -402,45 +409,57 @@ MarkupView.prototype = {
/**
* Expand the entire tree beneath a container.
*
* @param aContainer The container to expand.
*/
_expandAll: function MT_expandAll(aContainer)
{
@@ -623,17 +625,17 @@ diff --git a/browser/devtools/markupview
/**
* Mark the given node selected.
*/
markNodeAsSelected: function MT_markNodeAsSelected(aNode)
{
let container = this._containers.get(aNode);
if (this._selectedContainer === container) {
return false;
-@@ -441,40 +467,37 @@ MarkupView.prototype = {
+@@ -448,40 +467,37 @@ MarkupView.prototype = {
if (this._selectedContainer) {
this._selectedContainer.selected = false;
}
this._selectedContainer = container;
if (aNode) {
this._selectedContainer.selected = true;
}
@@ -667,17 +669,17 @@ diff --git a/browser/devtools/markupview
},
/**
* Unmark selected node (no node selected).
*/
unmarkSelectedNode: function MT_unmarkSelectedNode()
{
if (this._selectedContainer) {
-@@ -489,181 +512,199 @@ MarkupView.prototype = {
+@@ -496,186 +512,199 @@ MarkupView.prototype = {
nodeChanged: function MT_nodeChanged(aNode)
{
if (aNode === this._inspector.selection) {
this._inspector.change("markupview");
}
},
/**
@@ -961,40 +963,45 @@ diff --git a/browser/devtools/markupview
+
+ if (this._boundResizePreview) {
+ this._frame.contentWindow.removeEventListener("resize", this._boundResizePreview, true);
+ this._frame.contentWindow.removeEventListener("overflow", this._boundResizePreview, true);
+ this._frame.contentWindow.removeEventListener("underflow", this._boundResizePreview, true);
+ delete this._boundResizePreview;
+ }
- this._frame.contentWindow.removeEventListener("keydown", this._boundKeyDown, true);
+ this._frame.contentWindow.removeEventListener("keydown", this._boundKeyDown, false);
delete this._boundKeyDown;
- this._inspector.selection.off("new-node", this._boundOnNewSelection);
+ this._inspector.selection.off("new-node-front", this._boundOnNewSelection);
delete this._boundOnNewSelection;
+ this.walker.off("mutations", this._boundMutationObserver)
+ delete this._boundMutationObserver;
+
delete this._elt;
delete this._containers;
- this._observer.disconnect();
- delete this._observer;
+-
+- if (this._rootNode) {
+- this._rootNode.removeEventListener("load", this, true);
+- delete this._rootNode;
+- }
},
/**
* Initialize the preview panel.
*/
_initPreview: function MT_initPreview()
{
if (!Services.prefs.getBoolPref("devtools.inspector.markupPreview")) {
-@@ -773,25 +814,22 @@ function MarkupContainer(aMarkupView, aN
+@@ -785,25 +814,22 @@ function MarkupContainer(aMarkupView, aN
// The template will fill the following properties
this.elt = null;
this.expander = null;
this.codeBox = null;
this.children = null;
this.markup.template("container", this);
this.elt.container = this;
@@ -1012,17 +1019,17 @@ diff --git a/browser/devtools/markupview
}.bind(this));
this.codeBox.insertBefore(this.editor.elt, this.children);
this.editor.elt.addEventListener("mousedown", function(evt) {
this.markup.navigate(this);
}.bind(this), false);
-@@ -804,20 +842,21 @@ function MarkupContainer(aMarkupView, aN
+@@ -816,20 +842,21 @@ function MarkupContainer(aMarkupView, aN
}
if (this.editor.closeElt) {
this.editor.closeElt.addEventListener("mousedown", function(evt) {
this.markup.navigate(this);
}.bind(this), false);
this.codeBox.appendChild(this.editor.closeElt);
}
@@ -1035,17 +1042,17 @@ diff --git a/browser/devtools/markupview
/**
* True if the current node has children. The MarkupView
* will set this attribute for the MarkupContainer.
*/
_hasChildren: false,
get hasChildren() {
return this._hasChildren;
-@@ -827,16 +866,20 @@ MarkupContainer.prototype = {
+@@ -839,16 +866,20 @@ MarkupContainer.prototype = {
this._hasChildren = aValue;
if (aValue) {
this.expander.style.visibility = "visible";
} else {
this.expander.style.visibility = "hidden";
}
},
@@ -1056,17 +1063,17 @@ diff --git a/browser/devtools/markupview
/**
* True if the node has been visually expanded in the tree.
*/
get expanded() {
return this.children.hasAttribute("expanded");
},
set expanded(aValue) {
-@@ -869,16 +912,17 @@ MarkupContainer.prototype = {
+@@ -881,16 +912,17 @@ MarkupContainer.prototype = {
_selected: false,
get selected() {
return this._selected;
},
set selected(aValue) {
this._selected = aValue;
@@ -1074,17 +1081,17 @@ diff --git a/browser/devtools/markupview
if (this._selected) {
this.editor.elt.classList.add("theme-selected");
if (this.editor.closeElt) {
this.editor.closeElt.classList.add("theme-selected");
}
} else {
this.editor.elt.classList.remove("theme-selected");
if (this.editor.closeElt) {
-@@ -912,18 +956,20 @@ MarkupContainer.prototype = {
+@@ -924,18 +956,20 @@ MarkupContainer.prototype = {
/**
* Dummy container node used for the root document element.
*/
function RootContainer(aMarkupView, aNode)
{
this.doc = aMarkupView.doc;
this.elt = this.doc.createElement("ul");
@@ -1095,17 +1102,17 @@ diff --git a/browser/devtools/markupview
}
/**
* Creates an editor for simple nodes.
*/
function GenericEditor(aContainer, aNode)
{
this.elt = aContainer.doc.createElement("span");
-@@ -953,46 +999,77 @@ function DoctypeEditor(aContainer, aNode
+@@ -965,46 +999,77 @@ function DoctypeEditor(aContainer, aNode
*
* @param MarkupContainer aContainer The container owning this editor.
* @param DOMNode aNode The node being edited.
* @param string aTemplate The template id to use to build the editor.
*/
function TextEditor(aContainer, aNode, aTemplate)
{
this.node = aNode;
@@ -1193,17 +1200,17 @@ diff --git a/browser/devtools/markupview
}
};
/**
* Creates an editor for an Element node.
*
* @param MarkupContainer aContainer The container owning this editor.
* @param Element aNode The node being edited.
-@@ -1014,53 +1091,57 @@ function ElementEditor(aContainer, aNode
+@@ -1026,53 +1091,57 @@ function ElementEditor(aContainer, aNode
this.attrList = null;
this.newAttr = null;
this.summaryElt = null;
this.closeElt = null;
// Create the main editor
this.template("element", this);
@@ -1274,17 +1281,17 @@ diff --git a/browser/devtools/markupview
let tagName = this.node.nodeName.toLowerCase();
this.tag.textContent = tagName;
this.closeTag.textContent = tagName;
this.update();
}
ElementEditor.prototype = {
-@@ -1113,56 +1194,59 @@ ElementEditor.prototype = {
+@@ -1125,56 +1194,59 @@ ElementEditor.prototype = {
if (aAttr.name == "id") {
before = this.attrList.firstChild;
} else if (aAttr.name == "class") {
let idNode = this.attrs["id"];
before = idNode ? idNode.nextSibling : this.attrList.firstChild;
}
this.attrList.insertBefore(attr, before);
@@ -1372,17 +1379,17 @@ diff --git a/browser/devtools/markupview
this.attrs[aAttr.name] = attr;
}
name.textContent = aAttr.name;
val.textContent = aAttr.value;
return attr;
-@@ -1185,17 +1269,17 @@ ElementEditor.prototype = {
+@@ -1197,17 +1269,17 @@ ElementEditor.prototype = {
for (let attr of attrs) {
let attribute = {
name: attr.name,
value: attr.value
};
// Create an attribute editor next to the current attribute if needed.
this._createAttribute(attribute, aAttrNode ? aAttrNode.nextSibling : null);
@@ -1391,17 +1398,17 @@ diff --git a/browser/devtools/markupview
}
this.undo.endBatch();
},
/**
* Helper function for _setAttribute and _removeAttribute,
* returns a function that puts an attribute back the way it was.
-@@ -1242,187 +1326,93 @@ ElementEditor.prototype = {
+@@ -1254,187 +1326,93 @@ ElementEditor.prototype = {
* Handler for the new attribute editor.
*/
_onNewAttribute: function EE_onNewAttribute(aValue, aCommit)
{
if (!aValue || !aCommit) {
return;
}
--- a/search-box-remote.diff
+++ b/search-box-remote.diff
@@ -1,24 +1,24 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1370924326 25200
# Mon Jun 10 21:18:46 2013 -0700
-# Node ID 2ccc31df1f64ef58ad9db4f76a2a5caa5507d141
-# Parent 0499ca738e7d86f14f81beb3978bddac8841329e
+# Node ID 35ffcc040b8c3de7b5659a02f1c04cb782b2d467
+# Parent c7c02144a5f57bba0435dca17b98b653b1427d52
imported patch search-box-remote.diff
* * *
imported patch search-fixes-2.diff
* * *
imported patch selector-search-fix.diff
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
-@@ -209,28 +209,29 @@ InspectorPanel.prototype = {
+@@ -219,28 +219,29 @@ InspectorPanel.prototype = {
*/
setupSearchBox: function InspectorPanel_setupSearchBox() {
let searchDoc;
if (this.target.isLocalTab) {
searchDoc = this.browser.contentDocument;
} else if (this.target.window) {
searchDoc = this.target.window.document;
} else {
@@ -456,17 +456,17 @@ diff --git a/browser/devtools/inspector/
? actualSuggestions.length: 0, suggestions.length,
"There are expected number of suggestions at " + state + "th step.");
actualSuggestions = actualSuggestions.reverse();
for (let i = 0; i < suggestions.length; i++) {
is(suggestions[i][0], actualSuggestions[i].label,
diff --git a/toolkit/devtools/server/actors/inspector.js b/toolkit/devtools/server/actors/inspector.js
--- a/toolkit/devtools/server/actors/inspector.js
+++ b/toolkit/devtools/server/actors/inspector.js
-@@ -1998,17 +1998,17 @@ function nodeDocument(node) {
+@@ -2038,17 +2038,17 @@ function nodeDocument(node) {
* Similar to a TreeWalker, except will dig in to iframes and it doesn't
* implement the good methods like previousNode and nextNode.
*
* See TreeWalker documentation for explanations of the methods.
*/
function DocumentWalker(aNode, aShow, aFilter, aExpandEntityReferences)
{
let doc = nodeDocument(aNode);
--- a/series
+++ b/series
@@ -1,13 +1,13 @@
-android-browser.diff
-inspector-delete-node.diff
+delete-nodes.diff
remote-markup.diff
remote-edit-attributes.diff
remote-edit-value.diff
+android-browser.diff
inspector-panel-default-node.diff
copy-html.diff
search-box-remote.diff
warning-fixes.diff
inspector-remote-delete-node.diff
style-actor.diff
window-targets.diff
inspector-retain-root.diff #+obsolete
--- a/style-actor.diff
+++ b/style-actor.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371506345 25200
# Mon Jun 17 14:59:05 2013 -0700
-# Node ID ca1a3b610988fcf9d867dcc0bc6a8f020a2be000
-# Parent 8a0888a06e3fa6534c0bf8ebe1aa600a1e7852b0
+# Node ID 8a4b0125b290258e96c38168f01493575cf50658
+# Parent 9ba44475ec4e354f39d5cf98c7d7508100c46815
[mq]: style-actor.diff
* * *
[mq]: computed-view-remote.diff
diff --git a/browser/devtools/inspector/inspector-panel.js b/browser/devtools/inspector/inspector-panel.js
--- a/browser/devtools/inspector/inspector-panel.js
+++ b/browser/devtools/inspector/inspector-panel.js
@@ -40,22 +40,18 @@ function InspectorPanel(iframeWindow, to
@@ -30,17 +30,17 @@ diff --git a/browser/devtools/inspector/
+ }).then(() => {
return this._getDefaultNodeForSelection();
}).then(defaultSelection => {
return this._deferredOpen(defaultSelection);
}).then(null, console.error);
},
_deferredOpen: function(defaultSelection) {
- let deferred = Promise.defer();
+ let deferred = promise.defer();
@@ -275,37 +271,53 @@ InspectorPanel.prototype = {
let ruleViewTab = this.sidebar.getTab("ruleview");
ruleViewTab.addEventListener("mouseover", this.toggleHighlighter, false);
ruleViewTab.addEventListener("mouseout", this.toggleHighlighter, false);
this.sidebar.show();
},
@@ -132,17 +132,17 @@ diff --git a/browser/devtools/inspector/
if (this._destroyPromise) {
return this._destroyPromise;
}
if (this.walker) {
this._destroyPromise = this.walker.release().then(null, console.error);
delete this.walker;
+ delete this.nodeStyle;
} else {
- this._destroyPromise = Promise.resolve(null);
+ this._destroyPromise = promise.resolve(null);
}
this.cancelUpdate();
this.cancelLayoutChange();
if (this.browser) {
diff --git a/browser/devtools/inspector/selection.js b/browser/devtools/inspector/selection.js
--- a/browser/devtools/inspector/selection.js
@@ -6054,17 +6054,17 @@ diff --git a/toolkit/devtools/server/pro
* deserialization.
*
* This is called by getType() when passed an 'actorType#detail' string.
*
* @param string name
diff --git a/toolkit/devtools/server/transport.js b/toolkit/devtools/server/transport.js
--- a/toolkit/devtools/server/transport.js
+++ b/toolkit/devtools/server/transport.js
-@@ -225,17 +225,21 @@ LocalDebuggerTransport.prototype = {
+@@ -227,17 +227,21 @@ LocalDebuggerTransport.prototype = {
}
}
this._deepFreeze(aPacket);
let other = this.other;
if (other) {
Services.tm.currentThread.dispatch(makeInfallible(function() {
// Avoid the cost of JSON.stringify() when logging is disabled.
if (wantLogging) {
--- a/warning-fixes.diff
+++ b/warning-fixes.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1371477174 25200
# Mon Jun 17 06:52:54 2013 -0700
-# Node ID 8e69c05917c43407a091f2086aa429d9b054fef2
-# Parent 877aba69dfd4ad1f638be4691802b721d6ee54c0
+# Node ID 9a904486f94ac45b441f170aafd933161e5a39e7
+# Parent 35ffcc040b8c3de7b5659a02f1c04cb782b2d467
imported patch warning-fixes.diff
diff --git a/browser/devtools/shared/inplace-editor.js b/browser/devtools/shared/inplace-editor.js
--- a/browser/devtools/shared/inplace-editor.js
+++ b/browser/devtools/shared/inplace-editor.js
@@ -398,17 +398,17 @@ InplaceEditor.prototype = {
--selStart;
}
--- a/window-targets.diff
+++ b/window-targets.diff
@@ -1,14 +1,14 @@
# HG changeset patch
# User Dave Camp <dcamp@mozilla.com>
# Date 1372178155 25200
# Tue Jun 25 09:35:55 2013 -0700
-# Node ID ac23bf71ac37438be024cf00cb3c6cef7524d6fa
-# Parent 42bd9e0aa209aa6a36fe343fe7e20efaf286c730
+# Node ID 77bd617cdc65d41724b065d35023bf1c10e9ca01
+# Parent 8a4b0125b290258e96c38168f01493575cf50658
imported patch window-targets.diff
* * *
imported patch custom-windows.diff
diff --git a/browser/devtools/framework/target.js b/browser/devtools/framework/target.js
--- a/browser/devtools/framework/target.js
+++ b/browser/devtools/framework/target.js
@@ -77,17 +77,19 @@ exports.TargetFactory = {
@@ -131,17 +131,17 @@ diff --git a/browser/devtools/framework/
* for tools that support the Remote Debugging Protocol even for local
* connections.
*/
makeRemote: function TabTarget_makeRemote() {
if (this._remote) {
return this._remote.promise;
}
- this._remote = Promise.defer();
+ this._remote = promise.defer();
- if (this.isLocalTab) {
+ if (this.isLocalTab || this.isWindow) {
// Since a remote protocol connection will be made, let's start the
// DebuggerServer here, once and for all tools.
if (!DebuggerServer.initialized) {
DebuggerServer.init();
DebuggerServer.addBrowserActors();
@@ -220,17 +220,17 @@ diff --git a/toolkit/devtools/server/act
},
destroy: function() {
this.webProgress.removeProgressListener(this);
},
onStateChange: makeInfallible(function stateChange(progress, request, flag, status) {
let isWindow = flag & Ci.nsIWebProgressListener.STATE_IS_WINDOW;
-@@ -2003,20 +2003,27 @@ var InspectorActor = protocol.ActorClass
+@@ -2011,20 +2011,27 @@ var InspectorActor = protocol.ActorClass
return null;
},
getWalker: method(function(options={}) {
let deferred = promise.defer();
let window = this.window;
@@ -252,17 +252,17 @@ diff --git a/toolkit/devtools/server/act
window.addEventListener("DOMContentLoaded", domReady, true);
} else {
domReady();
}
diff --git a/toolkit/devtools/server/actors/styleeditor.js b/toolkit/devtools/server/actors/styleeditor.js
--- a/toolkit/devtools/server/actors/styleeditor.js
+++ b/toolkit/devtools/server/actors/styleeditor.js
-@@ -403,17 +403,17 @@ StyleSheetActor.prototype = {
+@@ -402,17 +402,17 @@ StyleSheetActor.prototype = {
title: this.styleSheet.title,
styleSheetIndex: this.styleSheetIndex,
text: this.text
}
// get parent actor if this sheet was @imported
let parent = this.styleSheet.parentStyleSheet;
if (parent) {