Compare commits
23 Commits
Author | SHA1 | Date |
---|---|---|
Dominika | 171b1c3037 | |
Dominika | 3c4b8f2f40 | |
Dominika | 94123cfebe | |
Dominika Liberda | 57d0ee09e7 | |
Dominika Liberda | 6f238fdad6 | |
Dominika Liberda | a488b9271b | |
Dominika Liberda | 8993b5c7f0 | |
Dominika Liberda | 07cb6455d9 | |
Dominika Liberda | a96a5f0101 | |
Dominika Liberda | a3b801eabf | |
Dominika Liberda | d754d4019b | |
Dominika Liberda | ef41ab718c | |
Dominika Liberda | 841e6dc516 | |
Dominika Liberda | 8e79ff8340 | |
Dominika Liberda | 546e7f21e6 | |
Dominika Liberda | cbac36ec59 | |
Dominika Liberda | 6defdd7054 | |
Dominika Liberda | 869589746c | |
Dominika Liberda | d3621b1f39 | |
Dominika Liberda | 5dee011f4c | |
ohfp | 528e2db2ef | |
fxbrit | 04e3660d2e | |
ohfp | 6f55a8bdc3 |
|
@ -233,7 +233,7 @@ def create_mozconfig(contents):
|
|||
f = open('mozconfig', 'w')
|
||||
f.write(contents)
|
||||
if not options.distro == 'win':
|
||||
f.write("\nac_add_options --with-app-name=librewolf")
|
||||
f.write("\nac_add_options --with-app-name=foxgirl")
|
||||
if options.distro == 'osx' and options.cross_compile:
|
||||
f.write("\nac_add_options --target=aarch64")
|
||||
if options.i386:
|
||||
|
@ -389,7 +389,7 @@ def execute_lw_post_build():
|
|||
os.makedirs("{}/{}/distribution".format(dirname,distfolder), exist_ok=True)
|
||||
exec("cp -v ../settings/defaults/pref/local-settings.js {}/{}/defaults/pref/".format(dirname,distfolder))
|
||||
exec("cp -v ../settings/distribution/policies.json {}/{}/distribution/".format(dirname,distfolder))
|
||||
exec("cp -v ../settings/librewolf.cfg {}/{}/".format(dirname,distfolder))
|
||||
exec("cp -v ../settings/foxgirl.cfg {}/{}/".format(dirname,distfolder))
|
||||
leave_srcdir()
|
||||
|
||||
def execute_lw_artifacts():
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
--- a/browser/themes/shared/toolbarbuttons.inc.css 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/themes/shared/toolbarbuttons.inc.css 2021-10-12 12:14:29.155204427 +0200
|
||||
@@ -54,6 +54,10 @@
|
||||
|
||||
.toolbarbutton-1 > .toolbarbutton-icon {
|
||||
margin-inline-end: 0 !important;
|
||||
+ height: 24px !important;
|
||||
+ width: 24px !important;
|
||||
+ padding: 0 !important;
|
||||
+ margin: 0 4px !important;
|
||||
}
|
||||
|
||||
.toolbarbutton-1 > .toolbarbutton-icon,
|
||||
@@ -367,3 +371,16 @@
|
||||
margin-inline-end: -6px !important;
|
||||
background: url(chrome://browser/skin/badge-blue.svg);
|
||||
}
|
||||
+
|
||||
+#PersonalToolbar {
|
||||
+ padding-left: 0px;
|
||||
+}
|
||||
+
|
||||
+#PersonalToolbar > toolbarbutton {
|
||||
+ margin: 0px !important;
|
||||
+ padding: 0px !important;
|
||||
+}
|
||||
+
|
||||
+#PersonalToolbar > toolbarbutton > image {
|
||||
+ margin-inline-start: 0px !important;
|
||||
+}
|
|
@ -0,0 +1,686 @@
|
|||
diff --git a/browser/components/newtab/content-src/styles/_icons.scss b/browser/components/newtab/content-src/styles/_icons.scss
|
||||
--- a/browser/components/newtab/content-src/styles/_icons.scss
|
||||
+++ b/browser/components/newtab/content-src/styles/_icons.scss
|
||||
@@ -31,11 +31,11 @@
|
||||
|
||||
// icon images
|
||||
&.icon-bookmark-added {
|
||||
- background-image: url('chrome://browser/skin/bookmark.svg');
|
||||
+ background-image: url('chrome://browser/skin/starred48.png');
|
||||
}
|
||||
|
||||
&.icon-bookmark-hollow {
|
||||
- background-image: url('chrome://browser/skin/bookmark-hollow.svg');
|
||||
+ background-image: url('chrome://browser/skin/unstarred48.png');
|
||||
}
|
||||
|
||||
&.icon-clear-input {
|
||||
diff --git a/browser/components/newtab/css/activity-stream-linux.css b/browser/components/newtab/css/activity-stream-linux.css
|
||||
--- a/browser/components/newtab/css/activity-stream-linux.css
|
||||
+++ b/browser/components/newtab/css/activity-stream-linux.css
|
||||
@@ -102,10 +102,10 @@ body[lwt-newtab-brighttext] {
|
||||
fill: var(--newtab-text-primary-color);
|
||||
}
|
||||
.icon.icon-bookmark-added {
|
||||
- background-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ background-image: url("chrome://browser/skin/starred48.png");
|
||||
}
|
||||
.icon.icon-bookmark-hollow {
|
||||
- background-image: url("chrome://browser/skin/bookmark-hollow.svg");
|
||||
+ background-image: url("chrome://browser/skin/unstarred48.png");
|
||||
}
|
||||
.icon.icon-clear-input {
|
||||
background-image: url("chrome://activity-stream/content/data/content/assets/glyph-cancel-16.svg");
|
||||
@@ -3742,7 +3742,7 @@ main.has-snippet {
|
||||
margin-inline-end: 6px;
|
||||
}
|
||||
.story-footer .status-message .story-badge-icon.icon-bookmark-removed {
|
||||
- background-image: url("chrome://activity-stream/content/data/content/assets/icon-removed-bookmark.svg");
|
||||
+ background-image: url("chrome://activity-stream/content/data/content/assets/icon-removed-starred48.png");
|
||||
}
|
||||
.story-footer .status-message .story-context-label {
|
||||
color: var(--newtab-text-secondary-color);
|
||||
diff --git a/browser/components/places/content/bookmarkProperties.js b/browser/components/places/content/bookmarkProperties.js
|
||||
--- a/browser/components/places/content/bookmarkProperties.js
|
||||
+++ b/browser/components/places/content/bookmarkProperties.js
|
||||
@@ -267,7 +267,7 @@ var BookmarkPropertiesPanel = {
|
||||
},
|
||||
|
||||
_getIconUrl() {
|
||||
- let url = "chrome://browser/skin/bookmark-hollow.svg";
|
||||
+ let url = "chrome://browser/skin/unstarred48.png";
|
||||
|
||||
if (this._action === ACTION_EDIT && this._itemType === BOOKMARK_ITEM) {
|
||||
url = window.arguments[0]?.node?.icon;
|
||||
diff --git a/browser/components/protections/content/protections.css b/browser/components/protections/content/protections.css
|
||||
--- a/browser/components/protections/content/protections.css
|
||||
+++ b/browser/components/protections/content/protections.css
|
||||
@@ -265,7 +265,7 @@ a.hidden,
|
||||
height: var(--exit-icon-size);
|
||||
top: var(--exit-icon-position);
|
||||
inset-inline-end: var(--exit-icon-position);
|
||||
- background-image: url(chrome://global/skin/icons/close.svg);
|
||||
+ background-image: url(chrome://browser/skin/tab-close.png);
|
||||
background-size: calc(var(--exit-icon-size) - 2px);
|
||||
background-color: transparent;
|
||||
background-position: center;
|
||||
diff --git a/browser/components/urlbar/UrlbarInput.jsm b/browser/components/urlbar/UrlbarInput.jsm
|
||||
--- a/browser/components/urlbar/UrlbarInput.jsm
|
||||
+++ b/browser/components/urlbar/UrlbarInput.jsm
|
||||
@@ -1914,13 +1914,21 @@ class UrlbarInput {
|
||||
"--urlbar-container-height",
|
||||
px(getBoundsWithoutFlushing(this.textbox.parentNode).height)
|
||||
);
|
||||
+ //this.textbox.style.setProperty(
|
||||
+ // "--urlbar-height",
|
||||
+ // px(getBoundsWithoutFlushing(this.textbox).height)
|
||||
+ //);
|
||||
+ //this.textbox.style.setProperty(
|
||||
+ // "--urlbar-toolbar-height",
|
||||
+ // px(getBoundsWithoutFlushing(this._toolbar).height)
|
||||
+ //);
|
||||
this.textbox.style.setProperty(
|
||||
"--urlbar-height",
|
||||
- px(getBoundsWithoutFlushing(this.textbox).height)
|
||||
+ 20
|
||||
);
|
||||
this.textbox.style.setProperty(
|
||||
"--urlbar-toolbar-height",
|
||||
- px(getBoundsWithoutFlushing(this._toolbar).height)
|
||||
+ 26
|
||||
);
|
||||
|
||||
this.setAttribute("breakout", "true");
|
||||
diff --git a/browser/components/urlbar/UrlbarUtils.jsm b/browser/components/urlbar/UrlbarUtils.jsm
|
||||
--- a/browser/components/urlbar/UrlbarUtils.jsm
|
||||
+++ b/browser/components/urlbar/UrlbarUtils.jsm
|
||||
@@ -230,7 +230,7 @@ var UrlbarUtils = {
|
||||
{
|
||||
source: UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
|
||||
restrict: UrlbarTokenizer.RESTRICT.BOOKMARK,
|
||||
- icon: "chrome://browser/skin/bookmark.svg",
|
||||
+ icon: "chrome://browser/skin/starred48.png",
|
||||
pref: "shortcuts.bookmarks",
|
||||
},
|
||||
{
|
||||
diff --git a/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js b/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
|
||||
--- a/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
|
||||
+++ b/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
|
||||
@@ -42,7 +42,7 @@ const RESULT_DATA_BY_TYPE = {
|
||||
function getSourceIcon(source) {
|
||||
switch (source) {
|
||||
case UrlbarUtils.RESULT_SOURCE.BOOKMARKS:
|
||||
- return "chrome://browser/skin/bookmark.svg";
|
||||
+ return "chrome://browser/skin/starred48.png";
|
||||
case UrlbarUtils.RESULT_SOURCE.HISTORY:
|
||||
return "chrome://browser/skin/history.svg";
|
||||
case UrlbarUtils.RESULT_SOURCE.TABS:
|
||||
diff --git a/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js b/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
|
||||
--- a/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
|
||||
+++ b/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
|
||||
@@ -111,7 +111,7 @@ add_task(async function localOneOff() {
|
||||
);
|
||||
Assert.equal(
|
||||
result.image,
|
||||
- "chrome://browser/skin/bookmark.svg",
|
||||
+ "chrome://browser/skin/starred48.png",
|
||||
"Check the heuristic icon"
|
||||
);
|
||||
|
||||
@@ -252,7 +252,7 @@ add_task(async function localOneOff_with
|
||||
);
|
||||
Assert.equal(
|
||||
result.image,
|
||||
- "chrome://browser/skin/bookmark.svg",
|
||||
+ "chrome://browser/skin/starred48.png",
|
||||
"Check the heuristic icon"
|
||||
);
|
||||
|
||||
diff --git a/browser/themes/shared/browser.inc.css b/browser/themes/shared/browser.inc.css
|
||||
--- a/browser/themes/shared/browser.inc.css
|
||||
+++ b/browser/themes/shared/browser.inc.css
|
||||
@@ -57,10 +56,6 @@
|
||||
--urlbar-box-text-color: inherit;
|
||||
--urlbar-min-height: 32px;
|
||||
--urlbar-icon-fill-opacity: 0.9;
|
||||
- --urlbar-icon-padding: 6px; /* (32px - 2px border - 2px padding - 16px icon) / 2 */
|
||||
- /* This should be used for icons and chiclets inside the input field. It makes
|
||||
- the gap around them more uniform when they are close to the field edges */
|
||||
- --urlbar-icon-border-radius: calc(var(--toolbarbutton-border-radius) - 1px);
|
||||
--urlbar-popup-url-color: -moz-nativehyperlinktext;
|
||||
|
||||
--lwt-additional-images: none;
|
||||
@@ -490,7 +485,7 @@ menupopup::part(drop-indicator) {
|
||||
margin: 3px;
|
||||
border: none;
|
||||
border-radius: 2px;
|
||||
- background-image: url(chrome://global/skin/icons/close.svg);
|
||||
+ background-image: url(chrome://browser/skin/tab-close.png);
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
@@ -617,7 +612,7 @@ menupopup::part(drop-indicator) {
|
||||
#cfr-notification-footer-filled-stars,
|
||||
#cfr-notification-footer-empty-stars {
|
||||
-moz-context-properties: fill, fill-opacity;
|
||||
- background-image: url(chrome://browser/skin/bookmark.svg);
|
||||
+ background-image: url(chrome://browser/skin/starred48.png);
|
||||
fill: currentColor;
|
||||
fill-opacity: 0.7;
|
||||
height: 16px;
|
||||
@@ -826,3 +821,8 @@ popupnotificationcontent {
|
||||
#tab-notification-deck {
|
||||
display: block;
|
||||
}
|
||||
+
|
||||
+#nav-bar, #nav-bar-customization-target {
|
||||
+ height: 36px !important;
|
||||
+}
|
||||
+
|
||||
diff --git a/browser/themes/shared/contextmenu.inc.css b/browser/themes/shared/contextmenu.inc.css
|
||||
--- a/browser/themes/shared/contextmenu.inc.css
|
||||
+++ b/browser/themes/shared/contextmenu.inc.css
|
||||
@@ -37,11 +37,11 @@
|
||||
}
|
||||
|
||||
#context-bookmarkpage {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/unstarred48.png");
|
||||
}
|
||||
|
||||
#context-bookmarkpage[starred=true] {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/starred48.png");
|
||||
}
|
||||
|
||||
#context-back:-moz-locale-dir(rtl),
|
||||
diff --git a/browser/themes/shared/controlcenter/panel.inc.css b/browser/themes/shared/controlcenter/panel.inc.css
|
||||
--- a/browser/themes/shared/controlcenter/panel.inc.css
|
||||
+++ b/browser/themes/shared/controlcenter/panel.inc.css
|
||||
@@ -721,7 +721,7 @@ description#identity-popup-content-verif
|
||||
margin: 0;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
- list-style-image: url(chrome://global/skin/icons/close.svg);
|
||||
+ list-style-image: url(chrome://browser/skin/tab-close.png);
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
diff --git a/browser/themes/shared/identity-block/identity-block.inc.css b/browser/themes/shared/identity-block/identity-block.inc.css
|
||||
--- a/browser/themes/shared/identity-block/identity-block.inc.css
|
||||
+++ b/browser/themes/shared/identity-block/identity-block.inc.css
|
||||
@@ -279,3 +279,6 @@
|
||||
#urlbar-input-container[pageproxystate="invalid"] > #tracking-protection-icon-container {
|
||||
visibility: collapse;
|
||||
}
|
||||
+.verifiedDomain {
|
||||
+ margin 0 4px !important;
|
||||
+}
|
||||
diff --git a/browser/themes/shared/places/tree-icons.css b/browser/themes/shared/places/tree-icons.css
|
||||
--- a/browser/themes/shared/places/tree-icons.css
|
||||
+++ b/browser/themes/shared/places/tree-icons.css
|
||||
@@ -41,7 +41,7 @@ treechildren::-moz-tree-image(query) {
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-image(query, OrganizerQuery_allbms_____v) {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/starred48.png");
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-image(query, OrganizerQuery_downloads__v) {
|
||||
diff --git a/browser/themes/shared/preferences/preferences.inc.css b/browser/themes/shared/preferences/preferences.inc.css
|
||||
--- a/browser/themes/shared/preferences/preferences.inc.css
|
||||
+++ b/browser/themes/shared/preferences/preferences.inc.css
|
||||
@@ -601,8 +601,8 @@ richlistitem[selected] .actionsMenu:focu
|
||||
background-color: transparent; /* override common.css, but keep hover/active states */
|
||||
min-width: 0;
|
||||
min-height: auto;
|
||||
- width: 20px;
|
||||
- height: 20px;
|
||||
+ width: 16px !important;
|
||||
+ height: 16px !important;
|
||||
padding: 0;
|
||||
margin-inline: 0 8px;
|
||||
}
|
||||
@@ -790,7 +790,7 @@ dialog > .sync-engines-list + hbox {
|
||||
|
||||
.sync-engine-bookmarks .checkbox-icon,
|
||||
.sync-engine-bookmarks.sync-engine-image {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/starred48.png");
|
||||
}
|
||||
|
||||
.sync-engine-history .checkbox-icon,
|
||||
diff --git a/browser/themes/shared/sidebar.inc.css b/browser/themes/shared/sidebar.inc.css
|
||||
--- a/browser/themes/shared/sidebar.inc.css
|
||||
+++ b/browser/themes/shared/sidebar.inc.css
|
||||
@@ -106,7 +106,7 @@ toolbarseparator + #sidebar-extensions-s
|
||||
}
|
||||
|
||||
#sidebar-box[sidebarcommand="viewBookmarksSidebar"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
|
||||
- list-style-image: url(chrome://browser/skin/bookmark.svg);
|
||||
+ list-style-image: url(chrome://browser/skin/starred48.png);
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
opacity: 0.8;
|
||||
--- a/browser/themes/shared/tabs.inc.css 2021-09-28 00:46:31.000000000 +0200
|
||||
+++ b/browser/themes/shared/tabs.inc.css 2021-10-21 00:55:40.676223564 +0200
|
||||
@@ -44,6 +44,7 @@
|
||||
#tabbrowser-tabs {
|
||||
--tab-min-width: 76px;
|
||||
--tab-loading-fill: #0A84FF;
|
||||
+ --tab-min-height: 24px !important;
|
||||
}
|
||||
|
||||
#tabbrowser-tabpanels {
|
||||
@@ -90,11 +91,9 @@
|
||||
margin: 0 !important /* override tabbox.css */;
|
||||
padding: 0 !important /* override tabbox.css */;
|
||||
-moz-box-align: stretch;
|
||||
-}
|
||||
-
|
||||
-.tabbrowser-tab {
|
||||
min-height: var(--tab-min-height);
|
||||
padding-inline: 2px !important;
|
||||
+ height: 24px !important;
|
||||
}
|
||||
|
||||
/* tabbrowser-tab keyboard focus */
|
||||
@@ -447,10 +446,11 @@
|
||||
.tab-close-button {
|
||||
-moz-context-properties: fill, fill-opacity;
|
||||
margin-inline-end: calc(var(--inline-tab-padding) / -2);
|
||||
- width: 24px;
|
||||
- height: 24px;
|
||||
- padding: 7px;
|
||||
+ width: 16px !important;
|
||||
+ height: 16px !important;
|
||||
+ padding: 0px;
|
||||
border-radius: var(--tab-border-radius);
|
||||
+ list-style-image: url("chrome://browser/skin/tab-close.png");
|
||||
}
|
||||
|
||||
/* The following rulesets allow showing more of the tab title */
|
||||
@@ -541,9 +541,8 @@
|
||||
.tab-background {
|
||||
border: 1px none transparent;
|
||||
background-clip: padding-box;
|
||||
-}
|
||||
-
|
||||
-.tab-background {
|
||||
+ margin-top: 0;
|
||||
+ height: 24px;
|
||||
border-radius: var(--tab-border-radius);
|
||||
margin-block: var(--tab-block-margin);
|
||||
}
|
||||
@@ -645,7 +644,7 @@
|
||||
|
||||
#tabbrowser-tabs[haspinnedtabs]:not([positionpinnedtabs]) > #tabbrowser-arrowscrollbox > .tabbrowser-tab[first-visible-unpinned-tab] {
|
||||
/* Add a gap between the last pinned tab and the first visible tab */
|
||||
- margin-inline-start: 12px !important; /* .tabbrowser-tab sets margin: 0 !important; */
|
||||
+ margin-inline-start: 0px !important; /* .tabbrowser-tab sets margin: 0 !important; */
|
||||
}
|
||||
|
||||
.tab-label[attention]:not([selected="true"]) {
|
||||
@@ -778,5 +777,55 @@
|
||||
}
|
||||
|
||||
.all-tabs-item > toolbarbutton {
|
||||
- margin-inline-start: 0;
|
||||
+ margin-inline-start: 0 !important;
|
||||
+}
|
||||
+
|
||||
+tab {
|
||||
+ font-size: 16px !important;
|
||||
+ font-family: sans-serif !important;
|
||||
+ padding-inline-start: 0px !important;
|
||||
+ padding-inline-end: 0px !important;
|
||||
+}
|
||||
+
|
||||
+.tab-background {
|
||||
+ /*background: #eeeeee;*/
|
||||
+ border-radius: 0 !important;
|
||||
+ margin-bottom: 0px !important;
|
||||
+ box-shadow: 0 0 2px 2px rgba(0,0,0,0.1) !important;
|
||||
+ border: 1px solid rgba(0,0,0,.5) !important;
|
||||
+ border-bottom-width: 0px !important;
|
||||
+}
|
||||
+
|
||||
+#tabbrowser-tabs {
|
||||
+ --tab-min-height: 24px !important;
|
||||
+}
|
||||
+#scrollbutton-up,
|
||||
+#scrollbutton-down {
|
||||
+ border-top-width: 0 !important;
|
||||
+ border-bottom-width: 0 !important;
|
||||
+}
|
||||
+
|
||||
+.tabbrowser-tab[selected] .tab-background {
|
||||
+ background: #75cc00 !important;
|
||||
+}
|
||||
+
|
||||
+.tabbrowser-tab[selected] .tab-label {
|
||||
+ color: black !important;
|
||||
+ font-weight: bold !important;
|
||||
+}
|
||||
+
|
||||
+#TabsToolbar {
|
||||
+ border-bottom: 2px solid #000000 !important;
|
||||
+ height: 24px !important;
|
||||
+}
|
||||
+/*
|
||||
+.tabbrowser-tab:hover .tab-background:not([selected]) {
|
||||
+ background: #75cc00 !important;
|
||||
+}*/
|
||||
+
|
||||
+.tabbrowser-tab:not([selected]) > .tab-stack > .tab-content > .tab-label-container > .tab-close-button {
|
||||
+ list-style-image: url("chrome://browser/skin/tab-close_inactive.png") !important;
|
||||
+}
|
||||
+.tabbrowser-tab > .tab-stack > .tab-content > .tab-label-container > .tab-close-button:hover {
|
||||
+ list-style-image: url("chrome://browser/skin/tab-close_hover.png") !important;
|
||||
}
|
||||
diff --git a/browser/themes/shared/toolbarbutton-icons.inc.css b/browser/themes/shared/toolbarbutton-icons.inc.css
|
||||
--- a/browser/themes/shared/toolbarbutton-icons.inc.css
|
||||
+++ b/browser/themes/shared/toolbarbutton-icons.inc.css
|
||||
@@ -56,11 +56,11 @@ toolbar[brighttext]:-moz-lwtheme {
|
||||
}
|
||||
|
||||
#back-button {
|
||||
- list-style-image: url("chrome://browser/skin/back.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/back.png");
|
||||
}
|
||||
|
||||
#forward-button {
|
||||
- list-style-image: url("chrome://browser/skin/forward.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/forward.png");
|
||||
}
|
||||
|
||||
/* The animations for the reload-button and stop-button are disabled
|
||||
@@ -120,10 +120,6 @@ toolbar[brighttext]:-moz-lwtheme {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
-#nav-bar-customization-target :where(#reload-button, #stop-button) > .toolbarbutton-icon {
|
||||
- padding: calc(var(--toolbarbutton-inner-padding) + 1px) var(--toolbarbutton-inner-padding) calc(var(--toolbarbutton-inner-padding) - 1px ) !important; /* The animation is 18px but the other icons are 16px, lower it by 1px so it is vertically centered */
|
||||
-}
|
||||
-
|
||||
#reload-button > .toolbarbutton-animatable-box,
|
||||
#stop-button > .toolbarbutton-animatable-box {
|
||||
top: calc(50% - 9px); /* Vertically center the 20px tall animatable image, which is 1px higher than other icons */
|
||||
@@ -134,25 +130,6 @@ toolbar[brighttext]:-moz-lwtheme {
|
||||
height: 20px; /* Height of each frame within the SVG sprite */
|
||||
}
|
||||
|
||||
-#stop-reload-button[animate] > #reload-button > .toolbarbutton-animatable-box > .toolbarbutton-animatable-image {
|
||||
- background-image: url("chrome://browser/skin/stop-to-reload.svg");
|
||||
- /*
|
||||
- transition from stop icon to reload icon
|
||||
- pause at frame 0 for 6 ticks,
|
||||
- pause at frame 15 for 16 ticks
|
||||
- total 35 steps*/
|
||||
- --anim-frames: 14;
|
||||
- --anim-steps: calc(var(--anim-frames) + 21); /* Add steps for doing the pause at the start and end */
|
||||
- width: calc(20px * (var(--anim-frames) + 1));
|
||||
- height: 20px;
|
||||
-
|
||||
- /* initial state for animation */
|
||||
- transform: translateX(0);
|
||||
-}
|
||||
-
|
||||
-#stop-reload-button[animate] > #reload-button:not([displaystop]) > .toolbarbutton-animatable-box > .toolbarbutton-animatable-image {
|
||||
- animation-name: stop-to-reload;
|
||||
-}
|
||||
|
||||
#reload-button:not([displaystop]) > .toolbarbutton-animatable-box > .toolbarbutton-animatable-image {
|
||||
animation-duration: calc(var(--anim-steps) * 16.667ms);
|
||||
@@ -193,15 +170,16 @@ toolbar[brighttext]:-moz-lwtheme {
|
||||
}
|
||||
|
||||
#reload-button {
|
||||
- list-style-image: url("chrome://global/skin/icons/reload.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/refresh.png");
|
||||
}
|
||||
|
||||
#stop-button {
|
||||
- list-style-image: url("chrome://global/skin/icons/close.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/stop.png");
|
||||
+ display: block !important;
|
||||
}
|
||||
|
||||
#home-button {
|
||||
- list-style-image: url("chrome://browser/skin/home.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/home.png");
|
||||
}
|
||||
|
||||
#bookmarks-toolbar-button,
|
||||
diff --git a/browser/themes/shared/urlbar-searchbar.inc.css b/browser/themes/shared/urlbar-searchbar.inc.css
|
||||
--- a/browser/themes/shared/urlbar-searchbar.inc.css
|
||||
+++ b/browser/themes/shared/urlbar-searchbar.inc.css
|
||||
@@ -43,14 +43,14 @@
|
||||
background-color: var(--toolbar-field-background-color);
|
||||
background-clip: border-box;
|
||||
border: 1px solid var(--toolbar-field-border-color);
|
||||
- border-radius: var(--toolbarbutton-border-radius);
|
||||
+ /*border-radius: var(--toolbarbutton-border-radius);*/
|
||||
}
|
||||
-
|
||||
+/*
|
||||
#urlbar-input-container,
|
||||
#searchbar {
|
||||
border-radius: var(--toolbarbutton-border-radius);
|
||||
overflow: clip;
|
||||
-}
|
||||
+}*/
|
||||
|
||||
#urlbar-input,
|
||||
#urlbar-scheme,
|
||||
@@ -66,13 +66,13 @@
|
||||
|
||||
#urlbar[focused="true"]:not([suppress-focus-border]) > #urlbar-background,
|
||||
#searchbar:focus-within {
|
||||
- outline: var(--focus-outline);
|
||||
- outline-offset: calc(var(--focus-outline-width) * -1);
|
||||
+ /*outline: var(--focus-outline);
|
||||
+ outline-offset: calc(var(--focus-outline-width) * -1);*/
|
||||
/* We used --focus-outline above to inherit its width and style properties,
|
||||
but we still want to use the theme's border-color.
|
||||
--toolbar-field-focus-border-color is set equal to --focus-outline-color
|
||||
on :root, but LWT themes can override this value. */
|
||||
- outline-color: var(--toolbar-field-focus-border-color);
|
||||
+ /*outline-color: var(--toolbar-field-focus-border-color);*/
|
||||
border-color: transparent;
|
||||
}
|
||||
|
||||
@@ -186,13 +186,14 @@
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
height: var(--urlbar-height);
|
||||
- top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2);
|
||||
+ /*top: calc((var(--urlbar-toolbar-height) - var(--urlbar-height)) / 2);*/
|
||||
+ top: 2px;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
#urlbar[breakout] > #urlbar-input-container {
|
||||
width: 100%;
|
||||
- height: 100%;
|
||||
+ height: 32px !important;
|
||||
}
|
||||
|
||||
#urlbar:not([open]) > .urlbarView,
|
||||
@@ -277,7 +278,7 @@
|
||||
color: var(--urlbar-box-text-color);
|
||||
margin-inline-end: 8px;
|
||||
align-items: center;
|
||||
- border-radius: var(--urlbar-icon-border-radius);
|
||||
+/* border-radius: var(--urlbar-icon-border-radius);*/
|
||||
padding-inline: 8px 6px;
|
||||
}
|
||||
|
||||
@@ -336,11 +337,15 @@
|
||||
|
||||
#pageAction-panel-bookmark,
|
||||
#star-button {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark-hollow.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/unstarred48.png");
|
||||
+ width: 28px !important;
|
||||
+ height: 28px !important;
|
||||
}
|
||||
#pageAction-panel-bookmark[starred],
|
||||
#star-button[starred] {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/starred48.png");
|
||||
+ width: 28px !important;
|
||||
+ height: 28px !important;
|
||||
}
|
||||
#star-button[starred] {
|
||||
fill-opacity: 1;
|
||||
@@ -383,7 +388,7 @@
|
||||
.search-go-button {
|
||||
width: calc(var(--urlbar-min-height) - 2px /* border */ - 2 * var(--urlbar-container-padding));
|
||||
height: calc(var(--urlbar-min-height) - 2px /* border */ - 2 * var(--urlbar-container-padding));
|
||||
- border-radius: var(--urlbar-icon-border-radius);
|
||||
+/* border-radius: var(--urlbar-icon-border-radius);*/
|
||||
padding: var(--urlbar-icon-padding);
|
||||
color: inherit;
|
||||
}
|
||||
@@ -501,7 +506,7 @@
|
||||
#cfr-label-container {
|
||||
width: 0;
|
||||
overflow: hidden;
|
||||
- border-radius: 5px;
|
||||
+/* border-radius: 5px;*/
|
||||
padding-inline-start: 28px;
|
||||
mask-image: linear-gradient(to right, transparent 0, black 0);
|
||||
mask-position-x: var(--cfr-label-width);
|
||||
@@ -578,7 +583,7 @@
|
||||
color: inherit;
|
||||
font-size: .8em;
|
||||
padding: 3px 7px;
|
||||
- border-radius: var(--urlbar-icon-border-radius);
|
||||
+/* border-radius: var(--urlbar-icon-border-radius);*/
|
||||
background-color: var(--urlbar-box-bgcolor);
|
||||
color: var(--urlbar-box-text-color);
|
||||
margin-block: calc((var(--urlbar-min-height) - 20px) / 2 - 1px /* border */ - var(--urlbar-container-padding));
|
||||
--- a/browser/themes/shared/urlbarView.inc.css
|
||||
+++ b/browser/themes/shared/urlbarView.inc.css
|
||||
@@ -718,7 +718,7 @@
|
||||
|
||||
.urlbarView-row[source="bookmarks"] > .urlbarView-row-inner > .urlbarView-no-wrap > .urlbarView-favicon,
|
||||
#urlbar-engine-one-off-item-bookmarks {
|
||||
- list-style-image: url("chrome://browser/skin/bookmark.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/starred48.png");
|
||||
fill: var(--lwt-toolbar-field-icon-fill-attention, var(--toolbarbutton-icon-fill-attention));
|
||||
fill-opacity: 1;
|
||||
-moz-context-properties: fill, fill-opacity;
|
||||
--- a/browser/base/content/browser.css 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/browser/base/content/browser.css 2021-10-12 15:48:21.482190973 +0200
|
||||
@@ -1642,3 +1642,11 @@
|
||||
/**
|
||||
* End Dialogs
|
||||
*/
|
||||
+
|
||||
+.bookmark-item {
|
||||
+ margin: 0px !important;
|
||||
+ padding: 0px !important;
|
||||
+}
|
||||
+#PlacesToolbar {
|
||||
+ height: 27px !important;
|
||||
+}
|
||||
--- a/browser/themes/shared/tabs.inc.css 2021-09-28 00:46:31.000000000 +0200
|
||||
+++ b/browser/themes/shared/tabs.inc.css 2021-10-12 15:55:22.390190531 +0200
|
||||
@@ -278,7 +278,7 @@
|
||||
}
|
||||
|
||||
.tab-icon-image {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
@@ -752,7 +752,7 @@
|
||||
}
|
||||
|
||||
.all-tabs-button {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
}
|
||||
|
||||
.all-tabs-secondary-button > label {
|
||||
--- a/browser/themes/shared/aboutSessionRestore.css 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/browser/themes/shared/aboutSessionRestore.css 2021-10-12 15:56:47.191190442 +0200
|
||||
@@ -63,7 +63,7 @@
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-image(noicon) {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
--- a/browser/themes/shared/customizableui/panelUI.inc.css 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/browser/themes/shared/customizableui/panelUI.inc.css 2021-10-12 15:58:32.361190332 +0200
|
||||
@@ -1394,7 +1394,7 @@
|
||||
|
||||
.PanelUI-remotetabs-clientcontainer > toolbarbutton[itemtype="tab"],
|
||||
#PanelUI-historyItems > toolbarbutton {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
--- a/browser/themes/shared/searchbar.inc.css 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/themes/shared/searchbar.inc.css 2021-10-12 15:59:11.861190291 +0200
|
||||
@@ -5,7 +5,7 @@
|
||||
.searchbar-engine-image {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
--- a/browser/themes/shared/places/tree-icons.css 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/themes/shared/places/tree-icons.css 2021-10-12 16:00:05.215190235 +0200
|
||||
@@ -8,7 +8,7 @@
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-image(title) {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
padding-inline-end: 2px;
|
||||
margin: 0 2px;
|
||||
width: 16px;
|
||||
--- a/browser/themes/shared/syncedtabs/sidebar.inc.css 2021-09-28 00:46:26.000000000 +0200
|
||||
+++ b/browser/themes/shared/syncedtabs/sidebar.inc.css 2021-10-12 16:01:03.318190174 +0200
|
||||
@@ -132,7 +132,7 @@
|
||||
}
|
||||
|
||||
.item.tab > .item-title-container > .item-icon-container {
|
||||
- background-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ background-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
--- a/browser/themes/shared/aboutWelcomeBack.css 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/themes/shared/aboutWelcomeBack.css 2021-10-12 16:01:43.595190132 +0200
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
|
||||
treechildren::-moz-tree-image(noicon) {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
||||
--- a/browser/themes/shared/toolbarbutton-icons.inc.css 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/themes/shared/toolbarbutton-icons.inc.css 2021-10-12 16:02:37.571190075 +0200
|
||||
@@ -429,7 +429,7 @@
|
||||
/* ----- BOOKMARK BUTTONS ----- */
|
||||
|
||||
.bookmark-item {
|
||||
- list-style-image: url("chrome://global/skin/icons/defaultFavicon.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/defaultFavicon.png");
|
||||
-moz-context-properties: fill;
|
||||
fill: currentColor;
|
||||
}
|
|
@ -0,0 +1,314 @@
|
|||
--- a/browser/components/newtab/lib/DefaultSites.jsm 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/components/newtab/lib/DefaultSites.jsm 2021-10-12 11:02:34.976208950 +0200
|
||||
@@ -8,40 +8,8 @@
|
||||
// This first item is the global list fallback for any unexpected geos
|
||||
[
|
||||
"",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.wikipedia.org/,https://www.reddit.com/,https://www.amazon.com/,https://twitter.com/",
|
||||
- ],
|
||||
- [
|
||||
- "US",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.amazon.com/,https://www.reddit.com/,https://www.wikipedia.org/,https://twitter.com/",
|
||||
- ],
|
||||
- [
|
||||
- "CA",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.reddit.com/,https://www.wikipedia.org/,https://www.amazon.ca/,https://twitter.com/",
|
||||
- ],
|
||||
- [
|
||||
- "DE",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.amazon.de/,https://www.ebay.de/,https://www.wikipedia.org/,https://www.reddit.com/",
|
||||
- ],
|
||||
- [
|
||||
- "PL",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://allegro.pl/,https://www.wikipedia.org/,https://www.olx.pl/,https://www.wykop.pl/",
|
||||
- ],
|
||||
- [
|
||||
- "RU",
|
||||
- "https://vk.com/,https://www.youtube.com/,https://ok.ru/,https://www.avito.ru/,https://www.aliexpress.com/,https://www.wikipedia.org/",
|
||||
- ],
|
||||
- [
|
||||
- "GB",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.reddit.com/,https://www.amazon.co.uk/,https://www.bbc.co.uk/,https://www.ebay.co.uk/",
|
||||
- ],
|
||||
- [
|
||||
- "FR",
|
||||
- "https://www.youtube.com/,https://www.facebook.com/,https://www.wikipedia.org/,https://www.amazon.fr/,https://www.leboncoin.fr/,https://twitter.com/",
|
||||
- ],
|
||||
- [
|
||||
- "CN",
|
||||
- "https://www.baidu.com/,https://www.zhihu.com/,https://www.ifeng.com/,https://weibo.com/,https://www.ctrip.com/,https://www.iqiyi.com/",
|
||||
- ],
|
||||
+ "https://duck.com/",
|
||||
+ ]
|
||||
]);
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["DEFAULT_SITES"];
|
||||
--- a/browser/components/places/CommonNames.jsm 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/browser/components/places/CommonNames.jsm 2021-10-12 11:10:58.952208421 +0200
|
||||
@@ -20,265 +20,7 @@
|
||||
* a site doesn't expose site_name metadata. Maps a site's hostname (not
|
||||
* including `www.`) to its common name.
|
||||
*/
|
||||
-const CUSTOM_NAMES = new Map([
|
||||
- ["adobe.com", "Adobe"],
|
||||
- ["adp.com", "ADP"],
|
||||
- ["airbnb.com", "Airbnb"],
|
||||
- ["alibaba.com", "Alibaba"],
|
||||
- ["aliexpress.com", "AliExpress"],
|
||||
- ["aliexpress.ru", "AliExpress.ru"],
|
||||
- ["allegro.pl", "Allegro"],
|
||||
- ["amazon.ca", "Amazon.ca"],
|
||||
- ["amazon.co.jp", "Amazon.co.jp"],
|
||||
- ["amazon.co.uk", "Amazon.co.uk"],
|
||||
- ["amazon.com", "Amazon"],
|
||||
- ["amazon.de", "Amazon.de"],
|
||||
- ["amazon.es", "Amazon.es"],
|
||||
- ["amazon.fr", "Amazon.fr"],
|
||||
- ["amazon.in", "Amazon.in"],
|
||||
- ["amazon.it", "Amazon.it"],
|
||||
- ["amazonaws.com", "AWS"],
|
||||
- ["americanexpress.com", "American Express"],
|
||||
- ["ameritrade.com", "TD Ameritrade"],
|
||||
- ["aol.com", "AOL"],
|
||||
- ["apple.com", "Apple"],
|
||||
- ["archive.org", "Internet Archive"],
|
||||
- ["ask.com", "Ask.com"],
|
||||
- ["att.com", "AT&T"],
|
||||
- ["aws.amazon.com", "AWS"],
|
||||
- ["bankofamerica.com", "Bank of America"],
|
||||
- ["bbc.co.uk", "BBC"],
|
||||
- ["bbc.com", "BBC"],
|
||||
- ["bestbuy.com", "Best Buy"],
|
||||
- ["bing.com", "Bing"],
|
||||
- ["blogger.com", "Blogger"],
|
||||
- ["bloomberg.com", "Bloomberg"],
|
||||
- ["bluehost.com", "Bluehost"],
|
||||
- ["booking.com", "Booking.com"],
|
||||
- ["bscscan.com", "BscScan"],
|
||||
- ["businessinsider.com", "Insider"],
|
||||
- ["ca.gov", "California State Portal"],
|
||||
- ["canada.ca", "Government of Canada"],
|
||||
- ["canva.com", "Canva"],
|
||||
- ["capitalone.com", "Capital One"],
|
||||
- ["cdc.gov", "CDC.gov"],
|
||||
- ["chase.com", "Chase"],
|
||||
- ["chess.com", "Chess.com"],
|
||||
- ["citi.com", "Citi.com"],
|
||||
- ["cj.com", "CJ Affiliate"],
|
||||
- ["cnbc.com", "CNBC"],
|
||||
- ["cnet.com", "CNET"],
|
||||
- ["cnn.com", "CNN"],
|
||||
- ["cnnindonesia.com", "CNN Indonesia"],
|
||||
- ["coingecko.com", "CoinGecko"],
|
||||
- ["coinmarketcap.com", "CoinMarketCap"],
|
||||
- ["constantcontact.com", "Constant Contact"],
|
||||
- ["coursera.org", "Coursera"],
|
||||
- ["cowin.gov.in", "CoWIN"],
|
||||
- ["craigslist.org", "Craigslist"],
|
||||
- ["dailymail.co.uk", "Daily Mail"],
|
||||
- ["dailymotion.com", "Dailymotion"],
|
||||
- ["deepl.com", "DeepL"],
|
||||
- ["dell.com", "Dell"],
|
||||
- ["discord.com", "Discord"],
|
||||
- ["disneyplus.com", "Disney+"],
|
||||
- ["docs.google.com", "Google Docs"],
|
||||
- ["docusign.net", "DocuSign"],
|
||||
- ["drive.google.com", "Google Drive"],
|
||||
- ["dropbox.com", "Dropbox"],
|
||||
- ["duckduckgo.com", "DuckDuckGo"],
|
||||
- ["ebay.co.uk", "eBay"],
|
||||
- ["ebay.com", "eBay"],
|
||||
- ["ebay.de", "eBay"],
|
||||
- ["espn.com", "ESPN"],
|
||||
- ["etherscan.io", "Etherscan"],
|
||||
- ["etrade.com", "E*TRADE"],
|
||||
- ["etsy.com", "Etsy"],
|
||||
- ["evernote.com", "Evernote"],
|
||||
- ["expedia.com", "Expedia"],
|
||||
- ["facebook.com", "Facebook"],
|
||||
- ["fandom.com", "Fandom"],
|
||||
- ["fast.com", "Fast.com"],
|
||||
- ["fedex.com", "FedEx"],
|
||||
- ["feedly.com", "Feedly"],
|
||||
- ["fidelity.com", "Fidelity"],
|
||||
- ["fiverr.com", "Fiverr"],
|
||||
- ["flickr.com", "Flickr"],
|
||||
- ["flipkart.com", "Flipkart"],
|
||||
- ["force.com", "Salesforce"],
|
||||
- ["foxnews.com", "Fox News"],
|
||||
- ["freshdesk.com", "Freshdesk"],
|
||||
- ["geeksforgeeks.org", "GeeksforGeeks"],
|
||||
- ["github.com", "GitHub"],
|
||||
- ["glassdoor.com", "Glassdoor"],
|
||||
- ["gmail.com", "Gmail"],
|
||||
- ["godaddy.com", "GoDaddy"],
|
||||
- ["goodreads.com", "Goodreads"],
|
||||
- ["google.az", "Google"],
|
||||
- ["google.ca", "Google"],
|
||||
- ["google.cn", "Google"],
|
||||
- ["google.co.id", "Google"],
|
||||
- ["google.co.in", "Google"],
|
||||
- ["google.co.jp", "Google"],
|
||||
- ["google.co.th", "Google"],
|
||||
- ["google.co.uk", "Google"],
|
||||
- ["google.com", "Google"],
|
||||
- ["google.com.ar", "Google"],
|
||||
- ["google.com.au", "Google"],
|
||||
- ["google.com.br", "Google"],
|
||||
- ["google.com.eg", "Google"],
|
||||
- ["google.com.hk", "Google"],
|
||||
- ["google.com.mx", "Google"],
|
||||
- ["google.com.sa", "Google"],
|
||||
- ["google.com.sg", "Google"],
|
||||
- ["google.com.tr", "Google"],
|
||||
- ["google.com.tw", "Google"],
|
||||
- ["google.de", "Google"],
|
||||
- ["google.es", "Google"],
|
||||
- ["google.fr", "Google"],
|
||||
- ["google.it", "Google"],
|
||||
- ["google.pl", "Google"],
|
||||
- ["google.ru", "Google"],
|
||||
- ["googlevideo.com", "Google Video"],
|
||||
- ["grammarly.com", "Grammarly"],
|
||||
- ["hbomax.com", "HBO Max"],
|
||||
- ["healthline.com", "Healthline"],
|
||||
- ["homedepot.com", "The Home Depot"],
|
||||
- ["hootsuite.com", "Hootsuite"],
|
||||
- ["hostgator.com", "HostGator"],
|
||||
- ["hotstar.com", "Hotstar"],
|
||||
- ["hp.com", "HP"],
|
||||
- ["hulu.com", "Hulu"],
|
||||
- ["icicibank.com", "ICICI Bank"],
|
||||
- ["ikea.com", "IKEA"],
|
||||
- ["ilovepdf.com", "iLovePDF"],
|
||||
- ["imdb.com", "IMDb"],
|
||||
- ["imgur.com", "Imgur"],
|
||||
- ["indeed.com", "Indeed"],
|
||||
- ["indiamart.com", "IndiaMART"],
|
||||
- ["indiatimes.com", "Indiatimes"],
|
||||
- ["instagram.com", "Instagram"],
|
||||
- ["instructure.com", "Instructure"],
|
||||
- ["intuit.com", "Intuit"],
|
||||
- ["investing.com", "Investing.com"],
|
||||
- ["iqbroker.com", "IQ Option"],
|
||||
- ["irs.gov", "IRS.gov"],
|
||||
- ["istockphoto.com", "iStock"],
|
||||
- ["japanpost.jp", "Japan Post"],
|
||||
- ["kayak.com ", "Kayak"],
|
||||
- ["linkedin.com", "LinkedIn"],
|
||||
- ["linktr.ee", "Linktree"],
|
||||
- ["live.com", "Live"],
|
||||
- ["loom.com", "Loom"],
|
||||
- ["mail.google.com", "Gmail"],
|
||||
- ["mailchimp.com", "Mailchimp"],
|
||||
- ["manage.wix.com", "Wix"],
|
||||
- ["maps.google.com", "Google Maps"],
|
||||
- ["marca.com", "MARCA"],
|
||||
- ["mediafire.com", "MediaFire"],
|
||||
- ["mercadolibre.com.mx", "Mercado Libre"],
|
||||
- ["mercadolivre.com.br", "Mercado Livre"],
|
||||
- ["mercari.com", "Mercari"],
|
||||
- ["microsoft.com", "Microsoft"],
|
||||
- ["mlb.com", "MLB.com"],
|
||||
- ["moneycontrol.com", "moneycontrol.com"],
|
||||
- ["mozilla.org", "Mozilla"],
|
||||
- ["msn.com", "MSN"],
|
||||
- ["myshopify.com", "Shopify"],
|
||||
- ["myworkdayjobs.com", "Workday"],
|
||||
- ["naukri.com", "Naukri.com"],
|
||||
- ["ndtv.com", "NDTV.com"],
|
||||
- ["netflix.com", "Netflix"],
|
||||
- ["nih.gov", "National Institutes of Health (NIH)"],
|
||||
- ["nike.com", "Nike"],
|
||||
- ["nordstrom.com", "Nordstrom"],
|
||||
- ["notion.so", "Notion"],
|
||||
- ["nypost.com", "New York Post"],
|
||||
- ["nytimes.com", "New York Times"],
|
||||
- ["office.com", "Office"],
|
||||
- ["office365.com", "Office 365"],
|
||||
- ["olympics.com", "Olympics"],
|
||||
- ["onlinesbi.com", "State Bank of India"],
|
||||
- ["orange.fr", "Orange"],
|
||||
- ["patreon.com", "Patreon"],
|
||||
- ["paypal.com", "PayPal"],
|
||||
- ["pinterest.com", "Pinterest"],
|
||||
- ["primevideo.com", "Prime Video"],
|
||||
- ["quora.com", "Quora"],
|
||||
- ["rakuten.co.jp", "Rakuten"],
|
||||
- ["rakuten.com", "Rakuten"],
|
||||
- ["realtor.com", "Realtor.com"],
|
||||
- ["redd.it", "Reddit"],
|
||||
- ["reddit.com", "Reddit"],
|
||||
- ["redfin.com", "Redfin"],
|
||||
- ["researchgate.net", "ResearchGate"],
|
||||
- ["reuters.com", "Reuters"],
|
||||
- ["reverso.net", "Reverso"],
|
||||
- ["roblox.com", "Roblox"],
|
||||
- ["rt.com", "RT"],
|
||||
- ["salesforce.com", "Salesforce"],
|
||||
- ["samsung.com", "Samsung"],
|
||||
- ["scribd.com", "Scribd"],
|
||||
- ["sheets.google.com", "Google Sheets"],
|
||||
- ["shein.com", "Shein"],
|
||||
- ["shutterstock.com", "Shutterstock"],
|
||||
- ["skype.com", "Skype"],
|
||||
- ["slides.google.com", "Google Slides"],
|
||||
- ["slideshare.net", "SlideShare"],
|
||||
- ["soundcloud.com", "SoundCloud"],
|
||||
- ["speedtest.net", "Speedtest"],
|
||||
- ["spotify.com", "Spotify"],
|
||||
- ["squarespace.com", "Squarespace"],
|
||||
- ["stackexchange.com", "Stack Exchange"],
|
||||
- ["stackoverflow.com", "Stack Overflow"],
|
||||
- ["steampowered.com", "Steam"],
|
||||
- ["taboola.com", "Taboola.com"],
|
||||
- ["target.com", "Target"],
|
||||
- ["td.com", "TD Bank"],
|
||||
- ["telegram.org", "Telegram"],
|
||||
- ["theguardian.com", "The Guardian"],
|
||||
- ["tiktok.com", "TikTok"],
|
||||
- ["tmall.com", "Tmall"],
|
||||
- ["tokopedia.com", "Tokopedia"],
|
||||
- ["trello.com", "Trello"],
|
||||
- ["tripadvisor.com", "Tripadvisor"],
|
||||
- ["trustpilot.com", "Trustpilot"],
|
||||
- ["twitch.tv", "Twitch"],
|
||||
- ["twitter.com", "Twitter"],
|
||||
- ["udemy.com", "Udemy"],
|
||||
- ["unsplash.com", "Unsplash"],
|
||||
- ["ups.com", "UPS"],
|
||||
- ["upwork.com", "Upwork"],
|
||||
- ["usps.com", "USPS"],
|
||||
- ["vimeo.com", "Vimeo"],
|
||||
- ["w3schools.com", "W3Schools"],
|
||||
- ["walmart.com", "Walmart"],
|
||||
- ["washingtonpost.com", "Washington Post"],
|
||||
- ["wayfair.com", "Wayfair"],
|
||||
- ["weather.com", "The Weather Channel"],
|
||||
- ["webmd.com", "WebMD"],
|
||||
- ["wellsfargo.com", "Wells Fargo"],
|
||||
- ["wetransfer.com", "WeTransfer"],
|
||||
- ["whatsapp.com", "WhatsApp"],
|
||||
- ["wikihow.com", "wikiHow"],
|
||||
- ["wikimedia.org", "Wikimedia Commons"],
|
||||
- ["wikipedia.org", "Wikipedia"],
|
||||
- ["wildberries.ru", "Wildberries"],
|
||||
- ["wordpress.org", "WordPress.org"],
|
||||
- ["worldometers.info", "Worldometer"],
|
||||
- ["wsj.com", "Wall Street Journal"],
|
||||
- ["xfinity.com", "Xfinity"],
|
||||
- ["y2mate.com", "Y2mate"],
|
||||
- ["yahoo.co.jp", "Yahoo Japan"],
|
||||
- ["yahoo.com", "Yahoo"],
|
||||
- ["yandex.ru", "Yandex"],
|
||||
- ["yelp.com", "Yelp"],
|
||||
- ["youtube.com", "YouTube"],
|
||||
- ["zendesk.com", "Zendesk"],
|
||||
- ["zerodha.com", "Zerodha"],
|
||||
- ["zillow.com", "Zillow"],
|
||||
- ["zoom.us", "Zoom"],
|
||||
-]);
|
||||
+const CUSTOM_NAMES = new Map([]);
|
||||
|
||||
/**
|
||||
* Maps the domains from CUSTOM_NAMES to a regex that matches a URL ending with
|
|
@ -0,0 +1,38 @@
|
|||
diff --git a/browser/themes/shared/jar.inc.mn b/browser/themes/shared/jar.inc.mn
|
||||
--- a/browser/themes/shared/jar.inc.mn
|
||||
+++ b/browser/themes/shared/jar.inc.mn
|
||||
@@ -116,9 +116,9 @@
|
||||
|
||||
skin/classic/browser/add-circle-fill.svg (../shared/icons/add-circle-fill.svg)
|
||||
skin/classic/browser/back.svg (../shared/icons/back.svg)
|
||||
- skin/classic/browser/bookmark.svg (../shared/icons/bookmark.svg)
|
||||
+ skin/classic/browser/starred48.png (../shared/icons/starred48.png)
|
||||
skin/classic/browser/bookmark-12.svg (../shared/icons/bookmark-12.svg)
|
||||
- skin/classic/browser/bookmark-hollow.svg (../shared/icons/bookmark-hollow.svg)
|
||||
+ skin/classic/browser/unstarred48.png (../shared/icons/unstarred48.png)
|
||||
skin/classic/browser/bookmark-star-on-tray.svg (../shared/icons/bookmark-star-on-tray.svg)
|
||||
skin/classic/browser/bookmarks-toolbar.svg (../shared/icons/bookmarks-toolbar.svg)
|
||||
skin/classic/browser/canvas.svg (../shared/icons/canvas.svg)
|
||||
@@ -143,6 +143,22 @@
|
||||
skin/classic/browser/history.svg (../shared/icons/history.svg)
|
||||
skin/classic/browser/home.svg (../shared/icons/home.svg)
|
||||
skin/classic/browser/import.svg (../shared/icons/import.svg)
|
||||
+ skin/classic/browser/back.png (../shared/icons/back.png)
|
||||
+ skin/classic/browser/back_hover.png (../shared/icons/back_hover.png)
|
||||
+ skin/classic/browser/forward.png (../shared/icons/forward.png)
|
||||
+ skin/classic/browser/forward_hover.png (../shared/icons/forward_hover.png)
|
||||
+ skin/classic/browser/stop.png (../shared/icons/stop.png)
|
||||
+ skin/classic/browser/stop_hover.png (../shared/icons/stop_hover.png)
|
||||
+ skin/classic/browser/home.png (../shared/icons/home.png)
|
||||
+ skin/classic/browser/home_hover.png (../shared/icons/home_hover.png)
|
||||
+ skin/classic/browser/refresh.png (../shared/icons/refresh.png)
|
||||
+ skin/classic/browser/refresh_hover.png (../shared/icons/refresh_hover.png)
|
||||
+ skin/classic/browser/tab-close.png (../shared/icons/tab-close.png)
|
||||
+ skin/classic/browser/tab-close_hover.png (../shared/icons/tab-close_hover.png)
|
||||
+ skin/classic/browser/tab-close_inactive.png (../shared/icons/tab-close_inactive.png)
|
||||
+ skin/classic/browser/fox_happy.png (../shared/icons/fox_happy.png)
|
||||
+ skin/classic/browser/fox_crying.png (../shared/icons/fox_crying.png)
|
||||
+ skin/classic/browser/defaultFavicon.png (../shared/icons/defaultFavicon.png)
|
||||
#ifndef MOZ_WIDGET_GTK
|
||||
skin/classic/browser/import-export.svg (../shared/icons/import-export.svg)
|
||||
#endif
|
|
@ -1,24 +1,30 @@
|
|||
diff --git a/browser/components/privatebrowsing/content/aboutPrivateBrowsing.html b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.html
|
||||
index f8a1764..ebf4206 100644
|
||||
index 32c9146..f645288 100644
|
||||
--- a/browser/components/privatebrowsing/content/aboutPrivateBrowsing.html
|
||||
+++ b/browser/components/privatebrowsing/content/aboutPrivateBrowsing.html
|
||||
@@ -54,10 +54,11 @@
|
||||
<div class="info">
|
||||
<h1 id="info-title" data-l10n-id="about-private-browsing-info-title"></h1>
|
||||
<p id="info-body" data-l10n-id="about-private-browsing-info-description"></p>
|
||||
- <a id="private-browsing-myths" data-l10n-id="about-private-browsing-info-myths"></a>
|
||||
+<!-- <a id="private-browsing-myths" data-l10n-id="about-private-browsing-info-myths"></a> -->
|
||||
@@ -51,14 +51,14 @@
|
||||
<div class="fake-caret"></div>
|
||||
</button>
|
||||
</div>
|
||||
- <div class="info">
|
||||
+ <!--div class="info">
|
||||
<h1 id="info-title"></h1>
|
||||
<p id="info-body"></p>
|
||||
<a id="private-browsing-myths"></a>
|
||||
- </div>
|
||||
+ </div-->
|
||||
</div>
|
||||
|
||||
+ <!--
|
||||
<div class="promo">
|
||||
- <div class="promo">
|
||||
+ <!--div class="promo">
|
||||
<div class="promo-image-large">
|
||||
<img src="" alt="" />
|
||||
@@ -73,5 +74,6 @@
|
||||
</div>
|
||||
@@ -72,6 +72,6 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
+ -->
|
||||
- </div>
|
||||
+ </div-->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,94 +1,76 @@
|
|||
diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
|
||||
index 753c4df..8eefc56 100644
|
||||
index 50a64a2..79d7d9c 100644
|
||||
--- a/toolkit/xre/nsXREDirProvider.cpp
|
||||
+++ b/toolkit/xre/nsXREDirProvider.cpp
|
||||
@@ -302,16 +302,16 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) {
|
||||
@@ -303,16 +303,16 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) {
|
||||
rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType,
|
||||
getter_AddRefs(localDir));
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
- rv = localDir->AppendNative("Mozilla"_ns);
|
||||
+ rv = localDir->AppendNative("LibreWolf"_ns);
|
||||
+ rv = localDir->AppendNative("Foxgirl"_ns);
|
||||
}
|
||||
# else
|
||||
constexpr auto dirname =
|
||||
# ifdef HAVE_USR_LIB64_DIR
|
||||
- "/usr/lib64/mozilla"_ns
|
||||
+ "/usr/lib64/librewolf"_ns
|
||||
+ "/usr/lib64/foxgirl"_ns
|
||||
# elif defined(__OpenBSD__) || defined(__FreeBSD__)
|
||||
- "/usr/local/lib/mozilla"_ns
|
||||
+ "/usr/local/lib/librewolf"_ns
|
||||
+ "/usr/local/lib/foxgirl"_ns
|
||||
# else
|
||||
- "/usr/lib/mozilla"_ns
|
||||
+ "/usr/lib/librewolf"_ns
|
||||
+ "/usr/lib/foxgirl"_ns
|
||||
# endif
|
||||
;
|
||||
rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir));
|
||||
@@ -417,9 +417,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
@@ -413,9 +413,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
rv = GetUserDataDirectoryHome(getter_AddRefs(localDir), false);
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
# if defined(XP_MACOSX)
|
||||
- rv = localDir->AppendNative("Mozilla"_ns);
|
||||
+ rv = localDir->AppendNative("LibreWolf"_ns);
|
||||
+ rv = localDir->AppendNative("Foxgirl"_ns);
|
||||
# else
|
||||
- rv = localDir->AppendNative(".mozilla"_ns);
|
||||
+ rv = localDir->AppendNative(".librewolf"_ns);
|
||||
+ rv = localDir->AppendNative(".foxgirl"_ns);
|
||||
# endif
|
||||
}
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
@@ -469,9 +469,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
@@ -465,9 +465,9 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
|
||||
else if (!strcmp(aProperty, XRE_SYS_SHARE_EXTENSION_PARENT_DIR)) {
|
||||
# ifdef ENABLE_SYSTEM_EXTENSION_DIRS
|
||||
# if defined(__OpenBSD__) || defined(__FreeBSD__)
|
||||
- static const char* const sysLExtDir = "/usr/local/share/mozilla/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/local/share/librewolf/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/local/share/foxgirl/extensions";
|
||||
# else
|
||||
- static const char* const sysLExtDir = "/usr/share/mozilla/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/share/librewolf/extensions";
|
||||
+ static const char* const sysLExtDir = "/usr/share/foxgirl/extensions";
|
||||
# endif
|
||||
return NS_NewNativeLocalFile(nsDependentCString(sysLExtDir), false, aFile);
|
||||
# else
|
||||
@@ -1278,7 +1278,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult,
|
||||
@@ -1276,7 +1276,7 @@ nsresult nsXREDirProvider::GetUpdateRootDir(nsIFile** aResult,
|
||||
nsDependentCString(hasVendor ? GetAppVendor() : GetAppName())))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
- } else if (NS_FAILED(localDir->AppendNative("Mozilla"_ns))) {
|
||||
+ } else if (NS_FAILED(localDir->AppendNative("LibreWolf"_ns))) {
|
||||
+ } else if (NS_FAILED(localDir->AppendNative("Foxgril"_ns))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
@@ -1584,7 +1584,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
@@ -1559,7 +1559,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
|
||||
#if defined(XP_MACOSX) || defined(XP_WIN)
|
||||
|
||||
- static const char* const sXR = "Mozilla";
|
||||
+ static const char* const sXR = "LibreWolf";
|
||||
+ static const char* const sXR = "Foxgirl";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -1594,7 +1594,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
@@ -1569,7 +1569,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
|
||||
|
||||
#elif defined(XP_UNIX)
|
||||
|
||||
- static const char* const sXR = ".mozilla";
|
||||
+ static const char* const sXR = ".librewolf";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -1615,7 +1615,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile) {
|
||||
|
||||
#if defined(XP_MACOSX) || defined(XP_WIN)
|
||||
|
||||
- static const char* const sXR = "Mozilla";
|
||||
+ static const char* const sXR = "LibreWolf";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
@@ -1625,7 +1625,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionsDevPath(nsIFile* aFile) {
|
||||
|
||||
#elif defined(XP_UNIX)
|
||||
|
||||
- static const char* const sXR = ".mozilla";
|
||||
+ static const char* const sXR = ".librewolf";
|
||||
+ static const char* const sXR = ".foxgirl";
|
||||
rv = aFile->AppendNative(nsDependentCString(sXR));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
--- a/browser/themes/shared/preferences/preferences.inc.css 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/browser/themes/shared/preferences/preferences.inc.css 2021-10-12 15:18:19.065192862 +0200
|
||||
@@ -908,7 +908,7 @@
|
||||
}
|
||||
|
||||
.face-sad {
|
||||
- list-style-image: url("chrome://browser/skin/preferences/face-sad.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/fox_crying.png");
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-block: 5px;
|
||||
@@ -916,7 +916,7 @@
|
||||
}
|
||||
|
||||
.face-smile {
|
||||
- list-style-image: url("chrome://browser/skin/preferences/face-smile.svg");
|
||||
+ list-style-image: url("chrome://browser/skin/fox_happy.png");
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
margin-block: 5px;
|
|
@ -0,0 +1,35 @@
|
|||
--- a/browser/locales/en-US/browser/browserContext.ftl 2021-09-28 00:46:32.000000000 +0200
|
||||
+++ b/browser/locales/en-US/browser/browserContext.ftl 2021-10-12 15:37:50.134191634 +0200
|
||||
@@ -256,11 +256,11 @@
|
||||
.accesskey = R
|
||||
|
||||
main-context-menu-image-view-new-tab =
|
||||
- .label = Open Image in New Tab
|
||||
+ .label = View Image
|
||||
.accesskey = I
|
||||
|
||||
main-context-menu-video-view-new-tab =
|
||||
- .label = Open Video in New Tab
|
||||
+ .label = View Video
|
||||
.accesskey = i
|
||||
|
||||
main-context-menu-image-copy =
|
||||
@@ -425,6 +425,9 @@
|
||||
.label = View Page Source
|
||||
.accesskey = V
|
||||
|
||||
+main-context-menu-view-page-info =
|
||||
+ .label = View Page Info
|
||||
+
|
||||
main-context-menu-bidi-switch-text =
|
||||
.label = Switch Text Direction
|
||||
.accesskey = w
|
||||
@@ -434,7 +437,7 @@
|
||||
.accesskey = D
|
||||
|
||||
main-context-menu-inspect =
|
||||
- .label = Inspect
|
||||
+ .label = Inspect Element
|
||||
.accesskey = Q
|
||||
|
||||
main-context-menu-inspect-a11y-properties =
|
|
@ -0,0 +1,205 @@
|
|||
--- firefox-94.0/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
+++ _firefox/browser/base/content/navigator-toolbox.inc.xhtml
|
||||
@@ -28,71 +28,6 @@
|
||||
#include titlebar-items.inc.xhtml
|
||||
</toolbar>
|
||||
|
||||
- <toolbar id="TabsToolbar"
|
||||
- class="browser-toolbar titlebar-color"
|
||||
- fullscreentoolbar="true"
|
||||
- customizable="true"
|
||||
- customizationtarget="TabsToolbar-customization-target"
|
||||
- mode="icons"
|
||||
- data-l10n-id="tabs-toolbar"
|
||||
- context="toolbar-context-menu"
|
||||
- flex="1">
|
||||
-
|
||||
- <hbox class="titlebar-spacer" type="pre-tabs"/>
|
||||
-
|
||||
- <hbox flex="1" align="end" class="toolbar-items">
|
||||
- <hbox id="TabsToolbar-customization-target" flex="1">
|
||||
- <tabs id="tabbrowser-tabs"
|
||||
- is="tabbrowser-tabs"
|
||||
- flex="1"
|
||||
- aria-multiselectable="true"
|
||||
- setfocus="false"
|
||||
- tooltip="tabbrowser-tab-tooltip"
|
||||
- stopwatchid="FX_TAB_CLICK_MS">
|
||||
- <hbox class="tab-drop-indicator" hidden="true"/>
|
||||
- <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="horizontal" flex="1" style="min-width: 1px;" clicktoscroll="true" scrolledtostart="true" scrolledtoend="true">
|
||||
- <tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
|
||||
- <toolbarbutton id="tabs-newtab-button"
|
||||
- class="toolbarbutton-1"
|
||||
- command="cmd_newNavigatorTab"
|
||||
- onclick="checkForMiddleClick(this, event);"
|
||||
- tooltip="dynamic-shortcut-tooltip"/>
|
||||
- <spacer class="closing-tabs-spacer" style="width: 0;"/>
|
||||
- </arrowscrollbox>
|
||||
- <html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
|
||||
- </tabs>
|
||||
-
|
||||
- <toolbarbutton id="new-tab-button"
|
||||
- class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
- data-l10n-id="tabs-toolbar-new-tab"
|
||||
- command="cmd_newNavigatorTab"
|
||||
- onclick="checkForMiddleClick(this, event);"
|
||||
- tooltip="dynamic-shortcut-tooltip"
|
||||
- ondrop="newTabButtonObserver.onDrop(event)"
|
||||
- ondragover="newTabButtonObserver.onDragOver(event)"
|
||||
- ondragenter="newTabButtonObserver.onDragOver(event)"
|
||||
- cui-areatype="toolbar"
|
||||
- removable="true"/>
|
||||
-
|
||||
- <toolbarbutton id="alltabs-button"
|
||||
- class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button"
|
||||
- badged="true"
|
||||
- oncommand="gTabsPanel.showAllTabsPanel(event);"
|
||||
- data-l10n-id="tabs-toolbar-list-all-tabs"
|
||||
- removable="false"/>
|
||||
- </hbox>
|
||||
- </hbox>
|
||||
-
|
||||
- <hbox class="titlebar-spacer" type="post-tabs"/>
|
||||
-
|
||||
- <button class="accessibility-indicator" data-l10n-id="navbar-accessibility-indicator"
|
||||
- aria-live="polite"/>
|
||||
- <hbox class="private-browsing-indicator"/>
|
||||
-
|
||||
-#include titlebar-items.inc.xhtml
|
||||
-
|
||||
- </toolbar>
|
||||
-
|
||||
</vbox>
|
||||
|
||||
<toolbar id="nav-bar"
|
||||
@@ -125,9 +60,16 @@
|
||||
onclick="checkForMiddleClick(this, event);"
|
||||
tooltip="forward-button-tooltip"
|
||||
context="backForwardMenu"/>
|
||||
- <toolbaritem id="stop-reload-button" class="chromeclass-toolbar-additional"
|
||||
- data-l10n-id="toolbar-button-stop-reload"
|
||||
- removable="true" overflows="false">
|
||||
+ <toolbarbutton id="home-button" class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
+ removable="true"
|
||||
+ label="&homeButton.label;"
|
||||
+ ondragover="homeButtonObserver.onDragOver(event)"
|
||||
+ ondragenter="homeButtonObserver.onDragOver(event)"
|
||||
+ ondrop="homeButtonObserver.onDrop(event)"
|
||||
+ key="goHome"
|
||||
+ onclick="BrowserHome(event);"
|
||||
+ cui-areatype="toolbar"
|
||||
+ tooltiptext="&homeButton.defaultPage.tooltip;"/>
|
||||
<toolbarbutton id="reload-button" class="toolbarbutton-1"
|
||||
data-l10n-id="toolbar-button-reload"
|
||||
command="Browser:ReloadOrDuplicate"
|
||||
@@ -145,8 +87,6 @@
|
||||
<image class="toolbarbutton-animatable-image"/>
|
||||
</box>
|
||||
</toolbarbutton>
|
||||
- </toolbaritem>
|
||||
- <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
|
||||
<toolbaritem id="urlbar-container" flex="400" persist="width"
|
||||
removable="false"
|
||||
class="chromeclass-location" overflows="false">
|
||||
@@ -168,20 +108,6 @@
|
||||
class="chromeclass-toolbar-additional"/>
|
||||
<!-- Use onclick instead of normal popup= syntax since the popup
|
||||
code fires onmousedown, and hence eats our favicon drag events. -->
|
||||
- <box id="tracking-protection-icon-container" align="center"
|
||||
- role="button"
|
||||
- onclick="gProtectionsHandler.handleProtectionsButtonEvent(event);"
|
||||
- onkeypress="gProtectionsHandler.handleProtectionsButtonEvent(event);"
|
||||
- onmouseover="gProtectionsHandler.onTrackingProtectionIconHoveredOrFocused();"
|
||||
- onfocus="gProtectionsHandler.onTrackingProtectionIconHoveredOrFocused();"
|
||||
- tooltip="tracking-protection-icon-tooltip">
|
||||
- <box id="tracking-protection-icon-box">
|
||||
- <image id="tracking-protection-icon"/>
|
||||
- </box>
|
||||
- <tooltip id="tracking-protection-icon-tooltip">
|
||||
- <description id="tracking-protection-icon-tooltip-label" class="tooltip-label"/>
|
||||
- </tooltip>
|
||||
- </box>
|
||||
<box id="identity-box"
|
||||
pageproxystate="invalid"
|
||||
ondragstart="gIdentityHandler.onDragStart(event);">
|
||||
@@ -368,8 +294,6 @@
|
||||
<toolbartabstop/>
|
||||
</toolbaritem>
|
||||
|
||||
- <toolbarspring cui-areatype="toolbar" class="chromeclass-toolbar-additional"/>
|
||||
-
|
||||
<toolbarbutton id="downloads-button"
|
||||
class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
badged="true"
|
||||
@@ -526,6 +450,71 @@
|
||||
</hbox>
|
||||
</toolbaritem>
|
||||
</toolbar>
|
||||
+
|
||||
+ <toolbar id="TabsToolbar"
|
||||
+ class="browser-toolbar titlebar-color"
|
||||
+ fullscreentoolbar="true"
|
||||
+ customizable="true"
|
||||
+ customizationtarget="TabsToolbar-customization-target"
|
||||
+ mode="icons"
|
||||
+ data-l10n-id="tabs-toolbar"
|
||||
+ context="toolbar-context-menu"
|
||||
+ flex="1">
|
||||
+
|
||||
+ <hbox class="titlebar-spacer" type="pre-tabs"/>
|
||||
+
|
||||
+ <hbox flex="1" align="end" class="toolbar-items">
|
||||
+ <hbox id="TabsToolbar-customization-target" flex="1">
|
||||
+ <tabs id="tabbrowser-tabs"
|
||||
+ is="tabbrowser-tabs"
|
||||
+ flex="1"
|
||||
+ aria-multiselectable="true"
|
||||
+ setfocus="false"
|
||||
+ tooltip="tabbrowser-tab-tooltip"
|
||||
+ stopwatchid="FX_TAB_CLICK_MS">
|
||||
+ <hbox class="tab-drop-indicator" hidden="true"/>
|
||||
+ <arrowscrollbox id="tabbrowser-arrowscrollbox" orient="horizontal" flex="1" style="min-width: 1px;" clicktoscroll="true" scrolledtostart="true" scrolledtoend="true">
|
||||
+ <tab is="tabbrowser-tab" class="tabbrowser-tab" selected="true" visuallyselected="true" fadein="true"/>
|
||||
+ <toolbarbutton id="tabs-newtab-button"
|
||||
+ class="toolbarbutton-1"
|
||||
+ command="cmd_newNavigatorTab"
|
||||
+ onclick="checkForMiddleClick(this, event);"
|
||||
+ tooltip="dynamic-shortcut-tooltip"/>
|
||||
+ <spacer class="closing-tabs-spacer" style="width: 0;"/>
|
||||
+ </arrowscrollbox>
|
||||
+ <html:span id="tabbrowser-tab-a11y-desc" hidden="true"/>
|
||||
+ </tabs>
|
||||
+
|
||||
+ <toolbarbutton id="new-tab-button"
|
||||
+ class="toolbarbutton-1 chromeclass-toolbar-additional"
|
||||
+ data-l10n-id="tabs-toolbar-new-tab"
|
||||
+ command="cmd_newNavigatorTab"
|
||||
+ onclick="checkForMiddleClick(this, event);"
|
||||
+ tooltip="dynamic-shortcut-tooltip"
|
||||
+ ondrop="newTabButtonObserver.onDrop(event)"
|
||||
+ ondragover="newTabButtonObserver.onDragOver(event)"
|
||||
+ ondragenter="newTabButtonObserver.onDragOver(event)"
|
||||
+ cui-areatype="toolbar"
|
||||
+ removable="true"/>
|
||||
+
|
||||
+ <toolbarbutton id="alltabs-button"
|
||||
+ class="toolbarbutton-1 chromeclass-toolbar-additional tabs-alltabs-button"
|
||||
+ badged="true"
|
||||
+ oncommand="gTabsPanel.showAllTabsPanel(event);"
|
||||
+ data-l10n-id="tabs-toolbar-list-all-tabs"
|
||||
+ removable="false"/>
|
||||
+ </hbox>
|
||||
+ </hbox>
|
||||
+
|
||||
+ <hbox class="titlebar-spacer" type="post-tabs"/>
|
||||
+
|
||||
+ <button class="accessibility-indicator" data-l10n-id="navbar-accessibility-indicator"
|
||||
+ aria-live="polite"/>
|
||||
+ <hbox class="private-browsing-indicator"/>
|
||||
+
|
||||
+#include titlebar-items.inc.xhtml
|
||||
+
|
||||
+ </toolbar>
|
||||
|
||||
<html:template id="tab-notification-deck-template">
|
||||
<html:named-deck id="tab-notification-deck"></html:named-deck>
|
|
@ -0,0 +1,849 @@
|
|||
diff -ur a/netwerk/base/RequestContextService.cpp b/netwerk/base/RequestContextService.cpp
|
||||
--- a/netwerk/base/RequestContextService.cpp 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/base/RequestContextService.cpp 2021-10-20 21:16:24.413520944 +0200
|
||||
@@ -60,6 +60,7 @@
|
||||
uint64_t mID;
|
||||
Atomic<uint32_t> mBlockingTransactionCount;
|
||||
UniquePtr<SpdyPushCache> mSpdyCache;
|
||||
+ nsCString mUserAgentOverride;
|
||||
|
||||
using PendingTailRequest = nsCOMPtr<nsIRequestTailUnblockCallback>;
|
||||
// Number of known opened non-tailed requets
|
||||
@@ -186,6 +187,15 @@
|
||||
|
||||
uint64_t RequestContext::GetID() { return mID; }
|
||||
|
||||
+const nsACString& RequestContext::GetUserAgentOverride() {
|
||||
+ return mUserAgentOverride;
|
||||
+}
|
||||
+
|
||||
+void RequestContext::SetUserAgentOverride(
|
||||
+ const nsACString& aUserAgentOverride) {
|
||||
+ mUserAgentOverride = aUserAgentOverride;
|
||||
+}
|
||||
+
|
||||
NS_IMETHODIMP
|
||||
RequestContext::AddNonTailRequest() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
diff -ur a/netwerk/base/nsILoadGroup.idl b/netwerk/base/nsILoadGroup.idl
|
||||
--- a/netwerk/base/nsILoadGroup.idl 2021-09-28 00:46:56.000000000 +0200
|
||||
+++ b/netwerk/base/nsILoadGroup.idl 2021-10-20 21:17:31.740524540 +0200
|
||||
@@ -96,6 +96,8 @@
|
||||
*/
|
||||
attribute nsLoadFlags defaultLoadFlags;
|
||||
|
||||
+ attribute ACString userAgentOverrideCache;
|
||||
+
|
||||
/**
|
||||
* Returns true if the loadGroup belongs to a discarded context, such as, a
|
||||
* terminated private browsing session.
|
||||
diff -ur a/netwerk/base/nsIRequestContext.idl b/netwerk/base/nsIRequestContext.idl
|
||||
--- a/netwerk/base/nsIRequestContext.idl 2021-09-28 00:47:20.000000000 +0200
|
||||
+++ b/netwerk/base/nsIRequestContext.idl 2021-10-20 21:18:11.556526666 +0200
|
||||
@@ -93,6 +93,8 @@
|
||||
*/
|
||||
[notxpcom,nostdcall] attribute SpdyPushCachePtr spdyPushCache;
|
||||
|
||||
+ [notxpcom,nostdcall] attribute ACString userAgentOverride;
|
||||
+
|
||||
/**
|
||||
* Increases/decrease the number of non-tailed requests in this context.
|
||||
* If the count drops to zero, all tail-blocked callbacks are notified
|
||||
diff -ur a/netwerk/base/nsLoadGroup.cpp b/netwerk/base/nsLoadGroup.cpp
|
||||
--- a/netwerk/base/nsLoadGroup.cpp 2021-09-28 00:47:46.000000000 +0200
|
||||
+++ b/netwerk/base/nsLoadGroup.cpp 2021-10-20 21:20:24.781533781 +0200
|
||||
@@ -767,6 +767,19 @@
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
+NS_IMETHODIMP
|
||||
+nsLoadGroup::GetUserAgentOverrideCache(nsACString& aUserAgentOverrideCache) {
|
||||
+ aUserAgentOverrideCache = mUserAgentOverrideCache;
|
||||
+ return NS_OK;
|
||||
+}
|
||||
+
|
||||
+NS_IMETHODIMP
|
||||
+nsLoadGroup::SetUserAgentOverrideCache(
|
||||
+ const nsACString& aUserAgentOverrideCache) {
|
||||
+ mUserAgentOverrideCache = aUserAgentOverrideCache;
|
||||
+ return NS_OK;
|
||||
+}
|
||||
+
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void nsLoadGroup::TelemetryReport() {
|
||||
diff -ur a/netwerk/base/nsLoadGroup.h b/netwerk/base/nsLoadGroup.h
|
||||
--- a/netwerk/base/nsLoadGroup.h 2021-09-28 00:47:20.000000000 +0200
|
||||
+++ b/netwerk/base/nsLoadGroup.h 2021-10-20 21:19:17.732530200 +0200
|
||||
@@ -103,6 +103,8 @@
|
||||
mozilla::TimeStamp mDefaultRequestCreationTime;
|
||||
uint32_t mTimedRequests{0};
|
||||
uint32_t mCachedRequests{0};
|
||||
+
|
||||
+ nsCString mUserAgentOverrideCache;
|
||||
};
|
||||
|
||||
} // namespace net
|
||||
|
||||
diff -ur a/netwerk/protocol/http/components.conf b/netwerk/protocol/http/components.conf
|
||||
--- a/netwerk/protocol/http/components.conf 2021-09-28 00:47:17.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/components.conf 2021-10-20 21:46:26.687617196 +0200
|
||||
@@ -6,6 +6,13 @@
|
||||
|
||||
Classes = [
|
||||
{
|
||||
+ 'cid': '{965b0ca8-155b-11e7-93ae-92361f002671}',
|
||||
+ 'contract_ids': ['@mozilla.org/network/ua-overrides-bootstrapper;1'],
|
||||
+ 'jsm': 'resource://gre/modules/UAOverridesBootstrapper.jsm',
|
||||
+ 'constructor': 'UAOverridesBootstrapper',
|
||||
+ 'processes': ProcessSelector.MAIN_PROCESS_ONLY,
|
||||
+ },
|
||||
+ {
|
||||
'cid': '{b4f96c89-5238-450c-8bda-e12c26f1d150}',
|
||||
'contract_ids': ['@mozilla.org/network/well-known-opportunistic-utils;1'],
|
||||
'jsm': 'resource://gre/modules/WellKnownOpportunisticUtils.jsm',
|
||||
diff -ur a/netwerk/protocol/http/moz.build b/netwerk/protocol/http/moz.build
|
||||
--- a/netwerk/protocol/http/moz.build 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/moz.build 2021-10-20 21:48:41.781624411 +0200
|
||||
@@ -174,6 +174,7 @@
|
||||
"PHttpTransaction.ipdl",
|
||||
]
|
||||
|
||||
+
|
||||
include("/ipc/chromium/chromium-config.mozbuild")
|
||||
|
||||
FINAL_LIBRARY = "xul"
|
||||
@@ -190,7 +191,10 @@
|
||||
]
|
||||
|
||||
EXTRA_JS_MODULES += [
|
||||
+ "UAOverridesBootstrapper.jsm",
|
||||
+ "UserAgentOverrides.jsm",
|
||||
+ "UserAgentUpdates.jsm",
|
||||
"WellKnownOpportunisticUtils.jsm",
|
||||
]
|
||||
|
||||
XPCOM_MANIFESTS += [
|
||||
diff -ur a/netwerk/protocol/http/nsHttpChannel.cpp b/netwerk/protocol/http/nsHttpChannel.cpp
|
||||
--- a/netwerk/protocol/http/nsHttpChannel.cpp 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/nsHttpChannel.cpp 2021-10-20 21:29:52.377564094 +0200
|
||||
@@ -436,6 +436,8 @@
|
||||
nsresult nsHttpChannel::OnBeforeConnect() {
|
||||
nsresult rv;
|
||||
|
||||
+ SetLoadGroupUserAgentOverride();
|
||||
+
|
||||
// Check if request was cancelled during suspend AFTER on-modify-request
|
||||
if (mCanceled) {
|
||||
return mStatus;
|
||||
@@ -5428,6 +5430,8 @@
|
||||
// notify "http-on-modify-request" observers
|
||||
CallOnModifyRequestObservers();
|
||||
|
||||
+ SetLoadGroupUserAgentOverride();
|
||||
+
|
||||
// Check if request was cancelled during on-modify-request
|
||||
if (mCanceled) {
|
||||
return mStatus;
|
||||
@@ -8640,6 +8644,48 @@
|
||||
return aFunc(this);
|
||||
}
|
||||
|
||||
+void nsHttpChannel::SetLoadGroupUserAgentOverride() {
|
||||
+ nsCOMPtr<nsIURI> uri;
|
||||
+ GetURI(getter_AddRefs(uri));
|
||||
+ nsAutoCString uriScheme;
|
||||
+ if (uri) {
|
||||
+ uri->GetScheme(uriScheme);
|
||||
+ }
|
||||
+
|
||||
+ // We don't need a UA for file: protocols.
|
||||
+ if (uriScheme.EqualsLiteral("file")) {
|
||||
+ gHttpHandler->OnUserAgentRequest(this);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsIRequestContextService* rcsvc = gHttpHandler->GetRequestContextService();
|
||||
+ nsCOMPtr<nsIRequestContext> rc;
|
||||
+ if (rcsvc) {
|
||||
+ rcsvc->GetRequestContext(mRequestContextID, getter_AddRefs(rc));
|
||||
+ }
|
||||
+
|
||||
+ nsAutoCString ua;
|
||||
+ if (nsContentUtils::IsNonSubresourceRequest(this)) {
|
||||
+ gHttpHandler->OnUserAgentRequest(this);
|
||||
+ if (rc) {
|
||||
+ GetRequestHeader(NS_LITERAL_CSTRING("User-Agent"), ua);
|
||||
+ rc->SetUserAgentOverride(ua);
|
||||
+ }
|
||||
+ } else {
|
||||
+ GetRequestHeader(NS_LITERAL_CSTRING("User-Agent"), ua);
|
||||
+ // Don't overwrite the UA if it is already set (eg by an XHR with explicit
|
||||
+ // UA).
|
||||
+ if (ua.IsEmpty()) {
|
||||
+ if (rc) {
|
||||
+ SetRequestHeader(NS_LITERAL_CSTRING("User-Agent"),
|
||||
+ rc->GetUserAgentOverride(), false);
|
||||
+ } else {
|
||||
+ gHttpHandler->OnUserAgentRequest(this);
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
// Step 10 of HTTP-network-or-cache fetch
|
||||
void nsHttpChannel::SetOriginHeader() {
|
||||
if (mRequestHead.IsGet() || mRequestHead.IsHead()) {
|
||||
diff -ur a/netwerk/protocol/http/nsHttpChannel.h b/netwerk/protocol/http/nsHttpChannel.h
|
||||
--- a/netwerk/protocol/http/nsHttpChannel.h 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/nsHttpChannel.h 2021-10-20 21:25:28.422549997 +0200
|
||||
@@ -502,6 +502,8 @@
|
||||
void SetPushedStreamTransactionAndId(
|
||||
HttpTransactionShell* aTransWithPushedStream, uint32_t aPushedStreamId);
|
||||
|
||||
+ void SetLoadGroupUserAgentOverride();
|
||||
+
|
||||
void SetOriginHeader();
|
||||
void SetDoNotTrack();
|
||||
|
||||
diff -ur a/netwerk/protocol/http/nsHttpHandler.cpp b/netwerk/protocol/http/nsHttpHandler.cpp
|
||||
--- a/netwerk/protocol/http/nsHttpHandler.cpp 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/nsHttpHandler.cpp 2021-10-20 21:35:59.579583705 +0200
|
||||
@@ -291,6 +291,24 @@
|
||||
}
|
||||
}
|
||||
|
||||
+void nsHttpHandler::EnsureUAOverridesInit() {
|
||||
+ MOZ_ASSERT(XRE_IsParentProcess());
|
||||
+ MOZ_ASSERT(NS_IsMainThread());
|
||||
+
|
||||
+ static bool initDone = false;
|
||||
+
|
||||
+ if (initDone) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ nsresult rv;
|
||||
+ nsCOMPtr<nsISupports> bootstrapper =
|
||||
+ do_GetService("@mozilla.org/network/ua-overrides-bootstrapper;1", &rv);
|
||||
+ MOZ_ASSERT(bootstrapper);
|
||||
+ MOZ_ASSERT(NS_SUCCEEDED(rv));
|
||||
+ initDone = true;
|
||||
+}
|
||||
+
|
||||
nsHttpHandler::~nsHttpHandler() {
|
||||
LOG(("Deleting nsHttpHandler [this=%p]\n", this));
|
||||
|
||||
@@ -2031,6 +2049,11 @@
|
||||
|
||||
uint32_t caps = mCapabilities;
|
||||
|
||||
+ if (XRE_IsParentProcess()) {
|
||||
+ // Load UserAgentOverrides.jsm before any HTTP request is issued.
|
||||
+ EnsureUAOverridesInit();
|
||||
+ }
|
||||
+
|
||||
uint64_t channelId;
|
||||
nsresult rv = NewChannelId(channelId);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
diff -ur a/netwerk/protocol/http/nsHttpHandler.h b/netwerk/protocol/http/nsHttpHandler.h
|
||||
--- a/netwerk/protocol/http/nsHttpHandler.h 2021-09-28 01:17:27.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/nsHttpHandler.h 2021-10-20 21:31:35.602569607 +0200
|
||||
@@ -383,6 +383,11 @@
|
||||
NotifyObservers(chan, NS_HTTP_ON_STOP_REQUEST_TOPIC);
|
||||
}
|
||||
|
||||
+ // Called by the channel and cached in the loadGroup
|
||||
+ void OnUserAgentRequest(nsIHttpChannel* chan) {
|
||||
+ NotifyObservers(chan, NS_HTTP_ON_USERAGENT_REQUEST_TOPIC);
|
||||
+ }
|
||||
+
|
||||
// Called by the channel before setting up the transaction
|
||||
void OnBeforeConnect(nsIHttpChannel* chan) {
|
||||
NotifyObservers(chan, NS_HTTP_ON_BEFORE_CONNECT_TOPIC);
|
||||
@@ -528,6 +533,8 @@
|
||||
void SetHttpHandlerInitArgs(const HttpHandlerInitArgs& aArgs);
|
||||
void SetDeviceModelId(const nsCString& aModelId);
|
||||
|
||||
+ void EnsureUAOverridesInit();
|
||||
+
|
||||
// Checks if there are any user certs or active smart cards on a different
|
||||
// thread. Updates mSpeculativeConnectEnabled when done.
|
||||
void MaybeEnableSpeculativeConnect();
|
||||
diff -ur a/netwerk/protocol/http/nsIHttpProtocolHandler.idl b/netwerk/protocol/http/nsIHttpProtocolHandler.idl
|
||||
--- a/netwerk/protocol/http/nsIHttpProtocolHandler.idl 2021-09-28 00:47:46.000000000 +0200
|
||||
+++ b/netwerk/protocol/http/nsIHttpProtocolHandler.idl 2021-10-20 21:38:21.926591307 +0200
|
||||
@@ -190,6 +190,8 @@
|
||||
*/
|
||||
#define NS_HTTP_ON_EXAMINE_CACHED_RESPONSE_TOPIC "http-on-examine-cached-response"
|
||||
|
||||
+#define NS_HTTP_ON_USERAGENT_REQUEST_TOPIC "http-on-useragent-request"
|
||||
+
|
||||
/**
|
||||
* This topic is notified for every http channel right after it called
|
||||
* OnStopRequest on its listener, regardless whether it was finished
|
||||
--- a/netwerk/protocol/http/UAOverridesBootstrapper.jsm 2021-10-21 14:47:27.380530041 +0200
|
||||
+++ b/netwerk/protocol/http/UAOverridesBootstrapper.jsm 2021-10-20 21:55:18.750645611 +0200
|
||||
@@ -0,0 +1,33 @@
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+"use strict";
|
||||
+
|
||||
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
+const { UserAgentOverrides } = ChromeUtils.import(
|
||||
+ "resource://gre/modules/UserAgentOverrides.jsm"
|
||||
+);
|
||||
+
|
||||
+function UAOverridesBootstrapper() {
|
||||
+ this.init();
|
||||
+}
|
||||
+
|
||||
+UAOverridesBootstrapper.prototype = {
|
||||
+ init: function uaob_init() {
|
||||
+ Services.obs.addObserver(this, "profile-change-net-teardown");
|
||||
+ UserAgentOverrides.init();
|
||||
+ },
|
||||
+
|
||||
+ observe: function uaob_observe(aSubject, aTopic, aData) {
|
||||
+ if (aTopic == "profile-change-net-teardown") {
|
||||
+ Services.obs.removeObserver(this, "profile-change-net-teardown");
|
||||
+ UserAgentOverrides.uninit();
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
+ QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver]),
|
||||
+ classID: Components.ID("{965b0ca8-155b-11e7-93ae-92361f002671}"),
|
||||
+};
|
||||
+
|
||||
+var EXPORTED_SYMBOLS = ["UAOverridesBootstrapper"];
|
||||
|
||||
--- a/netwerk/protocol/http/UserAgentOverrides.jsm 2021-10-21 14:47:32.138529785 +0200
|
||||
+++ b/netwerk/protocol/http/UserAgentOverrides.jsm 2021-10-20 21:55:21.938645781 +0200
|
||||
@@ -0,0 +1,188 @@
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+"use strict";
|
||||
+
|
||||
+var EXPORTED_SYMBOLS = ["UserAgentOverrides"];
|
||||
+
|
||||
+const { XPCOMUtils } = ChromeUtils.import(
|
||||
+ "resource://gre/modules/XPCOMUtils.jsm"
|
||||
+);
|
||||
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
+const { UserAgentUpdates } = ChromeUtils.import(
|
||||
+ "resource://gre/modules/UserAgentUpdates.jsm"
|
||||
+);
|
||||
+
|
||||
+const PREF_OVERRIDES_ENABLED = "general.useragent.site_specific_overrides";
|
||||
+const MAX_OVERRIDE_FOR_HOST_CACHE_SIZE = 250;
|
||||
+
|
||||
+// lazy load nsHttpHandler to improve startup performance.
|
||||
+XPCOMUtils.defineLazyGetter(this, "DEFAULT_UA", function() {
|
||||
+ return Cc["@mozilla.org/network/protocol;1?name=http"].getService(
|
||||
+ Ci.nsIHttpProtocolHandler
|
||||
+ ).userAgent;
|
||||
+});
|
||||
+
|
||||
+var gPrefBranch;
|
||||
+var gOverrides = new Map();
|
||||
+var gUpdatedOverrides;
|
||||
+var gOverrideForHostCache = new Map();
|
||||
+var gInitialized = false;
|
||||
+var gOverrideFunctions = [
|
||||
+ function(aHttpChannel) {
|
||||
+ return UserAgentOverrides.getOverrideForURI(aHttpChannel.URI);
|
||||
+ },
|
||||
+];
|
||||
+var gBuiltUAs = new Map();
|
||||
+
|
||||
+var UserAgentOverrides = {
|
||||
+ init: function uao_init() {
|
||||
+ if (gInitialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ gPrefBranch = Services.prefs.getBranch("general.useragent.override.");
|
||||
+ gPrefBranch.addObserver("", buildOverrides);
|
||||
+
|
||||
+ Services.prefs.addObserver(PREF_OVERRIDES_ENABLED, buildOverrides);
|
||||
+
|
||||
+ try {
|
||||
+ Services.obs.addObserver(
|
||||
+ HTTP_on_useragent_request,
|
||||
+ "http-on-useragent-request"
|
||||
+ );
|
||||
+ } catch (x) {
|
||||
+ // The http-on-useragent-request notification is disallowed in content processes.
|
||||
+ }
|
||||
+
|
||||
+ try {
|
||||
+ UserAgentUpdates.init(function(overrides) {
|
||||
+ gOverrideForHostCache.clear();
|
||||
+ if (overrides) {
|
||||
+ for (let domain in overrides) {
|
||||
+ overrides[domain] = getUserAgentFromOverride(overrides[domain]);
|
||||
+ }
|
||||
+ overrides.get = function(key) {
|
||||
+ return this[key];
|
||||
+ };
|
||||
+ }
|
||||
+ gUpdatedOverrides = overrides;
|
||||
+ });
|
||||
+
|
||||
+ buildOverrides();
|
||||
+ } catch (e) {
|
||||
+ // UserAgentOverrides is initialized before profile is ready.
|
||||
+ // UA override might not work correctly.
|
||||
+ }
|
||||
+
|
||||
+ Services.obs.notifyObservers(null, "useragentoverrides-initialized");
|
||||
+ gInitialized = true;
|
||||
+ },
|
||||
+
|
||||
+ addComplexOverride: function uao_addComplexOverride(callback) {
|
||||
+ // Add to front of array so complex overrides have precedence
|
||||
+ gOverrideFunctions.unshift(callback);
|
||||
+ },
|
||||
+
|
||||
+ getOverrideForURI: function uao_getOverrideForURI(aURI) {
|
||||
+ let host = aURI.asciiHost;
|
||||
+ if (!gInitialized || (!gOverrides.size && !gUpdatedOverrides) || !host) {
|
||||
+ return null;
|
||||
+ }
|
||||
+
|
||||
+ let override = gOverrideForHostCache.get(host);
|
||||
+ if (override !== undefined) {
|
||||
+ return override;
|
||||
+ }
|
||||
+
|
||||
+ function findOverride(overrides) {
|
||||
+ let searchHost = host;
|
||||
+ let userAgent = overrides.get(searchHost);
|
||||
+
|
||||
+ while (!userAgent) {
|
||||
+ let dot = searchHost.indexOf(".");
|
||||
+ if (dot === -1) {
|
||||
+ return null;
|
||||
+ }
|
||||
+ searchHost = searchHost.slice(dot + 1);
|
||||
+ userAgent = overrides.get(searchHost);
|
||||
+ }
|
||||
+ return userAgent;
|
||||
+ }
|
||||
+
|
||||
+ override =
|
||||
+ (gOverrides.size && findOverride(gOverrides)) ||
|
||||
+ (gUpdatedOverrides && findOverride(gUpdatedOverrides));
|
||||
+
|
||||
+ if (gOverrideForHostCache.size >= MAX_OVERRIDE_FOR_HOST_CACHE_SIZE) {
|
||||
+ gOverrideForHostCache.clear();
|
||||
+ }
|
||||
+ gOverrideForHostCache.set(host, override);
|
||||
+
|
||||
+ return override;
|
||||
+ },
|
||||
+
|
||||
+ uninit: function uao_uninit() {
|
||||
+ if (!gInitialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+ gInitialized = false;
|
||||
+
|
||||
+ gPrefBranch.removeObserver("", buildOverrides);
|
||||
+
|
||||
+ Services.prefs.removeObserver(PREF_OVERRIDES_ENABLED, buildOverrides);
|
||||
+
|
||||
+ Services.obs.removeObserver(
|
||||
+ HTTP_on_useragent_request,
|
||||
+ "http-on-useragent-request"
|
||||
+ );
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+function getUserAgentFromOverride(override) {
|
||||
+ let userAgent = gBuiltUAs.get(override);
|
||||
+ if (userAgent !== undefined) {
|
||||
+ return userAgent;
|
||||
+ }
|
||||
+ let [search, replace] = override.split("#", 2);
|
||||
+ if (search && replace) {
|
||||
+ userAgent = DEFAULT_UA.replace(new RegExp(search, "g"), replace);
|
||||
+ } else {
|
||||
+ userAgent = override;
|
||||
+ }
|
||||
+ gBuiltUAs.set(override, userAgent);
|
||||
+ return userAgent;
|
||||
+}
|
||||
+
|
||||
+function buildOverrides() {
|
||||
+ gOverrides.clear();
|
||||
+ gOverrideForHostCache.clear();
|
||||
+
|
||||
+ if (!Services.prefs.getBoolPref(PREF_OVERRIDES_ENABLED)) {
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let domains = gPrefBranch.getChildList("");
|
||||
+
|
||||
+ for (let domain of domains) {
|
||||
+ let override = gPrefBranch.getCharPref(domain);
|
||||
+ let userAgent = getUserAgentFromOverride(override);
|
||||
+
|
||||
+ if (userAgent != DEFAULT_UA) {
|
||||
+ gOverrides.set(domain, userAgent);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+function HTTP_on_useragent_request(aSubject, aTopic, aData) {
|
||||
+ let channel = aSubject.QueryInterface(Ci.nsIHttpChannel);
|
||||
+
|
||||
+ for (let callback of gOverrideFunctions) {
|
||||
+ let modifiedUA = callback(channel, DEFAULT_UA);
|
||||
+ if (modifiedUA) {
|
||||
+ channel.setRequestHeader("User-Agent", modifiedUA, false);
|
||||
+ return;
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
||||
--- a/netwerk/protocol/http/UserAgentUpdates.jsm 2021-10-21 14:47:36.532529549 +0200
|
||||
+++ b/netwerk/protocol/http/UserAgentUpdates.jsm 2021-10-20 21:55:25.283645960 +0200
|
||||
@@ -0,0 +1,333 @@
|
||||
+/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
+
|
||||
+"use strict";
|
||||
+
|
||||
+var EXPORTED_SYMBOLS = ["UserAgentUpdates"];
|
||||
+
|
||||
+const { AppConstants } = ChromeUtils.import(
|
||||
+ "resource://gre/modules/AppConstants.jsm"
|
||||
+);
|
||||
+const { Services } = ChromeUtils.import("resource://gre/modules/Services.jsm");
|
||||
+const { XPCOMUtils } = ChromeUtils.import(
|
||||
+ "resource://gre/modules/XPCOMUtils.jsm"
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyGlobalGetters(this, ["XMLHttpRequest"]);
|
||||
+
|
||||
+ChromeUtils.defineModuleGetter(
|
||||
+ this,
|
||||
+ "FileUtils",
|
||||
+ "resource://gre/modules/FileUtils.jsm"
|
||||
+);
|
||||
+
|
||||
+ChromeUtils.defineModuleGetter(
|
||||
+ this,
|
||||
+ "NetUtil",
|
||||
+ "resource://gre/modules/NetUtil.jsm"
|
||||
+);
|
||||
+
|
||||
+ChromeUtils.defineModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm");
|
||||
+
|
||||
+ChromeUtils.defineModuleGetter(
|
||||
+ this,
|
||||
+ "UpdateUtils",
|
||||
+ "resource://gre/modules/UpdateUtils.jsm"
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyServiceGetter(
|
||||
+ this,
|
||||
+ "gUpdateTimer",
|
||||
+ "@mozilla.org/updates/timer-manager;1",
|
||||
+ "nsIUpdateTimerManager"
|
||||
+);
|
||||
+
|
||||
+XPCOMUtils.defineLazyGetter(this, "gDecoder", function() {
|
||||
+ return new TextDecoder();
|
||||
+});
|
||||
+
|
||||
+XPCOMUtils.defineLazyGetter(this, "gEncoder", function() {
|
||||
+ return new TextEncoder();
|
||||
+});
|
||||
+
|
||||
+const TIMER_ID = "user-agent-updates-timer";
|
||||
+
|
||||
+const PREF_UPDATES = "general.useragent.updates.";
|
||||
+const PREF_UPDATES_ENABLED = PREF_UPDATES + "enabled";
|
||||
+const PREF_UPDATES_URL = PREF_UPDATES + "url";
|
||||
+const PREF_UPDATES_INTERVAL = PREF_UPDATES + "interval";
|
||||
+const PREF_UPDATES_RETRY = PREF_UPDATES + "retry";
|
||||
+const PREF_UPDATES_TIMEOUT = PREF_UPDATES + "timeout";
|
||||
+const PREF_UPDATES_LASTUPDATED = PREF_UPDATES + "lastupdated";
|
||||
+
|
||||
+const KEY_PREFDIR = "PrefD";
|
||||
+const KEY_APPDIR = "XCurProcD";
|
||||
+const FILE_UPDATES = "ua-update.json";
|
||||
+
|
||||
+const PREF_APP_DISTRIBUTION = "distribution.id";
|
||||
+const PREF_APP_DISTRIBUTION_VERSION = "distribution.version";
|
||||
+
|
||||
+var gInitialized = false;
|
||||
+
|
||||
+function readChannel(url) {
|
||||
+ return new Promise((resolve, reject) => {
|
||||
+ try {
|
||||
+ let channel = NetUtil.newChannel({
|
||||
+ uri: url,
|
||||
+ loadUsingSystemPrincipal: true,
|
||||
+ });
|
||||
+ channel.contentType = "application/json";
|
||||
+
|
||||
+ NetUtil.asyncFetch(channel, (inputStream, status) => {
|
||||
+ if (!Components.isSuccessCode(status)) {
|
||||
+ reject();
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ let data = JSON.parse(
|
||||
+ NetUtil.readInputStreamToString(inputStream, inputStream.available())
|
||||
+ );
|
||||
+ resolve(data);
|
||||
+ });
|
||||
+ } catch (ex) {
|
||||
+ reject(
|
||||
+ new Error(
|
||||
+ "UserAgentUpdates: Could not fetch " +
|
||||
+ url +
|
||||
+ " " +
|
||||
+ ex +
|
||||
+ "\n" +
|
||||
+ ex.stack
|
||||
+ )
|
||||
+ );
|
||||
+ }
|
||||
+ });
|
||||
+}
|
||||
+
|
||||
+var UserAgentUpdates = {
|
||||
+ init(callback) {
|
||||
+ if (gInitialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+ gInitialized = true;
|
||||
+
|
||||
+ this._callback = callback;
|
||||
+ this._lastUpdated = 0;
|
||||
+ this._applySavedUpdate();
|
||||
+
|
||||
+ Services.prefs.addObserver(PREF_UPDATES, this);
|
||||
+ },
|
||||
+
|
||||
+ uninit() {
|
||||
+ if (!gInitialized) {
|
||||
+ return;
|
||||
+ }
|
||||
+ gInitialized = false;
|
||||
+ Services.prefs.removeObserver(PREF_UPDATES, this);
|
||||
+ },
|
||||
+
|
||||
+ _applyUpdate(update) {
|
||||
+ // Check pref again in case it has changed
|
||||
+ if (update && this._getPref(PREF_UPDATES_ENABLED, false)) {
|
||||
+ this._callback(update);
|
||||
+ } else {
|
||||
+ this._callback(null);
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
+ _applySavedUpdate() {
|
||||
+ if (!this._getPref(PREF_UPDATES_ENABLED, false)) {
|
||||
+ // remove previous overrides
|
||||
+ this._applyUpdate(null);
|
||||
+ return;
|
||||
+ }
|
||||
+ // try loading from profile dir, then from app dir
|
||||
+ let dirs = [KEY_PREFDIR, KEY_APPDIR];
|
||||
+
|
||||
+ dirs
|
||||
+ .reduce((prevLoad, dir) => {
|
||||
+ let file = FileUtils.getFile(dir, [FILE_UPDATES], true).path;
|
||||
+ // tryNext returns promise to read file under dir and parse it
|
||||
+ let tryNext = () =>
|
||||
+ OS.File.read(file).then(bytes => {
|
||||
+ let update = JSON.parse(gDecoder.decode(bytes));
|
||||
+ if (!update) {
|
||||
+ throw new Error("invalid update");
|
||||
+ }
|
||||
+ return update;
|
||||
+ });
|
||||
+ // try to load next one if the previous load failed
|
||||
+ return prevLoad ? prevLoad.catch(tryNext) : tryNext();
|
||||
+ }, null)
|
||||
+ .catch(ex => {
|
||||
+ if (AppConstants.platform !== "android") {
|
||||
+ // All previous (non-Android) load attempts have failed, so we bail.
|
||||
+ throw new Error(
|
||||
+ "UserAgentUpdates: Failed to load " +
|
||||
+ FILE_UPDATES +
|
||||
+ ex +
|
||||
+ "\n" +
|
||||
+ ex.stack
|
||||
+ );
|
||||
+ }
|
||||
+ // Make one last attempt to read from the Fennec APK root.
|
||||
+ return readChannel("resource://android/" + FILE_UPDATES);
|
||||
+ })
|
||||
+ .then(update => {
|
||||
+ // Apply update if loading was successful
|
||||
+ this._applyUpdate(update);
|
||||
+ })
|
||||
+ .catch(Cu.reportError);
|
||||
+ this._scheduleUpdate();
|
||||
+ },
|
||||
+
|
||||
+ _saveToFile(update) {
|
||||
+ let file = FileUtils.getFile(KEY_PREFDIR, [FILE_UPDATES], true);
|
||||
+ let path = file.path;
|
||||
+ let bytes = gEncoder.encode(JSON.stringify(update));
|
||||
+ OS.File.writeAtomic(path, bytes, { tmpPath: path + ".tmp" }).then(() => {
|
||||
+ this._lastUpdated = Date.now();
|
||||
+ Services.prefs.setCharPref(
|
||||
+ PREF_UPDATES_LASTUPDATED,
|
||||
+ this._lastUpdated.toString()
|
||||
+ );
|
||||
+ }, Cu.reportError);
|
||||
+ },
|
||||
+
|
||||
+ _getPref(name, def) {
|
||||
+ try {
|
||||
+ switch (typeof def) {
|
||||
+ case "number":
|
||||
+ return Services.prefs.getIntPref(name);
|
||||
+ case "boolean":
|
||||
+ return Services.prefs.getBoolPref(name);
|
||||
+ }
|
||||
+ return Services.prefs.getCharPref(name);
|
||||
+ } catch (e) {
|
||||
+ return def;
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
+ _getParameters() {
|
||||
+ return {
|
||||
+ "%DATE%": function() {
|
||||
+ return Date.now().toString();
|
||||
+ },
|
||||
+ "%PRODUCT%": function() {
|
||||
+ return Services.appinfo.name;
|
||||
+ },
|
||||
+ "%APP_ID%": function() {
|
||||
+ return Services.appinfo.ID;
|
||||
+ },
|
||||
+ "%APP_VERSION%": function() {
|
||||
+ return Services.appinfo.version;
|
||||
+ },
|
||||
+ "%BUILD_ID%": function() {
|
||||
+ return Services.appinfo.appBuildID;
|
||||
+ },
|
||||
+ "%OS%": function() {
|
||||
+ return Services.appinfo.OS;
|
||||
+ },
|
||||
+ "%CHANNEL%": function() {
|
||||
+ return UpdateUtils.UpdateChannel;
|
||||
+ },
|
||||
+ "%DISTRIBUTION%": function() {
|
||||
+ return this._getPref(PREF_APP_DISTRIBUTION, "");
|
||||
+ },
|
||||
+ "%DISTRIBUTION_VERSION%": function() {
|
||||
+ return this._getPref(PREF_APP_DISTRIBUTION_VERSION, "");
|
||||
+ },
|
||||
+ };
|
||||
+ },
|
||||
+
|
||||
+ _getUpdateURL() {
|
||||
+ let url = this._getPref(PREF_UPDATES_URL, "");
|
||||
+ let params = this._getParameters();
|
||||
+ return url.replace(/%[A-Z_]+%/g, function(match) {
|
||||
+ let param = params[match];
|
||||
+ // preserve the %FOO% string (e.g. as an encoding) if it's not a valid parameter
|
||||
+ return param ? encodeURIComponent(param()) : match;
|
||||
+ });
|
||||
+ },
|
||||
+
|
||||
+ _fetchUpdate(url, success, error) {
|
||||
+ let request = new XMLHttpRequest();
|
||||
+ request.mozBackgroundRequest = true;
|
||||
+ request.timeout = this._getPref(PREF_UPDATES_TIMEOUT, 60000);
|
||||
+ request.open("GET", url, true);
|
||||
+ request.overrideMimeType("application/json");
|
||||
+ request.responseType = "json";
|
||||
+
|
||||
+ request.addEventListener("load", function() {
|
||||
+ let response = request.response;
|
||||
+ response ? success(response) : error();
|
||||
+ });
|
||||
+ request.addEventListener("error", error);
|
||||
+ request.send();
|
||||
+ },
|
||||
+
|
||||
+ _update() {
|
||||
+ let url = this._getUpdateURL();
|
||||
+ url &&
|
||||
+ this._fetchUpdate(
|
||||
+ url,
|
||||
+ response => {
|
||||
+ // success
|
||||
+ // apply update and save overrides to profile
|
||||
+ this._applyUpdate(response);
|
||||
+ this._saveToFile(response);
|
||||
+ this._scheduleUpdate(); // cancel any retries
|
||||
+ },
|
||||
+ response => {
|
||||
+ // error
|
||||
+ this._scheduleUpdate(true /* retry */);
|
||||
+ }
|
||||
+ );
|
||||
+ },
|
||||
+
|
||||
+ _scheduleUpdate(retry) {
|
||||
+ // only schedule updates in the main process
|
||||
+ if (
|
||||
+ Services.appinfo.processType !== Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT
|
||||
+ ) {
|
||||
+ return;
|
||||
+ }
|
||||
+ let interval = this._getPref(PREF_UPDATES_INTERVAL, 604800 /* 1 week */);
|
||||
+ if (retry) {
|
||||
+ interval = this._getPref(PREF_UPDATES_RETRY, interval);
|
||||
+ }
|
||||
+ gUpdateTimer.registerTimer(TIMER_ID, this, Math.max(1, interval));
|
||||
+ },
|
||||
+
|
||||
+ notify(timer) {
|
||||
+ // timer notification
|
||||
+ if (this._getPref(PREF_UPDATES_ENABLED, false)) {
|
||||
+ this._update();
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
+ observe(subject, topic, data) {
|
||||
+ switch (topic) {
|
||||
+ case "nsPref:changed":
|
||||
+ if (data === PREF_UPDATES_ENABLED) {
|
||||
+ this._applySavedUpdate();
|
||||
+ } else if (data === PREF_UPDATES_INTERVAL) {
|
||||
+ this._scheduleUpdate();
|
||||
+ } else if (data === PREF_UPDATES_LASTUPDATED) {
|
||||
+ // reload from file if there has been an update
|
||||
+ let lastUpdated = parseInt(
|
||||
+ this._getPref(PREF_UPDATES_LASTUPDATED, "0"),
|
||||
+ 0
|
||||
+ );
|
||||
+ if (lastUpdated > this._lastUpdated) {
|
||||
+ this._applySavedUpdate();
|
||||
+ this._lastUpdated = lastUpdated;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
+ }
|
||||
+ },
|
||||
+
|
||||
+ QueryInterface: ChromeUtils.generateQI([Ci.nsIObserver, Ci.nsITimerCallback]),
|
||||
+};
|
|
@ -0,0 +1,38 @@
|
|||
--- firefox-93.0/browser/base/content/browser-context.inc 2021-09-28 00:46:26.000000000 +0200
|
||||
+++ firefox-93.0_patched/browser/base/content/browser-context.inc 2021-10-12 15:41:48.608191384 +0200
|
||||
@@ -375,29 +368,28 @@
|
||||
oncommand="gContextMenu.addDictionaries();"/>
|
||||
</menupopup>
|
||||
</menu>
|
||||
- <menuseparator hidden="true" id="context-sep-bidi"/>
|
||||
+ <menuseparator id="context-sep-bidi"/>
|
||||
<menuitem hidden="true" id="context-bidi-text-direction-toggle"
|
||||
data-l10n-id="main-context-menu-bidi-switch-text"
|
||||
command="cmd_switchTextDirection"/>
|
||||
<menuitem hidden="true" id="context-bidi-page-direction-toggle"
|
||||
data-l10n-id="main-context-menu-bidi-switch-page"
|
||||
oncommand="gContextMenu.switchPageDirection();"/>
|
||||
- <menuseparator id="inspect-separator" hidden="true"/>
|
||||
+ <menuseparator id="inspect-separator"/>
|
||||
<menuitem id="context-viewpartialsource-selection"
|
||||
data-l10n-id="main-context-menu-view-selection-source"
|
||||
oncommand="gContextMenu.viewPartialSource();"/>
|
||||
<menuitem id="context-viewsource"
|
||||
data-l10n-id="main-context-menu-view-page-source"
|
||||
oncommand="BrowserViewSource(gContextMenu.browser);"/>
|
||||
- <menuitem id="context-inspect-a11y"
|
||||
- hidden="true"
|
||||
- data-l10n-id="main-context-menu-inspect-a11y-properties"
|
||||
- oncommand="gContextMenu.inspectA11Y();"/>
|
||||
+ <menuitem id="context-viewpageinfo"
|
||||
+ data-l10n-id="main-context-menu-view-page-info"
|
||||
+ oncommand="gIdentityHandler.handleMoreInfoClick();"/>
|
||||
<menuitem id="context-inspect"
|
||||
hidden="true"
|
||||
data-l10n-id="main-context-menu-inspect"
|
||||
oncommand="gContextMenu.inspectNode();"/>
|
||||
- <menuseparator id="context-media-eme-separator" hidden="true"/>
|
||||
+ <menuseparator id="context-media-eme-separator"/>
|
||||
<menuitem id="context-media-eme-learnmore"
|
||||
class="menuitem-iconic"
|
||||
hidden="true"
|
|
@ -0,0 +1,12 @@
|
|||
--- a/browser/components/newtab/css/activity-stream-linux.css 2021-10-11 00:33:16.266611832 +0200
|
||||
+++ b/browser/components/newtab/css/activity-stream-linux.css 2021-10-11 00:34:40.395611744 +0200
|
||||
@@ -1575,6 +1575,9 @@
|
||||
margin-inline-start: 16px;
|
||||
width: 134px;
|
||||
}
|
||||
+.wordmark {
|
||||
+ width: 0px !important;
|
||||
+}
|
||||
@media (max-width: 609px) {
|
||||
.search-wrapper .logo-and-wordmark .logo {
|
||||
background-size: 64px;
|
|
@ -5,8 +5,8 @@
|
|||
# there is a possible patch to consider when changing this:
|
||||
# see: patches/browser-confvars.patch
|
||||
|
||||
MOZ_APP_NAME=librewolf
|
||||
MOZ_APP_BASENAME="LibreWolf"
|
||||
MOZ_APP_PROFILE=librewolf
|
||||
MOZ_APP_VENDOR=LibreWolf
|
||||
MOZ_APP_NAME=foxgirl
|
||||
MOZ_APP_BASENAME="Foxgirl"
|
||||
MOZ_APP_PROFILE=foxgirl
|
||||
MOZ_APP_VENDOR=Foxgirl
|
||||
|
||||
|
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 99 KiB |
|
@ -6,7 +6,7 @@
|
|||
background-image: url("chrome://branding/content/about-background.png");
|
||||
background-repeat: no-repeat;
|
||||
background-color: #00acff;
|
||||
color: #090909;
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -19,7 +19,7 @@ firefox-85.0/browser/base/content/aboutDialog.xhtml
|
|||
|
||||
|
||||
.text-link {
|
||||
color: #101010 !important;
|
||||
color: #c2c2c2 !important;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
|
||||
<!ENTITY brandShorterName "LibreWolf">
|
||||
<!ENTITY brandShortName "LibreWolf">
|
||||
<!ENTITY brandFullName "LibreWolf">
|
||||
<!ENTITY brandShorterName "Foxgirl">
|
||||
<!ENTITY brandShortName "Foxgirl">
|
||||
<!ENTITY brandFullName "Foxgirl">
|
||||
<!-- LOCALIZATION NOTE (brandProductName):
|
||||
This brand name can be used in messages where the product name needs to
|
||||
remain unchanged across different versions (Nightly, Beta, etc.). -->
|
||||
<!ENTITY brandProductName "LibreWolf">
|
||||
<!ENTITY vendorShortName "LibreWolf">
|
||||
<!ENTITY brandProductName "Foxgirl">
|
||||
<!ENTITY vendorShortName "Foxgirl">
|
||||
<!ENTITY trademarkInfo.part1 " ">
|
||||
|
|
|
@ -12,11 +12,11 @@
|
|||
##
|
||||
## Reference: https://www.mozilla.org/styleguide/communications/translation/
|
||||
|
||||
-brand-shorter-name = LibreWolf
|
||||
-brand-short-name = LibreWolf
|
||||
-brand-full-name = LibreWolf
|
||||
-brand-shorter-name = Foxgirl
|
||||
-brand-short-name = Foxgirl
|
||||
-brand-full-name = Foxgirl
|
||||
# This brand name can be used in messages where the product name needs to
|
||||
# remain unchanged across different versions (Nightly, Beta, etc.).
|
||||
-brand-product-name = LibreWolf
|
||||
-vendor-short-name = LibreWolf
|
||||
-brand-product-name = Foxgirl
|
||||
-vendor-short-name = Foxgirl
|
||||
trademarkInfo = { " " }
|
||||
|
|
|
@ -2,13 +2,13 @@
|
|||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
brandShorterName=LibreWolf
|
||||
brandShortName=LibreWolf
|
||||
brandFullName=LibreWolf
|
||||
brandShorterName=Foxgirl
|
||||
brandShortName=Foxgirl
|
||||
brandFullName=Foxgirl
|
||||
# LOCALIZATION NOTE(brandProductName):
|
||||
# This brand name can be used in messages where the product name needs to
|
||||
# remain unchanged across different versions (Nightly, Beta, etc.).
|
||||
brandProductName=LibreWolf
|
||||
vendorShortName=LibreWolf
|
||||
brandProductName=Foxgirl
|
||||
vendorShortName=Foxgirl
|
||||
|
||||
syncBrandShortName=LibreWolf Sync
|
||||
syncBrandShortName=Foxgirl Sync
|
||||
|
|
After Width: | Height: | Size: 55 KiB |
After Width: | Height: | Size: 980 B |
After Width: | Height: | Size: 893 B |
After Width: | Height: | Size: 592 B |
After Width: | Height: | Size: 990 B |
After Width: | Height: | Size: 906 B |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 7.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 430 B |