| Index: third_party/WebKit/Source/devtools/front_end/components/InspectElementModeController.js | 
| diff --git a/third_party/WebKit/Source/devtools/front_end/components/InspectElementModeController.js b/third_party/WebKit/Source/devtools/front_end/components/InspectElementModeController.js | 
| index 344a04695741074ec5a18152808592ea78037819..7f747b1d8f9700a6319381daea64f2769c09d218 100644 | 
| --- a/third_party/WebKit/Source/devtools/front_end/components/InspectElementModeController.js | 
| +++ b/third_party/WebKit/Source/devtools/front_end/components/InspectElementModeController.js | 
| @@ -33,7 +33,13 @@ | 
| WebInspector.InspectElementModeController = function() | 
| { | 
| this._toggleSearchButton = new WebInspector.ToolbarButton(WebInspector.UIString("Select an element in the page to inspect it"), "node-search-toolbar-item"); | 
| -    InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.EnterInspectElementMode, this._toggleSearch, this); | 
| +    if (Runtime.experiments.isEnabled("layoutEditor")) { | 
| +        this._layoutEditorButton = new WebInspector.ToolbarButton(WebInspector.UIString("Toggle Layout Editor"), "layout-editor-toolbar-item"); | 
| +        this._layoutEditorButton.addEventListener("click", this._toggleLayoutEditor, this); | 
| +    } | 
| + | 
| +    this._mode = DOMAgent.InspectMode.None; | 
| +    InspectorFrontendHost.events.addEventListener(InspectorFrontendHostAPI.Events.EnterInspectElementMode, this._toggleInspectMode, this); | 
| WebInspector.targetManager.addEventListener(WebInspector.TargetManager.Events.SuspendStateChanged, this._suspendStateChanged, this); | 
| WebInspector.targetManager.observeTargets(this, WebInspector.Target.Type.Page); | 
| } | 
| @@ -55,10 +61,10 @@ WebInspector.InspectElementModeController.prototype = { | 
| { | 
| // When DevTools are opening in the inspect element mode, the first target comes in | 
| // much later than the InspectorFrontendAPI.enterInspectElementMode event. | 
| -        if (!this.started()) | 
| +        if (this._mode === DOMAgent.InspectMode.None) | 
| return; | 
| var domModel = WebInspector.DOMModel.fromTarget(target); | 
| -        domModel.setInspectMode(WebInspector.moduleSetting("showUAShadowDOM").get() ? DOMAgent.InspectMode.SearchForUAShadowDOM : DOMAgent.InspectMode.SearchForNode); | 
| +        domModel.setInspectMode(this._mode); | 
| }, | 
|  | 
| /** | 
| @@ -72,53 +78,72 @@ WebInspector.InspectElementModeController.prototype = { | 
| /** | 
| * @return {boolean} | 
| */ | 
| -    started: function() | 
| +    isInInspectElementMode: function() | 
| { | 
| -        return this._toggleSearchButton.toggled(); | 
| +        return this._mode === DOMAgent.InspectMode.SearchForNode || this._mode === DOMAgent.InspectMode.SearchForUAShadowDOM; | 
| }, | 
|  | 
| -    stop: function() | 
| +    /** | 
| +     * @return {boolean} | 
| +     */ | 
| +    isInLayoutEditorMode: function() | 
| { | 
| -        if (this.started()) | 
| -            this._toggleSearch(); | 
| +        return this._mode === DOMAgent.InspectMode.ShowLayoutEditor; | 
| }, | 
|  | 
| -    disable: function() | 
| +    stopInspection: function() | 
| { | 
| -        this.stop(); | 
| -        this._toggleSearchButton.setEnabled(false); | 
| +        if (this._mode && this._mode !== DOMAgent.InspectMode.None) | 
| +            this._toggleInspectMode(); | 
| }, | 
|  | 
| -    enable: function() | 
| +    _toggleLayoutEditor: function() | 
| { | 
| -        this._toggleSearchButton.setEnabled(true); | 
| +        var mode = this.isInLayoutEditorMode() ? DOMAgent.InspectMode.None : DOMAgent.InspectMode.ShowLayoutEditor; | 
| +        this._setMode(mode); | 
| }, | 
|  | 
| -    _toggleSearch: function() | 
| +    _toggleInspectMode: function() | 
| { | 
| -        if (!this._toggleSearchButton.enabled()) | 
| +        if (WebInspector.targetManager.allTargetsSuspended()) | 
| return; | 
|  | 
| -        var shouldEnable = !this.started(); | 
| -        this._toggleSearchButton.setToggled(shouldEnable); | 
| +        var mode; | 
| +        if (this.isInInspectElementMode()) | 
| +            mode = DOMAgent.InspectMode.None; | 
| +        else | 
| +            mode = WebInspector.moduleSetting("showUAShadowDOM").get() ? DOMAgent.InspectMode.SearchForUAShadowDOM : DOMAgent.InspectMode.SearchForNode; | 
|  | 
| -        for (var domModel of WebInspector.DOMModel.instances()) { | 
| -            var mode; | 
| -            if (!shouldEnable) | 
| -                mode = DOMAgent.InspectMode.None; | 
| -            else if (WebInspector.moduleSetting("showUAShadowDOM").get()) | 
| -                mode = DOMAgent.InspectMode.SearchForUAShadowDOM; | 
| -            else | 
| -                mode = DOMAgent.InspectMode.SearchForNode; | 
| +        this._setMode(mode); | 
| +    }, | 
|  | 
| +    /** | 
| +     * @param {!DOMAgent.InspectMode} mode | 
| +     */ | 
| +    _setMode: function(mode) | 
| +    { | 
| +        this._mode = mode; | 
| +        for (var domModel of WebInspector.DOMModel.instances()) | 
| domModel.setInspectMode(mode); | 
| + | 
| +        if (this._layoutEditorButton) { | 
| +            this._layoutEditorButton.setEnabled(!this.isInInspectElementMode()); | 
| +            this._layoutEditorButton.setToggled(this.isInLayoutEditorMode()); | 
| } | 
| + | 
| +        this._toggleSearchButton.setEnabled(!this.isInLayoutEditorMode()); | 
| +        this._toggleSearchButton.setToggled(this.isInInspectElementMode()); | 
| }, | 
|  | 
| _suspendStateChanged: function() | 
| { | 
| -        if (WebInspector.targetManager.allTargetsSuspended()) | 
| -            this._toggleSearchButton.setToggled(false); | 
| +        if (!WebInspector.targetManager.allTargetsSuspended()) | 
| +            return; | 
| + | 
| +        this._mode = DOMAgent.InspectMode.None; | 
| +        this._toggleSearchButton.setToggled(false); | 
| +        if (this._layoutEditorButton) | 
| +            this._layoutEditorButton.setToggled(false); | 
| } | 
| } | 
|  | 
| @@ -140,7 +165,7 @@ WebInspector.InspectElementModeController.ToggleSearchActionDelegate.prototype = | 
| { | 
| if (!WebInspector.inspectElementModeController) | 
| return; | 
| -        WebInspector.inspectElementModeController._toggleSearch(); | 
| +        WebInspector.inspectElementModeController._toggleInspectMode(); | 
| } | 
| } | 
|  | 
| @@ -166,5 +191,27 @@ WebInspector.InspectElementModeController.ToggleButtonProvider.prototype = { | 
| } | 
| } | 
|  | 
| +/** | 
| + * @constructor | 
| + * @implements {WebInspector.ToolbarItem.Provider} | 
| + */ | 
| +WebInspector.InspectElementModeController.LayoutEditorButtonProvider = function() | 
| +{ | 
| +} | 
| + | 
| +WebInspector.InspectElementModeController.LayoutEditorButtonProvider.prototype = { | 
| +    /** | 
| +     * @override | 
| +     * @return {?WebInspector.ToolbarItem} | 
| +     */ | 
| +    item: function() | 
| +    { | 
| +        if (!WebInspector.inspectElementModeController) | 
| +            return null; | 
| + | 
| +        return WebInspector.inspectElementModeController._layoutEditorButton; | 
| +    } | 
| +} | 
| + | 
| /** @type {?WebInspector.InspectElementModeController} */ | 
| WebInspector.inspectElementModeController = null; | 
|  |