| Index: Source/devtools/front_end/CodeMirrorTextEditor.js
 | 
| diff --git a/Source/devtools/front_end/CodeMirrorTextEditor.js b/Source/devtools/front_end/CodeMirrorTextEditor.js
 | 
| index 22c8930cf1397c11218b818d831fbdff5945f51a..bc605e43d06623045e073838963ac1cd26c9a784 100644
 | 
| --- a/Source/devtools/front_end/CodeMirrorTextEditor.js
 | 
| +++ b/Source/devtools/front_end/CodeMirrorTextEditor.js
 | 
| @@ -151,10 +151,20 @@ WebInspector.CodeMirrorTextEditor = function(url, delegate)
 | 
|      this._codeMirror.on("beforeChange", this._beforeChange.bind(this));
 | 
|      this._codeMirror.on("gutterClick", this._gutterClick.bind(this));
 | 
|      this._codeMirror.on("cursorActivity", this._cursorActivity.bind(this));
 | 
| +    this._codeMirror.on("beforeSelectionChange", this._beforeSelectionChange.bind(this));
 | 
|      this._codeMirror.on("scroll", this._scroll.bind(this));
 | 
|      this._codeMirror.on("focus", this._focus.bind(this));
 | 
|      this._codeMirror.on("blur", this._blur.bind(this));
 | 
|      this.element.addEventListener("contextmenu", this._contextMenu.bind(this), false);
 | 
| +    /**
 | 
| +     * @this {WebInspector.CodeMirrorTextEditor}
 | 
| +     */
 | 
| +    function updateAnticipateJumpFlag(value)
 | 
| +    {
 | 
| +        this._anticipateJump = value;
 | 
| +    }
 | 
| +    this.element.addEventListener("mousedown", updateAnticipateJumpFlag.bind(this, true), true);
 | 
| +    this.element.addEventListener("mousedown", updateAnticipateJumpFlag.bind(this, false), false);
 | 
|  
 | 
|      this.element.classList.add("fill");
 | 
|      this.element.style.overflow = "hidden";
 | 
| @@ -329,12 +339,18 @@ WebInspector.CodeMirrorTextEditor.prototype = {
 | 
|              }
 | 
|              this._tokenHighlighter.highlightSearchResults(regex, range);
 | 
|          }
 | 
| +        if (!this._presearchSelection)
 | 
| +            this._presearchSelection = this.selection();
 | 
|          this._codeMirror.operation(innerHighlightRegex.bind(this));
 | 
|      },
 | 
|  
 | 
|      cancelSearchResultsHighlight: function()
 | 
|      {
 | 
|          this._codeMirror.operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));
 | 
| +        if (this._presearchSelection) {
 | 
| +            this._reportJump(this._presearchSelection, this.selection());
 | 
| +            delete this._presearchSelection;
 | 
| +        }
 | 
|      },
 | 
|  
 | 
|      undo: function()
 | 
| @@ -794,7 +810,7 @@ WebInspector.CodeMirrorTextEditor.prototype = {
 | 
|          this._codeMirror.addLineClass(this._highlightedLine, null, "cm-highlight");
 | 
|          this._clearHighlightTimeout = setTimeout(this.clearPositionHighlight.bind(this), 2000);
 | 
|          if (!this.readOnly())
 | 
| -            this._codeMirror.setSelection(new CodeMirror.Pos(lineNumber, columnNumber));
 | 
| +            this.setSelection(WebInspector.TextRange.createFromLocation(lineNumber, columnNumber));
 | 
|      },
 | 
|  
 | 
|      clearPositionHighlight: function()
 | 
| @@ -976,6 +992,28 @@ WebInspector.CodeMirrorTextEditor.prototype = {
 | 
|              this._codeMirror.operation(this._tokenHighlighter.highlightSelectedTokens.bind(this._tokenHighlighter));
 | 
|      },
 | 
|  
 | 
| +    /**
 | 
| +     * @param {!CodeMirror} codeMirror
 | 
| +     * @param {!{head: !CodeMirror.Pos, anchor: !CodeMirror.Pos}} selection
 | 
| +     */
 | 
| +    _beforeSelectionChange: function(codeMirror, selection)
 | 
| +    {
 | 
| +        if (!this._anticipateJump)
 | 
| +            return;
 | 
| +        this._reportJump(this.selection(), this._toRange(selection.anchor, selection.head));
 | 
| +    },
 | 
| +
 | 
| +    /**
 | 
| +     * @param {?WebInspector.TextRange} from
 | 
| +     * @param {?WebInspector.TextRange} to
 | 
| +     */
 | 
| +    _reportJump: function(from, to)
 | 
| +    {
 | 
| +        if (from && to && from.equal(to))
 | 
| +            return;
 | 
| +        this._delegate.onJumpToPosition(from, to);
 | 
| +    },
 | 
| +
 | 
|      _scroll: function()
 | 
|      {
 | 
|          if (this._scrollTimer)
 | 
| @@ -1166,11 +1204,59 @@ WebInspector.CodeMirrorTextEditor.prototype = {
 | 
|          return new WebInspector.TextRange(start.line, start.ch, end.line, end.ch);
 | 
|      },
 | 
|  
 | 
| +    /**
 | 
| +     * @param {number} lineNumber
 | 
| +     * @param {number} columnNumber
 | 
| +     * @return {!WebInspector.TextEditorPositionHandle}
 | 
| +     */
 | 
| +    textEditorPositionHandle: function(lineNumber, columnNumber)
 | 
| +    {
 | 
| +        return new WebInspector.CodeMirrorPositionHandle(this._codeMirror, new CodeMirror.Pos(lineNumber, columnNumber));
 | 
| +    },
 | 
| +
 | 
|      __proto__: WebInspector.View.prototype
 | 
|  }
 | 
|  
 | 
|  /**
 | 
|   * @constructor
 | 
| + * @implements {WebInspector.TextEditorPositionHandle}
 | 
| + * @param {!CodeMirror} codeMirror
 | 
| + * @param {!CodeMirror.Pos} pos
 | 
| + */
 | 
| +WebInspector.CodeMirrorPositionHandle = function(codeMirror, pos)
 | 
| +{
 | 
| +    this._codeMirror = codeMirror;
 | 
| +    this._lineHandle = codeMirror.getLineHandle(pos.line);
 | 
| +    this._columnNumber = pos.ch;
 | 
| +}
 | 
| +
 | 
| +WebInspector.CodeMirrorPositionHandle.prototype = {
 | 
| +    /**
 | 
| +     * @return {?{lineNumber: number, columnNumber: number}}
 | 
| +     */
 | 
| +    resolve: function()
 | 
| +    {
 | 
| +        var lineNumber = this._codeMirror.getLineNumber(this._lineHandle);
 | 
| +        if (typeof lineNumber !== "number")
 | 
| +            return null;
 | 
| +        return {
 | 
| +            lineNumber: lineNumber,
 | 
| +            columnNumber: this._columnNumber
 | 
| +        };
 | 
| +    },
 | 
| +
 | 
| +    /**
 | 
| +     * @param {!WebInspector.TextEditorPositionHandle} positionHandle
 | 
| +     * @return {boolean}
 | 
| +     */
 | 
| +    equal: function(positionHandle)
 | 
| +    {
 | 
| +        return positionHandle._lineHandle === this._lineHandle && positionHandle._columnNumber == this._columnNumber && positionHandle._codeMirror === this._codeMirror;
 | 
| +    }
 | 
| +}
 | 
| +
 | 
| +/**
 | 
| + * @constructor
 | 
|   * @param {!CodeMirror} codeMirror
 | 
|   */
 | 
|  WebInspector.CodeMirrorTextEditor.TokenHighlighter = function(codeMirror)
 | 
| 
 |