summaryrefslogtreecommitdiff
path: root/devtools/docs/http-inspector.md
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/docs/http-inspector.md')
-rw-r--r--devtools/docs/http-inspector.md167
1 files changed, 167 insertions, 0 deletions
diff --git a/devtools/docs/http-inspector.md b/devtools/docs/http-inspector.md
new file mode 100644
index 0000000000..53908fd763
--- /dev/null
+++ b/devtools/docs/http-inspector.md
@@ -0,0 +1,167 @@
+# HTTP Inspector (aka XHR Spy)
+This document is intended as a description of HTTP Inspector feature allowing
+inline inspection of HTTP logs displayed in the Console panel. The documents
+focuses on internal architecture.
+
+For detailed feature description see the following doc
+(many screenshots included):
+https://docs.google.com/document/d/1zQniwU_dkt-VX1qY1Vp-SWxEVA4uFcDCrtH03tGoHHM/edit#
+
+_HTTP Inspector feature is available in the Console panel (for web developers)
+as well as in the Browser Console (for devtools and extension developers)._
+
+The current implementation is based on React (no XUL) and some of the existing
+components should also be used when porting the Network panel to HTML.
+
+The entire feature lives in `devtools/client/webconsole/net` directory.
+
+## General Description
+The entry point for HTTP log inspection is represented by an expand/toggle
+button displayed in front a log in the Console panel:
+
+[+] GET XHR http://example.com/test-request.php
+
+Clicking on the [+] button expands the log and shows a body with HTTP details
+right underneath. The info body is rendered by:
+`devtools/client/webconsole/net/components/net-info-body` component.
+
+HTTP info is divided into several tabs:
+
+* Headers: send and received HTTP headers
+* Params: URL parameters (query string)
+* Post: HTTP post body
+* Response: HTTP response body
+* Cookies: Sent and received cookies
+
+### Headers Tab
+`devtools/client/webconsole/net/components/headers-tab`
+
+This is the default active tab and it's responsible for rendering
+HTTP headers. There are several header groups displayed:
+
+* Response Headers
+* Requests Headers
+* Cached Headers (not implemented yet)
+
+Individual sections are expandable/collapsible.
+
+Rendering of the groups is done by `NetInfoGroup` and `NetInfoGroupList`
+components.
+
+### Params Tab
+`devtools/client/webconsole/net/components/params-tab`
+
+This tab is responsible for rendering URL parameters (query string)
+and it's available only if the URL has any parameters. Individual
+parameters are parsed and displayed as a list of name/value pairs.
+
+Rendering of the parameter list is done by `NetInfoParams` component.
+
+### Post Tab
+`devtools/client/webconsole/net/components/post-tab`
+
+This tab is responsible for rendering HTTP post body sent to the server.
+
+### Response Tab
+`devtools/client/webconsole/net/components/response-tab`
+
+This tab is responsible for rendering HTTP response body received from
+the server. There might be more than one section displaying the data
+depending on the current response mime-type.
+
+* Raw Data: This section is always displayed. It renders data in a raw
+form just like they are received from the server.
+* JSON: This section is available in case of JSON responses [1].
+It parses the response and displays it as an expandable tree.
+* Image: This section is available in case of image responses [2].
+The response is decoded and displayed as an image.
+* XML: this section is available in case of HTML/XML responses [3]
+The response is parsed using DOM parser and displayed as an XML markup.
+
+[1] List of JSON mime-types: `devtools/client/webconsole/net/utils/json`
+[2] List of Image mime-types: `devtools/client/webconsole/net/utils/json`
+[3] List of XML/HTML mime-types: `devtools/client/webconsole/net/utils/net`
+
+Response data are fetched using `LongStringClient`, so if data are bigger
+than defined limit (see `devtools/server/main.js - LONG_STRING_LENGTH)
+the user needs to manually require the rest (there is a link at the end
+of incomplete response body that allows this).
+
+The raw section is collapsed by default if there is another presentation
+of the data.
+
+### Cookies Tab
+`devtools/client/webconsole/net/components/cookies-tab`
+
+This tab is responsible for displaying HTTP cookies.
+There are two groups:
+
+* Request Cookies
+* Response Cookies
+
+Rendering of the groups is done by `NetInfoGroup` and `NetInfoGroupList`
+components. The tab is not presented if there are no cookies.
+
+## Architecture
+This sections describes internal architecture of HTTPi feature.
+
+### Main
+`devtools/client/webconsole/net/main`
+
+This is the main module of HTTPi. It represents the root module
+of the feature.
+
+The main responsibility of the module is handling network logs forwarded
+from webconsole.js. This modules creates one instance of `NetRequest`
+object for every `NetworkEvent` (one object for every HTTP request).
+
+### NetRequest
+`devtools/client/webconsole/net/net-request`
+
+This module represents `NetRequest` object. It's the internal representation
+of HTTP request and it keeps its state. All HTTP details fetched dynamically
+from the backend are stored in this object.
+
+This object is responsible for:
+* Adding a toggle button in Console UI (displayed in front of HTTP requests)
+* Listening for a click event on the toggle button.
+* Sending messages to web console client object to request HTTP details.
+* Refreshing the UI as HTTP details are coming from the overlay.
+
+Note that `NetRequest` is using a small helper object `DataProvider` for
+requesting HTTP details. `DataProvider` is the connection between `NetRequest`
+and the backend.
+
+### Data Provider
+`devtools/client/webconsole/net/data-provider`
+
+This module is using webconsole client object to get data from the backend.
+
+### Utils
+`devtools/client/webconsole/net/utils`
+
+There are also some utility modules implementing helper functions.
+The important thing is that these modules doesn't require any chrome
+privileges and are ready to run inside content scope.
+
+### Components
+* `NetInfoBody` Renders the entire HTTP details body displayed when the
+ user expands a network log.
+* `NetInfoGroup` Renders a group (a section within tab). For example,
+ Request Headers section in Headers tab corresponds to one group.
+* `NetInfoGroupList` List of groups. There might be more groups of data
+ within one tab. For example, the Headers tab has Requested and Response
+ headers groups.
+* `NetInfoParams` List of name-value pairs. It's used e.g. by the Headers
+ or Params tab.
+* `HeadersTab` Displays HTTP headers.
+* `PostTab` Displays HTTP posted body data.
+* `ParamsTab` Displays URL query string.
+* `ResponseTab` Displays HTTP response body data.
+* `CookiesTab` Displays cookies.
+* `Spinner` Represents a throbber displayed when the UI is waiting for
+ incoming data.
+* `SizeLimit` Represents a link that can be used to fetch the
+ rest of data from the backend (debugger server). Used for HTTP post
+ and response bodies.
+* `XmlView` Renders XML markup.