Bug 1345119 - Part 2: Server side for retrieving offset parent of DOM node. r?pbro draft
authorStanford Lockhart <lockhart@cs.dal.ca>
Fri, 17 Mar 2017 23:05:27 -0300
changeset 551318 d5a504d89449
parent 551317 b663a2bcc7ca
child 551319 150567388451
push id51021
push userbmo:lockhart@cs.dal.ca
push dateSat, 25 Mar 2017 16:44:08 +0000
reviewerspbro
bugs1345119
milestone55.0a1
Bug 1345119 - Part 2: Server side for retrieving offset parent of DOM node. r?pbro MozReview-Commit-ID: I51NHlxv6Mp
devtools/server/actors/inspector.js
devtools/shared/specs/inspector.js
--- a/devtools/server/actors/inspector.js
+++ b/devtools/server/actors/inspector.js
@@ -2642,16 +2642,32 @@ var WalkerActor = protocol.ActorClassWit
    */
   getLayoutInspector: function () {
     if (!this.layoutActor) {
       this.layoutActor = new LayoutActor(this.conn, this.tabActor, this);
     }
 
     return this.layoutActor;
   },
+
+  /**
+   * Get the offset parent of the node
+   * If the offset parent is statically positioned, there is no offset parent
+   * and null is returned.
+   * Returns the DOMNode for the offset parent if it exists
+   */
+  getOffsetParent: function (domnode) {
+    let offsetParent = domnode.rawNode.offsetParent;
+
+    if (!offsetParent || CssLogic.getComputedStyle(offsetParent).position === "static") {
+      return null;
+    }
+
+    return this._ref(offsetParent);
+  },
 });
 
 /**
  * Server side of the inspector actor, which is used to create
  * inspector-related actors, including the walker.
  */
 exports.InspectorActor = protocol.ActorClassWithSpec(inspectorSpec, {
   initialize: function (conn, tabActor) {
--- a/devtools/shared/specs/inspector.js
+++ b/devtools/shared/specs/inspector.js
@@ -369,17 +369,25 @@ const walkerSpec = generateActorSpec({
         node: RetVal("nullable:disconnectedNode")
       }
     },
     getLayoutInspector: {
       request: {},
       response: {
         actor: RetVal("layout")
       }
-    }
+    },
+    getOffsetParent: {
+      request: {
+        node: Arg(0, "domnode")
+      },
+      response: {
+        node: RetVal("nullable:domnode")
+      }
+    },
   }
 });
 
 exports.walkerSpec = walkerSpec;
 
 const inspectorSpec = generateActorSpec({
   typeName: "inspector",