{"action":"created","comment":{"url":"https://api.github.com/repos/w3c/webdriver/pulls/comments/32508657","id":32508657,"diff_hunk":"@@ -3237,183 +3237,428 @@ <h2 id=element-displayedness>Element Displayedness</h2>\n       What happens to unhandled JS errors? Caused by a user's JS? Caused by JS\n       on a page? How does a user of the API obtain the list of errors? Is that\n       list cleared upon read?\n-    </div>\n-    <p class=\"note\">Conformance tests for this section can be found in the <a href=\"https://github.com/w3c/web-platform-tests/tree/master/webdriver/\">webdriver module</a> under the \"ecmascript\" folder.</p>\n+  </div>\n \n-    <section>\n-      <h2>Javascript Command Parameters</h2>\n+  <p>When required to <dfn>JSON deserialize</dfn> with\n+  argument <var>value</var>, and optional argument <var>seen</var>, a\n+  remote end must run the following steps:</p>\n+  <ol>\n+    <li><p>If <var>seen<var> was not provided, let <var>seen</var> be\n+    an empty set.</p></li>\n+    <li><p>Jump to the first appropriate step below:\n+      <dl>\n+        <dt>If <var>value</var> is <code>null</code>, or has\n+        type <code>Boolean</code>, <code>Number</code>\n+        or <code>String</code>:</dt>\n+        <dd><p>Return <a>success</a> with data <var>value</var></p></dd>\n+\n+        <dt>If <var>value</var> is an <code>Object</code>\n+        that <a>represents a web element</a>:</dt>\n+        <dd><p>Return the result of running the <a>deserialize a web\n+        element</a> algorithm with object <var>value</var>.</p></dd>\n+\n+        <dt>If <var>value</var> if <var>value</var> is\n+        an <code>Array</code> object or an <code>Object</code> object:\n+        </dt>\n+        <dd><p>Return the result of running the <a>clone an object</a>\n+              algorithm with arguments <var>value</var>\n+              and <var>seen</var>, and the <a>JSON deserialize</a>\n+              algorithm as the clone algorithm.\n+        </dd>\n+        <dt>Anything else:</dt>\n+        <dd><p>Return <a>error</a> with code <a>javascript error</a>.</dd>\n+      </dl>\n+      </p>\n+    </li>\n+  </ol>\n \n-      <p>When calling <a href=\"#sync-js-execution\">Synchronous JavaScript Execution</a> or calling <a href=\"async-js-execution\">Asynchronous JavaScript Execution</a> we need to extract\n-        the following from <var><a href=\"#post-payload\">payload body</a></var> into <dfn>JavaScript Command Parameters</dfn>:</p>\n+  <p>When required to make a <dfn>JSON clone</dfn> with\n+  argument <var>value</var>, a <a>remote\n+  end</a> must run the following steps:</p>\n+  <ol>\n+    <li>Let <var>seen</var> be an empty set</li>\n+    <li>Return the result of calling the <a>internal JSON clone\n+  algorithm</a> with arguments <var>value</var> and <var>seen</var>\n+  </ol>\n \n-        <ul>\n-          <li>let <var>script</var> be the JavaScript to execute, in the form of a Function body.</li>\n-          <li>let <var>args</var> be an array that are used as the parameters to the function defined by <var>script</var>.\n-            The <var>args</var> can contain the numbers, booleans, a WebElement, objects or arrays</li>\n-        </ul>\n-    </section>\n+  <p>When required to run the <dfn>internal JSON clone algorithm</dfn>\n+  with arguments <var>value</var> and <var>seen</var>,\n+  a <a>remote end</a> must run the following algorithm:</p>\n+  <ol>\n+    <li><p>Jump to the appropriate step below:</p>\n+      <dl>\n+        <dt>If <var>value</var> is <code>undefined</code>\n+        or <code>null</code>:</dt>\n+        <dd><p>Return <a>success</a> with data <code>null</code></p></dd>\n \n-    <p>When executing Javascript, it MUST be possible to reference the <code>args</code> parameter using the function's <code>arguments</code> object. The arguments MUST be in the same order as defined in <code>args</code>. Each WebDriver implementation MUST preprocess the values in <code>args</code> using the following algorithm:\n+        <dt>If <var>value</var> has\n+        type <code>Boolean</code>, <code>Number</code>\n+        or <code>String</code>:</dt>\n+        <dd><p>Return <a>success</a> with data <var>value</var></dd>\n+\n+        <dt>If <var>value</var> is an <code>Element</code> Node:</dt>\n+        <dd><p>Return the result of <a title=\"create a web element\n+        reference\">creating a web element</a> with\n+        argument <var>value</var></dd>\n+\n+\n+        <dd>\n+          <ol>\n+            <li><p>If <var>value</var> is in <var>seen</var>,\n+                return <a>error</a> with code <a>javascript error</code>.</li>\n+\n+            <li><p>Add <var>value</var> to <var>seen</var></li>\n+\n+          </ol>\n+        </dd>\n+\n+        <dt>If <var>value</var> is\n+        a <code>NodeList</code>, <code>HTMLCollection</code>,\n+        an <code>Array</code> object, or an <code>Object</code>\n+        object:\n+        </dt>\n+        <dd>\n+          <ol>\n+            <li><p>If <var>value</var> is in <var>seen</var>,\n+                return <a>error</a> with code <a>javascript error</code>.</li>\n+\n+            <li><p>Add <var>value</var> to <var>seen</var></li>\n+\n+            <li><p>Return the result of running the <a>clone an\n+                  object</a> algorithm with arguments <var>value</var>\n+                  and <var>seen</var>, and the <a>internal JSON clone\n+                  algorithm</a> as the clone algorithm.</li>\n+            <!-- TODO: Map and Set objects? -->\n+          </ol>\n+        </dd>\n+        <dt>Anything else:</dt>\n+        <dd><p>Return <a>error</a> with code <a>javascript error</a>.</dd>\n+      </dl>\n+  </ol>\n+  <p>When required to <dfn>clone an object</dfn> with\n+    arguments <var>value</var> and <var>seen</var> and a value\n+    clone algorithm <var>clone algorithm</var>, run the\n+    following steps:</p>\n+\n+  <ol>\n+        <li>\n+          <dl>\n+            <dt>If <var>value</var> is\n+              a <code>NodeList</code>, <code>HTMLCollection</code> or\n+              ECMAScript <code>Array</code> object:</dt>\n \n-      <p id=\"JS-args-preprocess\">For each index, <code>index</code> in <code>args</code>, if <code>args[index]</code> is...\n-        <ol>\n-          <li>a long, boolean, DOMString, or <code>null</code>, then let <code>args[index] = args[index]</code>.</li>\n-          <li>a sequence, then recursively apply this algorithm to <code>args[index]</code> and assign the result to <code>args[index]</code>.</li>\n-          <li>an object, then recursively apply this algorithm to each value in <code>args[index]</code> and assign the result to <code>args[index]</code>.</li>\n-          <li>a <a href=\"#elements\">WebElement</a>, then:\n-            <ol>\n-              <li>If <code><a href='widl-WebElement-ELEMENT'>ELEMENT</a></code> does not represent a <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>, or it represents a <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a> that is no longer attached to the document's tree, then the WebDriver implementation MUST immediately abort the command and return a <code title=\"stale-element-reference\"><a href=\"#status-stale-element-reference\">stale element reference</a></code> error.</li>\n-              <li>Otherwise, let <code>args[index]</code> be the underlying <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>.</li>\n-            </ol>\n-          </li>\n-          <li>Otherwise WebDriver implementations MAY throw an <code><a href=\"#status-unknown-error\">unknown error</a></code> indicating the index of the unhandled parameter but SHOULD attempt to convert the value into a <code>object</code>.</li>\n-        </ol>\n-        <section>\n-          <h2 id=\"sync-js-execution\">Synchronous Javascript Execution</h2>\n-          <section>\n-            <!-- executeScript() -->\n-            <h3>executeScript()</h3>\n             <dd>\n-              <dl class='parameters'>\n-                <dt> DOMString script</dt>\n-                <dd>The script to execute.</dd>\n-                <dt>sequence&lt;Argument>? args</dt>\n-                <dd>The script arguments.</dd>\n-              </dl>\n-              <p>\n-                <table class=\"simple jsoncommand\">\n-                  <tr>\n-                    <th>HTTP Method</th>\n-                    <th>Path Template</th>\n-                    <th>Notes</th>\n-                  </tr>\n-                  <tr>\n-                    <td>POST</td>\n-                    <td id='post-execute_script'>/session/{sessionId}/execute</td>\n-                    <td></td>\n-                  </tr>\n-                </table>\n-                <p>\n-              <p>When executing JavaScript, the WebDriver implementations MUST use the following algorithm:\n-                <ol>\n-                  <li>Let <code>window</code> be the <a href=\"http://www.w3.org/TR/Window/\">Window</a> object for WebDriver's current <a href=\"#where-commands-are-handled\">command context</a>.\n-                  <li>Let <code>script</code> be the DOMString from the command's <code>script</code> parameter.\n-                  <li>Let <code>fn</code> be the Function object created by executing <code>new Function(script);</code>\n-                  <li>Let <code>args</code> be the sequence created by the pre-processing algorithm defined <a href=\"#JS-args-preprocess\">above</a>.\n-                  <li>Invoke <code>fn.apply(window, args);</code>\n-                  <li>If the previous step errors then:\n-                  <ol>\n-                    <li>Let <code>error</code> be the thrown value.\n-                    <li>Set the response <a href=\"href=#response-status\">status</a> to <code><a href=\"#status-javascript-error\">javascript error</a></code>.\n-                    <li>Set the response <a href=\"#response-value\">value</a> to a <code>object</code>, <code>dict</code>.\n-                    <li>If <code>error</code> is an Error, then set a \"message\" entry in <code>dict</code> whose value is the DOMString defined by <code>error.message</code>.\n-                    <li>Otherwise, set a \"message\" entry in <code>dict</code> whose value is the DOMString representation of <code>error</code>.\n-                  </ol>\n-                  <li>Otherwise:\n-                  <ol>\n-                    <li>Let <code>result</code> be the value returned by the function in step #5.\n-                    <li>Set the command's response <a href='#response-status'>status</a> to <code><a href=\"#status-success\">success</a></code>.\n-                    <li>Let <code>value</code> be the result of the following algorithm:\n-                  <ol>\n-                    <li>If <code>result</code> is:\n-                    <ol>\n-                      <li><code>undefined</code> or <code>null</code>, return <code> null</code>.\n-                      <li>a long, boolean, or DOMString, return <code>result</code>.\n-                      <li>a <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>, then return the corresponding WebElement for that <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>.\n-                      <!-- Should there be a recursion limit? -->\n-                      <li>a <code>Sequence &lt;Node&gt; nodes</code>, then return the result of recursively applying this algorithm to <code>result</code>.\n-                      <!-- Should there be a limit? -->\n-                      <li>an object, then return the <code>object</code> created by recursively applying this algorithm to each property in <code>result</code>.\n-                    </ol>\n-                  </ol>\n-                  <li>Set the response <a href=\"#response-value\">value</a> to <code>value</code>.</li>\n-                </ol>\n-                <li>Return the response.</li>\n+              <ol>\n+                <li><p>Let <var>result</var> be a new <code>Array</code> object</p></li>\n+\n+                <li><p>Let <var>length</var> be the result of <a>getting a\n+                      property</a> named <code>length</code>\n+                    from <var>value</var>.</p></li>\n+\n+                <li><p><a>Set a property</a> on <var>result</var> named <code>length</code>\n+                    with value <var>length</var></p></li>\n               </ol>\n-            </section>\n-        </section>\n-        <section>\n-          <h2>Asynchronous Javascript Execution</h2>\n-          <section>\n-            <h3 id=\"async-js-execution\">executeAsyncScript()</h3>\n-\n-              <dl class='parameters'>\n-                <dt> DOMString script</dt>\n-                <dd>The script to execute.</dd>\n-                <dt>sequence&lt;Argument>? args</dt>\n-                <dd>The script arguments.</dd>\n-              </dl>\n-              <p>\n-                <table class=\"simple jsoncommand\">\n-                  <tr>\n-                    <th>HTTP Method</th>\n-                    <th>Path Template</th>\n-                    <th>Notes</th>\n-                  </tr>\n-                  <tr>\n-                    <td>POST</td>\n-                    <td id='post-execute_async'>/session/{sessionId}/execute_async</td>\n-                    <td></td>\n-                  </tr>\n-                </table>\n-                <p>\n-              <p>When executing asynchronous JavaScript, the WebDriver implementation MUST use the following algorithm:\n-                <ol>\n-                  <li>Let <code>timeout</code> be the value of the last \"script\" <a href=\"#timeouts\">timeout command</a>, or 0 if no such commands have been received.</li>\n-                  <li>Let <code>window</code> be the <a href=\"http://www.w3.org/TR/Window/\">Window</a> object for WebDriver's current <a href=\"#where-commands-are-handled\">command context</a>.</li>\n-                  <li>Let <code>script</code> be the DOMString from the command's <code>script</code> parameter.</li>\n-                  <li>Let <code>fn</code> be the Function object created by executing <code>new Function(script);</code></li>\n-                  <li>Let <code>args</code> be the sequence created by the pre-processing algorithm defined <a href=\"#JS-args-preprocess\">above</a>.</li>\n-                  <li>Let <code>callback</code> be a Function object pushed to the end of <code>args</code>.</li>\n-                  <li>Register a one-shot timer on <code>window</code> set to fire <code>timeout</code> milliseconds in the future.</li>\n-                  <li>Invoke <code>fn.apply(window, args);</code></li>\n-                  <li>If the previous step errors then:\n-                    <ol>\n-                      <li>Let <code>error</code> be the thrown value.</li>\n-                      <li>Set the response <a href='#response-status'>status</a> to <code><a href=\"#status-javascript-error\">javascript error</a></code>.</li>\n-                      <li>Set the response <a href=\"#response-value\">value</a> to a <code>object</code>, <code>dict</code>.</li>\n-                      <li>If <code>error</code> is an Error, then set a \"message\" entry in <code>dict</code> whose value is the DOMString defined by <code>error.message</code>.</li>\n-                      <li>Otherwise, set a \"message\" entry in <code>dict</code> whose value is the DOMString representation of <code>error</code>.</li>\n-                    </ol>\n-                  </li>\n-                  <li>Otherwise, the WebDriver implementation MUST wait for one of the following to occur:\n-                    <ol>\n-                      <li>if the one-shot timer that was set on the <code>window</code> fires\n-                        , the WebDriver implementation MUST immediately set the response <a href='#response-status'>status</a>\n-                        to <code><a href='#status-timeout'>timeout</a></code> and return.</li>\n-                        <li>if the <code>window</code> fires an <code>unload</code> event, the WebDriver implementation MUST immediately set the response <a href='#response-status'>status</a> to JavascriptError and return with the error message set to \"Javascript execution context no longer exists.\".</li>\n-                        <li>if the <code>callback</code> function is invoked, then:\n-                          <ol>\n-                            <li>Let <code>result</code> be the first argument passed to <code>callback</code>.</li>\n-                            <li>Set the command's response <a href='#response-status'>status</a> to Success.</li>\n-                            <li>Let <code>value</code> be the result of the following algorithm:\n-                              <ol>\n-                                <li>If <code>result</code> is:\n-                                  <ol>\n-                                    <li><code>undefined</code> or <code>null</code>, return <code> null</code>.</li>\n-                                    <li>a long, boolean, or DOMString, return <code>result</code>.</li>\n-                                    <li>a <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>, then return the corresponding WebElement for that <a href='http://w3c.github.io/dom/#element'>Document <code>element</code></a>.</li>\n-                                    <!-- Should there be a recursion limit? -->\n-                                    <li>a <code>Sequence &lt;Node> Nodes</code>, then return the result by recursively applying this algorithm to <code>result</code>. WebDriver implementations SHOULD limit the recursion depth.</li>\n-                                    <!-- Should there be a limit? -->\n-                                    <li>an object, then return the <code>object</code> created by recursively applying this algorithm to each property in <code>result</code>.</li>\n-                                  </ol>\n-                                </li>\n-                              </ol>\n-                            </li>\n-                            <li>Set the command's response <a href=\"#response-value\">value</a> to <code>value</code>.</li>\n-                          </ol>\n-                        </li>\n-                        <li>Return the response.</li>\n-                      </ol>\n-                    </li>\n-                  </ol>\n-                </section>\n-        </section>\n-        <section>\n-          <h2>Reporting Errors</h2>\n-          <p></p>\n-        </section>\n+            </dd>\n+\n+            <dt>Otherwise:</dt>\n+            <dd>\n+              <ol>\n+                <li><p>Let <var>result</var> be a\n+                    new <code>Object</code> object.</p></li>\n+                </ol>\n+            </dd>\n+          </dl>\n+        </li>\n+\n+        <li><p>For each enumerable own property in <var>value</var>,","path":"webdriver-spec.html","position":316,"original_position":316,"commit_id":"d67801e564ff361eefc5cb74034ea4ce2caa4155","original_commit_id":"d67801e564ff361eefc5cb74034ea4ce2caa4155","user":{"login":"andreastt","id":399120,"avatar_url":"https://avatars.githubusercontent.com/u/399120?v=3","gravatar_id":"","url":"https://api.github.com/users/andreastt","html_url":"https://github.com/andreastt","followers_url":"https://api.github.com/users/andreastt/followers","following_url":"https://api.github.com/users/andreastt/following{/other_user}","gists_url":"https://api.github.com/users/andreastt/gists{/gist_id}","starred_url":"https://api.github.com/users/andreastt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/andreastt/subscriptions","organizations_url":"https://api.github.com/users/andreastt/orgs","repos_url":"https://api.github.com/users/andreastt/repos","events_url":"https://api.github.com/users/andreastt/events{/privacy}","received_events_url":"https://api.github.com/users/andreastt/received_events","type":"User","site_admin":false},"body":"Link to [own property][http://www.ecma-international.org/ecma-262/5.1/#sec-4.3.30)","created_at":"2015-06-16T10:31:56Z","updated_at":"2015-06-16T10:31:56Z","html_url":"https://github.com/w3c/webdriver/pull/97#discussion_r32508657","pull_request_url":"https://api.github.com/repos/w3c/webdriver/pulls/97","_links":{"self":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/comments/32508657"},"html":{"href":"https://github.com/w3c/webdriver/pull/97#discussion_r32508657"},"pull_request":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/97"}}},"pull_request":{"url":"https://api.github.com/repos/w3c/webdriver/pulls/97","id":37311279,"html_url":"https://github.com/w3c/webdriver/pull/97","diff_url":"https://github.com/w3c/webdriver/pull/97.diff","patch_url":"https://github.com/w3c/webdriver/pull/97.patch","issue_url":"https://api.github.com/repos/w3c/webdriver/issues/97","number":97,"state":"open","locked":false,"title":"First cut at updating the execute script algorithm.","user":{"login":"jgraham","id":294864,"avatar_url":"https://avatars.githubusercontent.com/u/294864?v=3","gravatar_id":"","url":"https://api.github.com/users/jgraham","html_url":"https://github.com/jgraham","followers_url":"https://api.github.com/users/jgraham/followers","following_url":"https://api.github.com/users/jgraham/following{/other_user}","gists_url":"https://api.github.com/users/jgraham/gists{/gist_id}","starred_url":"https://api.github.com/users/jgraham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgraham/subscriptions","organizations_url":"https://api.github.com/users/jgraham/orgs","repos_url":"https://api.github.com/users/jgraham/repos","events_url":"https://api.github.com/users/jgraham/events{/privacy}","received_events_url":"https://api.github.com/users/jgraham/received_events","type":"User","site_admin":false},"body":"This more precisely defines the behaviour for converting values\r\non entry and exit, and tries to more precisely define the context\r\nin which the script is executed. However it is probably wrong and\r\nwill need more revision","created_at":"2015-06-09T23:29:01Z","updated_at":"2015-06-16T10:31:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3af6250aaeb551d438e365b2a2e44166764a51e4","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/w3c/webdriver/pulls/97/commits","review_comments_url":"https://api.github.com/repos/w3c/webdriver/pulls/97/comments","review_comment_url":"https://api.github.com/repos/w3c/webdriver/pulls/comments{/number}","comments_url":"https://api.github.com/repos/w3c/webdriver/issues/97/comments","statuses_url":"https://api.github.com/repos/w3c/webdriver/statuses/d67801e564ff361eefc5cb74034ea4ce2caa4155","head":{"label":"jgraham:execute_script_first_draft","ref":"execute_script_first_draft","sha":"d67801e564ff361eefc5cb74034ea4ce2caa4155","user":{"login":"jgraham","id":294864,"avatar_url":"https://avatars.githubusercontent.com/u/294864?v=3","gravatar_id":"","url":"https://api.github.com/users/jgraham","html_url":"https://github.com/jgraham","followers_url":"https://api.github.com/users/jgraham/followers","following_url":"https://api.github.com/users/jgraham/following{/other_user}","gists_url":"https://api.github.com/users/jgraham/gists{/gist_id}","starred_url":"https://api.github.com/users/jgraham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgraham/subscriptions","organizations_url":"https://api.github.com/users/jgraham/orgs","repos_url":"https://api.github.com/users/jgraham/repos","events_url":"https://api.github.com/users/jgraham/events{/privacy}","received_events_url":"https://api.github.com/users/jgraham/received_events","type":"User","site_admin":false},"repo":{"id":30731594,"name":"webdriver","full_name":"jgraham/webdriver","owner":{"login":"jgraham","id":294864,"avatar_url":"https://avatars.githubusercontent.com/u/294864?v=3","gravatar_id":"","url":"https://api.github.com/users/jgraham","html_url":"https://github.com/jgraham","followers_url":"https://api.github.com/users/jgraham/followers","following_url":"https://api.github.com/users/jgraham/following{/other_user}","gists_url":"https://api.github.com/users/jgraham/gists{/gist_id}","starred_url":"https://api.github.com/users/jgraham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jgraham/subscriptions","organizations_url":"https://api.github.com/users/jgraham/orgs","repos_url":"https://api.github.com/users/jgraham/repos","events_url":"https://api.github.com/users/jgraham/events{/privacy}","received_events_url":"https://api.github.com/users/jgraham/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jgraham/webdriver","description":"The WebDriver API and wire protocol","fork":true,"url":"https://api.github.com/repos/jgraham/webdriver","forks_url":"https://api.github.com/repos/jgraham/webdriver/forks","keys_url":"https://api.github.com/repos/jgraham/webdriver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jgraham/webdriver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jgraham/webdriver/teams","hooks_url":"https://api.github.com/repos/jgraham/webdriver/hooks","issue_events_url":"https://api.github.com/repos/jgraham/webdriver/issues/events{/number}","events_url":"https://api.github.com/repos/jgraham/webdriver/events","assignees_url":"https://api.github.com/repos/jgraham/webdriver/assignees{/user}","branches_url":"https://api.github.com/repos/jgraham/webdriver/branches{/branch}","tags_url":"https://api.github.com/repos/jgraham/webdriver/tags","blobs_url":"https://api.github.com/repos/jgraham/webdriver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jgraham/webdriver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jgraham/webdriver/git/refs{/sha}","trees_url":"https://api.github.com/repos/jgraham/webdriver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jgraham/webdriver/statuses/{sha}","languages_url":"https://api.github.com/repos/jgraham/webdriver/languages","stargazers_url":"https://api.github.com/repos/jgraham/webdriver/stargazers","contributors_url":"https://api.github.com/repos/jgraham/webdriver/contributors","subscribers_url":"https://api.github.com/repos/jgraham/webdriver/subscribers","subscription_url":"https://api.github.com/repos/jgraham/webdriver/subscription","commits_url":"https://api.github.com/repos/jgraham/webdriver/commits{/sha}","git_commits_url":"https://api.github.com/repos/jgraham/webdriver/git/commits{/sha}","comments_url":"https://api.github.com/repos/jgraham/webdriver/comments{/number}","issue_comment_url":"https://api.github.com/repos/jgraham/webdriver/issues/comments{/number}","contents_url":"https://api.github.com/repos/jgraham/webdriver/contents/{+path}","compare_url":"https://api.github.com/repos/jgraham/webdriver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jgraham/webdriver/merges","archive_url":"https://api.github.com/repos/jgraham/webdriver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jgraham/webdriver/downloads","issues_url":"https://api.github.com/repos/jgraham/webdriver/issues{/number}","pulls_url":"https://api.github.com/repos/jgraham/webdriver/pulls{/number}","milestones_url":"https://api.github.com/repos/jgraham/webdriver/milestones{/number}","notifications_url":"https://api.github.com/repos/jgraham/webdriver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jgraham/webdriver/labels{/name}","releases_url":"https://api.github.com/repos/jgraham/webdriver/releases{/id}","created_at":"2015-02-12T23:51:11Z","updated_at":"2015-05-20T16:05:27Z","pushed_at":"2015-06-12T19:28:26Z","git_url":"git://github.com/jgraham/webdriver.git","ssh_url":"git@github.com:jgraham/webdriver.git","clone_url":"https://github.com/jgraham/webdriver.git","svn_url":"https://github.com/jgraham/webdriver","homepage":null,"size":2240,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"w3c:master","ref":"master","sha":"6124009e5ae13af285fcc246a7bbc13123a72445","user":{"login":"w3c","id":379216,"avatar_url":"https://avatars.githubusercontent.com/u/379216?v=3","gravatar_id":"","url":"https://api.github.com/users/w3c","html_url":"https://github.com/w3c","followers_url":"https://api.github.com/users/w3c/followers","following_url":"https://api.github.com/users/w3c/following{/other_user}","gists_url":"https://api.github.com/users/w3c/gists{/gist_id}","starred_url":"https://api.github.com/users/w3c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/w3c/subscriptions","organizations_url":"https://api.github.com/users/w3c/orgs","repos_url":"https://api.github.com/users/w3c/repos","events_url":"https://api.github.com/users/w3c/events{/privacy}","received_events_url":"https://api.github.com/users/w3c/received_events","type":"Organization","site_admin":false},"repo":{"id":25993378,"name":"webdriver","full_name":"w3c/webdriver","owner":{"login":"w3c","id":379216,"avatar_url":"https://avatars.githubusercontent.com/u/379216?v=3","gravatar_id":"","url":"https://api.github.com/users/w3c","html_url":"https://github.com/w3c","followers_url":"https://api.github.com/users/w3c/followers","following_url":"https://api.github.com/users/w3c/following{/other_user}","gists_url":"https://api.github.com/users/w3c/gists{/gist_id}","starred_url":"https://api.github.com/users/w3c/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/w3c/subscriptions","organizations_url":"https://api.github.com/users/w3c/orgs","repos_url":"https://api.github.com/users/w3c/repos","events_url":"https://api.github.com/users/w3c/events{/privacy}","received_events_url":"https://api.github.com/users/w3c/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/w3c/webdriver","description":"The WebDriver API and wire protocol","fork":false,"url":"https://api.github.com/repos/w3c/webdriver","forks_url":"https://api.github.com/repos/w3c/webdriver/forks","keys_url":"https://api.github.com/repos/w3c/webdriver/keys{/key_id}","collaborators_url":"https://api.github.com/repos/w3c/webdriver/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/w3c/webdriver/teams","hooks_url":"https://api.github.com/repos/w3c/webdriver/hooks","issue_events_url":"https://api.github.com/repos/w3c/webdriver/issues/events{/number}","events_url":"https://api.github.com/repos/w3c/webdriver/events","assignees_url":"https://api.github.com/repos/w3c/webdriver/assignees{/user}","branches_url":"https://api.github.com/repos/w3c/webdriver/branches{/branch}","tags_url":"https://api.github.com/repos/w3c/webdriver/tags","blobs_url":"https://api.github.com/repos/w3c/webdriver/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/w3c/webdriver/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/w3c/webdriver/git/refs{/sha}","trees_url":"https://api.github.com/repos/w3c/webdriver/git/trees{/sha}","statuses_url":"https://api.github.com/repos/w3c/webdriver/statuses/{sha}","languages_url":"https://api.github.com/repos/w3c/webdriver/languages","stargazers_url":"https://api.github.com/repos/w3c/webdriver/stargazers","contributors_url":"https://api.github.com/repos/w3c/webdriver/contributors","subscribers_url":"https://api.github.com/repos/w3c/webdriver/subscribers","subscription_url":"https://api.github.com/repos/w3c/webdriver/subscription","commits_url":"https://api.github.com/repos/w3c/webdriver/commits{/sha}","git_commits_url":"https://api.github.com/repos/w3c/webdriver/git/commits{/sha}","comments_url":"https://api.github.com/repos/w3c/webdriver/comments{/number}","issue_comment_url":"https://api.github.com/repos/w3c/webdriver/issues/comments{/number}","contents_url":"https://api.github.com/repos/w3c/webdriver/contents/{+path}","compare_url":"https://api.github.com/repos/w3c/webdriver/compare/{base}...{head}","merges_url":"https://api.github.com/repos/w3c/webdriver/merges","archive_url":"https://api.github.com/repos/w3c/webdriver/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/w3c/webdriver/downloads","issues_url":"https://api.github.com/repos/w3c/webdriver/issues{/number}","pulls_url":"https://api.github.com/repos/w3c/webdriver/pulls{/number}","milestones_url":"https://api.github.com/repos/w3c/webdriver/milestones{/number}","notifications_url":"https://api.github.com/repos/w3c/webdriver/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/w3c/webdriver/labels{/name}","releases_url":"https://api.github.com/repos/w3c/webdriver/releases{/id}","created_at":"2014-10-30T23:05:22Z","updated_at":"2015-06-10T19:14:03Z","pushed_at":"2015-06-15T20:07:15Z","git_url":"git://github.com/w3c/webdriver.git","ssh_url":"git@github.com:w3c/webdriver.git","clone_url":"https://github.com/w3c/webdriver.git","svn_url":"https://github.com/w3c/webdriver","homepage":null,"size":4509,"stargazers_count":52,"watchers_count":52,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":12,"mirror_url":null,"open_issues_count":11,"forks":12,"open_issues":11,"watchers":52,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/97"},"html":{"href":"https://github.com/w3c/webdriver/pull/97"},"issue":{"href":"https://api.github.com/repos/w3c/webdriver/issues/97"},"comments":{"href":"https://api.github.com/repos/w3c/webdriver/issues/97/comments"},"review_comments":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/97/comments"},"review_comment":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/w3c/webdriver/pulls/97/commits"},"statuses":{"href":"https://api.github.com/repos/w3c/webdriver/statuses/d67801e564ff361eefc5cb74034ea4ce2caa4155"}}}}