hterm: Implement bracketed paste mode.

* DECSET/DECRST mode 2004 toggles bracketed paste mode.  When
  enabled, pastes are sent as
  "ESC [ 2 0 0 ~ <paste-data> ESC [ 2 0 1 ~".
* Add test.

Change-Id: Ibacf433c4bc3fe71566b78f26b374224d6704c32
Reviewed-on: https://chromium-review.googlesource.com/209156
Reviewed-by: Marvelous Marius <mschilder@chromium.org>
Reviewed-by: Robert Ginda <rginda@chromium.org>
Tested-by: Robert Ginda <rginda@chromium.org>
diff --git a/hterm/js/hterm_terminal.js b/hterm/js/hterm_terminal.js
index 02d92e5..fe53b81 100644
--- a/hterm/js/hterm_terminal.js
+++ b/hterm/js/hterm_terminal.js
@@ -493,6 +493,12 @@
   return this.prefs_;
 };
 
+/**
+ * Enable or disable bracketed paste mode.
+ */
+hterm.Terminal.prototype.setBracketedPaste = function(state) {
+  this.options_.bracketedPaste = state;
+};
 
 /**
  * Set the color for the cursor.
@@ -2809,7 +2815,11 @@
  * React when text is pasted into the scrollPort.
  */
 hterm.Terminal.prototype.onPaste_ = function(e) {
-  this.onVTKeystroke(e.text.replace(/\n/mg, '\r'));
+  var data = e.text.replace(/\n/mg, '\r');
+  if (this.options_.bracketedPaste)
+    data = '\x1b[200~' + data + '\x1b[201~';
+
+  this.io.sendString(data);
 };
 
 /**