summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Buckley-Houston <tom@tombh.co.uk>2019-06-19 09:03:20 +0300
committerThomas Buckley-Houston <tom@tombh.co.uk>2019-06-19 09:03:20 +0300
commitd6b5951059c886a1e3d3f276faa48d8a97a77ab7 (patch)
tree4e1f35741280856728a57372d19adba200c5f278
parent81f41b7b4ce4587f0e2a65df424e612063dca17e (diff)
HTTP server: add experimental DOM-dump mode
Simply dumps the contents of the DOM
-rw-r--r--interfacer/src/browsh/raw_text_server.go4
-rw-r--r--interfacer/src/browsh/version.go2
-rw-r--r--interfacer/test/http-server/server_test.go6
-rw-r--r--interfacer/test/http-server/setup.go3
-rw-r--r--webext/src/dom/commands_mixin.js2
-rw-r--r--webext/src/dom/serialise_mixin.js8
-rw-r--r--webext/src/dom/text_builder.js8
7 files changed, 29 insertions, 4 deletions
diff --git a/interfacer/src/browsh/raw_text_server.go b/interfacer/src/browsh/raw_text_server.go
index b878e79..230b5ee 100644
--- a/interfacer/src/browsh/raw_text_server.go
+++ b/interfacer/src/browsh/raw_text_server.go
@@ -225,6 +225,7 @@ func isProductionHTTP(r *http.Request) bool {
// 'PLAIN' mode returns raw text without any HTML whatsoever.
// 'HTML' mode returns some basic HTML tags for things like anchor links.
+// 'DOM' mode returns a simple dump of the DOM.
func getRawTextMode(r *http.Request) string {
var mode = "HTML"
if strings.Contains(r.Host, "text.") {
@@ -233,6 +234,9 @@ func getRawTextMode(r *http.Request) string {
if r.Header.Get("X-Browsh-Raw-Mode") == "PLAIN" {
mode = "PLAIN"
}
+ if r.Header.Get("X-Browsh-Raw-Mode") == "DOM" {
+ mode = "DOM"
+ }
return mode
}
diff --git a/interfacer/src/browsh/version.go b/interfacer/src/browsh/version.go
index 341f6a1..0d87838 100644
--- a/interfacer/src/browsh/version.go
+++ b/interfacer/src/browsh/version.go
@@ -1,3 +1,3 @@
package browsh
-var browshVersion = "1.6.1"
+var browshVersion = "1.6.2"
diff --git a/interfacer/test/http-server/server_test.go b/interfacer/test/http-server/server_test.go
index 4a511d4..29cf662 100644
--- a/interfacer/test/http-server/server_test.go
+++ b/interfacer/test/http-server/server_test.go
@@ -29,6 +29,12 @@ var _ = Describe("HTTP Server", func() {
"<a href=\"/http://localhost:4444/smorgasbord/another.html\">Another page</a>"))
})
+ It("should return the DOM", func() {
+ response := getPath("/smorgasbord", "dom")
+ Expect(response).To(ContainSubstring(
+ "<div class=\"big_middle\">"))
+ })
+
It("should return a background image", func() {
response := getPath("/smorgasbord", "html")
Expect(response).To(ContainSubstring("background-image: url(data:image/jpeg"))
diff --git a/interfacer/test/http-server/setup.go b/interfacer/test/http-server/setup.go
index e50796c..c3eb471 100644
--- a/interfacer/test/http-server/setup.go
+++ b/interfacer/test/http-server/setup.go
@@ -51,6 +51,9 @@ func getPath(path string, mode string) string {
if mode == "plain" {
request.Header.Add("X-Browsh-Raw-Mode", "PLAIN")
}
+ if mode == "dom" {
+ request.Header.Add("X-Browsh-Raw-Mode", "DOM")
+ }
response, err := client.Do(request)
if err != nil {
panic(fmt.Sprintf("%s", err))
diff --git a/webext/src/dom/commands_mixin.js b/webext/src/dom/commands_mixin.js
index d3618e4..10b357d 100644
--- a/webext/src/dom/commands_mixin.js
+++ b/webext/src/dom/commands_mixin.js
@@ -50,7 +50,7 @@ export default MixinBase =>
_launch() {
const mode = this.config.http_server_mode_type;
- if (mode === "raw_text_plain" || mode === "raw_text_html") {
+ if (mode.includes("raw_text_")) {
this._is_raw_text_mode = true;
this._is_interactive_mode = false;
this._raw_mode_type = mode;
diff --git a/webext/src/dom/serialise_mixin.js b/webext/src/dom/serialise_mixin.js
index 7c874a4..dede614 100644
--- a/webext/src/dom/serialise_mixin.js
+++ b/webext/src/dom/serialise_mixin.js
@@ -289,8 +289,14 @@ export default MixinBase =>
}
_sendRawText() {
+ let body;
+ if (this._raw_mode_type == "raw_text_dom") {
+ body = document.getElementsByTagName("body")[0].innerHTML;
+ } else {
+ body = this._serialiseRawText();
+ }
let payload = {
- body: this._serialiseRawText(),
+ body: body,
page_load_duration: this.config.page_load_duration,
parsing_duration: this._parsing_duration
};
diff --git a/webext/src/dom/text_builder.js b/webext/src/dom/text_builder.js
index bbdab83..7338742 100644
--- a/webext/src/dom/text_builder.js
+++ b/webext/src/dom/text_builder.js
@@ -30,7 +30,13 @@ export default class extends utils.mixins(CommonMixin, SerialiseMixin) {
sendRawText(type) {
this._raw_mode_type = type;
this._parse_start_time = performance.now();
- this.buildFormattedText(this._sendRawText.bind(this));
+ if (type == "raw_text_dom") {
+ setTimeout(() => {
+ this._sendRawText();
+ }, this.config["http-server"].render_delay);
+ } else {
+ this.buildFormattedText(this._sendRawText.bind(this));
+ }
}
buildFormattedText(callback) {