diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul index bf7db75afac..fb6409ea77d 100644 --- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -222,7 +222,8 @@ noautofocus="true" noautohide="true" onclick="InspectorUI.stopInspecting();" - onmousemove="InspectorUI.highlighter.handleMouseMove(event);"/> + onmousemove="InspectorUI.highlighter.handleMouseMove(event);" + onMozMousePixelScroll="InspectorUI.highlighter.handlePixelScroll(event);"/> (original author) * Mihai Șucan + * Julian Viereck * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or @@ -320,6 +321,29 @@ PanelHighlighter.prototype = { InspectorUI.inspectNode(element); } }, + + /** + * Handle MozMousePixelScroll in panel when InspectorUI.inspecting is true. + * + * @param aEvent + * The onMozMousePixelScrollEvent triggering the method. + * @returns void + */ + handlePixelScroll: function PanelHighlighter_handlePixelScroll(aEvent) { + if (!InspectorUI.inspecting) { + return; + } + let browserRect = this.browser.getBoundingClientRect(); + let element = InspectorUI.elementFromPoint(this.win.document, + aEvent.clientX - browserRect.left, aEvent.clientY - browserRect.top); + let win = element.ownerDocument.defaultView; + + if (aEvent.axis == aEvent.HORIZONTAL_AXIS) { + win.scrollBy(aEvent.detail, 0); + } else { + win.scrollBy(0, aEvent.detail); + } + } }; /////////////////////////////////////////////////////////////////////////// diff --git a/browser/base/content/test/Makefile.in b/browser/base/content/test/Makefile.in index 6ee79e687c7..86f0f3e7c77 100644 --- a/browser/base/content/test/Makefile.in +++ b/browser/base/content/test/Makefile.in @@ -151,6 +151,7 @@ _BROWSER_FILES = \ browser_inspector_highlighter.js \ browser_inspector_stylePanel.js \ browser_inspector_iframeTest.js \ + browser_inspector_scrolling.js \ browser_pageInfo.js \ browser_page_style_menu.js \ browser_pinnedTabs.js \ diff --git a/browser/base/content/test/browser_inspector_scrolling.js b/browser/base/content/test/browser_inspector_scrolling.js new file mode 100644 index 00000000000..69feaa30e22 --- /dev/null +++ b/browser/base/content/test/browser_inspector_scrolling.js @@ -0,0 +1,113 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is Inspector iframe Tests. + * + * The Initial Developer of the Original Code is + * The Mozilla Foundation. + * Portions created by the Initial Developer are Copyright (C) 2010 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Rob Campbell + * Mihai Șucan + * Julian Viereck + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +let doc; +let div; +let iframe; + +function createDocument() +{ + doc.title = "Inspector scrolling Tests"; + + iframe = doc.createElement("iframe"); + + iframe.addEventListener("load", function () { + iframe.removeEventListener("load", arguments.callee, false); + + div = iframe.contentDocument.createElement("div"); + div.textContent = "big div"; + div.setAttribute("style", "height:500px; width:500px; border:1px solid gray;"); + iframe.contentDocument.body.appendChild(div); + toggleInspector(); + }, false); + + iframe.src = "data:text/html,foo bar"; + doc.body.appendChild(iframe); +} + +function toggleInspector() +{ + document.addEventListener("popupshown", inspectNode, false); + InspectorUI.toggleInspectorUI(); +} + +function inspectNode(aEvent) +{ + if (aEvent.target.id != "inspector-panel") { + return true; + } + + document.removeEventListener("popupshown", inspectNode, false); + document.addEventListener("popupshown", performScrollingTest, false); + + InspectorUI.inspectNode(div) +} + +function performScrollingTest(aEvent) +{ + if (aEvent.target.id != "highlighter-panel") { + return true; + } + + document.removeEventListener("popupshown", performScrollingTest, false); + + EventUtils.synthesizeMouseScroll(aEvent.target, 10, 10, + {axis:"vertical", delta:50, type:"MozMousePixelScroll"}, window); + + is(iframe.contentDocument.body.scrollTop, 50, "inspected iframe scrolled"); + + InspectorUI.closeInspectorUI(); + gBrowser.removeCurrentTab(); + finish(); +} + +function test() +{ + waitForExplicitFinish(); + gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedBrowser.addEventListener("load", function() { + gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true); + doc = content.document; + waitForFocus(createDocument, content); + }, true); + + content.location = "data:text/html,mouse scrolling test for inspector"; +}