 +      postData: readRequestPostData(httpChannel),
 +      headers: requestHeaders(httpChannel),
 +      method: httpChannel.requestMethod,
-+      isNavigationRequest: httpChannel.isMainDocumentChannel,
++      navigationId: httpChannel.isMainDocumentChannel ? requestId(httpChannel) : undefined,
 +      cause: causeTypeToString(causeType),
 +    });
 +  }

+
+    if (isStart) {
+      // Starting a new navigation.
+      frame._pendingNavigationId = helper.generateId();
+      frame._pendingNavigationURL = channel.URI.spec;
+      this.emit(FrameTree.Events.NavigationStarted, frame);
+    } else if (isTransferring || (isStop && frame._pendingNavigationId && !status)) {

+
diff --git a/testing/juggler/content/FrameTree.js b/testing/juggler/content/FrameTree.js
new file mode 100644
index 000000000000..640782151e30
--- /dev/null
+++ b/testing/juggler/content/FrameTree.js
@@ -0,0 +1,240 @@
+"use strict";
+const Ci = Components.interfaces;
+const Cr = Components.results;
