зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1365273 - Remove about:sync-tabs. r=markh
MozReview-Commit-ID: HFsc4xf8N3a --HG-- extra : rebase_source : 841763ceb5a2ce3630e2f0f3625f7d3d20569135
This commit is contained in:
Родитель
dcb8101430
Коммит
ca11d95460
|
@ -1,48 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!-- 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/. -->
|
||||
|
||||
<!-- import-globals-from aboutSyncTabs.js -->
|
||||
|
||||
<bindings id="tabBindings"
|
||||
xmlns="http://www.mozilla.org/xbl"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:xbl="http://www.mozilla.org/xbl">
|
||||
|
||||
<binding id="tab-listing" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
|
||||
<content>
|
||||
<xul:hbox flex="1">
|
||||
<xul:vbox pack="start">
|
||||
<xul:image class="tabIcon"
|
||||
xbl:inherits="src=icon"/>
|
||||
</xul:vbox>
|
||||
<xul:vbox pack="start" flex="1">
|
||||
<xul:label xbl:inherits="value=title,selected"
|
||||
crop="end" flex="1" class="title"/>
|
||||
<xul:label xbl:inherits="value=url,selected"
|
||||
crop="end" flex="1" class="url"/>
|
||||
</xul:vbox>
|
||||
</xul:hbox>
|
||||
</content>
|
||||
<handlers>
|
||||
<handler event="dblclick" button="0">
|
||||
<![CDATA[
|
||||
RemoteTabViewer.openSelected();
|
||||
]]>
|
||||
</handler>
|
||||
</handlers>
|
||||
</binding>
|
||||
|
||||
<binding id="client-listing" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
|
||||
<content>
|
||||
<xul:hbox pack="start" align="center" onfocus="event.target.blur()" onselect="return false;">
|
||||
<xul:image/>
|
||||
<xul:label xbl:inherits="value=clientName"
|
||||
class="clientName"
|
||||
crop="center" flex="1"/>
|
||||
</xul:hbox>
|
||||
</content>
|
||||
</binding>
|
||||
</bindings>
|
|
@ -1,11 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
richlistitem[type="tab"] {
|
||||
-moz-binding: url(chrome://browser/content/sync/aboutSyncTabs-bindings.xml#tab-listing);
|
||||
}
|
||||
|
||||
richlistitem[type="client"] {
|
||||
-moz-binding: url(chrome://browser/content/sync/aboutSyncTabs-bindings.xml#client-listing);
|
||||
}
|
|
@ -1,305 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
/* import-globals-from ../utilityOverlay.js */
|
||||
|
||||
var Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://services-common/utils.js");
|
||||
Cu.import("resource://services-sync/main.js");
|
||||
Cu.import("resource:///modules/PlacesUIUtils.jsm");
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
Cu.import("resource://gre/modules/PlacesUtils.jsm", this);
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Promise",
|
||||
"resource://gre/modules/Promise.jsm");
|
||||
|
||||
var RemoteTabViewer = {
|
||||
_tabsList: null,
|
||||
|
||||
init() {
|
||||
Services.obs.addObserver(this, "weave:service:login:finish");
|
||||
Services.obs.addObserver(this, "weave:engine:sync:finish");
|
||||
|
||||
this._tabsList = document.getElementById("tabsList");
|
||||
|
||||
this.buildList(true);
|
||||
},
|
||||
|
||||
uninit() {
|
||||
Services.obs.removeObserver(this, "weave:service:login:finish");
|
||||
Services.obs.removeObserver(this, "weave:engine:sync:finish");
|
||||
},
|
||||
|
||||
createItem(attrs) {
|
||||
let item = document.createElement("richlistitem");
|
||||
|
||||
// Copy the attributes from the argument into the item.
|
||||
for (let attr in attrs) {
|
||||
item.setAttribute(attr, attrs[attr]);
|
||||
}
|
||||
|
||||
if (attrs["type"] == "tab") {
|
||||
item.label = attrs.title != "" ? attrs.title : attrs.url;
|
||||
}
|
||||
|
||||
return item;
|
||||
},
|
||||
|
||||
filterTabs(event) {
|
||||
let val = event.target.value.toLowerCase();
|
||||
let numTabs = this._tabsList.getRowCount();
|
||||
let clientTabs = 0;
|
||||
let currentClient = null;
|
||||
|
||||
for (let i = 0; i < numTabs; i++) {
|
||||
let item = this._tabsList.getItemAtIndex(i);
|
||||
let hide = false;
|
||||
if (item.getAttribute("type") == "tab") {
|
||||
if (!item.getAttribute("url").toLowerCase().includes(val) &&
|
||||
!item.getAttribute("title").toLowerCase().includes(val)) {
|
||||
hide = true;
|
||||
} else {
|
||||
clientTabs++;
|
||||
}
|
||||
} else if (item.getAttribute("type") == "client") {
|
||||
if (currentClient) {
|
||||
if (clientTabs == 0) {
|
||||
currentClient.hidden = true;
|
||||
}
|
||||
}
|
||||
currentClient = item;
|
||||
clientTabs = 0;
|
||||
}
|
||||
item.hidden = hide;
|
||||
}
|
||||
if (clientTabs == 0) {
|
||||
currentClient.hidden = true;
|
||||
}
|
||||
},
|
||||
|
||||
openSelected() {
|
||||
let items = this._tabsList.selectedItems;
|
||||
let urls = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].getAttribute("type") == "tab") {
|
||||
urls.push(items[i].getAttribute("url"));
|
||||
let index = this._tabsList.getIndexOfItem(items[i]);
|
||||
this._tabsList.removeItemAt(index);
|
||||
}
|
||||
}
|
||||
if (urls.length) {
|
||||
getTopWin().gBrowser.loadTabs(urls);
|
||||
this._tabsList.clearSelection();
|
||||
}
|
||||
},
|
||||
|
||||
bookmarkSingleTab() {
|
||||
let item = this._tabsList.selectedItems[0];
|
||||
let uri = Weave.Utils.makeURI(item.getAttribute("url"));
|
||||
let title = item.getAttribute("title");
|
||||
PlacesUIUtils.showBookmarkDialog({ action: "add"
|
||||
, type: "bookmark"
|
||||
, uri
|
||||
, title
|
||||
, hiddenRows: [ "description"
|
||||
, "location"
|
||||
, "loadInSidebar"
|
||||
, "keyword" ]
|
||||
}, window.top);
|
||||
},
|
||||
|
||||
bookmarkSelectedTabs() {
|
||||
let items = this._tabsList.selectedItems;
|
||||
let URIs = [];
|
||||
for (let i = 0; i < items.length; i++) {
|
||||
if (items[i].getAttribute("type") == "tab") {
|
||||
let uri = Weave.Utils.makeURI(items[i].getAttribute("url"));
|
||||
if (!uri) {
|
||||
continue;
|
||||
}
|
||||
|
||||
URIs.push(uri);
|
||||
}
|
||||
}
|
||||
if (URIs.length) {
|
||||
PlacesUIUtils.showBookmarkDialog({ action: "add"
|
||||
, type: "folder"
|
||||
, URIList: URIs
|
||||
, hiddenRows: [ "description" ]
|
||||
}, window.top);
|
||||
}
|
||||
},
|
||||
|
||||
getIcon(iconUri, defaultIcon) {
|
||||
try {
|
||||
let iconURI = Weave.Utils.makeURI(iconUri);
|
||||
return PlacesUtils.favicons.getFaviconLinkForIcon(iconURI).spec;
|
||||
} catch (ex) {
|
||||
// Do nothing.
|
||||
}
|
||||
|
||||
// Just give the provided default icon or the system's default.
|
||||
return defaultIcon || PlacesUtils.favicons.defaultFavicon.spec;
|
||||
},
|
||||
|
||||
_waitingForBuildList: false,
|
||||
|
||||
_buildListRequested: false,
|
||||
|
||||
buildList(forceSync) {
|
||||
if (this._waitingForBuildList) {
|
||||
this._buildListRequested = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this._waitingForBuildList = true;
|
||||
this._buildListRequested = false;
|
||||
|
||||
this._clearTabList();
|
||||
|
||||
if (Weave.Service.isLoggedIn) {
|
||||
this._refetchTabs(forceSync);
|
||||
this._generateWeaveTabList();
|
||||
} else {
|
||||
// XXXzpao We should say something about not being logged in & not having data
|
||||
// or tell the appropriate condition. (bug 583344)
|
||||
}
|
||||
|
||||
this._waitingForBuildList = false;
|
||||
if (this._buildListRequested) {
|
||||
CommonUtils.nextTick(this.buildList, this);
|
||||
}
|
||||
},
|
||||
|
||||
_clearTabList() {
|
||||
let list = this._tabsList;
|
||||
|
||||
// Clear out existing richlistitems.
|
||||
let count = list.getRowCount();
|
||||
if (count > 0) {
|
||||
for (let i = count - 1; i >= 0; i--) {
|
||||
list.removeItemAt(i);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_generateWeaveTabList() {
|
||||
let engine = Weave.Service.engineManager.get("tabs");
|
||||
let list = this._tabsList;
|
||||
|
||||
let seenURLs = new Set();
|
||||
let localURLs = engine.getOpenURLs();
|
||||
|
||||
for (let [, client] of Object.entries(engine.getAllClients())) {
|
||||
// Create the client node, but don't add it in-case we don't show any tabs
|
||||
let appendClient = true;
|
||||
|
||||
client.tabs.forEach(function({title, urlHistory, icon}) {
|
||||
let url = urlHistory[0];
|
||||
if (!url || localURLs.has(url) || seenURLs.has(url)) {
|
||||
return;
|
||||
}
|
||||
seenURLs.add(url);
|
||||
|
||||
if (appendClient) {
|
||||
let attrs = {
|
||||
type: "client",
|
||||
clientName: client.clientName,
|
||||
class: Weave.Service.clientsEngine.isMobile(client.id) ? "mobile" : "desktop"
|
||||
};
|
||||
let clientEnt = this.createItem(attrs);
|
||||
list.appendChild(clientEnt);
|
||||
appendClient = false;
|
||||
clientEnt.disabled = true;
|
||||
}
|
||||
let attrs = {
|
||||
type: "tab",
|
||||
title: title || url,
|
||||
url,
|
||||
icon: this.getIcon(icon),
|
||||
}
|
||||
let tab = this.createItem(attrs);
|
||||
list.appendChild(tab);
|
||||
}, this);
|
||||
}
|
||||
},
|
||||
|
||||
adjustContextMenu(event) {
|
||||
let mode = "all";
|
||||
switch (this._tabsList.selectedItems.length) {
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
mode = "single"
|
||||
break;
|
||||
default:
|
||||
mode = "multiple";
|
||||
break;
|
||||
}
|
||||
|
||||
let menu = document.getElementById("tabListContext");
|
||||
let el = menu.firstChild;
|
||||
while (el) {
|
||||
let showFor = el.getAttribute("showFor");
|
||||
if (showFor) {
|
||||
el.hidden = showFor != mode && showFor != "all";
|
||||
}
|
||||
|
||||
el = el.nextSibling;
|
||||
}
|
||||
},
|
||||
|
||||
_refetchTabs(force) {
|
||||
if (!force) {
|
||||
// Don't bother refetching tabs if we already did so recently
|
||||
let lastFetch = Services.prefs.getIntPref("services.sync.lastTabFetch", 0);
|
||||
|
||||
let now = Math.floor(Date.now() / 1000);
|
||||
if (now - lastFetch < 30) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Ask Sync to just do the tabs engine if it can.
|
||||
Weave.Service.sync(["tabs"]);
|
||||
Services.prefs.setIntPref("services.sync.lastTabFetch",
|
||||
Math.floor(Date.now() / 1000));
|
||||
|
||||
return true;
|
||||
},
|
||||
|
||||
observe(subject, topic, data) {
|
||||
switch (topic) {
|
||||
case "weave:service:login:finish":
|
||||
// A login has finished, which means that a Sync is about to start and
|
||||
// we will eventually get to the "tabs" engine - but try and force the
|
||||
// tab engine to sync first by passing |true| for the forceSync param.
|
||||
this.buildList(true);
|
||||
break;
|
||||
case "weave:engine:sync:finish":
|
||||
if (data == "tabs") {
|
||||
// The tabs engine just finished, so re-build the list without
|
||||
// forcing a new sync of the tabs engine.
|
||||
this.buildList(false);
|
||||
}
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
handleClick(event) {
|
||||
if (event.target.getAttribute("type") != "tab") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.button == 1) {
|
||||
let url = event.target.getAttribute("url");
|
||||
openUILink(url, event);
|
||||
let index = this._tabsList.getIndexOfItem(event.target);
|
||||
this._tabsList.removeItemAt(index);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,68 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<!-- 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/. -->
|
||||
|
||||
<?xml-stylesheet href="chrome://browser/skin/" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/skin/aboutSyncTabs.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://browser/content/sync/aboutSyncTabs.css" type="text/css"?>
|
||||
|
||||
<!DOCTYPE window [
|
||||
<!ENTITY % aboutSyncTabsDTD SYSTEM "chrome://browser/locale/aboutSyncTabs.dtd">
|
||||
%aboutSyncTabsDTD;
|
||||
]>
|
||||
|
||||
<window id="tabs-display"
|
||||
onload="RemoteTabViewer.init()"
|
||||
onunload="RemoteTabViewer.uninit()"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
title="&tabs.otherDevices.label;">
|
||||
<script type="application/javascript" src="chrome://browser/content/sync/aboutSyncTabs.js"/>
|
||||
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
|
||||
<html:head>
|
||||
<html:link rel="icon" href="chrome://browser/skin/sync-16.png"/>
|
||||
</html:head>
|
||||
|
||||
<popupset id="contextmenus">
|
||||
<menupopup id="tabListContext">
|
||||
<menuitem label="&tabs.context.openTab.label;"
|
||||
accesskey="&tabs.context.openTab.accesskey;"
|
||||
oncommand="RemoteTabViewer.openSelected()"
|
||||
showFor="single"/>
|
||||
<menuitem label="&tabs.context.bookmarkSingleTab.label;"
|
||||
accesskey="&tabs.context.bookmarkSingleTab.accesskey;"
|
||||
oncommand="RemoteTabViewer.bookmarkSingleTab(event)"
|
||||
showFor="single"/>
|
||||
<menuitem label="&tabs.context.openMultipleTabs.label;"
|
||||
accesskey="&tabs.context.openMultipleTabs.accesskey;"
|
||||
oncommand="RemoteTabViewer.openSelected()"
|
||||
showFor="multiple"/>
|
||||
<menuitem label="&tabs.context.bookmarkMultipleTabs.label;"
|
||||
accesskey="&tabs.context.bookmarkMultipleTabs.accesskey;"
|
||||
oncommand="RemoteTabViewer.bookmarkSelectedTabs()"
|
||||
showFor="multiple"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&tabs.context.refreshList.label;"
|
||||
accesskey="&tabs.context.refreshList.accesskey;"
|
||||
oncommand="RemoteTabViewer.buildList()"
|
||||
showFor="all"/>
|
||||
</menupopup>
|
||||
</popupset>
|
||||
<richlistbox context="tabListContext" id="tabsList" seltype="multiple"
|
||||
align="center" flex="1"
|
||||
onclick="RemoteTabViewer.handleClick(event)"
|
||||
oncontextmenu="RemoteTabViewer.adjustContextMenu(event)">
|
||||
<hbox id="headers" align="center">
|
||||
<label id="tabsListHeading"
|
||||
value="&tabs.otherDevices.label;"/>
|
||||
<spacer flex="1"/>
|
||||
<textbox type="search"
|
||||
emptytext="&tabs.searchText.label;"
|
||||
oncommand="RemoteTabViewer.filterTabs(event)"/>
|
||||
</hbox>
|
||||
|
||||
</richlistbox>
|
||||
</window>
|
||||
|
|
@ -129,10 +129,6 @@ browser.jar:
|
|||
content/browser/pageinfo/permissions.js (content/pageinfo/permissions.js)
|
||||
content/browser/pageinfo/security.js (content/pageinfo/security.js)
|
||||
content/browser/robot.ico (content/robot.ico)
|
||||
content/browser/sync/aboutSyncTabs.xul (content/sync/aboutSyncTabs.xul)
|
||||
content/browser/sync/aboutSyncTabs.js (content/sync/aboutSyncTabs.js)
|
||||
content/browser/sync/aboutSyncTabs.css (content/sync/aboutSyncTabs.css)
|
||||
content/browser/sync/aboutSyncTabs-bindings.xml (content/sync/aboutSyncTabs-bindings.xml)
|
||||
content/browser/safeMode.css (content/safeMode.css)
|
||||
content/browser/safeMode.js (content/safeMode.js)
|
||||
content/browser/safeMode.xul (content/safeMode.xul)
|
||||
|
|
|
@ -80,8 +80,6 @@ static const RedirEntry kRedirMap[] = {
|
|||
nsIAboutModule::ALLOW_SCRIPT },
|
||||
{ "welcomeback", "chrome://browser/content/aboutWelcomeBack.xhtml",
|
||||
nsIAboutModule::ALLOW_SCRIPT },
|
||||
{ "sync-tabs", "chrome://browser/content/sync/aboutSyncTabs.xul",
|
||||
nsIAboutModule::ALLOW_SCRIPT },
|
||||
// Linkable because of indexeddb use (bug 1228118)
|
||||
{ "home", "chrome://browser/content/abouthome/aboutHome.xhtml",
|
||||
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
|
||||
|
|
|
@ -97,7 +97,6 @@ static const mozilla::Module::ContractIDEntry kBrowserContracts[] = {
|
|||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "searchreset", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "sessionrestore", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "welcomeback", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "sync-tabs", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "home", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "newtab", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
{ NS_ABOUT_MODULE_CONTRACTID_PREFIX "preferences", &kNS_BROWSER_ABOUT_REDIRECTOR_CID },
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
<!-- 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/. -->
|
||||
|
||||
<!ENTITY tabs.otherDevices.label "Tabs From Other Devices">
|
||||
|
||||
<!ENTITY tabs.searchText.label "Type here to find tabs…">
|
||||
|
||||
<!-- LOCALIZATION NOTE (tabs.context.openTab.accesskey, tabs.context.openMultipleTabs.accesskey):
|
||||
Only one of these will show at a time (based on selection), so reusing accesskey is ok. -->
|
||||
<!ENTITY tabs.context.openTab.label "Open This Tab">
|
||||
<!ENTITY tabs.context.openTab.accesskey "O">
|
||||
<!ENTITY tabs.context.openMultipleTabs.label "Open Selected Tabs">
|
||||
<!ENTITY tabs.context.openMultipleTabs.accesskey "O">
|
||||
<!ENTITY tabs.context.bookmarkSingleTab.label "Bookmark This Tab…">
|
||||
<!ENTITY tabs.context.bookmarkSingleTab.accesskey "B">
|
||||
<!ENTITY tabs.context.bookmarkMultipleTabs.label "Bookmark Selected Tabs…">
|
||||
<!ENTITY tabs.context.bookmarkMultipleTabs.accesskey "B">
|
||||
<!ENTITY tabs.context.refreshList.label "Refresh List">
|
||||
<!ENTITY tabs.context.refreshList.accesskey "R">
|
|
@ -20,7 +20,6 @@
|
|||
locale/browser/aboutSearchReset.dtd (%chrome/browser/aboutSearchReset.dtd)
|
||||
locale/browser/aboutSessionRestore.dtd (%chrome/browser/aboutSessionRestore.dtd)
|
||||
locale/browser/aboutTabCrashed.dtd (%chrome/browser/aboutTabCrashed.dtd)
|
||||
locale/browser/aboutSyncTabs.dtd (%chrome/browser/aboutSyncTabs.dtd)
|
||||
locale/browser/browser.dtd (%chrome/browser/browser.dtd)
|
||||
locale/browser/baseMenuOverlay.dtd (%chrome/browser/baseMenuOverlay.dtd)
|
||||
locale/browser/browser.properties (%chrome/browser/browser.properties)
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
#tabs-display,
|
||||
#tabsList {
|
||||
background-color: transparent;
|
||||
-moz-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#tabsList {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#tabs-display {
|
||||
background: #fff url(chrome://browser/skin/sync-bg.png) repeat-x center -80px;
|
||||
}
|
||||
|
||||
#headers {
|
||||
background: url(chrome://browser/skin/sync-32.png) no-repeat;
|
||||
margin-top: 4px;
|
||||
width: 45em;
|
||||
height: 32px;
|
||||
margin-inline-start: 2em;
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
#headers:-moz-locale-dir(rtl) {
|
||||
background-position-x: 100%;
|
||||
}
|
||||
|
||||
#tabsListHeading {
|
||||
font-size: 140%;
|
||||
font-weight: bold;
|
||||
margin-inline-start: 40px;
|
||||
}
|
||||
|
||||
richlistitem {
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
richlistitem[selected="true"],
|
||||
richlistitem:focus {
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"] {
|
||||
min-height: 3em;
|
||||
border: #999999 1px solid !important;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 4px;
|
||||
margin-inline-start: 4em;
|
||||
border-radius: 6px;
|
||||
background-color: menu;
|
||||
width: 44em;
|
||||
opacity: 0.9;
|
||||
box-shadow:
|
||||
inset rgba(255, 255, 255, 0.5) 0 1px 0px,
|
||||
inset rgba(0, 0, 0, 0.1) 0 -2px 0px,
|
||||
rgba(0, 0, 0, 0.1) 0px 1px 0px;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"][selected="true"] {
|
||||
background-color: -moz-MenuHover;
|
||||
}
|
||||
|
||||
richlistitem[type="client"] {
|
||||
min-height: 2em;
|
||||
color: #000000;
|
||||
margin-inline-start: 2em;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 3px;
|
||||
width: 42em;
|
||||
border-radius: 6px;
|
||||
background-color: transparent;
|
||||
-moz-user-focus: ignore !important;
|
||||
}
|
||||
richlistitem.mobile[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-mobileIcon.svg#icon");
|
||||
}
|
||||
richlistitem.desktop[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-desktopIcon.svg#icon");
|
||||
}
|
||||
|
||||
.title,
|
||||
.clientName {
|
||||
color: #000000;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.title[selected="true"],
|
||||
.url[selected="true"] {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.url {
|
||||
color: -moz-nativehyperlinktext;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.tabIcon {
|
||||
padding-inline-start: 2px;
|
||||
padding-top: 2px;
|
||||
}
|
|
@ -8,7 +8,6 @@ browser.jar:
|
|||
#include ../shared/jar.inc.mn
|
||||
skin/classic/browser/sanitizeDialog.css
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/compacttheme.css
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
#tabs-display,
|
||||
#tabsList {
|
||||
background-color: transparent;
|
||||
-moz-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#tabsList {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#tabs-display {
|
||||
background: #fff url(chrome://browser/skin/sync-bg.png) repeat-x center -80px;
|
||||
}
|
||||
|
||||
#headers {
|
||||
background: url(chrome://browser/skin/sync-32.png) no-repeat;
|
||||
margin-top: 4px;
|
||||
width: 45em;
|
||||
height: 32px;
|
||||
margin-inline-start: 2em;
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
#headers:-moz-locale-dir(rtl) {
|
||||
background-position-x: 100%;
|
||||
}
|
||||
|
||||
#tabsListHeading {
|
||||
font-size: 140%;
|
||||
font-weight: bold;
|
||||
margin-inline-start: 40px;
|
||||
}
|
||||
|
||||
richlistitem {
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
richlistitem[selected="true"],
|
||||
richlistitem:focus {
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"] {
|
||||
min-height: 3em;
|
||||
border: #999999 1px solid !important;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 4px;
|
||||
margin-inline-start: 4em;
|
||||
border-radius: 6px;
|
||||
background-color: menu;
|
||||
width: 44em;
|
||||
opacity: 0.9;
|
||||
box-shadow:
|
||||
inset rgba(255, 255, 255, 0.5) 0 1px 0px,
|
||||
inset rgba(0, 0, 0, 0.1) 0 -2px 0px,
|
||||
rgba(0, 0, 0, 0.1) 0px 1px 0px;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"][selected="true"] {
|
||||
background-color: -moz-MenuHover;
|
||||
}
|
||||
|
||||
richlistitem[type="client"] {
|
||||
min-height: 2em;
|
||||
color: #000000;
|
||||
margin-inline-start: 2em;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 3px;
|
||||
width: 42em;
|
||||
border-radius: 6px;
|
||||
background-color: transparent;
|
||||
-moz-user-focus: ignore !important;
|
||||
}
|
||||
richlistitem.mobile[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-mobileIcon.svg#icon");
|
||||
}
|
||||
richlistitem.desktop[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-desktopIcon.svg#icon");
|
||||
}
|
||||
|
||||
.title,
|
||||
.clientName {
|
||||
color: #000000;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.title[selected="true"],
|
||||
.url[selected="true"] {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.url {
|
||||
color: -moz-nativehyperlinktext;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.tabIcon {
|
||||
padding-inline-start: 2px;
|
||||
padding-top: 2px;
|
||||
}
|
|
@ -7,7 +7,6 @@ browser.jar:
|
|||
#include ../shared/jar.inc.mn
|
||||
skin/classic/browser/sanitizeDialog.css
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/compacttheme.css
|
||||
|
|
|
@ -1,105 +0,0 @@
|
|||
/* 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/. */
|
||||
|
||||
#tabs-display,
|
||||
#tabsList {
|
||||
background-color: transparent;
|
||||
-moz-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#tabsList {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
#tabs-display {
|
||||
background: #fff url(chrome://browser/skin/sync-bg.png) repeat-x center -80px;
|
||||
}
|
||||
|
||||
#headers {
|
||||
background: url(chrome://browser/skin/sync-32.png) no-repeat;
|
||||
margin-top: 4px;
|
||||
width: 45em;
|
||||
height: 32px;
|
||||
margin-inline-start: 2em;
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
#headers:-moz-locale-dir(rtl) {
|
||||
background-position-x: 100%;
|
||||
}
|
||||
|
||||
#tabsListHeading {
|
||||
font-size: 140%;
|
||||
font-weight: bold;
|
||||
margin-inline-start: 40px;
|
||||
}
|
||||
|
||||
richlistitem {
|
||||
margin-inline-end: 2em;
|
||||
}
|
||||
|
||||
richlistitem[selected="true"],
|
||||
richlistitem:focus {
|
||||
outline-style: none;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"] {
|
||||
min-height: 3em;
|
||||
border: #999999 1px solid !important;
|
||||
padding: 2px 5px;
|
||||
margin-bottom: 4px;
|
||||
margin-inline-start: 4em;
|
||||
border-radius: 6px;
|
||||
background-color: menu;
|
||||
width: 44em;
|
||||
opacity: 0.9;
|
||||
box-shadow:
|
||||
inset rgba(255, 255, 255, 0.5) 0 1px 0px,
|
||||
inset rgba(0, 0, 0, 0.1) 0 -2px 0px,
|
||||
rgba(0, 0, 0, 0.1) 0px 1px 0px;
|
||||
}
|
||||
|
||||
richlistitem[type="tab"][selected="true"] {
|
||||
background-color: -moz-MenuHover;
|
||||
}
|
||||
|
||||
richlistitem[type="client"] {
|
||||
min-height: 2em;
|
||||
color: #000000;
|
||||
margin-inline-start: 2em;
|
||||
margin-top: 2px;
|
||||
margin-bottom: 3px;
|
||||
width: 42em;
|
||||
border-radius: 6px;
|
||||
background-color: transparent;
|
||||
-moz-user-focus: ignore !important;
|
||||
}
|
||||
richlistitem.mobile[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-mobileIcon.svg#icon");
|
||||
}
|
||||
richlistitem.desktop[type="client"] {
|
||||
list-style-image: url("chrome://browser/skin/sync-desktopIcon.svg#icon");
|
||||
}
|
||||
|
||||
.title,
|
||||
.clientName {
|
||||
color: #000000;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
.title[selected="true"],
|
||||
.url[selected="true"] {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.url {
|
||||
color: -moz-nativehyperlinktext;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
.tabIcon {
|
||||
padding-inline-start: 2px;
|
||||
padding-top: 2px;
|
||||
}
|
|
@ -7,7 +7,6 @@ browser.jar:
|
|||
#include ../shared/jar.inc.mn
|
||||
skin/classic/browser/sanitizeDialog.css
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/compacttheme.css
|
||||
|
|
|
@ -2654,10 +2654,9 @@ NS_CompareLoadInfoAndLoadContext(nsIChannel *aChannel)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
// We try to skip about:newtab and about:sync-tabs.
|
||||
// We try to skip about:newtab.
|
||||
// about:newtab will use SystemPrincipal to download thumbnails through
|
||||
// https:// and blob URLs.
|
||||
// about:sync-tabs will fetch icons through moz-icon://.
|
||||
bool isAboutPage = false;
|
||||
nsINode* node = loadInfo->LoadingNode();
|
||||
if (node) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче