From 0c12a41dffc28c2ca9907d2bb5da4822ad521fb7 Mon Sep 17 00:00:00 2001 From: sss Date: Fri, 8 Dec 2017 16:50:28 +0300 Subject: [PATCH] firefox-57.0.2:ver.bump --- ...preference-to-trigger-context-menu-o.patch | 203 ++++++++++++++ ...ement-browserSettings.contextMenuSho.patch | 254 ++++++++++++++++++ .../firefox/files/firefox-install-dir.patch | 11 +- network/web/firefox/files/mozconfig | 3 + network/web/firefox/pspec.xml | 15 +- 5 files changed, 478 insertions(+), 8 deletions(-) create mode 100644 network/web/firefox/files/0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch create mode 100644 network/web/firefox/files/0002-Bug-1419426-Implement-browserSettings.contextMenuSho.patch diff --git a/network/web/firefox/files/0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch b/network/web/firefox/files/0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch new file mode 100644 index 0000000000..4316680bf9 --- /dev/null +++ b/network/web/firefox/files/0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch @@ -0,0 +1,203 @@ +From 05ec1aa0d5e8806dd0c5c6d08c82846a1389b599 Mon Sep 17 00:00:00 2001 +Message-Id: <05ec1aa0d5e8806dd0c5c6d08c82846a1389b599.1512038840.git.jan.steffens@gmail.com> +From: Robin Grenet +Date: Thu, 16 Nov 2017 13:35:58 +0100 +Subject: [PATCH 1/2] Bug 1360278 - Add preference to trigger context menu on + mouse up for GTK+ and macOS, r=mstange,smaug + +MozReview-Commit-ID: Bg60bD8jIg6 + +--HG-- +extra : rebase_source : cc8bd5796096f49ad4fdab81885a426afd6117e4 +--- + modules/libpref/init/all.js | 4 ++++ + widget/cocoa/nsChildView.mm | 23 +++++++++++++++++++++-- + widget/gtk/nsWindow.cpp | 27 ++++++++++++++++++++------- + widget/gtk/nsWindow.h | 2 ++ + widget/nsBaseWidget.cpp | 16 ++++++++++++++++ + widget/nsBaseWidget.h | 6 ++++++ + 6 files changed, 69 insertions(+), 9 deletions(-) + +diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js +index 9febead1d363d792..7a6e6a20f3cc3fd6 100644 +--- a/modules/libpref/init/all.js ++++ b/modules/libpref/init/all.js +@@ -231,6 +231,10 @@ pref("browser.sessionhistory.max_total_viewers", -1); + + pref("ui.use_native_colors", true); + pref("ui.click_hold_context_menus", false); ++ ++// Pop up context menu on mouseup instead of mousedown, if that's the OS default. ++// Note: ignored on Windows (context menus always use mouseup) ++pref("ui.context_menus.after_mouseup", false); + // Duration of timeout of incremental search in menus (ms). 0 means infinite. + pref("ui.menu.incremental_search.timeout", 1000); + // If true, all popups won't hide automatically on blur +diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm +index 25b4c1ba7a2d1207..2affd1ef386cbfd0 100644 +--- a/widget/cocoa/nsChildView.mm ++++ b/widget/cocoa/nsChildView.mm +@@ -4719,30 +4719,49 @@ NSEvent* gLastDragMouseDownEvent = nil; + if (!mGeckoChild) + return; + +- // Let the superclass do the context menu stuff. +- [super rightMouseDown:theEvent]; ++ if (!nsBaseWidget::ShowContextMenuAfterMouseUp()) { ++ // Let the superclass do the context menu stuff. ++ [super rightMouseDown:theEvent]; ++ } + + NS_OBJC_END_TRY_ABORT_BLOCK; + } + + - (void)rightMouseUp:(NSEvent *)theEvent + { + NS_OBJC_BEGIN_TRY_ABORT_BLOCK; + + if (!mGeckoChild) + return; + if (mTextInputHandler->OnHandleEvent(theEvent)) { + return; + } + + WidgetMouseEvent geckoEvent(true, eMouseUp, mGeckoChild, + WidgetMouseEvent::eReal); + [self convertCocoaMouseEvent:theEvent toGeckoEvent:&geckoEvent]; + geckoEvent.button = WidgetMouseEvent::eRightButton; + geckoEvent.mClickCount = [theEvent clickCount]; + + nsAutoRetainCocoaObject kungFuDeathGrip(self); + mGeckoChild->DispatchInputEvent(&geckoEvent); ++ if (!mGeckoChild) ++ return; ++ ++ if (nsBaseWidget::ShowContextMenuAfterMouseUp()) { ++ // Let the superclass do the context menu stuff, but pretend it's rightMouseDown. ++ NSEvent *dupeEvent = [NSEvent mouseEventWithType:NSRightMouseDown ++ location:theEvent.locationInWindow ++ modifierFlags:theEvent.modifierFlags ++ timestamp:theEvent.timestamp ++ windowNumber:theEvent.windowNumber ++ context:theEvent.context ++ eventNumber:theEvent.eventNumber ++ clickCount:theEvent.clickCount ++ pressure:theEvent.pressure]; ++ ++ [super rightMouseDown:dupeEvent]; ++ } + + NS_OBJC_END_TRY_ABORT_BLOCK; + } +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +index 37b6aae4c3d0b4e7..2b80124538c20ed6 100644 +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -2727,6 +2727,19 @@ static guint ButtonMaskFromGDKButton(guint button) + return GDK_BUTTON1_MASK << (button - 1); + } + ++void ++nsWindow::DispatchContextMenuEventFromMouseEvent(uint16_t domButton, ++ GdkEventButton *aEvent) ++{ ++ if (domButton == WidgetMouseEvent::eRightButton && MOZ_LIKELY(!mIsDestroyed)) { ++ WidgetMouseEvent contextMenuEvent(true, eContextMenu, this, ++ WidgetMouseEvent::eReal); ++ InitButtonEvent(contextMenuEvent, aEvent); ++ contextMenuEvent.pressure = mLastMotionPressure; ++ DispatchInputEvent(&contextMenuEvent); ++ } ++} ++ + void + nsWindow::OnButtonPressEvent(GdkEventButton *aEvent) + { +@@ -2796,13 +2809,8 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent) + DispatchInputEvent(&event); + + // right menu click on linux should also pop up a context menu +- if (domButton == WidgetMouseEvent::eRightButton && +- MOZ_LIKELY(!mIsDestroyed)) { +- WidgetMouseEvent contextMenuEvent(true, eContextMenu, this, +- WidgetMouseEvent::eReal); +- InitButtonEvent(contextMenuEvent, aEvent); +- contextMenuEvent.pressure = mLastMotionPressure; +- DispatchInputEvent(&contextMenuEvent); ++ if (!nsBaseWidget::ShowContextMenuAfterMouseUp()) { ++ DispatchContextMenuEventFromMouseEvent(domButton, aEvent); + } + } + +@@ -2838,6 +2846,11 @@ nsWindow::OnButtonReleaseEvent(GdkEventButton *aEvent) + + DispatchInputEvent(&event); + mLastMotionPressure = pressure; ++ ++ // right menu click on linux should also pop up a context menu ++ if (nsBaseWidget::ShowContextMenuAfterMouseUp()) { ++ DispatchContextMenuEventFromMouseEvent(domButton, aEvent); ++ } + } + + void +diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h +index f7c07d57491b0b83..b969c9db4306ba6a 100644 +--- a/widget/gtk/nsWindow.h ++++ b/widget/gtk/nsWindow.h +@@ -245,6 +245,8 @@ private: + + void UpdateClientOffset(); + ++ void DispatchContextMenuEventFromMouseEvent(uint16_t domButton, ++ GdkEventButton *aEvent); + public: + void ThemeChanged(void); + void OnDPIChanged(void); +diff --git a/widget/nsBaseWidget.cpp b/widget/nsBaseWidget.cpp +index 996409f45db11cc7..de73fe36d27955cd 100644 +--- a/widget/nsBaseWidget.cpp ++++ b/widget/nsBaseWidget.cpp +@@ -1222,6 +1222,22 @@ nsBaseWidget::DispatchEventToAPZOnly(mozilla::WidgetInputEvent* aEvent) + } + } + ++// static ++bool ++nsBaseWidget::ShowContextMenuAfterMouseUp() ++{ ++ static bool gContextMenuAfterMouseUp = false; ++ static bool gContextMenuAfterMouseUpCached = false; ++ if (!gContextMenuAfterMouseUpCached) { ++ Preferences::AddBoolVarCache(&gContextMenuAfterMouseUp, ++ "ui.context_menus.after_mouseup", ++ false); ++ ++ gContextMenuAfterMouseUpCached = true; ++ } ++ return gContextMenuAfterMouseUp; ++} ++ + nsIDocument* + nsBaseWidget::GetDocument() const + { +diff --git a/widget/nsBaseWidget.h b/widget/nsBaseWidget.h +index 6d6b93ea73d64b38..cdc6aa0c87279832 100644 +--- a/widget/nsBaseWidget.h ++++ b/widget/nsBaseWidget.h +@@ -418,6 +418,12 @@ public: + void RecvScreenPixels(mozilla::ipc::Shmem&& aMem, const ScreenIntSize& aSize) override {}; + #endif + ++ /** ++ * Whether context menus should only appear on mouseup instead of mousedown, ++ * on OSes where they normally appear on mousedown (macOS, *nix). ++ */ ++ static bool ShowContextMenuAfterMouseUp(); ++ + protected: + // These are methods for CompositorWidgetWrapper, and should only be + // accessed from that class. Derived widgets can choose which methods to +-- +2.15.1 + diff --git a/network/web/firefox/files/0002-Bug-1419426-Implement-browserSettings.contextMenuSho.patch b/network/web/firefox/files/0002-Bug-1419426-Implement-browserSettings.contextMenuSho.patch new file mode 100644 index 0000000000..822f1ee06b --- /dev/null +++ b/network/web/firefox/files/0002-Bug-1419426-Implement-browserSettings.contextMenuSho.patch @@ -0,0 +1,254 @@ +From f19a0f3bc5e1e87d3c663cc2b147c5c0831519c5 Mon Sep 17 00:00:00 2001 +Message-Id: +In-Reply-To: <05ec1aa0d5e8806dd0c5c6d08c82846a1389b599.1512038840.git.jan.steffens@gmail.com> +References: <05ec1aa0d5e8806dd0c5c6d08c82846a1389b599.1512038840.git.jan.steffens@gmail.com> +From: Bob Silverberg +Date: Fri, 24 Nov 2017 07:45:03 -0500 +Subject: [PATCH 2/2] Bug 1419426 - Implement + browserSettings.contextMenuShowEvent, r=kmag a=gchang + +Uplift for 58. +--- + .../components/extensions/ext-browserSettings.js | 45 ++++++++++++++++ + .../extensions/schemas/browser_settings.json | 10 ++++ + .../test/xpcshell/test_ext_browserSettings.js | 62 ++++++++++++++++++++-- + 3 files changed, 114 insertions(+), 3 deletions(-) + +diff --git a/toolkit/components/extensions/ext-browserSettings.js b/toolkit/components/extensions/ext-browserSettings.js +index f3212f351baf6975..2b24bcc1d09091f2 100644 +--- a/toolkit/components/extensions/ext-browserSettings.js ++++ b/toolkit/components/extensions/ext-browserSettings.js +@@ -2,17 +2,23 @@ + /* vim: set sts=2 sw=2 et tw=80: */ + "use strict"; + ++XPCOMUtils.defineLazyModuleGetter(this, "AppConstants", ++ "resource://gre/modules/AppConstants.jsm"); + XPCOMUtils.defineLazyModuleGetter(this, "ExtensionSettingsStore", + "resource://gre/modules/ExtensionSettingsStore.jsm"); + XPCOMUtils.defineLazyModuleGetter(this, "Services", + "resource://gre/modules/Services.jsm"); + + XPCOMUtils.defineLazyServiceGetter(this, "aboutNewTabService", + "@mozilla.org/browser/aboutnewtab-service;1", + "nsIAboutNewTabService"); + + Cu.import("resource://gre/modules/ExtensionPreferencesManager.jsm"); + ++var { ++ ExtensionError, ++} = ExtensionUtils; ++ + const HOMEPAGE_OVERRIDE_SETTING = "homepage_override"; + const HOMEPAGE_URL_PREF = "browser.startup.homepage"; + const URL_STORE_TYPE = "url_overrides"; +@@ -82,6 +88,16 @@ ExtensionPreferencesManager.addSetting("imageAnimationBehavior", { + }, + }); + ++ExtensionPreferencesManager.addSetting("contextMenuShowEvent", { ++ prefNames: [ ++ "ui.context_menus.after_mouseup", ++ ], ++ ++ setCallback(value) { ++ return {[this.prefNames[0]]: value === "mouseup"}; ++ }, ++}); ++ + this.browserSettings = class extends ExtensionAPI { + getAPI(context) { + let {extension} = context; +@@ -114,6 +130,35 @@ this.browserSettings = class extends ExtensionAPI { + () => { + return aboutNewTabService.newTabURL; + }, URL_STORE_TYPE, true), ++ contextMenuShowEvent: Object.assign( ++ getSettingsAPI( ++ extension, ++ "contextMenuShowEvent", ++ () => { ++ if (AppConstants.platform === "win") { ++ return "mouseup"; ++ } ++ let prefValue = Services.prefs.getBoolPref( ++ "ui.context_menus.after_mouseup", null); ++ return prefValue ? "mouseup" : "mousedown"; ++ } ++ ), ++ { ++ set: details => { ++ if (!["mouseup", "mousedown"].includes(details.value)) { ++ throw new ExtensionError( ++ `${details.value} is not a valid value for contextMenuShowEvent.`); ++ } ++ if (AppConstants.platform === "android" || ++ (AppConstants.platform === "win" && ++ details.value === "mousedown")) { ++ return false; ++ } ++ return ExtensionPreferencesManager.setSetting( ++ extension, "contextMenuShowEvent", details.value); ++ }, ++ } ++ ), + }, + }; + } +diff --git a/toolkit/components/extensions/schemas/browser_settings.json b/toolkit/components/extensions/schemas/browser_settings.json +index af073d933723cbd5..4f354e69dfedaf96 100644 +--- a/toolkit/components/extensions/schemas/browser_settings.json ++++ b/toolkit/components/extensions/schemas/browser_settings.json +@@ -27,28 +27,38 @@ + "type": "string", + "enum": ["normal", "none", "once"], + "description": "How images should be animated in the browser." ++ }, ++ { ++ "id": "ContextMenuMouseEvent", ++ "type": "string", ++ "enum": ["mouseup", "mousedown"], ++ "description": "After which mouse event context menus should popup." + } + ], + "properties": { + "allowPopupsForUserEvents": { + "$ref": "types.Setting", + "description": "Allows or disallows pop-up windows from opening in response to user events." + }, + "cacheEnabled": { + "$ref": "types.Setting", + "description": "Enables or disables the browser cache." + }, + "homepageOverride": { + "$ref": "types.Setting", + "description": "Returns the value of the overridden home page. Read-only." + }, + "imageAnimationBehavior": { + "$ref": "types.Setting", + "description": "Controls the behaviour of image animation in the browser. This setting's value is of type ImageAnimationBehavior, defaulting to normal." + }, + "newTabPageOverride": { + "$ref": "types.Setting", + "description": "Returns the value of the overridden new tab page. Read-only." ++ }, ++ "contextMenuShowEvent": { ++ "$ref": "types.Setting", ++ "description": "Controls after which mouse event context menus popup. This setting's value is of type ContextMenuMouseEvent, which has possible values of mouseup and mousedown." + } + } + } +diff --git a/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js b/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js +index 5c441df3e4198671..7e9c1576a723dfc6 100644 +--- a/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js ++++ b/toolkit/components/extensions/test/xpcshell/test_ext_browserSettings.js +@@ -24,13 +24,20 @@ add_task(async function test_browser_settings() { + "browser.cache.memory.enable": true, + "dom.popup_allowed_events": Preferences.get("dom.popup_allowed_events"), + "image.animation_mode": "none", ++ "ui.context_menus.after_mouseup": false, + }; + + async function background() { + browser.test.onMessage.addListener(async (msg, apiName, value) => { + let apiObj = browser.browserSettings[apiName]; +- await apiObj.set({value}); +- browser.test.sendMessage("settingData", await apiObj.get({})); ++ let result = await apiObj.set({value}); ++ if (msg === "set") { ++ browser.test.assertTrue(result, "set returns true."); ++ browser.test.sendMessage("settingData", await apiObj.get({})); ++ } else { ++ browser.test.assertFalse(result, "set returns false for a no-op."); ++ browser.test.sendMessage("no-op set"); ++ } + }); + } + +@@ -69,33 +76,82 @@ add_task(async function test_browser_settings() { + } + } + ++ async function testNoOpSetting(setting, value, expected) { ++ extension.sendMessage("setNoOp", setting, value); ++ await extension.awaitMessage("no-op set"); ++ for (let pref in expected) { ++ equal(Preferences.get(pref), expected[pref], `${pref} set correctly for ${value}`); ++ } ++ } ++ + await testSetting( + "cacheEnabled", false, + { + "browser.cache.disk.enable": false, + "browser.cache.memory.enable": false, + }); + await testSetting( + "cacheEnabled", true, + { + "browser.cache.disk.enable": true, + "browser.cache.memory.enable": true, + }); + + await testSetting( + "allowPopupsForUserEvents", false, + {"dom.popup_allowed_events": ""}); + await testSetting( + "allowPopupsForUserEvents", true, + {"dom.popup_allowed_events": PREFS["dom.popup_allowed_events"]}); + + for (let value of ["normal", "none", "once"]) { + await testSetting( + "imageAnimationBehavior", value, + {"image.animation_mode": value}); + } + +- await extension.unload(); ++ // This setting is a no-op on Android. ++ if (AppConstants.platform === "android") { ++ await testNoOpSetting("contextMenuShowEvent", "mouseup", ++ {"ui.context_menus.after_mouseup": false}); ++ } else { ++ await testSetting( ++ "contextMenuShowEvent", "mouseup", ++ {"ui.context_menus.after_mouseup": true}); ++ } + ++ // "mousedown" is also a no-op on Windows. ++ if (["android", "win"].includes(AppConstants.platform)) { ++ await testNoOpSetting("contextMenuShowEvent", "mousedown", ++ {"ui.context_menus.after_mouseup": AppConstants.platform === "win"}); ++ } else { ++ await testSetting( ++ "contextMenuShowEvent", "mousedown", ++ {"ui.context_menus.after_mouseup": false}); ++ } ++ ++ await extension.unload(); + await promiseShutdownManager(); + }); ++ ++add_task(async function test_bad_value() { ++ async function background() { ++ await browser.test.assertRejects( ++ browser.browserSettings.contextMenuShowEvent.set({value: "bad"}), ++ /bad is not a valid value for contextMenuShowEvent/, ++ "contextMenuShowEvent.set rejects with an invalid value."); ++ ++ browser.test.sendMessage("done"); ++ } ++ ++ let extension = ExtensionTestUtils.loadExtension({ ++ background, ++ manifest: { ++ permissions: ["browserSettings"], ++ }, ++ }); ++ ++ await extension.startup(); ++ await extension.awaitMessage("done"); ++ await extension.unload(); ++}); +-- +2.15.1 + diff --git a/network/web/firefox/files/firefox-install-dir.patch b/network/web/firefox/files/firefox-install-dir.patch index 8ee5d26f0d..d6aaafa99e 100644 --- a/network/web/firefox/files/firefox-install-dir.patch +++ b/network/web/firefox/files/firefox-install-dir.patch @@ -1,6 +1,7 @@ -diff -Nuar firefox-42.0.OSmanOS/config/baseconfig.mk firefox-42.0/config/baseconfig.mk ---- firefox-42.0.OSmanOS/config/baseconfig.mk 2015-10-30 00:17:52.000000000 +0200 -+++ firefox-42.0/config/baseconfig.mk 2015-11-06 23:44:25.232724913 +0200 +diff --git i/config/baseconfig.mk w/config/baseconfig.mk +index e204533ac9b66b88..27ae154ce265ca2b 100644 +--- i/config/baseconfig.mk ++++ w/config/baseconfig.mk @@ -4,7 +4,7 @@ # whether a normal build is happening or whether the check is running. includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) @@ -8,5 +9,5 @@ diff -Nuar firefox-42.0.OSmanOS/config/baseconfig.mk firefox-42.0/config/basecon -installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) +installdir = $(libdir)/$(MOZ_APP_NAME) sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) - ifndef TOP_DIST - TOP_DIST = dist + ifeq (.,$(DEPTH)) + DIST = dist diff --git a/network/web/firefox/files/mozconfig b/network/web/firefox/files/mozconfig index f691b3e402..99361ae8b4 100755 --- a/network/web/firefox/files/mozconfig +++ b/network/web/firefox/files/mozconfig @@ -23,6 +23,9 @@ ac_add_options --enable-system-sqlite #ac_add_options --disable-elf-hack # Features +ac_add_options --enable-application=browser +ac_add_options --enable-alsa +ac_add_options --enable-jack ac_add_options --enable-startup-notification ac_add_options --disable-updater ac_add_options --disable-crashreporter diff --git a/network/web/firefox/pspec.xml b/network/web/firefox/pspec.xml index 4979d1ae15..433824be7a 100755 --- a/network/web/firefox/pspec.xml +++ b/network/web/firefox/pspec.xml @@ -15,7 +15,7 @@ app:gui Firefox Web Browser It is more secure and faster to browse the web with Firefox web browser. You can personalize your web browser with many specifications that is not enough to explain in two sentences. - https://ftp.mozilla.org/pub/firefox/releases/57.0/source/firefox-57.0.source.tar.xz + https://ftp.mozilla.org/pub/firefox/releases/57.0.2/source/firefox-57.0.2.source.tar.xz mozconfig @@ -52,12 +52,14 @@ nss-devel nspr-devel chrpath + jack-audio-connection-kit-devel firefox-install-dir.patch llvmversyon.patch icu58.patch - + 0001-Bug-1360278-Add-preference-to-trigger-context-menu-o.patch + 0002-Bug-1419426-Implement-browserSettings.contextMenuSho.patch no-plt.diff @@ -89,7 +91,7 @@ libXext icu4c - + alsa-lib libevent freetype @@ -542,6 +544,13 @@ + + 2017-12-08 + 57.0.2 + Version Bump + Mustafa Cinasal + muscnsl@gmail.com + 2017-11-19 57.0