зеркало из https://github.com/mozilla/pjs.git
landing larry on closed tree attempting to add an http fastpath, a=roc
This commit is contained in:
Родитель
4fbe6c9b54
Коммит
a1c847a978
|
@ -3679,9 +3679,8 @@ nsBrowserStatusHandler.prototype =
|
|||
|
||||
var securityUI = gBrowser.securityUI;
|
||||
this.securityButton.setAttribute("tooltiptext", securityUI.tooltipText);
|
||||
var lockIcon = document.getElementById("lock-icon");
|
||||
if (lockIcon)
|
||||
lockIcon.setAttribute("tooltiptext", securityUI.tooltipText);
|
||||
|
||||
getIdentityHandler().checkIdentity(aState);
|
||||
},
|
||||
|
||||
// simulate all change notifications after switching tabs
|
||||
|
@ -5567,3 +5566,266 @@ function showToolbars() {
|
|||
|
||||
return false; // Dismiss the notification message
|
||||
}
|
||||
|
||||
/**
|
||||
* Utility class to handle manipulations of the identity indicators in the UI
|
||||
*/
|
||||
function IdentityHandler() {
|
||||
this._identityPopup = document.getElementById("identity-popup");
|
||||
this._identityBox = document.getElementById("identity-box");
|
||||
this._identityPopupContentBox = document.getElementById("identity-popup-content-box");
|
||||
this._identityPopupTitle = document.getElementById("identity-popup-title");
|
||||
this._identityPopupContent = document.getElementById("identity-popup-content");
|
||||
this._identityPopupContentSupp = document.getElementById("identity-popup-content-supplemental");
|
||||
this._identityPopupContentVerif = document.getElementById("identity-popup-content-verifier");
|
||||
this._identityPopupEncLabel = document.getElementById("identity-popup-encryption-label");
|
||||
this._identityIconLabel = document.getElementById("identity-icon-label");
|
||||
|
||||
this._stringBundle = document.getElementById("bundle_browser");
|
||||
this._staticStrings = {};
|
||||
this._staticStrings[this.IDENTITY_MODE_DOMAIN_VERIFIED] = {
|
||||
title: this._stringBundle.getString("identity.domainverified.title"),
|
||||
encryption_label: this._stringBundle.getString("identity.encrypted")
|
||||
};
|
||||
this._staticStrings[this.IDENTITY_MODE_IDENTIFIED] = {
|
||||
title: this._stringBundle.getString("identity.identified.title"),
|
||||
encryption_label: this._stringBundle.getString("identity.encrypted")
|
||||
};
|
||||
this._staticStrings[this.IDENTITY_MODE_UNKNOWN] = {
|
||||
title: this._stringBundle.getString("identity.unknown.title"),
|
||||
encryption_label: this._stringBundle.getString("identity.unencrypted")
|
||||
};
|
||||
}
|
||||
|
||||
IdentityHandler.prototype = {
|
||||
|
||||
// Mode strings used to control CSS display
|
||||
IDENTITY_MODE_IDENTIFIED : "verifiedIdentity", // High-quality identity information
|
||||
IDENTITY_MODE_DOMAIN_VERIFIED : "verifiedDomain", // Minimal SSL CA-signed domain verification
|
||||
IDENTITY_MODE_UNKNOWN : "unknownIdentity", // No trusted identity information
|
||||
|
||||
// Cache the most recently seen SSLStatus and URI to prevent unnecessary updates
|
||||
_lastStatus : null,
|
||||
_lastURI : null,
|
||||
|
||||
/**
|
||||
* Handler for mouseclicks on the "Tell me more about this website" link text
|
||||
* in the "identity-popup" panel.
|
||||
*/
|
||||
handleMoreInfoClick : function(event) {
|
||||
if (event.button == 0) {
|
||||
displaySecurityInfo();
|
||||
event.stopPropagation();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Helper to parse out the important parts of _lastStatus (of the SSL cert in
|
||||
* particular) for use in constructing identity UI strings
|
||||
*/
|
||||
getIdentityData : function() {
|
||||
var result = {};
|
||||
var status = this._lastStatus.QueryInterface(Components.interfaces.nsISSLStatus);
|
||||
var cert = status.serverCert;
|
||||
|
||||
// Human readable name of Subject
|
||||
result.subjectOrg = cert.organization;
|
||||
|
||||
// SubjectName fields, broken up for individual access
|
||||
if (cert.subjectName) {
|
||||
result.subjectNameFields = {};
|
||||
cert.subjectName.split(",").forEach(function(v) {
|
||||
var field = v.split("=");
|
||||
this[field[0]] = field[1];
|
||||
}, result.subjectNameFields);
|
||||
|
||||
// Call out city, state, and country specifically
|
||||
result.city = result.subjectNameFields.L;
|
||||
result.state = result.subjectNameFields.ST;
|
||||
result.country = result.subjectNameFields.C;
|
||||
}
|
||||
|
||||
// Human readable name of Certificate Authority
|
||||
result.caOrg = cert.issuerOrganization || cert.issuerCommonName;
|
||||
|
||||
return result;
|
||||
},
|
||||
|
||||
/**
|
||||
* Determine the identity of the page being displayed by examining its SSL cert
|
||||
* (if available) and, if necessary, update the UI to reflect this. Intended to
|
||||
* be called by an nsIWebProgressListener.
|
||||
*
|
||||
* @param nsIWebProgress webProgress
|
||||
* @param nsIRequest request
|
||||
* @param PRUint32 state
|
||||
*/
|
||||
checkIdentity : function(state) {
|
||||
var currentURI = gBrowser.currentURI;
|
||||
if (currentURI.schemeIs("http")) {
|
||||
if (!this._lastURI.schemeIs("http"))
|
||||
this.setMode(this.IDENTITY_MODE_UNKNOWN);
|
||||
return;
|
||||
}
|
||||
|
||||
var currentStatus = gBrowser.securityUI
|
||||
.QueryInterface(Components.interfaces.nsISSLStatusProvider)
|
||||
.SSLStatus;
|
||||
if (currentStatus == this._lastStatus && currentURI == this._lastURI) {
|
||||
// No need to update, this is a no-op check
|
||||
return;
|
||||
}
|
||||
|
||||
this._lastStatus = currentStatus;
|
||||
this._lastURI = currentURI;
|
||||
|
||||
if (state & Components.interfaces.nsIWebProgressListener.STATE_IDENTITY_EV_TOPLEVEL)
|
||||
this.setMode(this.IDENTITY_MODE_IDENTIFIED);
|
||||
else if (state & Components.interfaces.nsIWebProgressListener.STATE_SECURE_HIGH)
|
||||
this.setMode(this.IDENTITY_MODE_DOMAIN_VERIFIED);
|
||||
else
|
||||
this.setMode(this.IDENTITY_MODE_UNKNOWN);
|
||||
},
|
||||
|
||||
/**
|
||||
* Update the UI to reflect the specified mode, which should be one of the
|
||||
* IDENTITY_MODE_* constants.
|
||||
*/
|
||||
setMode : function(newMode) {
|
||||
document.getElementById("identity-box").className = newMode;
|
||||
this.setIdentityMessages(newMode);
|
||||
|
||||
// Update the popup too, if it's open
|
||||
if (this._identityPopup.state == "open")
|
||||
this.setPopupMessages(newMode);
|
||||
},
|
||||
|
||||
/**
|
||||
* Set up the messages for the primary identity UI based on the specified mode,
|
||||
* and the details of the SSL cert, where applicable
|
||||
*
|
||||
* @param newMode The newly set identity mode. Should be one of the IDENTITY_MODE_* constants.
|
||||
*/
|
||||
setIdentityMessages : function(newMode) {
|
||||
if (newMode == this.IDENTITY_MODE_DOMAIN_VERIFIED) {
|
||||
var iData = this.getIdentityData();
|
||||
|
||||
// It would be sort of nice to use the CN= field in the cert, since that's
|
||||
// typically what we want here, but thanks to x509 certs being extensible,
|
||||
// it's not the only place you have to check, there can be more than one domain,
|
||||
// et cetera, ad nauseum. We know the cert is valid for location.host, so
|
||||
// let's just use that, it's what the status bar does too.
|
||||
var icon_label = this._lastURI.host;
|
||||
var tooltip = this._stringBundle.getFormattedString("identity.identified.verifier",
|
||||
[iData.caOrg]);
|
||||
}
|
||||
else if (newMode == this.IDENTITY_MODE_IDENTIFIED) {
|
||||
// If it's identified, then we can populate the dialog with credentials
|
||||
iData = this.getIdentityData();
|
||||
tooltip = this._stringBundle.getFormattedString("identity.identified.verifier",
|
||||
[iData.caOrg]);
|
||||
if (iData.country)
|
||||
icon_label = this._stringBundle.getFormattedString("identity.identified.title_with_country",
|
||||
[iData.subjectOrg, iData.country]);
|
||||
else
|
||||
icon_label = iData.subjectOrg;
|
||||
}
|
||||
else {
|
||||
tooltip = this._stringBundle.getString("identity.unknown.body");
|
||||
icon_label = "";
|
||||
}
|
||||
|
||||
// Push the appropriate strings out to the UI
|
||||
this._identityBox.tooltipText = tooltip;
|
||||
this._identityIconLabel.value = icon_label;
|
||||
},
|
||||
|
||||
/**
|
||||
* Set up the title and content messages for the identity message popup,
|
||||
* based on the specified mode, and the details of the SSL cert, where
|
||||
* applicable
|
||||
*
|
||||
* @param newMode The newly set identity mode. Should be one of the IDENTITY_MODE_* constants.
|
||||
*/
|
||||
setPopupMessages : function(newMode) {
|
||||
|
||||
this._identityPopup.className = newMode;
|
||||
this._identityPopupContentBox.className = newMode;
|
||||
|
||||
// Set the static strings up front
|
||||
this._identityPopupTitle.value = this._staticStrings[newMode].title;
|
||||
this._identityPopupEncLabel.textContent = this._staticStrings[newMode].encryption_label;
|
||||
|
||||
// Initialize the optional strings to empty values
|
||||
var supplemental = "";
|
||||
var verifier = "";
|
||||
|
||||
if (newMode == this.IDENTITY_MODE_DOMAIN_VERIFIED) {
|
||||
var iData = this.getIdentityData();
|
||||
|
||||
var body = this._lastURI.host;
|
||||
verifier = this._stringBundle.getFormattedString("identity.identified.verifier",
|
||||
[iData.caOrg]);
|
||||
supplemental = this._stringBundle.getString("identity.domainverified.supplemental");
|
||||
}
|
||||
else if (newMode == this.IDENTITY_MODE_IDENTIFIED) {
|
||||
// If it's identified, then we can populate the dialog with credentials
|
||||
iData = this.getIdentityData();
|
||||
|
||||
// Pull the basics out with fallback options in case common
|
||||
// (optional) fields are left blank
|
||||
body = iData.subjectOrg;
|
||||
verifier = this._stringBundle.getFormattedString("identity.identified.verifier",
|
||||
[iData.caOrg]);
|
||||
|
||||
// Build an appropriate supplemental block out of whatever location data we have
|
||||
if (iData.city)
|
||||
supplemental += iData.city + "\n";
|
||||
if (iData.state && iData.country)
|
||||
supplemental += this._stringBundle.getFormattedString("identity.identified.state_and_country",
|
||||
[iData.state, iData.country]);
|
||||
else if (iData.state) // State only
|
||||
supplemental += iData.state;
|
||||
else if (iData.country) // Country only
|
||||
supplemental += iData.country;
|
||||
}
|
||||
else {
|
||||
body = this._stringBundle.getString("identity.unknown.body");
|
||||
}
|
||||
|
||||
// Push the appropriate strings out to the UI
|
||||
this._identityPopupContent.textContent = body;
|
||||
this._identityPopupContentSupp.textContent = supplemental;
|
||||
this._identityPopupContentVerif.textContent = verifier;
|
||||
},
|
||||
|
||||
/**
|
||||
* Click handler for the identity-box element in primary chrome.
|
||||
*/
|
||||
handleIdentityClick : function(event) {
|
||||
if (event.button != 0)
|
||||
return; // We only want left-clicks
|
||||
|
||||
// Make sure that the display:none style we set in xul is removed now that
|
||||
// the popup is actually needed
|
||||
this._identityPopup.hidden = false;
|
||||
|
||||
// Update the popup strings
|
||||
this.setPopupMessages(this._identityBox.className);
|
||||
|
||||
// Now open the popup, anchored off the primary chrome element
|
||||
this._identityPopup.openPopup(this._identityBox, 'after_start');
|
||||
}
|
||||
};
|
||||
|
||||
var gIdentityHandler;
|
||||
|
||||
/**
|
||||
* Returns the singleton instance of the identity handler class. Should always be
|
||||
* used instead of referencing the global variable directly or creating new instances
|
||||
*/
|
||||
function getIdentityHandler() {
|
||||
if (!gIdentityHandler)
|
||||
gIdentityHandler = new IdentityHandler();
|
||||
return gIdentityHandler;
|
||||
}
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
# Joe Hewitt <hewitt@netscape.com>
|
||||
# Pierre Chanial <chanial@noos.fr>
|
||||
# Dean Tessman <dean_tessman@hotmail.com>
|
||||
# Johnathan Nightingale <johnath@mozilla.com>
|
||||
#
|
||||
# Alternatively, the contents of this file may be used under the terms of
|
||||
# either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
|
@ -136,6 +137,34 @@
|
|||
|
||||
<popup id="placesContext"/>
|
||||
|
||||
<!-- Popup for site identity information -->
|
||||
<panel id="identity-popup" position="after_start" hidden="true" noautofocus="true">
|
||||
<hbox id="identity-popup-container" align="top">
|
||||
<image id="identity-popup-icon"/>
|
||||
<vbox id="identity-popup-content-box">
|
||||
<!-- Title Bar -->
|
||||
<label id="identity-popup-title"/>
|
||||
<!-- Content area -->
|
||||
<description id="identity-popup-content"/>
|
||||
<description id="identity-popup-content-supplemental"/>
|
||||
<description id="identity-popup-content-verifier"/>
|
||||
<hbox id="identity-popup-encryption" flex="1">
|
||||
<vbox>
|
||||
<image id="identity-popup-encryption-icon"/>
|
||||
<spacer flex="1"/>
|
||||
</vbox>
|
||||
<description id="identity-popup-encryption-label" flex="1"/>
|
||||
</hbox>
|
||||
<spacer flex="1"/>
|
||||
<!-- Footer link to page info -->
|
||||
<label id="identity-popup-more-info-link"
|
||||
class="text-link plain"
|
||||
value="&identity.moreInfoLinkText;"
|
||||
onclick="getIdentityHandler().handleMoreInfoClick(event);"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</panel>
|
||||
|
||||
<tooltip id="urlTooltip">
|
||||
<label crop="center" flex="1"/>
|
||||
</tooltip>
|
||||
|
@ -231,19 +260,25 @@
|
|||
oninput="gBrowser.userTypedValue = this.value"
|
||||
ontextentered="return handleURLBarCommand(param);"
|
||||
ontextreverted="return handleURLBarRevert();">
|
||||
<deck id="page-proxy-deck" onclick="PageProxyClickHandler(event);">
|
||||
<image id="page-proxy-button"
|
||||
ondraggesture="PageProxyDragGesture(event);"
|
||||
tooltiptext="&proxyIcon.tooltip;"/>
|
||||
<image id="page-proxy-favicon" validate="never"
|
||||
ondraggesture="PageProxyDragGesture(event);"
|
||||
onload="this.parentNode.selectedIndex = 1;
|
||||
event.stopPropagation();"
|
||||
onerror="gBrowser.addToMissedIconCache(this.src);
|
||||
this.removeAttribute('src');
|
||||
this.parentNode.selectedIndex = 0;"
|
||||
tooltiptext="&proxyIcon.tooltip;"/>
|
||||
</deck>
|
||||
<!-- Use onclick instead of normal popup= syntax since the popup
|
||||
code fires onmousedown, and hence eats our favicon drag events -->
|
||||
<box id="identity-box" align="center"
|
||||
onclick="getIdentityHandler().handleIdentityClick(event);">
|
||||
<deck id="page-proxy-deck" onclick="PageProxyClickHandler(event);">
|
||||
<image id="page-proxy-button"
|
||||
ondraggesture="PageProxyDragGesture(event);"
|
||||
tooltiptext="&proxyIcon.tooltip;"/>
|
||||
<image id="page-proxy-favicon" validate="never"
|
||||
ondraggesture="PageProxyDragGesture(event);"
|
||||
onload="this.parentNode.selectedIndex = 1;
|
||||
event.stopPropagation();"
|
||||
onerror="gBrowser.addToMissedIconCache(this.src);
|
||||
this.removeAttribute('src');
|
||||
this.parentNode.selectedIndex = 0;"
|
||||
tooltiptext="&proxyIcon.tooltip;"/>
|
||||
</deck>
|
||||
<label id="identity-icon-label"/>
|
||||
</box>
|
||||
<hbox id="urlbar-icons">
|
||||
<button type="menu"
|
||||
style="-moz-user-focus: none"
|
||||
|
@ -256,7 +291,6 @@
|
|||
oncommand="return FeedHandler.subscribeToFeed(null, event);"
|
||||
onclick="checkForMiddleClick(this, event);"/>
|
||||
</button>
|
||||
<image id="lock-icon" onclick="if (event.button == 0) displaySecurityInfo(); event.stopPropagation();"/>
|
||||
#ifdef MOZ_SAFE_BROWSING
|
||||
<image id="safebrowsing-urlbar-icon" tooltiptext="&safeb.urlbaricon.tooltip;"
|
||||
level="safe"
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
<binding id="urlbar" extends="chrome://global/content/bindings/autocomplete.xml#autocomplete">
|
||||
<content sizetopopup="pref">
|
||||
<xul:hbox class="autocomplete-textbox-container" flex="1">
|
||||
<children includes="image|deck|stack">
|
||||
<children includes="image|deck|stack|box">
|
||||
<xul:image class="autocomplete-icon" allowevents="true"/>
|
||||
</children>
|
||||
|
||||
|
|
|
@ -208,7 +208,6 @@ PROT_PhishMsgDisplayerBase.prototype.browserSelected = function() {
|
|||
this.messageShouldShow_ = true;
|
||||
}
|
||||
|
||||
this.hideLockIcon_(); // Comes back when we are unselected or unloaded
|
||||
this.addWarningInUrlbar_(); // Goes away when we are unselected or unloaded
|
||||
|
||||
// messageShouldShow might be false if the user dismissed the warning,
|
||||
|
@ -234,7 +233,6 @@ PROT_PhishMsgDisplayerBase.prototype.explicitShow = function() {
|
|||
*/
|
||||
PROT_PhishMsgDisplayerBase.prototype.browserUnselected = function() {
|
||||
this.removeWarningInUrlbar_();
|
||||
this.unhideLockIcon_();
|
||||
if (this.messageShowing_)
|
||||
this.hideMessage_();
|
||||
}
|
||||
|
@ -290,7 +288,6 @@ PROT_PhishMsgDisplayerBase.prototype.done = function() {
|
|||
// If we were started, we must be the current problem, so these things
|
||||
// must be showing
|
||||
this.removeWarningInUrlbar_();
|
||||
this.unhideLockIcon_();
|
||||
|
||||
// Could be though that they've closed the warning dialog
|
||||
if (this.messageShowing_)
|
||||
|
@ -327,28 +324,6 @@ PROT_PhishMsgDisplayerBase.prototype.removeIfExists_ = function(orig,
|
|||
return orig;
|
||||
}
|
||||
|
||||
/**
|
||||
* We don't want to confuse users if they land on a phishy page that uses
|
||||
* SSL, so ensure that the lock icon never shows when we're showing our
|
||||
* warning.
|
||||
*/
|
||||
PROT_PhishMsgDisplayerBase.prototype.hideLockIcon_ = function() {
|
||||
var lockIcon = this.doc_.getElementById("lock-icon");
|
||||
if (!lockIcon)
|
||||
return;
|
||||
lockIcon.hidden = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure they can see it after our warning is finished.
|
||||
*/
|
||||
PROT_PhishMsgDisplayerBase.prototype.unhideLockIcon_ = function() {
|
||||
var lockIcon = this.doc_.getElementById("lock-icon");
|
||||
if (!lockIcon)
|
||||
return;
|
||||
lockIcon.hidden = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method makes our warning icon visible in the location bar. It will
|
||||
* be removed only when the problematic document is navigated awy from
|
||||
|
|
|
@ -350,3 +350,5 @@
|
|||
|
||||
<!ENTITY editBookmark.done.label "Done">
|
||||
<!ENTITY editBookmark.delete.label "Delete">
|
||||
|
||||
<!ENTITY identity.moreInfoLinkText "Tell me more about this web site...">
|
||||
|
|
|
@ -101,3 +101,20 @@ chromelessWindow.accessKey=S
|
|||
# Star button
|
||||
starButtonOn.tooltip=Edit this bookmark
|
||||
starButtonOff.tooltip=Bookmark this page
|
||||
|
||||
# Identity information
|
||||
identity.domainverified.title=Location Verified
|
||||
identity.domainverified.body=You are currently visiting:
|
||||
identity.domainverified.supplemental=Information identifying the owner of this web site may not have been validated.
|
||||
|
||||
identity.identified.title=Identity Verified
|
||||
identity.identified.body=This web site is owned by:
|
||||
identity.identified.verifier=Verified by: %S
|
||||
identity.identified.state_and_country=%S, %S
|
||||
identity.identified.title_with_country=%S (%S)
|
||||
|
||||
identity.unknown.title=Identity Unknown
|
||||
identity.unknown.body=This web site does not supply identity information.
|
||||
|
||||
identity.encrypted=Your connection to this web site is encrypted to prevent eavesdropping.
|
||||
identity.unencrypted=Your connection to this web site is not encrypted.
|
||||
|
|
|
@ -112,7 +112,7 @@
|
|||
<!ENTITY securityView.identity.verifier "Verified by: ">
|
||||
|
||||
<!ENTITY securityView.privacy.header "Privacy & History">
|
||||
<!ENTITY securityView.privacy.history "Have I visited this website before today?">
|
||||
<!ENTITY securityView.privacy.history "Have I visited this web site before today?">
|
||||
<!ENTITY securityView.privacy.cookies "Is this web site storing information (cookies) on my computer?">
|
||||
<!ENTITY securityView.privacy.viewCookies "View Cookies">
|
||||
<!ENTITY securityView.privacy.viewCookies.accessKey "k">
|
||||
|
|
|
@ -827,7 +827,7 @@ toolbar[iconsize="small"] #paste-button:hover:active {
|
|||
#urlbar {
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
-moz-margin-start: 4px;
|
||||
-moz-margin-start: 0px;
|
||||
-moz-margin-end: 0px;
|
||||
width: 7em;
|
||||
min-width: 7em;
|
||||
|
@ -879,46 +879,6 @@ toolbar[iconsize="small"] #paste-button:hover:active {
|
|||
background: url("chrome://browser/skin/Secure-background.gif") #FFFED8 repeat-x;
|
||||
}
|
||||
|
||||
#urlbar #lock-icon {
|
||||
height: 18px;
|
||||
margin: -1px;
|
||||
}
|
||||
|
||||
#urlbar[level="high"] #lock-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
}
|
||||
#urlbar[level="high"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
}
|
||||
#urlbar[level="high"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
}
|
||||
|
||||
#urlbar[level="low"] #lock-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
}
|
||||
#urlbar[level="low"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
}
|
||||
#urlbar[level="low"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
}
|
||||
|
||||
#urlbar[level="broken"] #lock-icon {
|
||||
list-style-image: url("chrome://browser/skin/Security-broken.png");
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
}
|
||||
|
||||
#urlbar[level="broken"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
}
|
||||
|
||||
#urlbar[level="broken"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
}
|
||||
|
||||
#urlbar-container {
|
||||
-moz-padding-end: 5px;
|
||||
}
|
||||
|
@ -1703,3 +1663,116 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
|
|||
-moz-border-left-colors: ThreeDLightShadow ThreeDHighlight !important;
|
||||
}
|
||||
|
||||
/* ::::: Identity Indicator Styling ::::: */
|
||||
/* Location bar visuals*/
|
||||
#identity-box {
|
||||
/* Extend our margins out so that our highlight/separator bar covers the
|
||||
location bar properly */
|
||||
margin: -1px 0 -2px;
|
||||
padding: 1px 2px 2px 0;
|
||||
border-right: 1px solid #888;
|
||||
background-color: white;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
#identity-box:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
#identity-box.verifiedIdentity {
|
||||
background-color: #BFA;
|
||||
}
|
||||
|
||||
#urlbar[level="high"] > #identity-box,
|
||||
#urlbar[level="low"] > #identity-box {
|
||||
/* urlbar adds padding when security level is set, which we need to
|
||||
counteract here so that we still fill the background. */
|
||||
margin: -2px;
|
||||
padding: 1px 2px 2px;
|
||||
}
|
||||
|
||||
#identity-icon-label {
|
||||
padding: 2px 2px 1px;
|
||||
margin: 0;
|
||||
color: black;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.unknownIdentity > #identity-icon-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
margin: 10px 0 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Title */
|
||||
#identity-popup-title {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-title {
|
||||
color: #6A6;
|
||||
}
|
||||
|
||||
.unknownIdentity > #identity-popup-title {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-title {
|
||||
color: black;
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
#identity-popup-content-box > description,
|
||||
#identity-popup-encryption-label {
|
||||
white-space: -moz-pre-wrap;
|
||||
color: black;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#identity-popup-content {
|
||||
padding-top: 5px;
|
||||
margin-bottom: 0;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-content,
|
||||
.verifiedDomain > #identity-popup-content {
|
||||
font-size: 140%;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-encryption {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-encryption > * > #identity-popup-encryption-icon,
|
||||
.verifiedDomain > #identity-popup-encryption > * >#identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Bounding Box */
|
||||
#identity-popup-container {
|
||||
background-image: none;
|
||||
background-color: white;
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -10,6 +10,7 @@ classic.jar:
|
|||
skin/classic/browser/find.png
|
||||
skin/classic/browser/find-bar-background.png
|
||||
skin/classic/browser/Go.png
|
||||
skin/classic/browser/identity.png
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/page-livemarks.png
|
||||
skin/classic/browser/livemark-item.png
|
||||
|
|
|
@ -850,7 +850,7 @@ toolbar[iconsize="small"] #paste-button:not([disabled="true"]):hover:active {
|
|||
margin-bottom: 2px;
|
||||
margin-top: 2px;
|
||||
-moz-margin-end: 0px;
|
||||
-moz-margin-start: 3px;
|
||||
-moz-margin-start: 0px;
|
||||
width: 7em;
|
||||
min-width: 7em;
|
||||
|
||||
|
@ -1735,43 +1735,6 @@ toolbar[mode="text"] > #window-controls > toolbarbutton > .toolbarbutton-text {
|
|||
color: #000000;
|
||||
}
|
||||
|
||||
#urlbar[level="high"] #lock-icon {
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="high"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="high"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="low"] #lock-icon {
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="low"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="low"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
}
|
||||
#urlbar[level="broken"] #lock-icon {
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Security-broken.png");
|
||||
}
|
||||
#urlbar[level="broken"] #lock-icon:hover {
|
||||
-moz-image-region: rect(18px, 18px, 36px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Security-broken.png");
|
||||
}
|
||||
#urlbar[level="broken"] #lock-icon:active {
|
||||
-moz-image-region: rect(36px, 18px, 54px, 0px);
|
||||
list-style-image: url("chrome://browser/skin/Security-broken.png");
|
||||
}
|
||||
|
||||
%ifdef MOZ_WIDGET_GTK2
|
||||
#urlbar > .autocomplete-textbox-container {
|
||||
-moz-binding: url(chrome://browser/skin/browser.xml#autocomplete-security-wrapper);
|
||||
|
@ -1884,3 +1847,105 @@ toolbarbutton.bookmark-item[dragover="true"][open="true"] {
|
|||
.bookmark-item[dragover-bottom="true"] {
|
||||
-moz-border-bottom-colors: #000000;
|
||||
}
|
||||
|
||||
/* ::::: Identity Indicator Styling ::::: */
|
||||
/* Location bar visuals*/
|
||||
#identity-box {
|
||||
border-right: 1px solid #888;
|
||||
background-color: white;
|
||||
opacity: 0.9;
|
||||
}
|
||||
|
||||
#identity-box:hover {
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
#identity-box.verifiedIdentity {
|
||||
background-color: #BFA;
|
||||
}
|
||||
|
||||
#identity-icon-label {
|
||||
padding: 1px 2px 2px;
|
||||
margin: 0;
|
||||
color: black;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.unknownIdentity > #identity-icon-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Popup Icons */
|
||||
#identity-popup-icon {
|
||||
height: 64px;
|
||||
width: 64px;
|
||||
padding: 0;
|
||||
margin: 10px 0 0;
|
||||
list-style-image: url("chrome://browser/skin/identity.png");
|
||||
-moz-image-region: rect(0px, 64px, 64px, 0px);
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(64px, 64px, 128px, 0px);
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
|
||||
-moz-image-region: rect(128px, 64px, 192px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Title */
|
||||
#identity-popup-title {
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-title {
|
||||
color: #6A6;
|
||||
}
|
||||
|
||||
.unknownIdentity > #identity-popup-title {
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.verifiedDomain > #identity-popup-title {
|
||||
color: black;
|
||||
}
|
||||
|
||||
/* Popup Body Text */
|
||||
#identity-popup-content-box > description,
|
||||
#identity-popup-encryption-label {
|
||||
white-space: -moz-pre-wrap;
|
||||
color: black;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
#identity-popup-content {
|
||||
padding-top: 5px;
|
||||
margin-bottom: 0;
|
||||
max-width: 200px;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-content,
|
||||
.verifiedDomain > #identity-popup-content {
|
||||
font-size: 140%;
|
||||
font-weight: bold;
|
||||
max-width: 300px;
|
||||
}
|
||||
|
||||
#identity-popup-encryption {
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.verifiedIdentity > #identity-popup-encryption > * > #identity-popup-encryption-icon,
|
||||
.verifiedDomain > #identity-popup-encryption > * >#identity-popup-encryption-icon {
|
||||
list-style-image: url("chrome://browser/skin/Secure.png");
|
||||
-moz-image-region: rect(0px, 18px, 18px, 0px);
|
||||
}
|
||||
|
||||
/* Popup Bounding Box */
|
||||
#identity-popup-container {
|
||||
background-image: none;
|
||||
background-color: white;
|
||||
min-width: 280px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ classic.jar:
|
|||
skin/classic/browser/endcap-bkgnd-hover.png
|
||||
* skin/classic/browser/engineManager.css (engineManager.css)
|
||||
skin/classic/browser/Info.png
|
||||
skin/classic/browser/identity.png
|
||||
skin/classic/browser/pageInfo.css
|
||||
skin/classic/browser/pageInfo.png
|
||||
skin/classic/browser/page-livemarks.png
|
||||
|
|
Загрузка…
Ссылка в новой задаче