Merge cvs-trunk-mirror to mozilla-central.
authorBenjamin Smedberg <benjamin@smedbergs.us>
Tue, 15 Apr 2008 13:59:01 -0400
changeset 14343 40e4b99f0deaca3707d6993229b1476ad4527c95
parent 13993 dd1eff6b9dcff3d6f248b04a0bfa59545df6648e (current diff)
parent 14342 cd354c526a4281e600e1674c9f1512e7d50c8ab8 (diff)
child 14385 2636b947cc888e2d82f9b0593ccd77f23fd40b6a
push id11
push userbsmedberg@mozilla.com
push dateTue, 15 Apr 2008 18:11:53 +0000
treeherdermozilla-central@40e4b99f0dea [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone2.0a1pre
Merge cvs-trunk-mirror to mozilla-central.
browser/installer/unix/Makefile.in
browser/installer/unix/ab-CD.jst
browser/installer/unix/abe.jst
browser/installer/unix/adt.jst
browser/installer/unix/browser.jst
browser/installer/unix/config.it
browser/installer/unix/header.png
browser/installer/unix/installer.cfg
browser/installer/unix/talkback.jst
browser/installer/unix/watermark.png
browser/installer/unix/xpcom.jst
browser/locales/en-US/installer/installer.inc
client.mk
client.py
config/autoconf.mk.in
configure.in
gfx/cairo/rollback-731e121.patch
gfx/cairo/rollback-c1062bf.patch
intl/chardet/src/Big5Statistics.h
intl/chardet/src/EUCJPStatistics.h
intl/chardet/src/EUCKRStatistics.h
intl/chardet/src/EUCTWStatistics.h
intl/chardet/src/GB2312Statistics.h
intl/chardet/src/nsBIG5Verifier.h
intl/chardet/src/nsCP1252Verifier.h
intl/chardet/src/nsEUCJPVerifier.h
intl/chardet/src/nsEUCKRVerifier.h
intl/chardet/src/nsEUCTWVerifier.h
intl/chardet/src/nsGB18030Verifier.h
intl/chardet/src/nsGB2312Verifier.h
intl/chardet/src/nsHZVerifier.h
intl/chardet/src/nsISO2022CNVerifier.h
intl/chardet/src/nsISO2022JPVerifier.h
intl/chardet/src/nsISO2022KRVerifier.h
intl/chardet/src/nsPSMDetectors.cpp
intl/chardet/src/nsPSMDetectors.h
intl/chardet/src/nsPkgInt.h
intl/chardet/src/nsSJISVerifier.h
intl/chardet/src/nsUCS2BEVerifier.h
intl/chardet/src/nsUCS2LEVerifier.h
intl/chardet/src/nsUTF8Verifier.h
intl/chardet/src/nsVerifier.h
js/src/js.cpp
js/src/jsapi.cpp
js/src/jsemit.cpp
js/src/jsfun.cpp
js/src/jsinterp.cpp
js/src/jsobj.cpp
js/src/jsparse.cpp
js/src/jsregexp.cpp
js/src/jsxml.cpp
js/tests/spidermonkey-extensions-n.tests
layout/reftests/bugs/398289-1-ref.html
layout/reftests/bugs/398289-1.html
layout/reftests/bugs/398289-resource.xul
toolkit/components/places/tests/unit/test_416211.js
toolkit/components/places/tests/unit/test_416214.js
toolkit/components/places/tests/unit/test_417798.js
toolkit/components/places/tests/unit/test_multi_word_search.js
toolkit/components/places/tests/unit/test_word_boundary_search.js
toolkit/locales/en-US/installer/unix/install.it
toolkit/themes/pinstripe/global/icons/loading_16.gif
xpcom/tests/Makefile.in
--- a/accessible/public/nsIAccessibleHyperLink.idl
+++ b/accessible/public/nsIAccessibleHyperLink.idl
@@ -42,17 +42,17 @@
 
 interface nsIURI;
 interface nsIAccessible;
 
 /**
  * A cross-platform interface that supports hyperlink-specific properties and
  * methods.  Anchors, image maps, xul:labels with class="text-link" implement this interface.
  */
-[scriptable, uuid(fe1dd8c0-d50a-4634-b51d-2b20bfb1e231)]
+[scriptable, uuid(38c60bfa-6040-4bfe-93f2-acd6a909bb60)]
 interface nsIAccessibleHyperLink : nsISupports
 {
   /**
    * Returns the offset of the link within the parent accessible.
    */
   readonly attribute long startIndex;
 
   /**
@@ -82,17 +82,17 @@ interface nsIAccessibleHyperLink : nsISu
    */
   readonly attribute boolean selected;
 
   /**
    * The numbber of anchors within this Hyperlink. Is normally 1 for anchors.
    * This anchor is, for example, the visible output of the html:a tag.
    * With an Image Map, reflects the actual areas within the map.
    */
-  readonly attribute long anchorsCount;
+  readonly attribute long anchorCount;
 
   /**
    * Returns the URI at the given index.
    *
    * @note  ARIA hyperlinks do not have an URI to point to, since clicks are
    * processed via JavaScript. Therefore this property does not work on ARIA
    * links.
    *
--- a/accessible/public/nsIAccessibleHyperText.idl
+++ b/accessible/public/nsIAccessibleHyperText.idl
@@ -37,21 +37,43 @@
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 #include "nsISupports.idl"
 #include "nsIAccessibleHyperLink.idl"
 
-[scriptable, uuid(dec56474-2887-4d44-9826-1594cfe4a2f4)]
+/**
+ * A cross-platform interface that deals with text which contains hyperlinks.
+ */
+
+[scriptable, uuid(d56bd454-8ff3-4edc-b266-baeada00267b)]
 interface nsIAccessibleHyperText : nsISupports
 {
-  readonly attribute long links;
-
-  nsIAccessibleHyperLink getLink (in long index);
+  /**
+   * Returns the number of links contained within this hypertext object.
+   */
+  readonly attribute long linkCount;
 
   /*
-   * Return the link index at this character index.
-   * Return value of -1 indicates no link at that index.
+   * Returns the link index at the given character index.
+   * Each link is an embedded object representing exactly 1 character within
+   * the hypertext.
+   *
+   * @param charIndex  the 0-based character index.
+   *
+   * @returns long  0-based link's index.
+   * A return value of -1 indicates no link is present at that index.
    */
-  long getLinkIndex (in long charIndex);
+  long getLinkIndex(in long charIndex);
+
+  /**
+   * Retrieves the nsIAccessibleHyperLink object at the given link index.
+   *
+   * @param linkIndex  0-based index of the link that is to be retrieved.
+   * This can be retrieved via getLinkIndex (see above).
+   *
+   * @returns nsIAccessibleHyperLink  Object representing the link properties
+   * or NS_ERROR_INVALID_ARG if there is no link at that index.
+   */
+  nsIAccessibleHyperLink getLink(in long linkIndex);
 };
--- a/accessible/public/nsIAccessibleRole.idl
+++ b/accessible/public/nsIAccessibleRole.idl
@@ -39,17 +39,17 @@
 #include "nsISupports.idl"
 
 /**
  * Defines cross platform (Gecko) roles.
  *
  * @note - When adding a new role, be sure to also add it to nsRoleMap.h for
  *         each platform.
  */
-[scriptable, uuid(31685b85-36a3-448c-99ed-b034a198e303)]
+[scriptable, uuid(8c0f68f8-164a-4078-a9ee-36a7d180f0e4)]
 interface nsIAccessibleRole : nsISupports
 {
   /**
    * Used when accessible hans't strong defined role.
    */
   const unsigned long ROLE_NOTHING = 0;
 
   /**
@@ -387,17 +387,18 @@ interface nsIAccessibleRole : nsISupport
 
   /**
    * Represents an animation control, which contains content that changes over
    * time, such as a control that displays a series of bitmap frames.
    */
   const unsigned long ROLE_ANIMATION = 54;
 
   /**
-   * Represents a mathematical equation. It is used by MATHML.
+   * Represents a mathematical equation. It is used by MATHML, where there is a
+   * rich DOM subtree for an equation. Use ROLE_FLAT_EQUATION for <img role="math" alt="[TeX]"/>
    */
   const unsigned long ROLE_EQUATION = 55;
 
   /**
    * Represents a button that drops down a list of items.
    */
   const unsigned long ROLE_BUTTONDROPDOWN = 56;
 
@@ -759,14 +760,19 @@ interface nsIAccessibleRole : nsISupport
   const unsigned long ROLE_RICH_OPTION = 118;
   
   /**
    * A list of options
    */
   const unsigned long ROLE_LISTBOX = 119;
 
   /**
+   * Represents a mathematical equation in the accessible name
+   */
+  const unsigned long ROLE_FLAT_EQUATION = 120;
+  
+  /**
    * It's not role actually. This contanst is important to help ensure
    * nsRoleMap's are synchronized.
    */
-  const unsigned long ROLE_LAST_ENTRY = 120;
+  const unsigned long ROLE_LAST_ENTRY = 121;
 };
 
--- a/accessible/src/atk/nsAccessibleWrap.cpp
+++ b/accessible/src/atk/nsAccessibleWrap.cpp
@@ -868,17 +868,17 @@ getChildCountCB(AtkObject *aAtkObj)
         return 0;
     }
 
     PRInt32 count = 0;
     nsCOMPtr<nsIAccessibleHyperText> hyperText;
     accWrap->QueryInterface(NS_GET_IID(nsIAccessibleHyperText), getter_AddRefs(hyperText));
     if (hyperText) {
         // If HyperText, then number of links matches number of children
-        hyperText->GetLinks(&count);
+        hyperText->GetLinkCount(&count);
     }
     else {
         nsCOMPtr<nsIAccessibleText> accText;
         accWrap->QueryInterface(NS_GET_IID(nsIAccessibleText), getter_AddRefs(accText));
         if (!accText) {    // Accessible text that is not a HyperText has no children
             accWrap->GetChildCount(&count);
         }
     }
--- a/accessible/src/atk/nsMaiHyperlink.cpp
+++ b/accessible/src/atk/nsMaiHyperlink.cpp
@@ -281,17 +281,17 @@ isValidCB(AtkHyperlink *aLink)
 
 gint
 getAnchorCountCB(AtkHyperlink *aLink)
 {
     nsIAccessibleHyperLink *accHyperlink = get_accessible_hyperlink(aLink);
     NS_ENSURE_TRUE(accHyperlink, -1);
 
     PRInt32 count = -1;
-    nsresult rv = accHyperlink->GetAnchorsCount(&count);
+    nsresult rv = accHyperlink->GetAnchorCount(&count);
     return (NS_FAILED(rv)) ? -1 : static_cast<gint>(count);
 }
 
 // Check if aHyperlink is a valid MaiHyperlink, and return the
 // nsIAccessibleHyperLink related.
 nsIAccessibleHyperLink *
 get_accessible_hyperlink(AtkHyperlink *aHyperlink)
 {
--- a/accessible/src/atk/nsMaiInterfaceHypertext.cpp
+++ b/accessible/src/atk/nsMaiInterfaceHypertext.cpp
@@ -87,17 +87,17 @@ getLinkCountCB(AtkHypertext *aText)
         return -1;
 
     nsCOMPtr<nsIAccessibleHyperText> hyperText;
     accWrap->QueryInterface(NS_GET_IID(nsIAccessibleHyperText),
                             getter_AddRefs(hyperText));
     NS_ENSURE_TRUE(hyperText, -1);
 
     PRInt32 count = -1;
-    nsresult rv = hyperText->GetLinks(&count);
+    nsresult rv = hyperText->GetLinkCount(&count);
     NS_ENSURE_SUCCESS(rv, -1);
 
     return count;
 }
 
 gint
 getLinkIndexCB(AtkHypertext *aText, gint aCharIndex)
 {
--- a/accessible/src/atk/nsRoleMap.h
+++ b/accessible/src/atk/nsRoleMap.h
@@ -161,11 +161,12 @@ static const PRUint32 atkRoleMap[] = {
     ATK_ROLE_MENU,                // nsIAccessibleRole::ROLE_PARENT_MENUITEM      112
     ATK_ROLE_CALENDAR,            // nsIAccessibleRole::ROLE_CALENDAR             113
     ATK_ROLE_MENU,                // nsIAccessibleRole::ROLE_COMBOBOX_LIST        114
     ATK_ROLE_MENU_ITEM,           // nsIAccessibleRole::ROLE_COMBOBOX_OPTION      115
     ATK_ROLE_IMAGE,               // nsIAccessibleRole::ROLE_IMAGE_MAP            116
     ATK_ROLE_LIST_ITEM,           // nsIAccessibleRole::ROLE_OPTION               117
     ATK_ROLE_LIST_ITEM,           // nsIAccessibleRole::ROLE_RICH_OPTION          118
     ATK_ROLE_LIST,                // nsIAccessibleRole::ROLE_LISTBOX              119
+    ATK_ROLE_UNKNOWN,             // nsIAccessibleRole::ROLE_FLAT_EQUATION        120
     kROLE_ATK_LAST_ENTRY          // nsIAccessibleRole::ROLE_LAST_ENTRY
 };
 
--- a/accessible/src/atk/nsXULTreeAccessibleWrap.cpp
+++ b/accessible/src/atk/nsXULTreeAccessibleWrap.cpp
@@ -63,17 +63,17 @@ NS_IMETHODIMP nsXULTreeAccessibleWrap::G
   // by going through DOM structure of XUL tree
   nsAccessible::GetChildCount(aAccChildCount);
 
   if (*aAccChildCount != 0 && *aAccChildCount != eChildCountUninitialized) {
     // add the count of table cell (or tree item) accessibles, which are
     // created and appended by XUL tree accessible implementation
     PRInt32 rowCount, colCount = 1;
     mTreeView->GetRowCount(&rowCount);
-    mFirstChild->GetChildCount(&colCount);
+    GetColumns(&colCount);
 
     *aAccChildCount += rowCount * colCount;
   }
   return NS_OK;
 }
 
 NS_IMETHODIMP nsXULTreeAccessibleWrap::GetCaption(nsIAccessible **aCaption)
 {
@@ -82,43 +82,31 @@ NS_IMETHODIMP nsXULTreeAccessibleWrap::G
 }
 
 NS_IMETHODIMP nsXULTreeAccessibleWrap::GetSummary(nsAString &aSummary)
 {
   aSummary.Truncate();
   return NS_OK;
 }
 
-NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumns(PRInt32 *aColumns)
+NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumns(PRInt32 *aColumnCount)
 {
-  nsresult rv = NS_OK;
-
-  nsCOMPtr<nsIAccessible> acc;
-  rv = nsAccessible::GetFirstChild(getter_AddRefs(acc));
-  NS_ENSURE_TRUE(acc, NS_ERROR_FAILURE);
-
-  rv = acc->GetChildCount(aColumns);
+  NS_ENSURE_ARG_POINTER(aColumnCount);
+  *aColumnCount = 0;
 
-  // The last child could be column picker. In that case, we need to minus the
-  // number of columns by 1
-  nsCOMPtr<nsIAccessible> lastChildAccessible;
-  acc->GetLastChild(getter_AddRefs(lastChildAccessible));
-  nsCOMPtr<nsIAccessNode> accessNode = do_QueryInterface(lastChildAccessible);
-  NS_ENSURE_TRUE(accessNode, NS_ERROR_FAILURE);
-  nsCOMPtr<nsIDOMNode> domNode;
-  accessNode->GetDOMNode(getter_AddRefs(domNode));
-  nsCOMPtr<nsIContent> content = do_QueryInterface(domNode);
-  NS_ENSURE_TRUE(content, NS_ERROR_FAILURE);
-  // it's menupopup inside column picker
-  if (content->NodeInfo()->Equals(nsAccessibilityAtoms::menupopup,
-                                  kNameSpaceID_XUL)) {
-    (*aColumns)--;
-  }
+  nsCOMPtr<nsITreeColumn> column;
+  column = GetFirstVisibleColumn(mTree);
+  if (!column)
+    return NS_ERROR_FAILURE;
 
-  return *aColumns > 0 ? rv : NS_ERROR_FAILURE;
+  do {
+    (*aColumnCount)++;
+  } while ((column = GetNextVisibleColumn(column)));
+
+  return NS_OK;
 }
 
 NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumnHeader(nsIAccessibleTable **aColumnHeader)
 {
   nsresult rv = NS_OK;
 
   nsCOMPtr<nsIAccessible> acc;
   nsAccessible::GetFirstChild(getter_AddRefs(acc));
@@ -273,48 +261,54 @@ NS_IMETHODIMP nsXULTreeAccessibleWrap::G
   NS_ENSURE_SUCCESS(rv, rv);
 
   PRInt32 treeCols;
   nsAccessible::GetChildCount(&treeCols);
   *aIndex = aRow * columns + aColumn + treeCols;
   return NS_OK;
 }
 
-NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumnAtIndex(PRInt32 aIndex, PRInt32 *_retval)
+NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumnAtIndex(PRInt32 aIndex, PRInt32 *aColumn)
 {
-  NS_ENSURE_ARG_POINTER(_retval);
+  NS_ENSURE_ARG_POINTER(aColumn);
 
+  *aColumn = -1;
   nsresult rv = NS_OK;
 
   PRInt32 columns;
   rv = GetColumns(&columns);
   NS_ENSURE_SUCCESS(rv, rv);
 
   PRInt32 treeCols;
   nsAccessible::GetChildCount(&treeCols);
 
-  *_retval = (aIndex - treeCols) % columns;
+  if (aIndex >= treeCols) {
+    *aColumn = (aIndex - treeCols) % columns;
+  }
   
   return NS_OK;
 }
 
-NS_IMETHODIMP nsXULTreeAccessibleWrap::GetRowAtIndex(PRInt32 aIndex, PRInt32 *_retval)
+NS_IMETHODIMP nsXULTreeAccessibleWrap::GetRowAtIndex(PRInt32 aIndex, PRInt32 *aRow)
 {
-  NS_ENSURE_ARG_POINTER(_retval);
+  NS_ENSURE_ARG_POINTER(aRow);
 
+  *aRow = -1;
   nsresult rv = NS_OK;
 
   PRInt32 columns;
   rv = GetColumns(&columns);
   NS_ENSURE_SUCCESS(rv, rv);
 
   PRInt32 treeCols;
   nsAccessible::GetChildCount(&treeCols);
 
-  *_retval = (aIndex - treeCols) / columns;
+  if (aIndex >= treeCols) {
+    *aRow = (aIndex - treeCols) / columns;
+  }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP nsXULTreeAccessibleWrap::GetColumnExtentAt(PRInt32 aRow, PRInt32 aColumn, PRInt32 *_retval)
 {
   NS_ENSURE_ARG_POINTER(_retval);
 
--- a/accessible/src/base/nsARIAMap.cpp
+++ b/accessible/src/base/nsARIAMap.cpp
@@ -102,16 +102,17 @@ nsRoleMapEntry nsARIAMap::gWAIRoleMap[] 
             {&nsAccessibilityAtoms::aria_readonly, kBoolState, nsIAccessibleStates::STATE_READONLY},
             {&nsAccessibilityAtoms::aria_multiselectable, kBoolState, nsIAccessibleStates::STATE_MULTISELECTABLE | nsIAccessibleStates::STATE_EXTSELECTABLE}, kEndEntry},
   {"listitem", nsIAccessibleRole::ROLE_LISTITEM, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_READONLY,
             {&nsAccessibilityAtoms::aria_selected, kBoolState, nsIAccessibleStates::STATE_SELECTED | nsIAccessibleStates::STATE_SELECTABLE},
             {&nsAccessibilityAtoms::aria_selected, "false", nsIAccessibleStates::STATE_SELECTABLE},
             {&nsAccessibilityAtoms::aria_checked, kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE},
             {&nsAccessibilityAtoms::aria_checked, "mixed", nsIAccessibleStates::STATE_MIXED | nsIAccessibleStates::STATE_CHECKABLE},
             {&nsAccessibilityAtoms::aria_checked, "false", nsIAccessibleStates::STATE_CHECKABLE}, kEndEntry},
+  {"math", nsIAccessibleRole::ROLE_FLAT_EQUATION, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
   {"menu", nsIAccessibleRole::ROLE_MENUPOPUP, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
   {"menubar", nsIAccessibleRole::ROLE_MENUBAR, eNameLabelOrTitle, eNoValue, kNoReqStates, kEndEntry},
   {"menuitem", nsIAccessibleRole::ROLE_MENUITEM, eNameOkFromChildren, eNoValue, kNoReqStates,
             {&nsAccessibilityAtoms::aria_checked, kBoolState, nsIAccessibleStates::STATE_CHECKED | nsIAccessibleStates::STATE_CHECKABLE},
             {&nsAccessibilityAtoms::aria_checked, "mixed", nsIAccessibleStates::STATE_MIXED | nsIAccessibleStates::STATE_CHECKABLE},
             {&nsAccessibilityAtoms::aria_checked, "false", nsIAccessibleStates::STATE_CHECKABLE}, kEndEntry},
   {"menuitemcheckbox", nsIAccessibleRole::ROLE_CHECK_MENU_ITEM, eNameOkFromChildren, eNoValue, nsIAccessibleStates::STATE_CHECKABLE,
             {&nsAccessibilityAtoms::aria_checked, kBoolState, nsIAccessibleStates::STATE_CHECKED },
--- a/accessible/src/base/nsAccessibilityAtomList.h
+++ b/accessible/src/base/nsAccessibilityAtomList.h
@@ -226,17 +226,18 @@ ACCESSIBILITY_ATOM(aria_valuemax, "aria-
 ACCESSIBILITY_ATOM(aria_valuetext, "aria-valuetext")
 
   // misc atoms
 // a form property used to obtain the default label
 // of an HTML button from the button frame
 ACCESSIBILITY_ATOM(defaultLabel, "defaultLabel")
 
 // Object attributes
+ACCESSIBILITY_ATOM(cellIndex, "cell-index")
+ACCESSIBILITY_ATOM(containerAtomic, "container-atomic")
+ACCESSIBILITY_ATOM(containerBusy, "container-busy")
+ACCESSIBILITY_ATOM(containerChannel, "container-channel")
+ACCESSIBILITY_ATOM(containerLive, "container-live")
+ACCESSIBILITY_ATOM(containerRelevant, "container-relevant")
 ACCESSIBILITY_ATOM(level, "level")
+ACCESSIBILITY_ATOM(lineNumber, "line-number")
 ACCESSIBILITY_ATOM(posinset, "posinset") 
 ACCESSIBILITY_ATOM(setsize, "setsize")
-ACCESSIBILITY_ATOM(lineNumber, "line-number")
-ACCESSIBILITY_ATOM(containerRelevant, "container-relevant")
-ACCESSIBILITY_ATOM(containerLive, "container-live")
-ACCESSIBILITY_ATOM(containerChannel, "container-channel")
-ACCESSIBILITY_ATOM(containerAtomic, "container-atomic")
-ACCESSIBILITY_ATOM(containerBusy, "container-busy")
--- a/accessible/src/base/nsAccessibilityService.cpp
+++ b/accessible/src/base/nsAccessibilityService.cpp
@@ -1571,17 +1571,17 @@ NS_IMETHODIMP nsAccessibilityService::Ge
     GetAccessibleForDeckChildren(aNode, getter_AddRefs(newAcc));
   }
 
   // If no accessible, see if we need to create a generic accessible because
   // of some property that makes this object interesting
   // We don't do this for <body>, <html>, <window>, <dialog> etc. which 
   // correspond to the doc accessible and will be created in any case
   if (!newAcc && content->Tag() != nsAccessibilityAtoms::body && content->GetParent() && 
-      (content->IsFocusable() ||
+      (frame->IsFocusable() ||
        (isHTML && nsAccUtils::HasListener(content, NS_LITERAL_STRING("click"))) ||
        HasUniversalAriaProperty(content, aWeakShell) || roleMapEntry ||
        HasRelatedContent(content) || nsAccUtils::IsXLink(content))) {
     // This content is focusable or has an interesting dynamic content accessibility property.
     // If it's interesting we need it in the accessibility hierarchy so that events or
     // other accessibles can point to it, or so that it can hold a state, etc.
     if (isHTML) {
       // Interesting HTML container which may have selectable text and/or embedded objects
--- a/accessible/src/base/nsAccessibilityService.h
+++ b/accessible/src/base/nsAccessibilityService.h
@@ -264,18 +264,18 @@ static const char kRoleNames[][20] = {
   "app root",            //ROLE_APP_ROOT
   "parent menuitem",     //ROLE_PARENT_MENUITEM
   "calendar",            //ROLE_CALENDAR
   "combobox list",       //ROLE_COMBOBOX_LIST
   "combobox option",     //ROLE_COMBOBOX_OPTION
   "image map",           //ROLE_IMAGE_MAP
   "listbox option",      //ROLE_OPTION
   "listbox rich option", //ROLE_RICH_OPTION
-  "listbox"              //ROLE_LISTBOX
-  
+  "listbox",             //ROLE_LISTBOX
+  "flat equation"        //ROLE_FLAT_EQUATION  
 };
 
 /**
  * Map nsIAccessibleEvents constants to strings. Used by
  * nsIAccessibleRetrieval::getStringEventType() method.
  */
 static const char kEventTypeNames[][40] = {
   "unknown",                                 //
--- a/accessible/src/base/nsAccessible.cpp
+++ b/accessible/src/base/nsAccessible.cpp
@@ -2051,16 +2051,19 @@ nsAccessible::GetAttributes(nsIPersisten
   }
 
 
   PRUint32 role = Role(this);
   if (role == nsIAccessibleRole::ROLE_CHECKBUTTON ||
       role == nsIAccessibleRole::ROLE_PUSHBUTTON ||
       role == nsIAccessibleRole::ROLE_MENUITEM ||
       role == nsIAccessibleRole::ROLE_LISTITEM ||
+      role == nsIAccessibleRole::ROLE_OPTION ||
+      role == nsIAccessibleRole::ROLE_RADIOBUTTON ||
+      role == nsIAccessibleRole::ROLE_RICH_OPTION ||
       role == nsIAccessibleRole::ROLE_OUTLINEITEM ||
       content->HasAttr(kNameSpaceID_None, nsAccessibilityAtoms::aria_checked)) {
     // Might be checkable -- checking role & ARIA attribute first is faster than getting state
     PRUint32 state = 0;
     GetFinalState(&state, nsnull);
     if (state & nsIAccessibleStates::STATE_CHECKABLE) {
       // No official state for checkable, so use object attribute to expose that
       attributes->SetStringProperty(NS_LITERAL_CSTRING("checkable"), NS_LITERAL_STRING("true"),
@@ -2075,16 +2078,18 @@ nsAccessible::GetAttributes(nsIPersisten
     // these properties to map them into description.
 
     // If accessible is invisible we don't want to calculate group ARIA
     // attributes for it.
     if ((role == nsIAccessibleRole::ROLE_LISTITEM ||
         role == nsIAccessibleRole::ROLE_MENUITEM ||
         role == nsIAccessibleRole::ROLE_RADIOBUTTON ||
         role == nsIAccessibleRole::ROLE_PAGETAB ||
+        role == nsIAccessibleRole::ROLE_OPTION ||
+        role == nsIAccessibleRole::ROLE_RADIOBUTTON ||
         role == nsIAccessibleRole::ROLE_OUTLINEITEM) &&
         0 == (State(this) & nsIAccessibleStates::STATE_INVISIBLE)) {
       nsCOMPtr<nsIAccessible> parent = GetParent();
       NS_ENSURE_TRUE(parent, NS_ERROR_FAILURE);
 
       PRInt32 positionInGroup = 0;
       PRInt32 setSize = 0;
 
@@ -3254,22 +3259,22 @@ NS_IMETHODIMP nsAccessible::SelectAllSel
   return NS_OK;
 }
 
 // nsIAccessibleHyperLink
 // Because of new-atk design, any embedded object in text can implement
 // nsIAccessibleHyperLink, which helps determine where it is located
 // within containing text
 
-// readonly attribute long nsIAccessibleHyperLink::anchorsCount
+// readonly attribute long nsIAccessibleHyperLink::anchorCount
 NS_IMETHODIMP
-nsAccessible::GetAnchorsCount(PRInt32 *aAnchorsCount)
+nsAccessible::GetAnchorCount(PRInt32 *aAnchorCount)
 {
-  NS_ENSURE_ARG_POINTER(aAnchorsCount);
-  *aAnchorsCount = 1;
+  NS_ENSURE_ARG_POINTER(aAnchorCount);
+  *aAnchorCount = 1;
   return NS_OK;
 }
 
 // readonly attribute long nsIAccessibleHyperLink::startIndex
 NS_IMETHODIMP
 nsAccessible::GetStartIndex(PRInt32 *aStartIndex)
 {
   NS_ENSURE_ARG_POINTER(aStartIndex);
@@ -3518,16 +3523,17 @@ nsAccessible::GetAttrValue(nsIAtom *aPro
 
 PRBool nsAccessible::MustPrune(nsIAccessible *aAccessible)
 { 
   PRUint32 role = Role(aAccessible);
   return role == nsIAccessibleRole::ROLE_MENUITEM || 
          role == nsIAccessibleRole::ROLE_COMBOBOX_OPTION ||
          role == nsIAccessibleRole::ROLE_OPTION ||
          role == nsIAccessibleRole::ROLE_ENTRY ||
+         role == nsIAccessibleRole::ROLE_FLAT_EQUATION ||
          role == nsIAccessibleRole::ROLE_PASSWORD_TEXT ||
          role == nsIAccessibleRole::ROLE_PUSHBUTTON ||
          role == nsIAccessibleRole::ROLE_TOGGLE_BUTTON ||
          role == nsIAccessibleRole::ROLE_GRAPHIC ||
          role == nsIAccessibleRole::ROLE_SLIDER ||
          role == nsIAccessibleRole::ROLE_PROGRESSBAR ||
          role == nsIAccessibleRole::ROLE_SEPARATOR;
 }
--- a/accessible/src/base/nsDocAccessible.cpp
+++ b/accessible/src/base/nsDocAccessible.cpp
@@ -154,17 +154,20 @@ NS_IMETHODIMP nsDocAccessible::GetName(n
   aName.Truncate();
   if (mParent) {
     rv = mParent->GetName(aName); // Allow owning iframe to override the name
   }
   if (aName.IsEmpty()) {
     rv = nsAccessible::GetName(aName); // Allow name via aria-labelledby or title attribute
   }
   if (aName.IsEmpty()) {
-    rv = GetTitle(aName);   // Finally try title element
+    rv = GetTitle(aName);   // Try title element
+  }
+  if (aName.IsEmpty()) {   // Last resort: use URL
+    rv = GetURL(aName);
   }
 
   return rv;
 }
 
 NS_IMETHODIMP nsDocAccessible::GetRole(PRUint32 *aRole)
 {
   *aRole = nsIAccessibleRole::ROLE_PANE; // Fall back
--- a/accessible/src/base/nsOuterDocAccessible.cpp
+++ b/accessible/src/base/nsOuterDocAccessible.cpp
@@ -47,35 +47,16 @@
 NS_IMPL_ISUPPORTS_INHERITED0(nsOuterDocAccessible, nsAccessible)
 
 nsOuterDocAccessible::nsOuterDocAccessible(nsIDOMNode* aNode, 
                                            nsIWeakReference* aShell):
   nsAccessibleWrap(aNode, aShell)
 {
 }
 
-  /* attribute wstring accName; */
-NS_IMETHODIMP nsOuterDocAccessible::GetName(nsAString& aName) 
-{
-  nsCOMPtr<nsIAccessible> accessible;
-  GetFirstChild(getter_AddRefs(accessible));
-  nsCOMPtr<nsIAccessibleDocument> accDoc(do_QueryInterface(accessible));
-  if (!accDoc) {
-    return NS_ERROR_FAILURE;
-  }
-  nsresult rv = accDoc->GetTitle(aName);
-  if (NS_FAILED(rv) || aName.IsEmpty()) {
-    rv = nsAccessible::GetName(aName);
-    if (aName.IsEmpty()) {
-      rv = accDoc->GetURL(aName);
-    }
-  }
-  return rv;
-}
-
 /* unsigned long getRole (); */
 NS_IMETHODIMP nsOuterDocAccessible::GetRole(PRUint32 *aRole)
 {
   *aRole = nsIAccessibleRole::ROLE_INTERNAL_FRAME;
   return NS_OK;
 }
 
 NS_IMETHODIMP
--- a/accessible/src/base/nsOuterDocAccessible.h
+++ b/accessible/src/base/nsOuterDocAccessible.h
@@ -47,17 +47,16 @@ class nsIWeakReference;
 class nsOuterDocAccessible : public nsAccessibleWrap
 {
   NS_DECL_ISUPPORTS_INHERITED
 
   public:
     nsOuterDocAccessible(nsIDOMNode* aNode, 
                          nsIWeakReference* aShell);
 
-    NS_IMETHOD GetName(nsAString& aName);
     NS_IMETHOD GetRole(PRUint32 *aRole);
     NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
     NS_IMETHOD GetChildAtPoint(PRInt32 aX, PRInt32 aY,
                                nsIAccessible **aAccessible);
     void CacheChildren();
     nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
 };
 
--- a/accessible/src/base/nsRootAccessible.cpp
+++ b/accessible/src/base/nsRootAccessible.cpp
@@ -644,17 +644,17 @@ nsresult nsRootAccessible::HandleEventWi
 #ifdef MOZ_XUL
   if (eventType.EqualsLiteral("TreeViewChanged")) { // Always asynch, always from user input
     if (!isTree)
       return NS_OK;
 
     nsCOMPtr<nsIContent> treeContent = do_QueryInterface(aTargetNode);
     nsAccEvent::PrepareForEvent(aTargetNode, PR_TRUE);
     return accService->InvalidateSubtreeFor(eventShell, treeContent,
-                                            nsIAccessibleEvent::EVENT_ASYNCH_SIGNIFICANT_CHANGE);
+                                            nsIAccessibleEvent::EVENT_DOM_SIGNIFICANT_CHANGE);
   }
 #endif
 
   if (eventType.EqualsLiteral("popuphiding")) {
     // If accessible focus was on or inside popup that closes,
     // then restore it to true current focus.
     // This is the case when we've been getting DOMMenuItemActive events
     // inside of a combo box that closes. The real focus is on the combo box.
--- a/accessible/src/html/nsHTMLImageAccessible.cpp
+++ b/accessible/src/html/nsHTMLImageAccessible.cpp
@@ -221,24 +221,24 @@ NS_IMETHODIMP nsHTMLImageAccessible::DoA
                      getter_AddRefs(tmp));
   }
   return nsLinkableAccessible::DoAction(index);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsIAccessibleHyperLink
 NS_IMETHODIMP
-nsHTMLImageAccessible::GetAnchorsCount(PRInt32 *aAnchors)
+nsHTMLImageAccessible::GetAnchorCount(PRInt32 *aAnchorCount)
 {
-  NS_ENSURE_ARG_POINTER(aAnchors);
+  NS_ENSURE_ARG_POINTER(aAnchorCount);
 
   if (!mMapElement)
-    return nsLinkableAccessible::GetAnchorsCount(aAnchors);
+    return nsLinkableAccessible::GetAnchorCount(aAnchorCount);
 
-  return GetChildCount(aAnchors);
+  return GetChildCount(aAnchorCount);
 }
 
 NS_IMETHODIMP
 nsHTMLImageAccessible::GetURI(PRInt32 aIndex, nsIURI **aURI)
 {
   NS_ENSURE_ARG_POINTER(aURI);
   *aURI = nsnull;
 
--- a/accessible/src/html/nsHTMLImageAccessible.h
+++ b/accessible/src/html/nsHTMLImageAccessible.h
@@ -62,17 +62,17 @@ public:
 
   // nsIAccessible
   NS_IMETHOD GetName(nsAString& _retval); 
   NS_IMETHOD GetState(PRUint32 *aState, PRUint32 *aExtraState);
   NS_IMETHOD GetRole(PRUint32 *_retval);
   NS_IMETHOD DoAction(PRUint8 index);
 
   // nsIAccessibleHyperLink
-  NS_IMETHOD GetAnchorsCount(PRInt32 *aAnchors);
+  NS_IMETHOD GetAnchorCount(PRInt32 *aAnchorCount);
   NS_IMETHOD GetURI(PRInt32 aIndex, nsIURI **aURI);
   NS_IMETHOD GetAnchor(PRInt32 aIndex, nsIAccessible **aAccessible);
 
   // nsPIAccessNode
   NS_IMETHOD Shutdown();
 
   // nsIAccessibleImage
   NS_DECL_NSIACCESSIBLEIMAGE
--- a/accessible/src/html/nsHTMLTableAccessible.cpp
+++ b/accessible/src/html/nsHTMLTableAccessible.cpp
@@ -55,31 +55,93 @@
 #include "nsIDOMHTMLTableSectionElem.h"
 #include "nsIDocument.h"
 #include "nsIPresShell.h"
 #include "nsIServiceManager.h"
 #include "nsITableLayout.h"
 #include "nsITableCellLayout.h"
 #include "nsLayoutErrors.h"
 
+////////////////////////////////////////////////////////////////////////////////
+// nsHTMLTableCellAccessible
 
 NS_IMPL_ISUPPORTS_INHERITED0(nsHTMLTableCellAccessible, nsHyperTextAccessible)
 
 nsHTMLTableCellAccessible::nsHTMLTableCellAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell):
 nsHyperTextAccessibleWrap(aDomNode, aShell)
 { 
 }
 
 /* unsigned long getRole (); */
 NS_IMETHODIMP nsHTMLTableCellAccessible::GetRole(PRUint32 *aResult)
 {
   *aResult = nsIAccessibleRole::ROLE_CELL;
   return NS_OK;
 }
 
+nsresult
+nsHTMLTableCellAccessible::GetAttributesInternal(nsIPersistentProperties *aAttributes)
+{
+  if (IsDefunct())
+    return NS_ERROR_FAILURE;
+
+  nsresult rv = nsHyperTextAccessibleWrap::GetAttributesInternal(aAttributes);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsCOMPtr<nsIContent> content(do_QueryInterface(mDOMNode));
+
+  nsCOMPtr<nsIPresShell> shell = GetPresShell();
+  NS_ENSURE_STATE(shell);
+  
+  nsIFrame *frame = shell->GetPrimaryFrameFor(content);
+  nsITableCellLayout *cellLayout = nsnull;
+  CallQueryInterface(frame, &cellLayout);
+  NS_ENSURE_STATE(cellLayout);
+
+  PRInt32 rowIdx = -1, cellIdx = -1;
+  rv = cellLayout->GetCellIndexes(rowIdx, cellIdx);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsCOMPtr<nsIAccessible> childAcc(this);
+
+  nsCOMPtr<nsIAccessible> parentAcc;
+  rv = childAcc->GetParent(getter_AddRefs(parentAcc));
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  while (parentAcc) {
+    if (Role(parentAcc) == nsIAccessibleRole::ROLE_TABLE) {
+      // Table accessible must implement nsIAccessibleTable interface but if
+      // it isn't happen (for example because of ARIA usage) we shouldn't fail
+      // on getting other attributes.
+      nsCOMPtr<nsIAccessibleTable> tableAcc(do_QueryInterface(parentAcc));
+      if (!tableAcc)
+        return NS_OK;
+
+      PRInt32 idx = -1;
+      rv = tableAcc->GetIndexAt(rowIdx, cellIdx, &idx);
+      NS_ENSURE_SUCCESS(rv, rv);
+
+      nsAutoString stringIdx;
+      stringIdx.AppendInt(idx);
+      nsAccUtils::SetAccAttr(aAttributes, nsAccessibilityAtoms::cellIndex,
+                             stringIdx);
+      return NS_OK;
+    }
+
+    parentAcc.swap(childAcc);
+    rv = childAcc->GetParent(getter_AddRefs(parentAcc));
+    NS_ENSURE_SUCCESS(rv, rv);
+  }
+
+  return NS_OK;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+// nsHTMLTableAccessible
+
 NS_IMPL_ISUPPORTS_INHERITED1(nsHTMLTableAccessible, nsAccessible, nsIAccessibleTable)
 
 nsHTMLTableAccessible::nsHTMLTableAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell):
 nsAccessibleWrap(aDomNode, aShell)
 { 
 }
 
 void nsHTMLTableAccessible::CacheChildren()
--- a/accessible/src/html/nsHTMLTableAccessible.h
+++ b/accessible/src/html/nsHTMLTableAccessible.h
@@ -40,20 +40,25 @@
 #define _nsHTMLTableAccessible_H_
 
 #include "nsBaseWidgetAccessible.h"
 #include "nsIAccessibleTable.h"
 
 class nsHTMLTableCellAccessible : public nsHyperTextAccessibleWrap
 {
 public:
+  nsHTMLTableCellAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
+
   NS_DECL_ISUPPORTS_INHERITED
 
-  nsHTMLTableCellAccessible(nsIDOMNode* aDomNode, nsIWeakReference* aShell);
-  NS_IMETHOD GetRole(PRUint32 *aResult); 
+  // nsIAccessible
+  NS_IMETHOD GetRole(PRUint32 *aRole);
+
+  // nsAccessible
+  virtual nsresult GetAttributesInternal(nsIPersistentProperties *aAttributes);
 };
 
 class nsITableLayout;
 
 // To turn on table debugging descriptions define SHOW_LAYOUT_HEURISTIC
 // This allow release trunk builds to be used by testers to refine the
 // data vs. layout heuristic
 // #define SHOW_LAYOUT_HEURISTIC
--- a/accessible/src/html/nsHyperTextAccessible.cpp
+++ b/accessible/src/html/nsHyperTextAccessible.cpp
@@ -1266,54 +1266,59 @@ nsHyperTextAccessible::GetOffsetAtPoint(
     NS_ENSURE_TRUE(textLength >= 0, NS_ERROR_FAILURE);
     offset += textLength;
   }
 
   return NS_OK; // Not found, will return -1
 }
 
 // ------- nsIAccessibleHyperText ---------------
-NS_IMETHODIMP nsHyperTextAccessible::GetLinks(PRInt32 *aLinks)
+NS_IMETHODIMP
+nsHyperTextAccessible::GetLinkCount(PRInt32 *aLinkCount)
 {
-  *aLinks = 0;
+  NS_ENSURE_ARG_POINTER(aLinkCount);
+  *aLinkCount = 0;
   if (!mDOMNode) {
     return NS_ERROR_FAILURE;
   }
 
   nsCOMPtr<nsIAccessible> accessible;
 
   while (NextChild(accessible)) {
     if (IsEmbeddedObject(accessible)) {
-      ++*aLinks;
+      ++*aLinkCount;
     }
   }
   return NS_OK;
 }
 
 
 NS_IMETHODIMP
-nsHyperTextAccessible::GetLink(PRInt32 aIndex, nsIAccessibleHyperLink **aLink)
+nsHyperTextAccessible::GetLink(PRInt32 aLinkIndex, nsIAccessibleHyperLink **aLink)
 {
   NS_ENSURE_ARG_POINTER(aLink);
   *aLink = nsnull;
 
   if (IsDefunct())
     return NS_ERROR_FAILURE;
 
+  PRInt32 linkIndex = aLinkIndex;
   nsCOMPtr<nsIAccessible> accessible;
   while (NextChild(accessible)) {
-    if (IsEmbeddedObject(accessible) && aIndex-- == 0)
+    if (IsEmbeddedObject(accessible) && linkIndex-- == 0)
       return CallQueryInterface(accessible, aLink);
   }
 
   return NS_ERROR_INVALID_ARG;
 }
 
-NS_IMETHODIMP nsHyperTextAccessible::GetLinkIndex(PRInt32 aCharIndex, PRInt32 *aLinkIndex)
+NS_IMETHODIMP
+nsHyperTextAccessible::GetLinkIndex(PRInt32 aCharIndex, PRInt32 *aLinkIndex)
 {
+  NS_ENSURE_ARG_POINTER(aLinkIndex);
   *aLinkIndex = -1; // API says this magic value means 'not found'
 
   PRInt32 characterCount = 0;
   PRInt32 linkIndex = 0;
   if (!mDOMNode) {
     return NS_ERROR_FAILURE;
   }
 
--- a/accessible/src/mac/nsRoleMap.h
+++ b/accessible/src/mac/nsRoleMap.h
@@ -157,10 +157,11 @@ static const NSString* AXRoles [] = {
   NSAccessibilityMenuItemRole,                  // ROLE_PARENT_MENUITEM
   NSAccessibilityGroupRole,                     // ROLE_CALENDAR
   NSAccessibilityMenuRole,                      // ROLE_COMBOBOX_LIST
   NSAccessibilityMenuItemRole,                  // ROLE_COMBOBOX_OPTION
   NSAccessibilityImageRole,                     // ROLE_IMAGE_MAP
   NSAccessibilityRowRole,                       // ROLE_OPTION
   NSAccessibilityRowRole,                       // ROLE_RICH_OPTION
   NSAccessibilityListRole,                      // ROLE_LISTBOX
+  NSAccessibilityUnknownRole,                   // ROLE_FLAT_EQUATION
   @"ROLE_LAST_ENTRY"                            // ROLE_LAST_ENTRY. bogus role that will never be shown (just marks the end of this array)!
 };
--- a/accessible/src/msaa/CAccessibleHypertext.cpp
+++ b/accessible/src/msaa/CAccessibleHypertext.cpp
@@ -75,40 +75,40 @@ CAccessibleHypertext::get_nHyperlinks(lo
 __try {
   *aHyperlinkCount = 0;
 
   nsCOMPtr<nsIAccessibleHyperText> hyperAcc(do_QueryInterface(this));
   if (!hyperAcc)
     return E_FAIL;
 
   PRInt32 count = 0;
-  nsresult rv = hyperAcc->GetLinks(&count);
+  nsresult rv = hyperAcc->GetLinkCount(&count);
   if (NS_FAILED(rv))
     return GetHRESULT(rv);
 
   *aHyperlinkCount = count;
   return S_OK;
 
 } __except(nsAccessNodeWrap::FilterA11yExceptions(::GetExceptionCode(), GetExceptionInformation())) { }
   return E_FAIL;
 }
 
 STDMETHODIMP
-CAccessibleHypertext::get_hyperlink(long aIndex,
+CAccessibleHypertext::get_hyperlink(long aLinkIndex,
                                     IAccessibleHyperlink **aHyperlink)
 {
 __try {
   *aHyperlink = NULL;
 
   nsCOMPtr<nsIAccessibleHyperText> hyperAcc(do_QueryInterface(this));
   if (!hyperAcc)
     return E_FAIL;
 
   nsCOMPtr<nsIAccessibleHyperLink> hyperLink;
-  nsresult rv = hyperAcc->GetLink(aIndex, getter_AddRefs(hyperLink));
+  nsresult rv = hyperAcc->GetLink(aLinkIndex, getter_AddRefs(hyperLink));
   if (NS_FAILED(rv))
     return GetHRESULT(rv);
 
   nsCOMPtr<nsIWinAccessNode> winAccessNode(do_QueryInterface(hyperLink));
   if (!winAccessNode)
     return E_FAIL;
 
   void *instancePtr = NULL;
--- a/accessible/src/msaa/nsRoleMap.h
+++ b/accessible/src/msaa/nsRoleMap.h
@@ -429,12 +429,15 @@ static const WindowsRoleMapItem gWindows
   { ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
   
   // nsIAccessibleRole::ROLE_RICH_OPTION
   { ROLE_SYSTEM_LISTITEM, ROLE_SYSTEM_LISTITEM },
   
   // nsIAccessibleRole::ROLE_LISTBOX
   { ROLE_SYSTEM_LIST, ROLE_SYSTEM_LIST },
   
+  // nsIAccessibleRole::ROLE_FLAT_EQUATION
+  { ROLE_SYSTEM_EQUATION, ROLE_SYSTEM_EQUATION },
+  
   // nsIAccessibleRole::ROLE_LAST_ENTRY
   { ROLE_WINDOWS_LAST_ENTRY, ROLE_WINDOWS_LAST_ENTRY }
 };
 
--- a/accessible/src/xul/nsXULMenuAccessible.cpp
+++ b/accessible/src/xul/nsXULMenuAccessible.cpp
@@ -715,17 +715,18 @@ NS_IMETHODIMP nsXULMenupopupAccessible::
     return NS_ERROR_FAILURE;
   }
   nsCOMPtr<nsIAccessible> parent;
   GetParent(getter_AddRefs(parent));
   if (parent) {
     // Some widgets like the search bar have several popups, owned by buttons
     PRUint32 role = Role(parent);
     if (role == nsIAccessibleRole::ROLE_COMBOBOX ||
-        role == nsIAccessibleRole::ROLE_PUSHBUTTON) {
+        role == nsIAccessibleRole::ROLE_PUSHBUTTON ||
+        role == nsIAccessibleRole::ROLE_AUTOCOMPLETE) {
       *aRole = nsIAccessibleRole::ROLE_COMBOBOX_LIST;
       return NS_OK;
     }
   }
   *aRole = nsIAccessibleRole::ROLE_MENUPOPUP;
   return NS_OK;
 }
 
--- a/accessible/tests/mochitest/Makefile.in
+++ b/accessible/tests/mochitest/Makefile.in
@@ -51,12 +51,15 @@ include $(topsrcdir)/config/rules.mk
 		test_groupattrs.xul \
 		test_table_indexes.html \
 		test_nsIAccessibleTable_1.html \
 		test_nsIAccessibleTable_2.html \
 		test_nsIAccessibleTable_3.html \
 		test_nsIAccessibleTable_4.html \
 		test_nsIAccessibleTable_listboxes.xul \
 		test_nsIAccessibleHyperLink.html \
+		test_nsIAccessibleHyperLink.xul \
+		test_nsIAccessibleHyperText.html \
+		test_bug428479.html \
 		$(NULL)
 
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/a11y/$(relativesrcdir)
--- a/accessible/tests/mochitest/test_bug368835.xul
+++ b/accessible/tests/mochitest/test_bug368835.xul
@@ -57,90 +57,89 @@
       isSelectable: function(aRow, aCol) {},
       setCellValue: function(aRow, aCol, aValue) {},
       setCellText: function(aRow, aCol, aValue) { },
       performAction: function(aAction) {},
       performActionOnRow: function(aAction, aRow) {},
       performActionOnCell: function(aAction, aRow, aCol) {}
     };
 
+    var gTreeViewChangedCount = 0;
     var gTreeViewChanged = false;
     function TreeViewChangedHandler(aEvent)
     {
-      gTreeViewChanged = true;
+      gTreeViewChangedCount++;
 
-      // Tree view has been setted. We can continue tests for the tree.
-      window.setTimeout(doTest2, 0);
+      // We get two systems 'treeViewChanged' event when tree is initialized
+      // The third one is our when we change the tree view by
+      // nsITreeBoxObject::setTree.
+      if (gTreeViewChangedCount == 3) {
+        gTreeViewChanged = true;
+
+        // Tree view has been setted. We can continue tests for the tree.
+        window.setTimeout(doTest2, 500);
+      }
     }
 
     var gTreeRowCountChanged = false;
     function TreeRowCountChangedHandler(aEvent)
     {
       gTreeRowCountChanged = true;
 
       var index = aEvent.getData("index");
       is(index, 0, "Wrong 'index' data of 'treeRowCountChanged' event.");
 
       var count = aEvent.getData("count");
       is(count, 1, "Wrong 'count' data of 'treeRowCountChanged' event.");
     }
 
+    var gTreeColumnInvalidated = false;
+    var gTreeRowInvalidated = false;
+
     var gTreeInvalidatedCount = 0;
     function TreeInvalidatedHandler(aEvent)
     {
       gTreeInvalidatedCount++;
 
-      if (gTreeInvalidatedCount == 2)
-        TreeColumnInvalidatedHandler(aEvent);
-      else if (gTreeInvalidatedCount == 5)
-        TreeRowInvalidatedHandler(aEvent);
+      switch (gTreeInvalidatedCount) {
+        case 1:
+          TreeInvalidatedHandlerHelper(aEvent, 0, 5, null, null,
+                                       "nsITreeBoxObject::rowCountChanged");
+          break;
+        case 2:
+          TreeInvalidatedHandlerHelper(aEvent, null, null, 0, 0,
+                                       "nsITreeBoxObject::invalidateColumn");
+          gTreeColumnInvalidated = true;
+          break;
+        case 3:
+          TreeInvalidatedHandlerHelper(aEvent, 1, 1, null, null,
+                                       "nsITreeBoxObject::invalidateRow");
+          gTreeRowInvalidated = true;
+          break;
+        }
     }
 
-    var gTreeColumnInvalidated = false;
-    function TreeColumnInvalidatedHandler(aEvent)
+    function TreeInvalidatedHandlerHelper(aEvent, aStartRow, aEndRow,
+                                          aStartCol, aEndCol, aCauseMsg)
     {
       var startRow = aEvent.getData("startrow");
-      is(startRow, null,
-         "Wrong 'startrow' of 'treeInvalidated' event on InvalidateRow().");
+      is(startRow, aStartRow,
+         "Wrong 'startrow' of 'treeInvalidated' event on " + aCauseMsg);
 
       var endRow = aEvent.getData("endrow");
-      is(endRow, null,
-         "Wrong 'endrow' of 'treeInvalidated' event on InvalidateRow().");
+      is(endRow, aEndRow,
+         "Wrong 'endrow' of 'treeInvalidated' event on " + aCauseMsg);
 
       var startCol = aEvent.getData("startcolumn");
-      is(startCol, 0,
-         "Wrong 'startcolumn' of 'treeInvalidated' event on InvalidateRow().");
+      is(startCol, aStartCol,
+         "Wrong 'startcolumn' of 'treeInvalidated' event on " + aCauseMsg);
 
       var endCol = aEvent.getData("endcolumn");
-      is(endCol, 0,
-         "Wrong 'endcolumn' of 'treeInvalidated' event on InvalidateRow().");
-
-      gTreeColumnInvalidated = true;
-    }
-
-    var gTreeRowInvalidated = false;
-    function TreeRowInvalidatedHandler(aEvent)
-    {
-      var startRow = aEvent.getData("startrow");
-      is(startRow, 1,
-         "Wrong 'startrow' of 'treeInvalidated' event on InvalidateColumn().");
-
-      var endRow = aEvent.getData("endrow");
-      is(endRow, 1,
-         "Wrong 'endrow' of 'treeInvalidated' event on InvalidateColumn().");
-
-      var startCol = aEvent.getData("startcolumn");
-      is(startCol, null,
-         "Wrong 'startcolumn' of 'treeInvalidated' event on InvalidateColumn().");
-
-      var endCol = aEvent.getData("endcolumn");
-      is(endCol, null,
-         "Wrong 'endcolumn' of 'treeInvalidated' event on InvalidateColumn().");
-
-      gTreeRowInvalidated = true;
+      is(endCol, aEndCol,
+         "Wrong 'endcolumn' of 'treeInvalidated' event on " + aCauseMsg);
     }
 
     var gNameChangedOnTreeRowInvalidated = false;
     var gNameChangedOnTreeColumnInvalidated = false;
 
     var gA11yEventObserver = {
       observe: function observe(aSubject, aTopic, aData)
       {
@@ -150,51 +149,57 @@
         const nsIAccessibleEvent = Components.interfaces.nsIAccessibleEvent;
         var event = aSubject.QueryInterface(nsIAccessibleEvent);
 
         if (event.eventType != nsIAccessibleEvent.EVENT_NAME_CHANGE)
           return;
 
         ++this.mCount;
 
+        // We should get first six 'name changed' events on
+        //  nsITreeBoxObject::invalidateColumn when we update 0th column
+        // containing six rows.
         if (this.mCount == 6) {
           gNameChangedOnTreeColumnInvalidated = true;
 
           // Make sure 'name change' events have been fired on
           // InvalidateColumn() before continue the test.
           window.setTimeout(doTest3, 0);
         }
         else if (this.mCount == 7)
           gNameChangedOnTreeRowInvalidated = true;
       },
 
-      mCount: 0,
-      mType: ""
+      mCount: 0
     };
 
     function CheckEvents()
     {
       // If these fail then it doesn't mean actually events are not fired,
       // possibly setTimeout was executed earlier than events have been fired.
 
-      // DOM events
+      // nsITreeBoxObject::view
       ok(gTreeViewChanged,
          "TreeViewChanged event should have been fired.");
+
+      // nsITreeBoxObject::rowCountChanged
       ok(gTreeRowCountChanged,
          "TreeRowCountChanged event should have been fired.");
+
+      // nsITreeBoxObject::invalidateColumn
       ok(gTreeColumnInvalidated,
          "TreeInvalidated event should have been fired for InvalidateColumn().");
+      ok(gNameChangedOnTreeColumnInvalidated,
+         "Wrong NameChanged events number on tree column invalidation.");
+
+      // nsITreeBoxObject::invalidateRow
       ok(gTreeRowInvalidated,
          "TreeInvalidated event should have been fired for InvalidateRow().");
-
-      // A11y events
       ok(gNameChangedOnTreeRowInvalidated,
          "Wrong NameChanged events number on tree row invalidation.");
-      ok(gNameChangedOnTreeColumnInvalidated,
-         "Wrong NameChanged events number on tree column invalidation.");
 
       // Remove DOM event listeners
       document.removeEventListener("TreeViewChanged",
                                    TreeViewChangedHandler, true);
 
       document.removeEventListener("TreeRowCountChanged",
                                    TreeRowCountChangedHandler, true);
 
@@ -220,17 +225,16 @@
       gAccService = Components.classes["@mozilla.org/accessibleRetrieval;1"].
                     getService(Components.interfaces.nsIAccessibleRetrieval);
 
       // Add accessibility event listeners
       gObserverService = Components.classes["@mozilla.org/observer-service;1"].
                          getService(Components.interfaces.nsIObserverService);
       gObserverService.addObserver(gA11yEventObserver, "accessible-event",
                                    false);
-
       // Add DOM event listeners
       document.addEventListener("TreeViewChanged",
                                 TreeViewChangedHandler, true);
       document.addEventListener("TreeRowCountChanged",
                                 TreeRowCountChangedHandler, true);
       document.addEventListener("TreeInvalidated",
                                 TreeInvalidatedHandler, true);
 
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/test_bug428479.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=428479
+-->
+<head>
+  <title>ARIA role math chrome tests</title>
+  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+  <script type="application/javascript">
+    function testThis(aID, aAcc)
+    {
+      is(aAcc.finalRole,
+         Components.interfaces.nsIAccessibleRole.ROLE_FLAT_EQUATION,
+         "Wrong role for " + aID +"!");
+      is(aAcc.name, "x^2 + y^2 + z^2", "Wrong name for " + aID + "!");
+    }
+
+    function doTest()
+    {
+      var accRetrieval = Components.classes["@mozilla.org/accessibleRetrieval;1"].
+                       getService(Components.interfaces.nsIAccessibleRetrieval);
+
+      // Test equation image
+      var imgEqElement = document.getElementById("img_eq");
+      var imgEqAcc;
+      try {
+        imgEqAcc = accRetrieval.getAccessibleFor(imgEqElement);
+      } catch(e) {
+      }
+      ok(imgEqAcc, "no accessible for image equation!");
+      if (imgEqAcc)
+        testThis("img_eq", imgEqAcc);
+
+      // Test textual equation
+      var txtEqElement = document.getElementById("txt_eq");
+      var txtEqAcc;
+      try {
+        txtEqAcc = accRetrieval.getAccessibleFor(txtEqElement);
+      } catch(e) {
+      }
+      ok(txtEqAcc, "no accessible for textual equation!");
+      if (txtEqAcc)
+        testThis("txt_eq", txtEqAcc);
+
+      SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addLoadEvent(doTest);
+  </script>
+</head>
+<body>
+
+  <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=428479">Mozilla Bug 428479</a>
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+  <p>Image: 
+    <img id="img_eq" role="math" src="foo" alt="x^2 + y^2 + z^2">
+  </p>
+  <p>Text: 
+    <span id="txt_eq" role="math" title="x^2 + y^2 + z^2">x<sup>2</sup> + 
+      y<sup>2</sup> + z<sup>2</sup></span>
+  </p>
+</body>
+</html>
--- a/accessible/tests/mochitest/test_nsIAccessibleHyperLink.html
+++ b/accessible/tests/mochitest/test_nsIAccessibleHyperLink.html
@@ -10,17 +10,17 @@ https://bugzilla.mozilla.org/show_bug.cg
   <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"></script>
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript">
     function testThis(aID, aAcc, aRole, aAnchors, aName, aValid, aStartIndex,
                       aEndIndex)
     {
       is(aAcc.finalRole, aRole, "Wrong role for ID " + aID + "!");
-      is(aAcc.anchorsCount, aAnchors, "Wrong number of anchors for ID "
+      is(aAcc.anchorCount, aAnchors, "Wrong number of anchors for ID "
                                       + aID + "!");
       is(aAcc.getAnchor(0).name, aName, "Wrong name for ID "
                                         + aID + "!");
       is(aAcc.valid, aValid, "No correct valid state for ID "
                              + aID + "!");
       is(aAcc.startIndex, aStartIndex, "Wrong startIndex value for ID "
                                        + aID + "!");
       is(aAcc.endIndex, aEndIndex, "Wrong endIndex value for ID "
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/test_nsIAccessibleHyperLink.xul
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
+                 type="text/css"?>
+
+<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="test for nsIAccessibleHyperLink interface on XUL:label elements">
+
+  <script type="application/javascript" 
+          src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript"
+          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
+  <script type="application/javascript">
+  <![CDATA[
+    function testThis(aID, aAcc, aRole, aAnchorCount, aAnchorName, aURI,
+                      aStartIndex, aEndIndex, aValid, aSelectedBefore,
+                      aSelectedAfter)
+    {
+      is(aAcc.finalRole, aRole, "Wrong role for ID " + aID + "!");
+      is(aAcc.anchorCount, aAnchorCount, "Wrong number of anchors for ID " 
+         + aID + "!");
+      is(aAcc.getAnchor(0).name, aAnchorName, "Wrong name for ID " + aID + "!");
+      is(aAcc.getURI(0).spec, aURI, "URI wrong for ID " + aID + "!");
+      is(aAcc.startIndex, aStartIndex, "Wrong startIndex value for ID " + aID 
+         + "!");
+      is(aAcc.endIndex, aEndIndex, "Wrong endIndex value for ID " + aID + "!");
+      is(aAcc.valid, aValid, "Wrong valid state for ID " + aID + "!");      
+
+      is(aAcc.selected, aSelectedBefore, "Wrong focused state before focus for "
+         + aID + "!");
+      document.getElementById(aID).focus();
+      is(aAcc.selected, aSelectedAfter, "Wrong selected state after focus for "
+         + aID + "!");
+    }
+
+    function testStates(aID, aAcc, aState, aExtraState, aUndesiredState)
+    {
+      var state = {}, extraState = {};
+      aAcc.getFinalState(state, extraState);
+      is(state.value & aState, aState, "Wrong state bits for " + aID + "!");
+      is(extraState.value & aExtraState, aExtraState, 
+         "Wrong extra state bits for " + aID + "!");
+      if (aUndesiredState != 0)
+        is(state.value & aUndesiredState, 0, "Bits should not be set for "
+           + aID +"!");
+    }
+
+    function doTest()
+    {
+      // Mapping needed state flags for easier handling.
+      const state_focusable = 
+            Components.interfaces.nsIAccessibleStates.STATE_FOCUSABLE;
+      const state_focused = 
+            Components.interfaces.nsIAccessibleStates.STATE_FOCUSED;
+      const state_selectable = 
+            Components.interfaces.nsIAccessibleStates.STATE_SELECTABLE;
+      const state_linked = 
+            Components.interfaces.nsIAccessibleStates.STATE_LINKED;
+      const state_traversed = 
+            Components.interfaces.nsIAccessibleStates.STATE_TRAVERSED;
+
+      const ext_state_multi_line = 
+            Components.interfaces.nsIAccessibleStates.EXT_STATE_MULTI_LINE;
+      const ext_state_horizontal = 
+            Components.interfaces.nsIAccessibleStates.EXT_STATE_HORIZONTAL;
+      const ext_state_required = 
+            Components.interfaces.nsIAccessibleStates.STATE_REQUIRED;
+      const ext_state_invalid = 
+            Components.interfaces.nsIAccessibleStates.STATE_INVALID;
+
+      // Activate accessibility.
+      var accRetrieval = Components.classes["@mozilla.org/accessibleRetrieval;1"].
+                    getService(Components.interfaces.nsIAccessibleRetrieval);
+
+      var linkLabelElement = document.getElementById("linkedLabel");
+      var linkedLabelAcc;
+      try {
+        linkedLabelAcc = accRetrieval.getAccessibleFor(linkLabelElement).
+          QueryInterface(Components.interfaces.nsIAccessibleHyperLink);
+      } catch(e) {
+        ok(linkedLabelAcc, "no interface for linked label!");
+      }
+      testThis("linkedLabel", linkedLabelAcc,
+               Components.interfaces.nsIAccessibleRole.ROLE_LINK, 1,
+               "Mozilla Foundation home", "http://www.mozilla.org/", 1, 2, true,
+               false, true);
+      testStates("linkedLabel", linkedLabelAcc,
+                 (state_focusable | state_linked),
+                 (ext_state_horizontal), 0);
+
+      var labelElementWithValue = document.getElementById("linkLabelWithValue");
+      var labelWithValueAcc;
+      try {
+        labelWithValueAcc = accRetrieval.getAccessibleFor(labelElementWithValue).
+          QueryInterface(Components.interfaces.nsIAccessibleHyperLink);
+      } catch(e) {
+        ok(labelWithValueAcc, "no interface for linked label with value!");
+      }
+      testThis("linkLabelWithValue", labelWithValueAcc,
+               Components.interfaces.nsIAccessibleRole.ROLE_LINK, 1,
+               "Mozilla Foundation", "http://www.mozilla.org/", 2, 3, true,
+               false, true);
+      testStates("linkLabelWithValue", labelWithValueAcc,
+                 (state_focusable | state_linked),
+                 (ext_state_horizontal), 0);
+
+      var NormalLabelElement = document.getElementById("normalLabel");
+      var normalLabelAcc;
+      try {
+        normalLabelAcc = accRetrieval.getAccessibleFor(NormalLabelElement);
+      } catch(e) {
+      }
+      ok(normalLabelAcc, "no accessible for normalLabel!");
+      if (normalLabelAcc) {
+        is(normalLabelAcc.finalRole,
+           Components.interfaces.nsIAccessibleRole.ROLE_LABEL,
+           "Wrong role!");
+        is(normalLabelAcc.name, "This label should not be a link",
+           "Wrong name for normal label!");
+    
+        var stateNormal = {}, extraStateNormal = {};
+        normalLabelAcc.getFinalState(stateNormal, extraStateNormal);
+        undesiredState = (state_focusable | state_linked);
+        is(stateNormal.value & undesiredState, 0, "Wrong state bits for normal label!");
+      }
+
+      SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addLoadEvent(doTest);
+  ]]>
+  </script>
+
+  <body xmlns="http://www.w3.org/1999/xhtml">
+    <a target="_blank"
+       href="https://bugzilla.mozilla.org/show_bug.cgi?id=421066"
+       title="Implement Mochitests for the nsIAccessibleHyperLink interface on XUL:label elements">
+      Mozilla Bug 421066
+    </a>
+    <p id="display"></p>
+    <div id="content" style="display: none">
+    </div>
+    <pre id="test">
+    </pre>
+  </body>
+
+  <label id="linkedLabel" class="text-link" href="http://www.mozilla.org/">
+    Mozilla Foundation home</label>
+  <label id="linkLabelWithValue" value="Mozilla Foundation" class="text-link"
+   href="http://www.mozilla.org/" />
+  <label id="normalLabel" value="This label should not be a link" />
+</window>
new file mode 100644
--- /dev/null
+++ b/accessible/tests/mochitest/test_nsIAccessibleHyperText.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=428248
+-->
+<head>
+  <title>nsIHyper>TextAccessible chrome tests</title>
+  <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
+
+  <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"></script>
+  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
+
+  <script type="application/javascript">
+    var gParagraphAcc;
+
+    function testThis(aID, aCharIndex, aExpectedLinkIndex, aName)
+    {
+      is(gParagraphAcc.getLinkIndex(aCharIndex), aExpectedLinkIndex,
+         "Wrong link index for ID " + aID + "!");
+      var linkAcc;
+      try {
+        linkAcc = gParagraphAcc.getLink(aExpectedLinkIndex);
+      } catch(e) {
+        ok(linkAcc, "No accessible for link " + aID + "!");
+      }
+      // Just test the link's name to make sure we get the right one.
+      is(linkAcc.getAnchor(0).name, aName, "Wrong name for " + aID + "!");
+    }
+
+    function doTest()
+    {
+      var accService = Components.classes["@mozilla.org/accessibleRetrieval;1"].
+                       getService(Components.interfaces.nsIAccessibleRetrieval);
+
+      var paragraphElement = document.getElementById("testParagraph");
+      try {
+        gParagraphAcc = accService.getAccessibleFor(paragraphElement).
+            QueryInterface(Components.interfaces.nsIAccessibleHyperText);
+      } catch(e) {
+        ok(gParagraphAcc, "No interface for the paragraph!");
+      }
+
+      // Test link count
+      is(gParagraphAcc.linkCount, 7, "Wrong link count for paragraph!");
+
+      // normal hyperlink
+      testThis("NormalHyperlink", 14, 0, "Mozilla Foundation");
+
+      // ARIA hyperlink
+      testThis("AriaHyperlink", 28, 1, "Mozilla Foundation Home");
+
+      // ARIA hyperlink with status invalid
+      testThis("InvalidAriaHyperlink", 64, 2, "Invalid link");
+
+      // image map, but not its link children. They are not part of hypertext.
+      testThis("imgmap", 78, 3, "b");
+
+      // empty hyperlink
+      testThis("emptyLink", 93, 4, "");
+
+      // normal hyperlink with embedded span
+      testThis("LinkWithSpan", 119, 5, "Heise Online");
+
+      // Named anchor
+      testThis("namedAnchor", 197, 6, "This should never be of state_linked");
+
+      SimpleTest.finish();
+    }
+
+    SimpleTest.waitForExplicitFinish();
+    addLoadEvent(doTest);
+  </script>
+</head>
+<body>
+
+  <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=418368">Mozilla Bug 418368</a>
+  <p id="display"></p>
+  <div id="content" style="display: none"></div>
+  <pre id="test">
+  </pre>
+  <p id="testParagraph">  
+    <br>Simple link:<br>
+    <a id="NormalHyperlink" href="http://www.mozilla.org">Mozilla Foundation</a>
+    <br>ARIA link:<br>
+    <span id="AriaHyperlink" role="link"
+           onclick="window.open('http://www.mozilla.org/');"
+           tabindex="0">Mozilla Foundation Home</span>
+    <br>Invalid, non-focusable hyperlink:<br>
+    <span id="InvalidAriaHyperlink" role="link" aria-invalid="true"
+          onclick="window.open('http:/www.mozilla.org/');">Invalid link</span>
+    <br>Image map:<br>
+    <map name="atoz_map">
+      <area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#b"
+            coords="17,0,30,14"
+            alt="b"
+            shape="rect"></area>
+      <area href="http://www.bbc.co.uk/radio4/atoz/index.shtml#a"
+            coords="0,0,13,14"
+            alt="a"
+            shape="rect"></area>
+    </map>
+    <img width="447" id="imgmap"
+         height="15"
+         usemap="#atoz_map"
+         src="http://www.bbc.co.uk/radio4/images/letters.gif"></img>
+    <br>Empty link:<br>
+    <a id="emptyLink" href=""><img src=""></img></a>
+    <br>Link with embedded span<br>
+    <a id="LinkWithSpan" href="http://www.heise.de/"><span lang="de">Heise Online</span></a>
+    <br>Named anchor, must not have "linked" state for it to be exposed correctly:<br>
+    <a id="namedAnchor" name="named_anchor">This should never be of state_linked</a>
+  </p>
+</body>
+</html>
--- a/accessible/tests/mochitest/test_table_indexes.html
+++ b/accessible/tests/mochitest/test_table_indexes.html
@@ -6,130 +6,98 @@ https://bugzilla.mozilla.org/show_bug.cg
 <head>
   <title>Table indexes chrome tests</title>
   <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
 
   <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js"></script>
   <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 
   <script type="application/javascript">
+    const nsIAccessibleRetrieval = Components.interfaces.nsIAccessibleRetrieval;
+    const nsIAccessibleTable = Components.interfaces.nsIAccessibleTable;
+
+    var gAccService = null;
+
     function doTest()
     {
-      const nsIAccessibleRetrieval =
-        Components.interfaces.nsIAccessibleRetrieval;
-      const nsIAccessibleTable = Components.interfaces.nsIAccessibleTable;
-
-      var accService = Components.classes["@mozilla.org/accessibleRetrieval;1"].
-                       getService(nsIAccessibleRetrieval);
+      gAccService = Components.classes["@mozilla.org/accessibleRetrieval;1"].
+                    getService(nsIAccessibleRetrieval);
 
       //////////////////////////////////////////////////////////////////////////
       // table
-      var table = document.getElementById("table");
-      var tableAcc = accService.getAccessibleFor(table).
-        QueryInterface(nsIAccessibleTable);
-
-      var row, column, index;
       var tRow = new Array(0,0,0,1,1,1,2,2,3,3);
       var tCol = new Array(0,1,2,0,1,2,0,1,1,2);
 
-      for (var i = 0; i < 10; i++) {
-        row = tableAcc.getRowAtIndex(i);
-        column = tableAcc.getColumnAtIndex(i);
-        index = tableAcc.getIndexAt(tRow[i], tCol[i]);
-        is(row, tRow[i], "table: row  for index " + i +" is nor correct");
-        is(column, tCol[i], "table: column  for index " + i +"is nor correct");
-        is(index, i,
-           "table: row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
-      }
+      testTable("table", 10, tRow, tCol);
 
       //////////////////////////////////////////////////////////////////////////
       // tableinsane1
-      table = document.getElementById("tableinsane1");
-      tableAcc = accService.getAccessibleFor(table).
-        QueryInterface(nsIAccessibleTable);
-
       tRow = [0,0,0,1,1,1,2,2,3,3];
       tCol = [0,1,2,0,1,2,0,1,1,2];
 
-      for (var i = 0; i < 10; i++) {
-        row = tableAcc.getRowAtIndex(i);
-        column = tableAcc.getColumnAtIndex(i);
-        index = tableAcc.getIndexAt(tRow[i], tCol[i]);
-        is(row, tRow[i],
-           "tableinsane1: row  for index " + i +" is nor correct");
-        is(column, tCol[i],
-           "tableinsane1: column  for index " + i +"is nor correct");
-        is(index, i,
-           "tableinsane1: row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
-      }
+      testTable("tableinsane1", 10, tRow, tCol);
 
       //////////////////////////////////////////////////////////////////////////
       // tableinsane2
-      table = document.getElementById("tableinsane2");
-      tableAcc = accService.getAccessibleFor(table).
-        QueryInterface(nsIAccessibleTable);
-    
       tRow = [0,0,0,1,1,1,2,2,3,3,4,4,4];
       tCol = [0,1,2,0,1,2,0,1,1,2,1,3,4];
 
-      for (var i = 0; i < 13; i++) {
-        row = tableAcc.getRowAtIndex(i);
-        column = tableAcc.getColumnAtIndex(i);
-        index = tableAcc.getIndexAt(tRow[i], tCol[i]);
-        is(row, tRow[i],
-           "tableinsane2: row  for index " + i +" is nor correct");
-        is(column, tCol[i],
-           "tableinsane2: column  for index " + i +"is nor correct");
-        is(index, i,
-           "tableinsane2: row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
-      }
+      testTable("tableinsane2", 13, tRow, tCol);
 
       //////////////////////////////////////////////////////////////////////////
       // tableinsane4
-      table = document.getElementById("tableinsane4");
-      tableAcc = accService.getAccessibleFor(table).
-        QueryInterface(Components.interfaces.nsIAccessibleTable);
-
       tRow = [0,0,0,1,1,1,2,2,3,4];
       tCol = [0,1,2,0,1,2,0,2,0,0];
 
-      for (var i = 0; i < 10; i++) {
-        row = tableAcc.getRowAtIndex(i);
-        column = tableAcc.getColumnAtIndex(i);
-        index = tableAcc.getIndexAt(tRow[i], tCol[i]);
-        is(row, tRow[i],
-           "tableinsane4: row  for index " + i +" is nor correct");
-        is(column, tCol[i],
-           "tableinsane4: column  for index " + i +"is nor correct");
-        is(index, i,
-           "tableinsane4: row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
-      }
+      testTable("tableinsane4", 10, tRow, tCol);
 
       //////////////////////////////////////////////////////////////////////////
       // tableborder
-      var table = document.getElementById("tableborder");
-      var tableAcc = accService.getAccessibleFor(table).
-        QueryInterface(nsIAccessibleTable);
-
       tRow = [0,0,0,1,1,1,2,2,3,3];
       tCol = [0,1,2,0,1,2,0,1,1,2];
 
-      for (var i = 0; i < 10; i++) {
+      testTable("tableborder", 10, tRow, tCol);
+
+      SimpleTest.finish();
+    }
+
+    function testTable(aId, aLen, aRowIdxes, aColIdxes)
+    {
+      var table = document.getElementById(aId);
+      var tableAcc = gAccService.getAccessibleFor(table).
+        QueryInterface(nsIAccessibleTable);
+
+      var row, column, index;
+      var cellAcc;
+
+      for (var i = 0; i < aLen; i++) {
         row = tableAcc.getRowAtIndex(i);
         column = tableAcc.getColumnAtIndex(i);
-        index = tableAcc.getIndexAt(tRow[i], tCol[i]);
-        is(row, tRow[i],
-           "tableborder: row  for index " + i +" is nor correct");
-        is(column, tCol[i],
-           "tableborder: column  for index " + i +"is nor correct");
+        index = tableAcc.getIndexAt(aRowIdxes[i], aColIdxes[i]);
+
+        is(row, aRowIdxes[i], aId + ": row  for index " + i +" is nor correct");
+        is(column, aColIdxes[i],
+           aId + ": column  for index " + i +"is nor correct");
         is(index, i,
-           "tableborder: row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
+           aId + ": row " + row + " /column " + column + " and index " + index + " aren't inconsistent.");
+
+        try {
+          cellAcc = null;
+          cellAcc = tableAcc.cellRefAt(row, column);
+        } catch (e) { }
+
+        ok(cellAcc,
+           aId + ": Can't get cell accessible at row = " + row + ", column = " + column);
+
+        if (cellAcc) {
+          var attrs = cellAcc.attributes;
+          is (parseInt(attrs.getStringProperty("cell-index")), index,
+              aId + ": cell index from object attributes of cell accessible isn't corrent.");
+        }
       }
-
-      SimpleTest.finish();
     }
 
     SimpleTest.waitForExplicitFinish();
     addLoadEvent(doTest);
   </script>
 </head>
 <body>
 
--- a/browser/base/Makefile.in
+++ b/browser/base/Makefile.in
@@ -39,23 +39,30 @@ DEPTH   = ../..
 topsrcdir = @top_srcdir@
 srcdir    = @srcdir@
 VPATH   = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 include $(topsrcdir)/config/config.mk
 
+abs_srcdir = $(shell cd $(srcdir) && pwd)
+
+CHROME_DEPS += $(abs_srcdir)/content/overrides/app-license.html
+
 ifdef MOZ_MOCHITEST
 DIRS += content/test
 endif
 
 include $(topsrcdir)/config/rules.mk
 
-DEFINES += -DMOZ_APP_VERSION=$(MOZ_APP_VERSION)
+DEFINES += \
+	-DMOZ_APP_VERSION=$(MOZ_APP_VERSION) \
+	-DAPP_EULA_BLOCK=$(abs_srcdir)/content/overrides/app-license.html \
+	$(NULL)
 
 ifndef MOZ_BRANDING_DIRECTORY
 DEFINES += -DMOZ_USE_GENERIC_BRANDING
 endif
 
 ifneq (,$(filter windows gtk2 mac cocoa, $(MOZ_WIDGET_TOOLKIT)))
 DEFINES += -DHAVE_SHELL_SERVICE=1
 endif
--- a/browser/base/content/browser-menubar.inc
+++ b/browser/base/content/browser-menubar.inc
@@ -402,38 +402,38 @@
     <menupopup id="bookmarksMenuPopup"
                type="places"
                place="place:folder=BOOKMARKS_MENU&amp;expandQueries=1"
                context="placesContext"
                openInTabs="children"
                oncommand="BookmarksEventHandler.onCommand(event);"
                onclick="BookmarksEventHandler.onClick(event);"
                onpopupshowing="BookmarksEventHandler.onPopupShowing(event);">
-      <menuitem label="&bookmarkThisPageCmd.label;" 
+      <menuitem label="&bookmarkThisPageCmd.label;"
                 command="Browser:AddBookmarkAs" key="addBookmarkAsKb"/>
       <menuitem id="subscribeToPageMenuitem"
                 label="&subscribeToPageMenuitem.label;"
                 oncommand="return FeedHandler.subscribeToFeed(null, event);"
                 onclick="checkForMiddleClick(this, event);"
                 disabled="true"/>
       <menu id="subscribeToPageMenupopup"
             label="&subscribeToPageMenupopup.label;"
             hidden="true">
         <menupopup id="subscribeToPageSubmenuMenupopup" 
-                   onpopupshowing="return FeedHandler.buildFeedList(event.target);" 
+                   onpopupshowing="return FeedHandler.buildFeedList(event.target);"
                    oncommand="return FeedHandler.subscribeToFeed(null, event);"
                    onclick="checkForMiddleClick(this, event);"/>
       </menu>
-      <menuitem label="&addCurPagesCmd.label;" 
+      <menuitem label="&addCurPagesCmd.label;"
                 command="Browser:BookmarkAllTabs" key="bookmarkAllTabsKb"/>
-      <menuseparator id="organizeBookmarksSeparator"/>
       <menuitem id="bookmarksShowAll"
                 label="&organizeBookmarks.label;"
                 command="Browser:ShowAllBookmarks"
                 key="manBookmarkKb"/>
+      <menuseparator id="organizeBookmarksSeparator"/>
       <menu id="bookmarksToolbarFolderMenu"
             class="menu-iconic bookmark-item"
             container="true">
         <menupopup id="bookmarksToolbarFolderPopup"
                    type="places"
                    context="placesContext"
                    onpopupshowing="BookmarksEventHandler.onPopupShowing(event);"/>
       </menu>
--- a/browser/base/content/browser-places.js
+++ b/browser/base/content/browser-places.js
@@ -383,38 +383,46 @@ var PlacesCommandHook = {
       // associated with a <browser/> rather than from a DOMWindow.
       // This is because when a full page plugin is loaded, there is
       // no DOMWindow (?) but information about the loaded document
       // may still be obtained from the webNavigation.
       var webNav = aBrowser.webNavigation;
       var url = webNav.currentURI;
       var title;
       var description;
+      var charset;
       try {
         title = webNav.document.title || url.spec;
         description = PlacesUIUtils.getDescriptionFromDocument(webNav.document);
+        charset = webNav.document.characterSet;
       }
       catch (e) { }
 
       if (aShowEditUI) {
         // If we bookmark the page here (i.e. page was not "starred" already)
         // but open right into the "edit" state, start batching here, so
         // "Cancel" in that state removes the bookmark.
         StarUI.beginBatch();
       }
 
       var parent = aParent != undefined ?
                    aParent : PlacesUtils.unfiledBookmarksFolderId;
       var descAnno = { name: DESCRIPTION_ANNO, value: description };
       var txn = PlacesUIUtils.ptm.createItem(uri, parent, -1,
                                              title, null, [descAnno]);
       PlacesUIUtils.ptm.doTransaction(txn);
+      // Set the character-set
+      if (charset)
+        PlacesUtils.history.setCharsetForURI(uri, charset);
       itemId = PlacesUtils.getMostRecentBookmarkForURI(uri);
     }
 
+    // Revert the contents of the location bar
+    handleURLBarRevert();
+
     // dock the panel to the star icon when possible, otherwise dock
     // it to the content area
     if (aBrowser.contentWindow == window.content) {
       var starIcon = aBrowser.ownerDocument.getElementById("star-button");
       if (starIcon && isElementVisible(starIcon)) {
         if (aShowEditUI)
           StarUI.showEditBookmarkPopup(itemId, starIcon, "after_end");
 #ifdef ADVANCED_STARRING_UI
--- a/browser/base/content/browser.css
+++ b/browser/base/content/browser.css
@@ -57,20 +57,16 @@ window[chromehidden~="toolbar"] toolbar:
 }
 
 #navigator-toolbox ,
 #status-bar ,
 #mainPopupSet {
   min-width: 1px;
 }
 
-#FindToolbar {
-  overflow-x: hidden;
-}
-
 /* Identity UI */
 #identity-popup-content-box.unknownIdentity > #identity-popup-connectedToLabel ,
 #identity-popup-content-box.unknownIdentity > #identity-popup-runByLabel ,
 #identity-popup-content-box.unknownIdentity > #identity-popup-content-host ,
 #identity-popup-content-box.unknownIdentity > #identity-popup-content-owner ,
 #identity-popup-content-box.verifiedIdentity > #identity-popup-connectedToLabel2 ,
 #identity-popup-content-box.verifiedDomain > #identity-popup-connectedToLabel2 {
   display: none;
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1161,17 +1161,17 @@ function BrowserShutdown()
 
 #ifdef XP_MACOSX
 // nonBrowserWindowStartup(), nonBrowserWindowDelayedStartup(), and
 // nonBrowserWindowShutdown() are used for non-browser windows in
 // macBrowserOverlay
 function nonBrowserWindowStartup()
 {
   // Disable inappropriate commands / submenus
-  var disabledItems = ['cmd_newNavigatorTab', 'Browser:SavePage', 'Browser:SendLink',
+  var disabledItems = ['Browser:SavePage', 'Browser:SendLink',
                        'cmd_pageSetup', 'cmd_print', 'cmd_find', 'cmd_findAgain', 'viewToolbarsMenu',
                        'cmd_toggleTaskbar', 'viewSidebarMenuMenu', 'Browser:Reload', 'Browser:ReloadSkipCache',
                        'viewFullZoomMenu', 'pageStyleMenu', 'charsetMenu', 'View:PageSource', 'View:FullScreen',
                        'viewHistorySidebar', 'Browser:AddBookmarkAs', 'View:PageInfo', 'Tasks:InspectPage'];
   var element;
 
   for (var id in disabledItems)
   {
@@ -1266,17 +1266,17 @@ function SanitizeListener()
   this._defaultLabel = document.getElementById("sanitizeItem")
                                .getAttribute("label");
   this._updateSanitizeItem();
 
   if (gPrefService.prefHasUserValue(this.didSanitizeDomain)) {
     gPrefService.clearUserPref(this.didSanitizeDomain);
     // We need to persist this preference change, since we want to
     // check it at next app start even if the browser exits abruptly
-    gPrefService.savePrefFile(null);
+    gPrefService.QueryInterface(Ci.nsIPrefService).savePrefFile(null);
   }
 }
 
 SanitizeListener.prototype =
 {
   promptDomain      : "privacy.sanitize.promptOnSanitize",
   didSanitizeDomain : "privacy.sanitize.didShutdownSanitize",
 
@@ -1573,16 +1573,22 @@ function openLocation()
 function openLocationCallback()
 {
   // make sure the DOM is ready
   setTimeout(function() { this.openLocation(); }, 0);
 }
 
 function BrowserOpenTab()
 {
+  if (!gBrowser) {
+    // If there are no open browser windows, open a new one
+    window.openDialog("chrome://browser/content/", "_blank",
+                      "chrome,all,dialog=no", "about:blank");
+    return;
+  }
   gBrowser.loadOneTab("about:blank", null, null, null, false, false);
   if (gURLBar)
     gURLBar.focus();
 }
 
 /* Called from the openLocation dialog. This allows that dialog to instruct
    its opener to open a new window and then step completely out of the way.
    Anything less byzantine is causing horrible crashes, rather believably,
@@ -1748,17 +1754,22 @@ function getShortcutOrURI(aURL, aPostDat
 
   if (/%s/i.test(shortcutURL) || /%s/i.test(postData)) {
     var charset = "";
     const re = /^(.*)\&mozcharset=([a-zA-Z][_\-a-zA-Z0-9]+)\s*$/;
     var matches = shortcutURL.match(re);
     if (matches)
       [, shortcutURL, charset] = matches;
     else {
-      //XXX Bug 317472 will add lastCharset support to places.
+      // Try to get the saved character-set.
+      try {
+        // makeURI throws if URI is invalid.
+        // Will return an empty string if character-set is not found.
+        charset = PlacesUtils.history.getCharsetForURI(makeURI(shortcutURL));
+      } catch (e) {}
     }
 
     var encodedParam = "";
     if (charset)
       encodedParam = escape(convertFromUnicode(charset, param));
     else // Default charset is UTF-8
       encodedParam = encodeURIComponent(param);
 
@@ -2939,18 +2950,23 @@ const BrowserSearch = {
 
   /**
    * Update the browser UI to show whether or not additional engines are 
    * available when a page is loaded or the user switches tabs to a page that 
    * has search engines.
    */
   updateSearchButton: function() {
     var searchBar = this.searchBar;
-    if (!searchBar)
+    
+    // The search bar binding might not be applied even though the element is
+    // in the document (e.g. when the navigation toolbar is hidden), so check
+    // for .searchButton specifically.
+    if (!searchBar || !searchBar.searchButton)
       return;
+
     var engines = gBrowser.mCurrentBrowser.engines;
     if (engines && engines.length > 0)
       searchBar.searchButton.setAttribute("addengines", "true");
     else
       searchBar.searchButton.removeAttribute("addengines");
   },
 
   /**
@@ -5078,16 +5094,18 @@ function SetForcedCharset(charset)
     BrowserSetForcedCharacterSet(charset);
 }
 
 function BrowserSetForcedCharacterSet(aCharset)
 {
   var docCharset = getBrowser().docShell.QueryInterface(
                             Components.interfaces.nsIDocCharset);
   docCharset.charset = aCharset;
+  // Save the forced character-set
+  PlacesUtils.history.setCharsetForURI(getWebNavigation().currentURI, aCharset);
   BrowserReloadWithFlags(nsIWebNavigation.LOAD_FLAGS_CHARSET_CHANGE);
 }
 
 function BrowserSetForcedDetector(doReload)
 {
   getBrowser().documentCharsetInfo.forcedDetector = true;
   if (doReload)
     BrowserReloadWithFlags(nsIWebNavigation.LOAD_FLAGS_CHARSET_CHANGE);
@@ -5746,21 +5764,23 @@ function escapeNameValuePair(aName, aVal
   else
     return escape(aName) + "=" + escape(aValue);
 }
 
 function AddKeywordForSearchField()
 {
   var node = document.popupNode;
 
+  var charset = node.ownerDocument.characterSet;
+
   var docURI = makeURI(node.ownerDocument.URL,
-                       node.ownerDocument.characterSet);
+                       charset);
 
   var formURI = makeURI(node.form.getAttribute("action"),
-                        node.ownerDocument.characterSet,
+                        charset,
                         docURI);
 
   var spec = formURI.spec;
 
   var isURLEncoded = 
                (node.form.method.toUpperCase() == "POST"
                 && (node.form.enctype == "application/x-www-form-urlencoded" ||
                     node.form.enctype == ""));
@@ -5799,17 +5819,17 @@ function AddKeywordForSearchField()
 
   if (isURLEncoded)
     postData = formData.join("&");
   else
     spec += "?" + formData.join("&");
 
   var description = PlacesUIUtils.getDescriptionFromDocument(node.ownerDocument);
   PlacesUIUtils.showMinimalAddBookmarkUI(makeURI(spec), "", description, null,
-                                         null, null, "", postData);
+                                         null, null, "", postData, charset);
 }
 
 function SwitchDocumentDirection(aWindow) {
   aWindow.document.dir = (aWindow.document.dir == "ltr" ? "rtl" : "ltr");
   for (var run = 0; run < aWindow.frames.length; run++)
     SwitchDocumentDirection(aWindow.frames[run]);
 }
 
--- a/browser/base/content/nsContextMenu.js
+++ b/browser/base/content/nsContextMenu.js
@@ -505,26 +505,26 @@ nsContextMenu.prototype = {
           // Target is a link or a descendant of a link.
           this.onLink = true;
           this.onMetaDataItem = true;
 
           // xxxmpc: this is kind of a hack to work around a Gecko bug (see bug 266932)
           // we're going to walk up the DOM looking for a parent link node,
           // this shouldn't be necessary, but we're matching the existing behaviour for left click
           var realLink = elem;
-          var parent = elem.parentNode;
-          while (parent) {
+          var parent = elem;
+          while ((parent = parent.parentNode) &&
+                 (parent.nodeType == Node.ELEMENT_NODE)) {
             try {
               if ((parent instanceof HTMLAnchorElement && parent.href) ||
                   (parent instanceof HTMLAreaElement && parent.href) ||
                   parent instanceof HTMLLinkElement ||
                   parent.getAttributeNS("http://www.w3.org/1999/xlink", "type") == "simple")
                 realLink = parent;
             } catch (e) { }
-            parent = parent.parentNode;
           }
           
           // Remember corresponding element.
           this.link = realLink;
           this.linkURL = this.getLinkURL();
           this.linkURI = this.getLinkURI();
           this.linkProtocol = this.getLinkProtocol();
           this.onMailtoLink = (this.linkProtocol == "mailto");
new file mode 100644
--- /dev/null
+++ b/browser/base/content/overrides/app-license.html
@@ -0,0 +1,5 @@
+    <p>Official <b>binaries</b> of this product released by the 
+    <a href="http://www.mozilla.com/">Mozilla Corporation</a> 
+    are made available under 
+    <a href="http://www.mozilla.org/foundation/EULA/">the corresponding 
+    EULA</a>.
--- a/browser/base/content/tabbrowser.xml
+++ b/browser/base/content/tabbrowser.xml
@@ -841,18 +841,22 @@
                 document.commandDispatcher.focusedElement.parentNode ==
                 this.mCurrentTab.parentNode) {
               // The focus is on a tab in the same tab panel
               return;  // If focus was on a tab, switching tabs focuses the new tab
             }
 
             var whatToFocus = window.content;
 
-            // Focus the previously focused element or window
-            if (newBrowser.focusedElement) {
+            // Focus the previously focused element or window, but make sure
+            // the focused element is still part of the document
+            let focusedElem = newBrowser.focusedElement;
+            if (focusedElem && focusedElem.ownerDocument &&
+                !(focusedElem.ownerDocument.compareDocumentPosition(focusedElem) &
+                  Node.DOCUMENT_POSITION_DISCONNECTED)) {
               if (newBrowser.focusedElement.parentNode !=
                   this.mCurrentTab.parentNode) {
                 // Focus the remembered element unless it's in the current tab panel
                 whatToFocus = newBrowser.focusedElement;
               }
             }
             else if (newBrowser.focusedWindow) {
               whatToFocus = newBrowser.focusedWindow;
--- a/browser/base/content/test/Makefile.in
+++ b/browser/base/content/test/Makefile.in
@@ -44,24 +44,31 @@ include $(DEPTH)/config/autoconf.mk
 include $(topsrcdir)/config/rules.mk
 
 _TEST_FILES =	test_feed_discovery.html \
 		feed_discovery.html \
 		test_bug395533.html \
 		bug395533-data.txt \
 		$(NULL)
 
+# browser_bug423833.js disabled temporarily since it's unreliable
 _BROWSER_FILES = browser_bug321000.js \
                  browser_bug405137.js \
                  browser_bug409481.js \
                  browser_autodiscovery.js \
                  browser_bug420160.js \
-                 browser_bug423833.js \
                  autodiscovery.html \
                  moz.png \
                  browser_getshortcutoruri.js \
     $(NULL)
 
+# disable tests on linux for now..
+ifneq ($(OS_ARCH),Linux)
+_BROWSER_FILES += \
+                 browser_bug427559.js \
+    $(NULL)
+endif
+
 libs:: $(_TEST_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir)
 
 libs::	$(_BROWSER_FILES)
 	$(INSTALL) $(foreach f,$^,"$f") $(DEPTH)/_tests/testing/mochitest/browser/$(relativesrcdir)
--- a/browser/base/content/test/browser_bug423833.js
+++ b/browser/base/content/test/browser_bug423833.js
@@ -22,23 +22,23 @@ function test() {
   var newTab = gBrowser.addTab();
   gBrowser.selectedTab = newTab;
   newBrowser = gBrowser.getBrowserForTab(newTab);
   
   newBrowser.addEventListener("load", test1Setup, true);
   newBrowser.contentWindow.location = testPage;
 }
 
-var loadCount = 0;
 function test1Setup() {
-  if(!loadCount++)
-    // Wait for both frames to load
+  
+  if(newBrowser.contentWindow.frames.length < 2 ||
+     newBrowser.contentWindow.frames[1].document.location != invalidPage)
+    // The error frame hasn't loaded yet
     return;
   
-  loadCount = 0;
   newBrowser.removeEventListener("load", test1Setup, true);
 
   var badFrame = newBrowser.contentWindow.frames[1];
   document.popupNode = badFrame.document.firstChild;
   
   var contentAreaContextMenu = document.getElementById("contentAreaContextMenu");
   var contextMenu = new nsContextMenu(contentAreaContextMenu, gBrowser);
 
@@ -60,21 +60,21 @@ function testShowOnlyThisFrame() {
   is(newBrowser.contentDocument.location.href, invalidPage, "Should navigate to page url, not about:neterror");
   
   // Go back to the frames page
   gBrowser.addEventListener("load", test2Setup, true);
   newBrowser.contentWindow.location = testPage;
 }
 
 function test2Setup() {
-  if(!loadCount++)
-    // Wait for both frames to load
+  if(newBrowser.contentWindow.frames.length < 2 ||
+     newBrowser.contentWindow.frames[1].document.location != invalidPage)
+    // The error frame hasn't loaded yet
     return;
   
-  loadCount = 0;
   gBrowser.removeEventListener("load", test2Setup, true);
   
   // Now let's do the whole thing again, but this time for "Open frame in new tab"
   newBrowser = gBrowser.getBrowserForTab(gBrowser.selectedTab);
   var badFrame = newBrowser.contentWindow.frames[1];
   
   document.popupNode = badFrame.document.firstChild;
   
new file mode 100644
--- /dev/null
+++ b/browser/base/content/test/browser_bug427559.js
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Firefox Browser Test Code.
+ *
+ * The Initial Developer of the Original Code is
+ * Edward Lee <edward.lee@engineering.uiuc.edu>.
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+/*
+ * Test bug 427559 to make sure focused elements that are no longer on the page
+ * will have focus transferred to the window when changing tabs back to that
+ * tab with the now-gone element.
+ */
+
+// Default focus on a button and have it kill itself on blur
+let testPage = 'data:text/html,<body><button onblur="this.parentNode.removeChild(this);"><script>document.body.firstChild.focus();</script></body>';
+
+function test() {
+  waitForExplicitFinish();
+
+  // Prepare the test tab
+  let testTab = gBrowser.addTab();
+  gBrowser.selectedTab = testTab;
+  let testBrowser = gBrowser.getBrowserForTab(testTab);
+
+  // Do stuff just after the page loads, so the page script can do its stuff
+  testBrowser.addEventListener("load", function() setTimeout(function() {
+    // The test page loaded, so open an empty tab, select it, then restore
+    // the test tab. This causes the test page's focused element to be removed
+    // from its document.
+    let emptyTab = gBrowser.addTab();
+    gBrowser.selectedTab = emptyTab;
+    gBrowser.removeCurrentTab();
+    gBrowser.selectedTab = testTab;
+
+    // Make sure focus is given to the window because the element is now gone
+    is(document.commandDispatcher.focusedWindow, window.content,
+       "content window is focused");
+    gBrowser.removeCurrentTab();
+    finish();
+  }, 0), true);
+
+  // Start the test by loading the test page
+  testBrowser.contentWindow.location = testPage;
+}
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -1,10 +1,10 @@
 browser.jar:
-%  content browser %content/browser/ xpcnativewrappers=yes
+%  content browser %content/browser/ xpcnativewrappers=yes contentaccessible=yes
 #ifdef XP_MACOSX
 %  overlay chrome://mozapps/content/downloads/downloads.xul chrome://browser/content/downloadManagerOverlay.xul
 %  overlay chrome://mozapps/content/extensions/extensions.xul chrome://browser/content/extensionsManagerOverlay.xul
 %  overlay chrome://global/content/console.xul chrome://browser/content/jsConsoleOverlay.xul
 %  overlay chrome://mozapps/content/update/updates.xul chrome://browser/content/softwareUpdateOverlay.xul
 #endif
 %  overlay chrome://global/content/viewSource.xul chrome://browser/content/viewSourceOverlay.xul
 %  overlay chrome://global/content/viewPartialSource.xul chrome://browser/content/viewSourceOverlay.xul
@@ -66,13 +66,16 @@ browser.jar:
 #ifdef MOZ_USE_GENERIC_BRANDING
 % content branding %content/branding/ xpcnativewrappers=yes
   content/branding/about.png                     (branding/about.png)
   content/branding/aboutCredits.png              (branding/aboutCredits.png)
   content/branding/aboutFooter.png               (branding/aboutFooter.png)
   content/branding/icon48.png                    (branding/icon48.png)
   content/branding/icon64.png                    (branding/icon64.png)
 #endif
+# the following files are browser-specific overrides
+*       content/browser/license.html                  (/toolkit/content/license.html)
+% override chrome://global/content/license.html chrome://browser/content/license.html
 
 #ifdef TOOLBAR_CUSTOMIZATION_SHEET
 toolkit.jar:
 *+      content/global/customizeToolbar.xul           (content/customizeToolbarSheet.xul)
 #endif
--- a/browser/components/nsBrowserGlue.js
+++ b/browser/components/nsBrowserGlue.js
@@ -110,18 +110,16 @@ BrowserGlue.prototype = {
         break;
       case "quit-application-requested":
         this._onQuitRequest(subject, data);
         break;
       case "quit-application-granted":
         if (this._saveSession) {
           this._setPrefToSaveSession();
         }
-        this._shutdownPlaces();
-        this.idleService.removeIdleObserver(this, BOOKMARKS_ARCHIVE_IDLE_TIME);
         break;
       case "session-save":
         this._setPrefToSaveSession();
         subject.QueryInterface(Ci.nsISupportsPRBool);
         subject.data = true;
         break;
       case "idle":
         if (this.idleService.idleTime > BOOKMARKS_ARCHIVE_IDLE_TIME * 1000) {
@@ -216,16 +214,17 @@ BrowserGlue.prototype = {
     // handle any UI migration
     this._migrateUI();
   },
 
   // profile shutdown handler (contains profile cleanup routines)
   _onProfileShutdown: function() 
   {
     this._shutdownPlaces();
+    this.idleService.removeIdleObserver(this, BOOKMARKS_ARCHIVE_IDLE_TIME);
     this.Sanitizer.onShutdown();
   },
 
   // Browser startup complete. All initial windows have opened.
   _onBrowserStartup: function()
   {
     var prefBranch = Cc["@mozilla.org/preferences-service;1"].
                      getService(Ci.nsIPrefBranch);
@@ -276,23 +275,25 @@ BrowserGlue.prototype = {
 
     if (aQuitType != "restart")
       aQuitType = "quit";
 
     var prefBranch = Cc["@mozilla.org/preferences-service;1"].
                      getService(Ci.nsIPrefBranch);
     var showPrompt = true;
     try {
-      if (prefBranch.getIntPref("browser.startup.page") == 3 ||
-          prefBranch.getBoolPref("browser.sessionstore.resume_session_once"))
+      // browser.warnOnQuit is a hidden global boolean to override all quit prompts
+      // browser.warnOnRestart specifically covers app-initiated restarts where we restart the app
+      // browser.tabs.warnOnClose is the global "warn when closing multiple tabs" pref
+      if (prefBranch.getBoolPref("browser.warnOnQuit") == false)
         showPrompt = false;
+      else if (aQuitType == "restart")
+        showPrompt = prefBranch.getBoolPref("browser.warnOnRestart");
       else
-        showPrompt = aQuitType == "restart" ?
-                     prefBranch.getBoolPref("browser.warnOnRestart") :
-                     prefBranch.getBoolPref("browser.warnOnQuit");
+        showPrompt = prefBranch.getBoolPref("browser.tabs.warnOnClose");
     } catch (ex) {}
 
     var buttonChoice = 0;
     if (showPrompt) {
       var bundleService = Cc["@mozilla.org/intl/stringbundle;1"].
                           getService(Ci.nsIStringBundleService);
       var quitBundle = bundleService.createBundle("chrome://browser/locale/quitDialog.properties");
       var brandBundle = bundleService.createBundle("chrome://branding/locale/brand.properties");
@@ -334,30 +335,31 @@ BrowserGlue.prototype = {
 
       buttonChoice = promptService.confirmEx(null, quitDialogTitle, message,
                                    flags, button0Title, button1Title, button2Title,
                                    neverAskText, neverAsk);
 
       switch (buttonChoice) {
       case 2:
         if (neverAsk.value)
-          prefBranch.setBoolPref("browser.warnOnQuit", false);
+          prefBranch.setBoolPref("browser.tabs.warnOnClose", false);
         break;
       case 1:
         aCancelQuit.QueryInterface(Ci.nsISupportsPRBool);
         aCancelQuit.data = true;
         break;
       case 0:
         this._saveSession = true;
         if (neverAsk.value) {
           if (aQuitType == "restart")
             prefBranch.setBoolPref("browser.warnOnRestart", false);
           else {
-            // could also set browser.warnOnQuit to false here,
-            // but not setting it is a little safer.
+            // don't prompt in the future
+            prefBranch.setBoolPref("browser.tabs.warnOnClose", false);
+            // always save state when shutting down
             prefBranch.setIntPref("browser.startup.page", 3);
           }
         }
         break;
       }
     }
   },
 
@@ -383,18 +385,20 @@ BrowserGlue.prototype = {
   /**
    * Initialize Places
    * - imports the bookmarks html file if bookmarks datastore is empty
    *
    * These prefs are set by the backend services upon creation (or recreation)
    * of the Places db:
    * - browser.places.importBookmarksHTML
    *   Set to false by the history service to indicate we need to re-import.
-   * - browser.places.createdSmartBookmarks
-   *   Set during HTML import to indicate that the queries were created.
+   * - browser.places.smartBookmarksVersion
+   *   Set during HTML import to indicate that Smart Bookmarks were created.
+   *   Set to -1 to disable Smart Bookmarks creation.
+   *   Set to 0 to restore current Smart Bookmarks.
    *
    * These prefs are set up by the frontend:
    * - browser.bookmarks.restore_default_bookmarks
    *   Set to true by safe-mode dialog to indicate we must restore default
    *   bookmarks.
    */
   _initPlaces: function bg__initPlaces() {
     // we need to instantiate the history service before checking
@@ -439,17 +443,17 @@ BrowserGlue.prototype = {
           bookmarksFile && bookmarksFile.leafName.match("\.json$")) {
         // restore a JSON backup
         PlacesUtils.restoreBookmarksFromJSONFile(bookmarksFile);
       }
       else {
         // if there's no JSON backup or we are restoring default bookmarks
 
         // ensurePlacesDefaultQueriesInitialized() is called by import.
-        prefBranch.setBoolPref("browser.places.createdSmartBookmarks", false);
+        prefBranch.setIntPref("browser.places.smartBookmarksVersion", 0);
 
         var dirService = Cc["@mozilla.org/file/directory_service;1"].
                          getService(Ci.nsIProperties);
 
         if (restoreDefaultBookmarks) {
           // get bookmarks.html file from default profile folder
           var bookmarksFileName = "bookmarks.html";
           var bookmarksFile = dirService.get("profDef", Ci.nsILocalFile);
@@ -486,20 +490,24 @@ BrowserGlue.prototype = {
    *       so replace this method with a no-op when first called.
    */
   _shutdownPlaces: function bg__shutdownPlaces() {
     // Backup and archive Places bookmarks.
     this._archiveBookmarks();
 
     // Backup bookmarks to bookmarks.html to support apps that depend
     // on the legacy format.
+    var prefs = Cc["@mozilla.org/preferences-service;1"].
+                getService(Ci.nsIPrefBranch);
     var autoExportHTML = false;
     try {
-      autoExportHTML = prefs.getIntPref("browser.bookmarks.autoExportHTML");
-    } catch(ex) {}
+      autoExportHTML = prefs.getBoolPref("browser.bookmarks.autoExportHTML");
+    } catch(ex) {
+      Components.utils.reportError(ex);
+    }
 
     if (autoExportHTML) {
       Cc["@mozilla.org/browser/places/import-export-service;1"].
         getService(Ci.nsIPlacesImportExportService).
         backupBookmarksFile();
     }
   },
 
@@ -592,101 +600,151 @@ BrowserGlue.prototype = {
   // ------------------------------
   
   sanitize: function(aParentWindow) 
   {
     this.Sanitizer.sanitize(aParentWindow);
   },
 
   ensurePlacesDefaultQueriesInitialized: function() {
-    // bail out if the folder is already created
+    const SMART_BOOKMARKS_VERSION = 1;
+    const SMART_BOOKMARKS_ANNO = "Places/SmartBookmark";
+    const SMART_BOOKMARKS_PREF = "browser.places.smartBookmarksVersion";
+
+    // XXX should this be a pref?  see bug #399268
+    const MAX_RESULTS = 10;
+
     var prefBranch = Cc["@mozilla.org/preferences-service;1"].
                      getService(Ci.nsIPrefBranch);
-    var createdSmartBookmarks = false;
+
+    // get current smart bookmarks version
+    // By default, if the pref is not set up, we must create Smart Bookmarks
+    var smartBookmarksCurrentVersion = 0;
     try {
-      createdSmartBookmarks = prefBranch.getBoolPref("browser.places.createdSmartBookmarks");
-    } catch(ex) { }
+      smartBookmarksCurrentVersion = prefBranch.getIntPref(SMART_BOOKMARKS_PREF);
+    } catch(ex) {}
 
-    if (createdSmartBookmarks)
+    // bail out if we don't have to create or update Smart Bookmarks
+    if (smartBookmarksCurrentVersion == -1 ||
+        smartBookmarksCurrentVersion >= SMART_BOOKMARKS_VERSION)
       return;
 
     var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
                 getService(Ci.nsINavBookmarksService);
+    var annosvc = Cc["@mozilla.org/browser/annotation-service;1"].
+                  getService(Ci.nsIAnnotationService);
 
     var callback = {
       _placesBundle: Cc["@mozilla.org/intl/stringbundle;1"].
                      getService(Ci.nsIStringBundleService).
                      createBundle("chrome://browser/locale/places/places.properties"),
 
       _uri: function(aSpec) {
         return Cc["@mozilla.org/network/io-service;1"].
                getService(Ci.nsIIOService).
                newURI(aSpec, null, null);
       },
 
       runBatched: function() {
-        var smartBookmarksFolderTitle =
-          this._placesBundle.GetStringFromName("smartBookmarksFolderTitle");
-        var mostVisitedTitle =
-          this._placesBundle.GetStringFromName("mostVisitedTitle");
-        var recentlyBookmarkedTitle =
-          this._placesBundle.GetStringFromName("recentlyBookmarkedTitle");
-        var recentTagsTitle =
-          this._placesBundle.GetStringFromName("recentTagsTitle");
+        var smartBookmarks = [];
+        var bookmarksMenuIndex = 0;
+        var bookmarksToolbarIndex = 0;
+
+        // MOST VISITED
+        var smart = {queryId: "MostVisited", // don't change this
+                     itemId: null,
+                     title: this._placesBundle.GetStringFromName("mostVisitedTitle"),
+                     uri: this._uri("place:queryType=" +
+                                    Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY +
+                                    "&sort=" +
+                                    Ci.nsINavHistoryQueryOptions.SORT_BY_VISITCOUNT_DESCENDING +
+                                    "&maxResults=" + MAX_RESULTS),
+                     parent: bmsvc.toolbarFolder,
+                     position: bookmarksToolbarIndex++};
+        smartBookmarks.push(smart);
 
-        var defaultIndex = bmsvc.DEFAULT_INDEX;
-
-        // index = 0, make it the first folder
-        var placesFolder = bmsvc.createFolder(bmsvc.toolbarFolder, smartBookmarksFolderTitle,
-                                              0);
-
-        // XXX should this be a pref?  see bug #399268
-        var maxResults = 10;
+        // RECENTLY BOOKMARKED
+        smart = {queryId: "RecentlyBookmarked", // don't change this
+                 itemId: null,
+                 title: this._placesBundle.GetStringFromName("recentlyBookmarkedTitle"),
+                 uri: this._uri("place:folder=BOOKMARKS_MENU" +
+                                "&folder=UNFILED_BOOKMARKS" +
+                                "&folder=TOOLBAR" +
+                                "&queryType=" +
+                                Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS +
+                                "&sort=" +
+                                Ci.nsINavHistoryQueryOptions.SORT_BY_DATEADDED_DESCENDING +
+                                "&excludeItemIfParentHasAnnotation=livemark%2FfeedURI" +
+                                "&maxResults=" + MAX_RESULTS +
+                                "&excludeQueries=1"),
+                 parent: bmsvc.bookmarksMenuFolder,
+                 position: bookmarksMenuIndex++};
+        smartBookmarks.push(smart);
 
-        var mostVisitedItem = bmsvc.insertBookmark(placesFolder,
-          this._uri("place:queryType=" +
-              Ci.nsINavHistoryQueryOptions.QUERY_TYPE_HISTORY +
-              "&sort=" +
-              Ci.nsINavHistoryQueryOptions.SORT_BY_VISITCOUNT_DESCENDING +
-              "&maxResults=" + maxResults),
-              defaultIndex, mostVisitedTitle);
+        // RECENT TAGS
+        smart = {queryId: "RecentTags", // don't change this
+                 itemId: null,
+                 title: this._placesBundle.GetStringFromName("recentTagsTitle"),
+                 uri: this._uri("place:"+
+                    "type=" +
+                    Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAG_QUERY +
+                    "&sort=" +
+                    Ci.nsINavHistoryQueryOptions.SORT_BY_LASTMODIFIED_DESCENDING +
+                    "&maxResults=" + MAX_RESULTS),
+                 parent: bmsvc.bookmarksMenuFolder,
+                 position: bookmarksMenuIndex++};
+        smartBookmarks.push(smart);
 
-        // excludeQueries=1 so that user created "saved searches" 
-        // and these queries (added automatically) are excluded
-        var recentlyBookmarkedItem = bmsvc.insertBookmark(placesFolder,
-          this._uri("place:folder=BOOKMARKS_MENU" + 
-              "&folder=UNFILED_BOOKMARKS" +
-              "&folder=TOOLBAR" +
-              "&queryType=" + Ci.nsINavHistoryQueryOptions.QUERY_TYPE_BOOKMARKS +
-              "&sort=" +
-              Ci.nsINavHistoryQueryOptions.SORT_BY_DATEADDED_DESCENDING +
-              "&excludeItemIfParentHasAnnotation=livemark%2FfeedURI" +
-              "&maxResults=" + maxResults +
-              "&excludeQueries=1"),
-              defaultIndex, recentlyBookmarkedTitle);
+        var smartBookmarkItemIds = annosvc.getItemsWithAnnotation(SMART_BOOKMARKS_ANNO, {});
+        // set current itemId, parent and position if Smart Bookmark exists
+        for each(var itemId in smartBookmarkItemIds) {
+          var queryId = annosvc.getItemAnnotation(itemId, SMART_BOOKMARKS_ANNO);
+          for (var i = 0; i < smartBookmarks.length; i++){
+            if (smartBookmarks[i].queryId == queryId) {
+              smartBookmarks[i].itemId = itemId;
+              smartBookmarks[i].parent = bmsvc.getFolderIdForItem(itemId);
+              smartBookmarks[i].position = bmsvc.getItemIndex(itemId);
+              // remove current item, since it will be replaced
+              bmsvc.removeItem(itemId);
+              break;
+            }
+            // We don't remove old Smart Bookmarks because user could still
+            // find them useful, or could have personalized them.
+            // Instead we remove the Smart Bookmark annotation.
+            if (i == smartBookmarks.length - 1)
+              annosvc.removeItemAnnotation(itemId, SMART_BOOKMARKS_ANNO);
+          }
+        }
 
-        var sep =  bmsvc.insertSeparator(placesFolder, defaultIndex);
-
-        var recentTagsItem = bmsvc.insertBookmark(placesFolder,
-          this._uri("place:"+
-              "type=" + Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAG_QUERY +
-              "&sort=" + Ci.nsINavHistoryQueryOptions.SORT_BY_LASTMODIFIED_DESCENDING +
-              "&maxResults=" + maxResults),
-          defaultIndex, recentTagsTitle);
+        // create smart bookmarks
+        for each(var smartBookmark in smartBookmarks) {
+          smartBookmark.itemId = bmsvc.insertBookmark(smartBookmark.parent,
+                                                      smartBookmark.uri,
+                                                      smartBookmark.position,
+                                                      smartBookmark.title);
+          annosvc.setItemAnnotation(smartBookmark.itemId,
+                                    SMART_BOOKMARKS_ANNO, smartBookmark.queryId,
+                                    0, annosvc.EXPIRE_NEVER);
+        }
+        
+        // If we are creating all Smart Bookmarks from ground up, add a
+        // separator below them in the bookmarks menu.
+        if (smartBookmarkItemIds.length == 0)
+          bmsvc.insertSeparator(bmsvc.bookmarksMenuFolder, bookmarksMenuIndex);
       }
     };
 
     try {
       bmsvc.runInBatchMode(callback, null);
     }
     catch(ex) {
       Components.utils.reportError(ex);
     }
     finally {
-      prefBranch.setBoolPref("browser.places.createdSmartBookmarks", true);
+      prefBranch.setIntPref(SMART_BOOKMARKS_PREF, SMART_BOOKMARKS_VERSION);
       prefBranch.QueryInterface(Ci.nsIPrefService).savePrefFile(null);
     }
   },
 
   // for XPCOM
   classDescription: "Firefox Browser Glue Service",
   classID:          Components.ID("{eab9012e-5f74-4cbc-b2b5-a590235513cc}"),
   contractID:       "@mozilla.org/browser/browserglue;1",
--- a/browser/components/nsIBrowserGlue.idl
+++ b/browser/components/nsIBrowserGlue.idl
@@ -65,12 +65,12 @@ interface nsIBrowserGlue : nsISupports
    *
    * @param aParentWindow an optionally null window which is the parent of the 
    *        sanitization dialog (if it has to be shown per user preferences)
    *
    */
   void sanitize(in nsIDOMWindow aParentWindow);
 
   /**
-   * Add the special "Places" folder (with some special queries) to the personal toolbar folder.
+   * Add Smart Bookmarks special queries to bookmarks menu and toolbar folder.
    */
   void ensurePlacesDefaultQueriesInitialized();
 };
--- a/browser/components/places/content/bookmarkProperties.js
+++ b/browser/components/places/content/bookmarkProperties.js
@@ -119,16 +119,17 @@ var BookmarkPropertiesPanel = {
   _bookmarkId: -1,
   _bookmarkURI: null,
   _loadBookmarkInSidebar: false,
   _itemTitle: "",
   _itemDescription: "",
   _microsummaries: null,
   _URIList: null,
   _postData: null,
+  _charSet: "",
 
   // sizeToContent is not usable due to bug 90276, so we'll use resizeTo
   // instead and cache the bookmarks tree view size. See WSucks in the legacy
   // UI code (addBookmark2.js).
   //
   // XXXmano: this doesn't work as expected yet, need to figure out if we're
   // facing cocoa-widget resizeTo issue here.
   _folderTreeHeight: null,
@@ -215,16 +216,18 @@ var BookmarkPropertiesPanel = {
 
           if ("loadBookmarkInSidebar" in dialogInfo)
             this._loadBookmarkInSidebar = dialogInfo.loadBookmarkInSidebar;
 
           if ("keyword" in dialogInfo) {
             this._bookmarkKeyword = dialogInfo.keyword;
             if ("postData" in dialogInfo)
               this._postData = dialogInfo.postData;
+            if ("charSet" in dialogInfo)
+              this._charSet = dialogInfo.charSet;
           }
 
           break;
         case "folder":
           this._action = ACTION_ADD;
           this._itemType = BOOKMARK_FOLDER;
           if (!this._itemTitle) {
             if ("URIList" in dialogInfo) {
@@ -931,16 +934,19 @@ var BookmarkPropertiesPanel = {
         PlacesUIUtils.ptm.editBookmarkMicrosummary(-1, microsummary));
     }
 
     if (this._postData) {
       childTransactions.push(
         PlacesUIUtils.ptm.editBookmarkPostData(-1, this._postData));
     }
 
+    if (this._charSet)
+      PlacesUtils.history.setCharsetForURI(this._bookmarkURI, this._charSet);
+
     var transactions = [PlacesUIUtils.ptm.createItem(uri, aContainer, aIndex,
                                                      title, keyword,
                                                      annotations,
                                                      childTransactions)];
 
     return PlacesUIUtils.ptm.aggregateTransactions(this._getDialogTitle(), transactions);
   },
 
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -70,25 +70,28 @@ const REMOVE_PAGES_MAX_SINGLEREMOVES = 1
  *          The identifier of the parent container
  * @param   aIndex
  *          The index within the container where we should insert
  * @param   aOrientation
  *          The orientation of the insertion. NOTE: the adjustments to the
  *          insertion point to accommodate the orientation should be done by
  *          the person who constructs the IP, not the user. The orientation
  *          is provided for informational purposes only!
+ * @param   [optional] aIsTag
+ *          Indicates if parent container is a tag
  * @constructor
  */
-function InsertionPoint(aItemId, aIndex, aOrientation) {
+function InsertionPoint(aItemId, aIndex, aOrientation, aIsTag) {
   this.itemId = aItemId;
   this.index = aIndex;
   this.orientation = aOrientation;
+  this.isTag = aIsTag;
 }
 InsertionPoint.prototype.toString = function IP_toString() {
-  return "[object InsertionPoint(folder:" + this.itemId + ",index:" + this.index + ",orientation:" + this.orientation + ")]";
+  return "[object InsertionPoint(folder:" + this.itemId + ",index:" + this.index + ",orientation:" + this.orientation + ",isTag:" + this.isTag + ")]";
 };
 
 /**
  * Places Controller
  */
 
 function PlacesController(aView) {
   this._view = aView;
@@ -303,17 +306,18 @@ PlacesController.prototype = {
     }
     return true;
   },
 
   /**
    * Determines whether or not nodes can be inserted relative to the selection.
    */
   _canInsert: function PC__canInsert() {
-    return this._view.insertionPoint != null;
+    var ip = this._view.insertionPoint;
+    return ip != null && ip.isTag != true;
   },
 
   /**
    * Determines whether or not the root node for the view is selected
    */
   rootNodeIsSelected: function PC_rootNodeIsSelected() {
     var nodes = this._view.getSelectionNodes();
     var root = this._view.getResultNode();
@@ -849,16 +853,28 @@ PlacesController.prototype = {
 
     for (var i = 0; i < range.length; ++i) {
       var node = range[i];
       if (this._shouldSkipNode(node, removedFolders))
         continue;
 
       if (PlacesUtils.nodeIsFolder(node))
         removedFolders.push(node);
+      else if (PlacesUtils.nodeIsTagQuery(node.parent)) {
+        var queries = asQuery(node.parent).getQueries({});
+        if (queries.length == 1) {
+          var folders = queries[0].getFolders({});
+          if (folders.length == 1) {
+            var uri = PlacesUtils._uri(node.uri);
+            var tagItemId = folders[0];
+            transactions.push(PlacesUIUtils.ptm.untagURI(uri, [tagItemId]));
+          }
+        }
+        continue;
+      }
 
       transactions.push(PlacesUIUtils.ptm.removeItem(node.itemId));
     }
   },
 
   /**
    * Removes the set of selected ranges from bookmarks.
    * @param   txnName
@@ -1332,19 +1348,27 @@ var PlacesControllerDragHelper = {
       // drag multiple elts upward: need to increment index or each successive
       // elt will be inserted at the same index, each above the previous.
       if ((index != -1) && ((index < unwrapped.index) ||
                            (unwrapped.folder && (index < unwrapped.folder.index)))) {
         index = index + movedCount;
         movedCount++;
       }
 
-      transactions.push(PlacesUIUtils.makeTransaction(unwrapped,
-                        flavor.value, insertionPoint.itemId,
-                        index, copy));
+      // if dragging over a tag container we should tag the item
+      if (insertionPoint.isTag) {
+        var uri = PlacesUtils._uri(unwrapped.uri);
+        var tagItemId = insertionPoint.itemId;
+        transactions.push(PlacesUIUtils.ptm.tagURI(uri,[tagItemId]));
+      }
+      else {
+        transactions.push(PlacesUIUtils.makeTransaction(unwrapped,
+                          flavor.value, insertionPoint.itemId,
+                          index, copy));
+      }
     }
 
     var txn = PlacesUIUtils.ptm.aggregateTransactions("DropItems", transactions);
     PlacesUIUtils.ptm.doTransaction(txn);
   }
 };
 
 function goUpdatePlacesCommands() {
--- a/browser/components/places/content/menu.xml
+++ b/browser/components/places/content/menu.xml
@@ -184,22 +184,25 @@
         ]]></body>
       </method>
 
       <method name="onDragStart">
         <parameter name="aEvent"/>
         <parameter name="aXferData"/>
         <parameter name="aDragAction"/>
         <body><![CDATA[
-          if (aEvent.ctrlKey)
+          // Force a copy action if parent node is a query
+          if (aEvent.ctrlKey ||
+              PlacesUtils.nodeIsQuery(aEvent.target.node.parent))
             aDragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_COPY;
 
           // activate the view and cache the dragged node
           this._rootView._draggedNode = aEvent.target.node;
           this._rootView.focus();
+
           aXferData.data = this._rootView.controller
                                          .getTransferData(aDragAction.action);
         ]]></body>
       </method>
 
       <method name="onDrop">
         <parameter name="aEvent"/>
          <parameter name="aDropData"/>
@@ -269,17 +272,18 @@
             var popupY = popup.boxObject.y;
             // we should add the scrollBox button height if visible
             popupY += this._scrollBox.scrollBoxObject.y - popup.boxObject.y;
             for (var i = start; i < end; i++) {
               var xulNode = popup.childNodes[i];
               var nodeY = xulNode.boxObject.y - popupY;
               var nodeHeight = xulNode.boxObject.height;
               if (xulNode.node &&
-                  PlacesUtils.nodeIsFolder(xulNode.node) &&
+                  (PlacesUtils.nodeIsFolder(xulNode.node) ||
+                   PlacesUtils.nodeIsTagQuery(xulNode.node)) &&
                   !PlacesUtils.nodeIsReadOnly(xulNode.node)) {
                 // This is a folder. If the mouse is in the top 25% of the
                 // node, drop above the folder.  If it's in the middle
                 // 50%, drop into the folder.  If it's past that, drop below.
                 if (aEvent.layerY < nodeY + (nodeHeight * 0.25)) {
                   // Drop above this folder.
                   dropPoint.ip = new InsertionPoint(resultNode.itemId,
                                                     i - start, -1);
@@ -888,34 +892,39 @@
       </property>
 
       <!-- nsIPlacesView -->
       <property name="insertionPoint">
         <getter><![CDATA[
           // By default, the insertion point is at the top level, at the end.
           var index = -1;
           var folderId = 0;
-          if (PlacesUtils.nodeIsFolder(this._resultNode))
+          var isTag = false;
+
+          if (PlacesUtils.nodeIsFolder(this._resultNode)) {
             folderId = PlacesUtils.getConcreteItemId(this._resultNode);
+            isTag = PlacesUtils.nodeIsTagQuery(this._resultNode);
+          }
 
           var selectedNode = this.selectedNode;
           if (selectedNode) {
             if (PlacesUtils.nodeIsFolder(selectedNode)) {
               // If there is a folder selected, the insertion point is the
               // end of the folder.
               folderId = PlacesUtils.getConcreteItemId(selectedNode);
             }
             else {
               // If there is another type of node selected, the insertion point
               // is after that node.
               folderId = PlacesUtils.getConcreteItemId(selectedNode.parent);
-              index = PlacesUtils.getIndexOfNode(selectedNode)
+              index = PlacesUtils.getIndexOfNode(selectedNode);
+              isTag = PlacesUtils.nodeIsTagQuery(selectedNode.parent);
             }
           }
-          return new InsertionPoint(folderId, index);
+          return new InsertionPoint(folderId, index, 1, isTag);
         ]]></getter>
       </property>
 
       <!-- nsIPlacesView -->
       <method name="selectAll">
         <body/>
       </method>
 
--- a/browser/components/places/content/organizer.css
+++ b/browser/components/places/content/organizer.css
@@ -24,13 +24,13 @@ button.commandButton {
 }
 
 #searchFilter[filtered="true"] .textbox-input-closebutton {
   display: -moz-box;
 }
 
 /* Edit Item Panel */
 
-#infoScrollbox[minimal="true"] #editBMPanel_descriptionRow,
-#infoScrollbox[minimal="true"] #editBMPanel_loadInSidebarCheckbox,
-#infoScrollbox[minimal="true"] #editBMPanel_keywordRow {
+#infoBox[minimal="true"] #editBMPanel_descriptionRow,
+#infoBox[minimal="true"] #editBMPanel_loadInSidebarCheckbox,
+#infoBox[minimal="true"] #editBMPanel_keywordRow {
   visibility: collapse;
 }
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -218,24 +218,71 @@ var PlacesOrganizer = {
 
     // Make sure the search UI is hidden.
     PlacesSearchBox.hideSearchUI();
     if (resetSearchBox) {
       var searchFilter = document.getElementById("searchFilter");
       searchFilter.reset();
     }
 
-    // Update the "Find in <current collection>" command and the gray text in
-    // the search box in the toolbar if the active collection is the current
-    // collection.
+    this._setSearchScopeForNode(node);
+  },
+
+  /**
+   * Sets the search scope based on node's properties
+   * @param   aNode
+   *          the node to set up scope from
+   */
+  _setSearchScopeForNode: function PO__setScopeForNode(aNode) {
+    var scopeBarFolder = document.getElementById("scopeBarFolder");
+    var itemId = aNode.itemId;
+    if (PlacesUtils.nodeIsHistoryContainer(aNode) ||
+        itemId == PlacesUIUtils.leftPaneQueries["History"]) {
+      scopeBarFolder.disabled = true;
+      var folders = [];
+      var filterCollection = "history";
+      var scopeButton = "scopeBarHistory";
+    }
+    else if (PlacesUtils.nodeIsFolder(aNode) &&
+             itemId != PlacesUIUtils.leftPaneQueries["AllBookmarks"] &&
+             itemId != PlacesUIUtils.leftPaneQueries["Tags"] &&
+             aNode.parent.itemId != PlacesUIUtils.leftPaneQueries["Tags"]) {
+      // enable folder scope
+      scopeBarFolder.disabled = false;
+      var folders = [PlacesUtils.getConcreteItemId(aNode)];
+      var filterCollection = "collection";
+      var scopeButton = "scopeBarFolder";
+    }
+    else {
+      // default to All Bookmarks
+      scopeBarFolder.disabled = true;
+      var folders = [];
+      var filterCollection = "bookmarks";
+      var scopeButton = "scopeBarAll";
+    }
+
+    // set search scope
+    PlacesSearchBox.folders = folders;
+    PlacesSearchBox.filterCollection = filterCollection;
+
+    // update scope bar active child
+    var scopeBar = document.getElementById("organizerScopeBar");
+    var child = scopeBar.firstChild;
+    while (child) {
+      if (child.getAttribute("id") != scopeButton)
+        child.removeAttribute("checked");
+      else
+        child.setAttribute("checked", "true");
+      child = child.nextSibling;
+    }
+
+    // Update the "Find in <current collection>" command
     var findCommand = document.getElementById("OrganizerCommand_find:current");
-    var findLabel = PlacesUIUtils.getFormattedString("findInPrefix", [node.title]);
+    var findLabel = PlacesUIUtils.getFormattedString("findInPrefix", [aNode.title]);
     findCommand.setAttribute("label", findLabel);
-    if (PlacesSearchBox.filterCollection == "collection")
-      PlacesSearchBox.updateCollectionTitle(node.title);
   },
 
   /**
    * Handle clicks on the tree. If the user middle clicks on a URL, load that
    * URL according to rules. Single clicks or modified clicks do not result in
    * any special action, since they're related to selection.
    * @param   aEvent
    *          The mouse event.
@@ -512,37 +559,37 @@ var PlacesOrganizer = {
               .removeAttribute("disabled");
     }
   },
 
   _detectAndSetDetailsPaneMinimalState:
   function PO__detectAndSetDetailsPaneMinimalState(aNode) {
     /**
      * The details of simple folder-items (as opposed to livemarks) or the
-     * of livemark-children are not likely to fill the scrollbox anyway,
+     * of livemark-children are not likely to fill the infoBox anyway,
      * thus we remove the "More/Less" button and show all details.
      *
      * the wasminimal attribute here is used to persist the "more/less"
      * state in a bookmark->folder->bookmark scenario.
      */
-    var infoScrollbox = document.getElementById("infoScrollbox");
-    var scrollboxExpander = document.getElementById("infoScrollboxExpander");
+    var infoBox = document.getElementById("infoBox");
+    var infoBoxExpander = document.getElementById("infoBoxExpander");
     if ((PlacesUtils.nodeIsFolder(aNode) &&
          !PlacesUtils.nodeIsLivemarkContainer(aNode)) ||
         PlacesUtils.nodeIsLivemarkItem(aNode)) {
-      if (infoScrollbox.getAttribute("minimal") == "true")
-        infoScrollbox.setAttribute("wasminimal", "true");
-      infoScrollbox.removeAttribute("minimal");
-      scrollboxExpander.hidden = true;
+      if (infoBox.getAttribute("minimal") == "true")
+        infoBox.setAttribute("wasminimal", "true");
+      infoBox.removeAttribute("minimal");
+      infoBoxExpander.hidden = true;
     }
     else {
-      if (infoScrollbox.getAttribute("wasminimal") == "true")
-        infoScrollbox.setAttribute("minimal", "true");
-      infoScrollbox.removeAttribute("wasminimal");
-      scrollboxExpander.hidden = false;
+      if (infoBox.getAttribute("wasminimal") == "true")
+        infoBox.setAttribute("minimal", "true");
+      infoBox.removeAttribute("wasminimal");
+      infoBoxExpander.hidden = false;
     }
   },
 
   // NOT YET USED
   updateThumbnailProportions: function PO_updateThumbnailProportions() {
     var previewBox = document.getElementById("previewBox");
     var canvas = document.getElementById("itemThumbnail");
     var height = previewBox.boxObject.height;
@@ -557,21 +604,22 @@ var PlacesOrganizer = {
     if (gEditItemOverlay.itemId != -1) {
       var focusedElement = document.commandDispatcher.focusedElement;
       if ((focusedElement instanceof HTMLInputElement ||
            focusedElement instanceof HTMLTextAreaElement) &&
           /^editBMPanel.*/.test(focusedElement.parentNode.parentNode.id))
         focusedElement.blur();
     }
 
-    var contentTree = document.getElementById("placeContent");
+    var infoBox = document.getElementById("infoBox");
     var detailsDeck = document.getElementById("detailsDeck");
     detailsDeck.selectedIndex = 1;
-    var selectedNode = contentTree.selectedNode;
+    var selectedNode = this._content.selectedNode;
     if (selectedNode) {
+      infoBox.hidden = false;
       if (selectedNode.itemId != -1 &&
           !PlacesUtils.nodeIsSeparator(selectedNode)) {
         if (this._paneDisabled) {
           this._setDetailsFieldsDisabledState(false);
           this._paneDisabled = false;
         }
 
         // Using the concrete itemId is arguably wrong. The bookmarks API
@@ -590,16 +638,19 @@ var PlacesOrganizer = {
         }
 
         this._detectAndSetDetailsPaneMinimalState(selectedNode);
         return;
       }
     }
     else {
       detailsDeck.selectedIndex = 0;
+      // The details deck has the height of its biggest child, so we hide the
+      // infoBox to allow it shrinking when there is no selection.
+      infoBox.hidden = true;
       var selectItemDesc = document.getElementById("selectItemDescription");
       var itemsCountLabel = document.getElementById("itemsCountText");
       var rowCount = this._content.treeBoxObject.view.rowCount;
       if (rowCount == 0) {
         selectItemDesc.hidden = true;
         itemsCountLabel.value = PlacesUIUtils.getString("detailsPane.noItems");
       }
       else {
@@ -640,27 +691,27 @@ var PlacesOrganizer = {
     ctx.mozTextStyle = "12pt sans serif";
     var len = ctx.mozMeasureText(notAvailableText);
     ctx.translate(-len/2,0);
     ctx.mozDrawText(notAvailableText);
     ctx.restore();
   },
 
   toggleAdditionalInfoFields: function PO_toggleAdditionalInfoFields() {
-    var infoScrollbox = document.getElementById("infoScrollbox");
-    var scrollboxExpander = document.getElementById("infoScrollboxExpander");
-    if (infoScrollbox.getAttribute("minimal") == "true") {
-      infoScrollbox.removeAttribute("minimal");
-      scrollboxExpander.label = scrollboxExpander.getAttribute("lesslabel");
-      scrollboxExpander.accessKey = scrollboxExpander.getAttribute("lessaccesskey");
+    var infoBox = document.getElementById("infoBox");
+    var infoBoxExpander = document.getElementById("infoBoxExpander");
+    if (infoBox.getAttribute("minimal") == "true") {
+      infoBox.removeAttribute("minimal");
+      infoBoxExpander.label = infoBoxExpander.getAttribute("lesslabel");
+      infoBoxExpander.accessKey = infoBoxExpander.getAttribute("lessaccesskey");
     }
     else {
-      infoScrollbox.setAttribute("minimal", "true");
-      scrollboxExpander.label = scrollboxExpander.getAttribute("morelabel");
-      scrollboxExpander.accessKey = scrollboxExpander.getAttribute("moreaccesskey");
+      infoBox.setAttribute("minimal", "true");
+      infoBoxExpander.label = infoBoxExpander.getAttribute("morelabel");
+      infoBoxExpander.accessKey = infoBoxExpander.getAttribute("moreaccesskey");
     }
   },
 
   /**
    * Save the current search (or advanced query) to the bookmarks root.
    */
   saveSearch: function PO_saveSearch() {
     // Get the place: uri for the query.
@@ -812,20 +863,23 @@ var PlacesSearchBox = {
   },
 
   /**
    * Updates the display with the title of the current collection.
    * @param   title
    *          The title of the current collection.
    */
   updateCollectionTitle: function PSB_updateCollectionTitle(title) {
-    this.searchFilter.emptyText =
-      title ?
-      PlacesUIUtils.getFormattedString("searchCurrentDefault", [title]) :
-      PlacesUIUtils.getString("searchBookmarks");
+    if (title)
+      this.searchFilter.emptyText =
+        PlacesUIUtils.getFormattedString("searchCurrentDefault", [title]);
+    else
+      this.searchFilter.emptyText = this.filterCollection == "history" ?
+                                    PlacesUIUtils.getString("searchHistory") :
+                                    PlacesUIUtils.getString("searchBookmarks");
   },
 
   /**
    * Gets/sets the active collection from the dropdown menu.
    */
   get filterCollection() {
     return this.searchFilter.getAttribute("collection");
   },
--- a/browser/components/places/content/places.xul
+++ b/browser/components/places/content/places.xul
@@ -395,44 +395,38 @@
     <tree id="placesList"
           class="placesTree"
           type="places"
           hidecolumnpicker="true" context="placesContext"
           onselect="PlacesOrganizer.onPlaceSelected(true);"
           onclick="PlacesOrganizer.onTreeClick(event);"
           seltype="single"
           persist="width"
-          width="200">
+          width="200"
+          minwidth="100"
+          maxwidth="400">
       <treecols>
         <treecol anonid="title" flex="1" primary="true" hideheader="true"/>
       </treecols>
       <treechildren flex="1"/>
     </tree>
-    <splitter id="splitter" collapse="before" persist="state">
-      <grippy/>
-    </splitter>
+    <splitter collapse="none" persist="state"></splitter>
     <vbox id="contentView" flex="4">
       <deck id="contentDeck" flex="1">
         <vbox id="defaultView" flex="1">
           <vbox id="searchModifiers" hidden="true">
             <toolbar id="organizerScopeBar" class="chromeclass-toolbar" align="center">
               <label id="scopeBarTitle" value="&search.label;"/>
               <toolbarbutton id="scopeBarFolder" type="radio" group="scopeBar" 
                              oncommand="PlacesQueryBuilder.onScopeSelected(this);"
                              label="&search.scopeFolder.label;"/>
               <toolbarbutton id="scopeBarAll" type="radio" group="scopeBar"
                              oncommand="PlacesQueryBuilder.onScopeSelected(this);"
                              label="&search.scopeAll.label;"
                              checked="true"/>
-              <toolbarbutton id="scopeBarMenu" type="radio" group="scopeBar"
-                             oncommand="PlacesQueryBuilder.onScopeSelected(this);"
-                             label="&search.scopeMenu.label;"/>
-              <toolbarbutton id="scopeBarToolbar" type="radio" group="scopeBar"
-                             oncommand="PlacesQueryBuilder.onScopeSelected(this);"
-                             label="&search.scopeToolbar.label;"/>
               <!--
               <toolbarbutton id="scopeBarDownloads" type="radio" group="scopeBar"
                              oncommand="PlacesQueryBuilder.onScopeSelected(this);"
                              label="&search.scopeDownloads.label;"/>
               -->
               <toolbarbutton id="scopeBarHistory" type="radio" group="scopeBar"
                              oncommand="PlacesQueryBuilder.onScopeSelected(this);"
                              label="&search.scopeHistory.label;"/>
@@ -488,45 +482,42 @@
                 <treecol label="&col.dateadded.label;" id="placesContentDateAdded" anonid="dateAdded" flex="1" hidden="true"
                          persist="width hidden ordinal sortActive sortDirection"/>
                 <splitter class="tree-splitter"/>
                 <treecol label="&col.lastmodified.label;" id="placesContentLastModified" anonid="lastModified" flex="1" hidden="true"
                          persist="width hidden ordinal sortActive sortDirection"/>
               </treecols>
               <treechildren flex="1"/>
             </tree>
-            <splitter id="contentSplitter" collapse="after" persist="state">
-              <grippy/>
-            </splitter>
-            <hbox persist="height" id="infoPane">
+            <hbox id="infoPaneBox">
               <deck flex="1" id="detailsDeck">
-                <vbox align="center">
+                <vbox id="itemsCountBox" align="center">
                   <spacer flex="3"/>
                   <label id="itemsCountText"/>
                   <spacer flex="1"/>
                   <description id="selectItemDescription">
                      &detailsPane.selectAnItemText.description;
                   </description>
                   <spacer flex="3"/>
                 </vbox>
-                <scrollbox id="infoScrollbox" minimal="true" orient="vertical" flex="1" style='overflow: auto;'>
+                <vbox id="infoBox" minimal="true">
                   <vbox id="editBookmarkPanelContent"/>
                   <hbox>
-                    <button type="image" id="infoScrollboxExpander"
+                    <button type="image" id="infoBoxExpander"
                             lesslabel="&detailsPane.less.label;"
                             lessaccesskey="&detailsPane.less.accesskey;"
                             morelabel="&detailsPane.more.label;"
                             moreaccesskey="&detailsPane.more.accesskey;"
                             label="&detailsPane.more.label;"
                             accesskey="&detailsPane.more.accesskey;"
                             oncommand="PlacesOrganizer.toggleAdditionalInfoFields();"
                             observes="paneElementsBroadcaster"/>
                     <spacer flex="1"/>
                   </hbox>
-                </scrollbox>
+                </vbox>
               </deck>
             </hbox>
           </vbox>
         </vbox>
       </deck>
     </vbox>
   </hbox>
 </window>
--- a/browser/components/places/content/toolbar.xml
+++ b/browser/components/places/content/toolbar.xml
@@ -187,16 +187,18 @@
             var iconURISpec = "";
             if (iconURI) {
               iconURISpec = iconURI.spec;
               button.setAttribute("image", iconURISpec);
             }
 
             if (PlacesUtils.containerTypes.indexOf(type) != -1) {
               button.setAttribute("type", "menu");
+              if (PlacesUtils.nodeIsQuery(aChild))
+                button.setAttribute("query", "true");
               button.setAttribute("container", "true");
               if (PlacesUtils.nodeIsLivemarkContainer(aChild))
                 button.setAttribute("livemark", "true");
 
               var popup = document.createElement("menupopup");
               popup.setAttribute("placespopup", "true");
               button.appendChild(popup);
               popup._result = this._result;
@@ -375,32 +377,34 @@
       </property>
 
       <!-- nsIPlacesView -->
       <property name="insertionPoint">
         <getter><![CDATA[
           // By default, the insertion point is at the top level, at the end. 
           var index = -1;
           var folderId = PlacesUtils.getConcreteItemId(this._result.root);
+          var isTag = false;
 
           var selectedNode = this.selectedNode;
           if (selectedNode) {
             if (PlacesUtils.nodeIsFolder(selectedNode)) {
               // If there is a folder selected, the insertion point is the
               // end of the folder.
               folderId = PlacesUtils.getConcreteItemId(selectedNode);
             }
             else {
               // If there is another type of node selected, the insertion point
               // is after that node.
               folderId = PlacesUtils.getConcreteItemId(selectedNode.parent);
               index = PlacesUtils.getIndexOfNode(selectedNode);
+              isTag = PlacesUtils.nodeIsTagQuery(selectedNode.parent);
             }
           }
-          return new InsertionPoint(folderId, index, 1);
+          return new InsertionPoint(folderId, index, 1, isTag);
         ]]></getter>
       </property>
 
       <!-- nsIPlacesView -->
       <method name="selectAll">
         <body><![CDATA[ 
           // Nothing
         ]]></body>
--- a/browser/components/places/content/tree.xml
+++ b/browser/components/places/content/tree.xml
@@ -486,16 +486,19 @@
             this._getInsertionPoint(max.value, orientation);
           return this._cachedInsertionPoint;
         ]]></getter>
       </property>
       
       <method name="_disallowInsertion">
         <parameter name="aContainer"/>
         <body><![CDATA[
+          // allow dropping into Tag containers
+          if (PlacesUtils.nodeIsTagQuery(aContainer))
+            return false;
           // Disallow insertion of items under readonly folders
           return (!PlacesUtils.nodeIsFolder(aContainer) ||
                    PlacesUtils.nodeIsReadOnly(aContainer));
         ]]></body>
       </method>
 
       <method name="_getInsertionPoint">
         <parameter name="index"/>
@@ -549,17 +552,18 @@
               }
             }
           }
 
           if (this._disallowInsertion(container))
             return null;
 
           return new InsertionPoint(PlacesUtils.getConcreteItemId(container),
-                                    index, orientation);
+                                    index, orientation,
+                                    PlacesUtils.nodeIsTagQuery(container));
         ]]></body>
       </method>
 
       <!-- nsIPlacesView -->
       <method name="selectAll">
         <body><![CDATA[ 
           this.view.selection.selectAll();
         ]]></body>
@@ -664,17 +668,18 @@
             // Disallow dragging the root node of a tree
             var parent = node.parent;
             if (!parent)
               throw Cr.NS_OK;
 
             // If this node is part of a readonly container (e.g. a livemark) it 
             // cannot be moved, only copied, so we must change the action used
             // by the drag session.
-            if (PlacesUtils.nodeIsReadOnly(parent)) {
+            if (PlacesUtils.nodeIsReadOnly(parent) ||
+                PlacesUtils.nodeIsTagQuery(parent)) {
               dragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_COPY;
               break;
             }
           }
  
           // XXXben - the drag wrapper should do this automatically.
           if (event.ctrlKey)
             dragAction.action = Ci.nsIDragService.DRAGDROP_ACTION_COPY;
--- a/browser/components/places/content/treeView.js
+++ b/browser/components/places/content/treeView.js
@@ -885,33 +885,48 @@ PlacesTreeView.prototype = {
 
     var node = this._visibleElements[aRow].node;
     var properties = this._visibleElements[aRow].properties;
 
     if (!properties) {
       properties = new Array();
       var nodeType = node.type;
       if (PlacesUtils.containerTypes.indexOf(nodeType) != -1) {
+        var itemId = node.itemId;
         if (nodeType == Ci.nsINavHistoryResultNode.RESULT_TYPE_QUERY) {
           properties.push(this._getAtomFor("query"));
           if (this._showQueryAsFolder)
             properties.push(this._getAtomFor("folder"));
         } 
         else if (nodeType == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER ||
                  nodeType == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER_SHORTCUT) {
-          if (PlacesUtils.annotations.itemHasAnnotation(node.itemId,
+          
+          if (PlacesUtils.annotations.itemHasAnnotation(itemId,
                                                         LMANNO_FEEDURI))
             properties.push(this._getAtomFor("livemark"));
-          else if (PlacesUtils.bookmarks.getFolderIdForItem(node.itemId) ==
+          else if (PlacesUtils.bookmarks.getFolderIdForItem(itemId) ==
                    PlacesUtils.tagsFolderId)
             properties.push(this._getAtomFor("tagContainer"));
         }
+
+        if (itemId != -1) {
+          var oqAnno;
+          try {
+            oqAnno = PlacesUtils.annotations.getItemAnnotation(itemId, ORGANIZER_QUERY_ANNO);
+            properties.push(this._getAtomFor("OrganizerQuery_" + oqAnno));
+          }
+          catch (ex) { /* not a special query */ }
+        }
       }
       else if (nodeType == Ci.nsINavHistoryResultNode.RESULT_TYPE_SEPARATOR)
         properties.push(this._getAtomFor("separator"));
+      else if (itemId != -1) { // bookmark nodes
+        if (PlacesUtils.nodeIsLivemarkContainer(node.parent))
+          properties.push(this._getAtomFor("livemarkItem"));
+      }
 
       this._visibleElements[aRow].properties = properties;
     }
     for (var i = 0; i < properties.length; i++)
       aProperties.AppendElement(properties[i]);
   },
 
   getColumnProperties: function(aColumn, aProperties) { },
@@ -978,28 +993,32 @@ PlacesTreeView.prototype = {
       // The user cannot drop an item into itself or a read-only container
       var dragService =  Cc["@mozilla.org/widget/dragservice;1"].
                          getService(Ci.nsIDragService);
       var dragSession = dragService.getCurrentSession();
       var elt = dragSession.sourceNode.parentNode;
       if (elt.localName == "tree" && elt.view == this &&
           this.selection.isSelected(aRow))
         return false;
-      if (node.parent && PlacesUtils.nodeIsReadOnly(node.parent))
+      if (node.parent && PlacesUtils.nodeIsReadOnly(node.parent) &&
+          !PlacesUtils.nodeIsTagQuery(node))
         return false;
     }
   
     var ip = this._getInsertionPoint(aRow, aOrientation);
     return ip && PlacesControllerDragHelper.canDrop(ip);
   },
 
   // XXXmano: these two are copied over from tree.xml, to fix this we need to
   // either add a helper to PlacesUtils or keep it here and add insertionPoint
   // to the view interface.
   _disallowInsertion: function PTV__disallowInsertion(aContainer) {
+    // allow dropping into Tag containers
+    if (PlacesUtils.nodeIsTagQuery(aContainer))
+      return false;
     // Disallow insertion of items under readonly folders
     return (!PlacesUtils.nodeIsFolder(aContainer) ||
             PlacesUtils.nodeIsReadOnly(aContainer));
   },
 
   _getInsertionPoint: function PTV__getInsertionPoint(index, orientation) {
     var container = this._result.root;
     // When there's no selection, assume the container is the container
@@ -1036,17 +1055,18 @@ PlacesTreeView.prototype = {
         index = orientation == Ci.nsITreeView.DROP_BEFORE ? lsi : lsi + 1;
       }
     }
 
     if (this._disallowInsertion(container))
       return null;
 
     return new InsertionPoint(PlacesUtils.getConcreteItemId(container),
-                              index, orientation);
+                              index, orientation,
+                              PlacesUtils.nodeIsTagQuery(container));
   },
 
   drop: function PTV_drop(aRow, aOrientation) {
     // We are responsible for translating the |index| and |orientation| 
     // parameters into a container id and index within the container, 
     // since this information is specific to the tree view.
     var ip = this._getInsertionPoint(aRow, aOrientation);
     if (!ip)
@@ -1098,28 +1118,20 @@ PlacesTreeView.prototype = {
   getImageSrc: function PTV_getImageSrc(aRow, aColumn) {
     this._ensureValidRow(aRow);
 
     // only the title column has an image
     if (this._getColumnType(aColumn) != this.COLUMN_TYPE_TITLE)
       return "";
 
     var node = this._visibleElements[aRow].node;
-
-    // Containers may or may not have favicons. If not, we will return
-    // nothing as the image, and the style rule should pick up the
-    // default. Separator rows never have icons.
-    if (PlacesUtils.nodeIsSeparator(node) ||
-        (PlacesUtils.nodeIsContainer(node) && !node.icon))
-      return "";
-
-    // For consistency, we always return a favicon for non-containers,
-    // even if it is just the default one.
-    var icon = node.icon || PlacesUtils.favicons.defaultFavicon;
-    return icon ? icon.spec : "";
+    var icon = node.icon;
+    if (icon)
+      return icon.spec;
+    return "";
   },
 
   getProgressMode: function(aRow, aColumn) { },
   getCellValue: function(aRow, aColumn) { },
 
   getCellText: function PTV_getCellText(aRow, aColumn) {
     this._ensureValidRow(aRow);
 
--- a/browser/components/places/content/utils.js
+++ b/browser/components/places/content/utils.js
@@ -413,32 +413,35 @@ var PlacesUIUtils = {
    * @param [optional] aLoadInSidebar
    *        If true, the dialog will default to load the new item in the
    *        sidebar (as a web panel).
    * @param [optional] aKeyword
    *        The default keyword for the new bookmark. The keyword field
    *        will be shown in the dialog if this is used.
    * @param [optional] aPostData
    *        POST data for POST-style keywords.
+   * @param [optional] aCharSet
+   *        The character set for the bookmarked page.
    * @return true if any transaction has been performed.
    *
    * Notes:
    *  - the location, description and "load in sidebar" fields are
    *    visible only if there is no initial URI (aURI is null).
    *  - When aDefaultInsertionPoint is not set, the dialog defaults to the
    *    bookmarks root folder.
    */
   showAddBookmarkUI: function PU_showAddBookmarkUI(aURI,
                                                    aTitle,
                                                    aDescription,
                                                    aDefaultInsertionPoint,
                                                    aShowPicker,
                                                    aLoadInSidebar,
                                                    aKeyword,
-                                                   aPostData) {
+                                                   aPostData,
+                                                   aCharSet) {
     var info = {
       action: "add",
       type: "bookmark"
     };
 
     if (aURI)
       info.uri = aURI;
 
@@ -457,16 +460,18 @@ var PlacesUIUtils = {
 
     if (aLoadInSidebar)
       info.loadBookmarkInSidebar = true;
 
     if (typeof(aKeyword) == "string") {
       info.keyword = aKeyword;
       if (typeof(aPostData) == "string")
         info.postData = aPostData;
+      if (typeof(aCharSet) == "string")
+        info.charSet = aCharSet;
     }
 
     return this._showBookmarkDialog(info);
   },
 
   /**
    * @see showAddBookmarkUI
    * This opens the dialog with only the name and folder pickers visible by
@@ -476,17 +481,18 @@ var PlacesUIUtils = {
    * for the new bookmark.
    *
    * The keyword field will be visible only if the aKeyword parameter
    * was used.
    */
   showMinimalAddBookmarkUI:
   function PU_showMinimalAddBookmarkUI(aURI, aTitle, aDescription,
                                        aDefaultInsertionPoint, aShowPicker,
-                                       aLoadInSidebar, aKeyword, aPostData) {
+                                       aLoadInSidebar, aKeyword, aPostData,
+                                       aCharSet) {
     var info = {
       action: "add",
       type: "bookmark",
       hiddenRows: ["location", "description", "load in sidebar"]
     };
     if (aURI)
       info.uri = aURI;
 
@@ -505,16 +511,18 @@ var PlacesUIUtils = {
 
     if (aLoadInSidebar)
       info.loadBookmarkInSidebar = true;
 
     if (typeof(aKeyword) == "string") {
       info.keyword = aKeyword;
       if (typeof(aPostData) == "string")
         info.postData = aPostData;
+      if (typeof(aCharSet) == "string")
+        info.charSet = aCharSet;
     }
     else
       info.hiddenRows.push("keyword");
 
     this._showBookmarkDialog(info, true);
   },
 
   /**
@@ -1150,18 +1158,22 @@ var PlacesUIUtils = {
         let itemId = PlacesUtils.bookmarks.insertBookmark(leftPaneRoot, uri, -1, title);
         PlacesUtils.annotations.setItemAnnotation(itemId, ORGANIZER_QUERY_ANNO,
                                                   "History", 0, EXPIRE_NEVER);
         self.leftPaneQueries["History"] = itemId;
 
         // XXX: Downloads
 
         // Tags Query
-        uri = PlacesUtils._uri("place:folder=TAGS");
-        itemId = PlacesUtils.bookmarks.insertBookmark(leftPaneRoot, uri, -1, null);
+        uri = PlacesUtils._uri("place:type=" +
+                          Ci.nsINavHistoryQueryOptions.RESULTS_AS_TAG_QUERY +
+                          "&sort=" +
+                          Ci.nsINavHistoryQueryOptions.SORT_BY_TITLE_ASCENDING);
+        title = PlacesUtils.bookmarks.getItemTitle(PlacesUtils.tagsFolderId);
+        itemId = PlacesUtils.bookmarks.insertBookmark(leftPaneRoot, uri, -1, title);
         PlacesUtils.annotations.setItemAnnotation(itemId, ORGANIZER_QUERY_ANNO,
                                                   "Tags", 0, EXPIRE_NEVER);
         self.leftPaneQueries["Tags"] = itemId;
 
         // All Bookmarks Folder
         title = self.getString("OrganizerQueryAllBookmarks");
         itemId = PlacesUtils.bookmarks.createFolder(leftPaneRoot, title, -1);
         allBookmarksId = itemId;
--- a/browser/components/places/src/nsPlacesImportExportService.cpp
+++ b/browser/components/places/src/nsPlacesImportExportService.cpp
@@ -124,17 +124,16 @@ static NS_DEFINE_CID(kParserCID, NS_PARS
 #define KEY_MICSUM_GEN_URI_LOWER "micsum_gen_uri"
 #define KEY_DATE_ADDED_LOWER "add_date"
 #define KEY_LAST_MODIFIED_LOWER "last_modified"
 #define KEY_GENERATED_TITLE_LOWER "generated_title"
 
 #define LOAD_IN_SIDEBAR_ANNO NS_LITERAL_CSTRING("bookmarkProperties/loadInSidebar")
 #define DESCRIPTION_ANNO NS_LITERAL_CSTRING("bookmarkProperties/description")
 #define POST_DATA_ANNO NS_LITERAL_CSTRING("bookmarkProperties/POSTData")
-#define LAST_CHARSET_ANNO NS_LITERAL_CSTRING("URIProperties/characterSet")
 #define STATIC_TITLE_ANNO NS_LITERAL_CSTRING("bookmarks/staticTitle")
 
 #define BOOKMARKS_MENU_ICON_URI "chrome://browser/skin/places/bookmarksMenu.png"
 
 // define to get debugging messages on console about import/export
 //#define DEBUG_IMPORT
 //#define DEBUG_EXPORT
 
@@ -982,23 +981,18 @@ BookmarkContentSink::HandleLinkBegin(con
       mMicrosummaryService->CreateMicrosummary(frame.mPreviousLink, micsumGenURIObject,
                                                getter_AddRefs(frame.mPreviousMicrosummary));
       frame.mPreviousMicrosummaryText = generatedTitle;
     }
   }
 
   // import last charset
   if (!lastCharset.IsEmpty()) {
-    PRBool hasCharset = PR_FALSE;
-    mAnnotationService->ItemHasAnnotation(frame.mPreviousId,
-                                          LAST_CHARSET_ANNO, &hasCharset);
-    if (!hasCharset)
-      mAnnotationService->SetItemAnnotationString(frame.mPreviousId, LAST_CHARSET_ANNO,
-                                                  lastCharset, 0,
-                                                  nsIAnnotationService::EXPIRE_NEVER);
+    rv = mHistoryService->SetCharsetForURI(frame.mPreviousLink,lastCharset);
+    NS_ASSERTION(NS_SUCCEEDED(rv), "setCharsetForURI failed");
   }
 }
 
 
 // BookmarkContentSink::HandleLinkEnd
 //
 //    Saves the title for the given bookmark. This only writes the user title.
 //    Any previous title will be untouched. If this is a new entry, it will have
@@ -1930,25 +1924,19 @@ nsPlacesImportExportService::WriteItem(n
     NS_ENSURE_SUCCESS(rv, rv);
     rv = WriteEscapedUrl(spec, aOutput);
     NS_ENSURE_SUCCESS(rv, rv);
     rv = aOutput->Write(kQuoteStr, sizeof(kQuoteStr)-1, &dummy);
     NS_ENSURE_SUCCESS(rv, rv);
   }
 
   // last charset
-  PRBool hasLastCharset = PR_FALSE;
-  rv = mAnnotationService->ItemHasAnnotation(itemId, LAST_CHARSET_ANNO,
-                                             &hasLastCharset);
-  NS_ENSURE_SUCCESS(rv, rv);
-  if (hasLastCharset) {
-    nsAutoString lastCharset;
-    rv = mAnnotationService->GetItemAnnotationString(itemId, LAST_CHARSET_ANNO,
-                                                     lastCharset);
-    NS_ENSURE_SUCCESS(rv, rv);
+  nsAutoString lastCharset;
+  if (NS_SUCCEEDED(mHistoryService->GetCharsetForURI(pageURI, lastCharset)) &&
+      !lastCharset.IsEmpty()) {
     rv = aOutput->Write(kLastCharsetAttribute, sizeof(kLastCharsetAttribute)-1, &dummy);
     NS_ENSURE_SUCCESS(rv, rv);
     char* escapedLastCharset = nsEscapeHTML(NS_ConvertUTF16toUTF8(lastCharset).get());
     rv = aOutput->Write(escapedLastCharset, strlen(escapedLastCharset), &dummy);
     nsMemory::Free(escapedLastCharset);
     NS_ENSURE_SUCCESS(rv, rv);
     rv = aOutput->Write(kQuoteStr, sizeof(kQuoteStr)-1, &dummy);
     NS_ENSURE_SUCCESS(rv, rv);
--- a/browser/components/places/src/nsPlacesTransactionsService.js
+++ b/browser/components/places/src/nsPlacesTransactionsService.js
@@ -166,17 +166,17 @@ placesTransactionsService.prototype = {
   sortFolderByName: function placesSortFldrByName(aFolderId) {
     return new placesSortFolderByNameTransactions(aFolderId);
   },
 
   tagURI: function placesTagURI(aURI, aTags) {
     return new placesTagURITransaction(aURI, aTags);
   },
 
-  untagURI: function placesTagURI(aURI, aTags) {
+  untagURI: function placesUntagURI(aURI, aTags) {
     return new placesUntagURITransaction(aURI, aTags);
   },
 
   // Update commands in the undo group of the active window
   // commands in inactive windows will are updated on-focus
   _updateCommands: function() {
     var wm = Cc["@mozilla.org/appshell/window-mediator;1"].
              getService(Ci.nsIWindowMediator);
@@ -456,20 +456,29 @@ function placesMoveItemTransactions(aIte
   this.redoTransaction = this.doTransaction;
 }
 
 placesMoveItemTransactions.prototype = {
   __proto__: placesBaseTransaction.prototype,
 
   doTransaction: function PMIT_doTransaction() {
     PlacesUtils.bookmarks.moveItem(this._id, this._newContainer, this._newIndex);
+    // if newIndex == DEFAULT_INDEX we append, so get correct index for undo
+    if (this._newIndex == PlacesUtils.bookmarks.DEFAULT_INDEX)
+      this._newIndex = PlacesUtils.bookmarks.getItemIndex(this._id);
   },
 
   undoTransaction: function PMIT_undoTransaction() {
-    PlacesUtils.bookmarks.moveItem(this._id, this._oldContainer, this._oldIndex);
+    // moving down in the same container takes in count removal of the item
+    // so to revert positions we must move to oldIndex + 1
+    if (this._newContainer == this._oldContainer &&
+        this._oldIndex > this._newIndex)
+      PlacesUtils.bookmarks.moveItem(this._id, this._oldContainer, this._oldIndex + 1);
+    else
+      PlacesUtils.bookmarks.moveItem(this._id, this._oldContainer, this._oldIndex);
   }
 };
 
 function placesRemoveItemTransaction(aItemId) {
   this.redoTransaction = this.doTransaction;
   this._id = aItemId;
   this._itemType = PlacesUtils.bookmarks.getItemType(this._id);
   if (this._itemType == Ci.nsINavBookmarksService.TYPE_FOLDER) {
@@ -905,22 +914,23 @@ function placesTagURITransaction(aURI, a
   this._unfiledItemId = -1;
   this.redoTransaction = this.doTransaction;
 }
 
 placesTagURITransaction.prototype = {
   __proto__: placesBaseTransaction.prototype,
 
   doTransaction: function PTU_doTransaction() {
-    if (PlacesUtils.getBookmarksForURI(this._uri).length == 0) {
+    if (PlacesUtils.getMostRecentBookmarkForURI(this._uri) == -1) {
       // Force an unfiled bookmark first
       this._unfiledItemId =
         PlacesUtils.bookmarks
                    .insertBookmark(PlacesUtils.unfiledBookmarksFolderId,
-                                   this._uri, -1,
+                                   this._uri,
+                                   PlacesUtils.bookmarks.DEFAULT_INDEX,
                                    PlacesUtils.history.getPageTitle(this._uri));
     }
     PlacesUtils.tagging.tagURI(this._uri, this._tags);
   },
 
   undoTransaction: function PTU_undoTransaction() {
     if (this._unfiledItemId != -1) {
       PlacesUtils.bookmarks.removeItem(this._unfiledItemId);
--- a/browser/components/places/tests/unit/test_384370.js
+++ b/browser/components/places/tests/unit/test_384370.js
@@ -34,17 +34,16 @@
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the MPL, the GPL or the LGPL.
  *
  * ***** END LICENSE BLOCK ***** */
 
 const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 const POST_DATA_ANNO = "bookmarkProperties/POSTData";
-const LAST_CHARSET_ANNO = "URIProperties/characterSet";
 
 Components.utils.import("resource://gre/modules/utils.js");
 do_check_eq(typeof PlacesUtils, "object");
 
 // main
 function run_test() {
   /*
     HTML+FEATURES SUMMARY:
@@ -58,17 +57,17 @@ function run_test() {
     - export as json, import, test
   */
 
   // get places import/export service
   var importer = Cc["@mozilla.org/browser/places/import-export-service;1"].getService(Ci.nsIPlacesImportExportService);
 
   // avoid creating the places smart folder during tests
   Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).
-  setBoolPref("browser.places.createdSmartBookmarks", true);
+  setIntPref("browser.places.smartBookmarksVersion", -1);
 
   // file pointer to legacy bookmarks file
   //var bookmarksFileOld = do_get_file("browser/components/places/tests/unit/bookmarks.large.html");
   var bookmarksFileOld = do_get_file("browser/components/places/tests/unit/bookmarks.preplaces.html");
   // file pointer to a new places-exported json file
   var jsonFile = dirSvc.get("ProfD", Ci.nsILocalFile);
   jsonFile.append("bookmarks.exported.json");
 
@@ -204,20 +203,20 @@ function testCanonicalBookmarks() {
   do_check_eq(testBookmark1.lastModified/1000000, 1177375423);
   */
 
   // post data
   do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId, POST_DATA_ANNO));
   do_check_eq("hidden1%3Dbar&text1%3D%25s",
               PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId, POST_DATA_ANNO));
 
-  // last charset 
-  do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId, LAST_CHARSET_ANNO));
-  do_check_eq("ISO-8859-1", PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId,
-                                                                      LAST_CHARSET_ANNO));
+  // last charset
+  var testURI = PlacesUtils._uri(testBookmark1.uri);
+  do_check_eq("ISO-8859-1", PlacesUtils.history.getCharsetForURI(testURI));
+
   // description 
   do_check_true(PlacesUtils.annotations.itemHasAnnotation(testBookmark1.itemId,
                                                           DESCRIPTION_ANNO));
   do_check_eq("item description",
               PlacesUtils.annotations.getItemAnnotation(testBookmark1.itemId,
                                                         DESCRIPTION_ANNO));
 
   /*
new file mode 100644
--- /dev/null
+++ b/browser/components/places/tests/unit/test_421483.js
@@ -0,0 +1,122 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim:set ts=2 sw=2 sts=2 et: */
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is Places Unit Test code.
+ *
+ * The Initial Developer of the Original Code is Mozilla Corp.
+ * Portions created by the Initial Developer are Copyright (C) 2008
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *  Marco Bonardo <mak77@supereva.it>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+// Get bookmarks service
+try {
+  var bmsvc = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
+              getService(Ci.nsINavBookmarksService);
+} catch(ex) {
+  do_throw("Could not get Bookmarks service\n");
+}
+
+// Get annotation service
+try {
+  var annosvc = Cc["@mozilla.org/browser/annotation-service;1"].
+                getService(Ci.nsIAnnotationService);
+} catch(ex) {
+  do_throw("Could not get Annotation service\n");
+}
+
+// Get browser glue
+try {
+  var gluesvc = Cc["@mozilla.org/browser/browserglue;1"].
+                getService(Ci.nsIBrowserGlue);
+} catch(ex) {
+  do_throw("Could not get BrowserGlue service\n");
+}
+
+// Get pref service
+try {
+  var pref =  Cc["@mozilla.org/preferences-service;1"].
+              getService(Ci.nsIPrefBranch);
+} catch(ex) {
+  do_throw("Could not get Preferences service\n");
+}
+
+const SMART_BOOKMARKS_ANNO = "Places/SmartBookmark";
+const SMART_BOOKMARKS_PREF = "browser.places.smartBookmarksVersion";
+
+// main
+function run_test() {
+  // TEST 1: smart bookmarks disabled
+  pref.setIntPref("browser.places.smartBookmarksVersion", -1);
+  gluesvc.ensurePlacesDefaultQueriesInitialized();
+  var smartBookmarkItemIds = annosvc.getItemsWithAnnotation(SMART_BOOKMARKS_ANNO, {});
+  do_check_eq(smartBookmarkItemIds.length, 0);
+  // check that pref has not been bumped up
+  do_check_eq(pref.getIntPref("browser.places.smartBookmarksVersion"), -1);
+
+  // TEST 2: create smart bookmarks
+  pref.setIntPref("browser.places.smartBookmarksVersion", 0);
+  gluesvc.ensurePlacesDefaultQueriesInitialized();
+  smartBookmarkItemIds = annosvc.getItemsWithAnnotation(SMART_BOOKMARKS_ANNO, {});
+  do_check_neq(smartBookmarkItemIds.length, 0);
+  // check that pref has been bumped up
+  do_check_true(pref.getIntPref("browser.places.smartBookmarksVersion") > 0);
+
+  var smartBookmarksCount = smartBookmarkItemIds.length;
+
+  // TEST 3: smart bookmarks restore
+  // remove one smart bookmark and restore
+  bmsvc.removeItem(smartBookmarkItemIds[0]);
+  pref.setIntPref("browser.places.smartBookmarksVersion", 0);
+  gluesvc.ensurePlacesDefaultQueriesInitialized();
+  smartBookmarkItemIds = annosvc.getItemsWithAnnotation(SMART_BOOKMARKS_ANNO, {});
+  do_check_eq(smartBookmarkItemIds.length, smartBookmarksCount);
+  // check that pref has been bumped up
+  do_check_true(pref.getIntPref("browser.places.smartBookmarksVersion") > 0);
+
+  // TEST 4: move a smart bookmark, change its title, then restore
+  // smart bookmark should be restored in place
+  var parent = bmsvc.getFolderIdForItem(smartBookmarkItemIds[0]);
+  var oldTitle = bmsvc.getItemTitle(smartBookmarkItemIds[0]);
+  // create a subfolder and move inside it
+  var newParent = bmsvc.createFolder(parent, "test", bmsvc.DEFAULT_INDEX);
+  bmsvc.moveItem(smartBookmarkItemIds[0], newParent, bmsvc.DEFAULT_INDEX);
+  // change title
+  bmsvc.setItemTitle(smartBookmarkItemIds[0], "new title");
+  // restore
+  pref.setIntPref("browser.places.smartBookmarksVersion", 0);
+  gluesvc.ensurePlacesDefaultQueriesInitialized();
+  smartBookmarkItemIds = annosvc.getItemsWithAnnotation(SMART_BOOKMARKS_ANNO, {});
+  do_check_eq(smartBookmarkItemIds.length, smartBookmarksCount);
+  do_check_eq(bmsvc.getFolderIdForItem(smartBookmarkItemIds[0]), newParent);
+  do_check_eq(bmsvc.getItemTitle(smartBookmarkItemIds[0]), oldTitle);
+  // check that pref has been bumped up
+  do_check_true(pref.getIntPref("browser.places.smartBookmarksVersion") > 0);
+}
--- a/browser/components/places/tests/unit/test_bookmarks_html.js
+++ b/browser/components/places/tests/unit/test_bookmarks_html.js
@@ -76,26 +76,25 @@ try {
   var iosvc = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
 } catch (ex) {
   do_throw("Could not get io service\n");
 }
 
 const DESCRIPTION_ANNO = "bookmarkProperties/description";
 const LOAD_IN_SIDEBAR_ANNO = "bookmarkProperties/loadInSidebar";
 const POST_DATA_ANNO = "bookmarkProperties/POSTData";
-const LAST_CHARSET_ANNO = "URIProperties/characterSet";
 
 // main
 function run_test() {
   // get places import/export service
   var importer = Cc["@mozilla.org/browser/places/import-export-service;1"].getService(Ci.nsIPlacesImportExportService);
 
   // avoid creating the places smart folder during tests
   Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch).
-  setBoolPref("browser.places.createdSmartBookmarks", true);
+  setIntPref("browser.places.smartBookmarksVersion", -1);
 
   // file pointer to legacy bookmarks file
   var bookmarksFileOld = do_get_file("browser/components/places/tests/unit/bookmarks.preplaces.html");
   // file pointer to a new places-exported bookmarks file
   var bookmarksFileNew = dirSvc.get("ProfD", Ci.nsILocalFile);
   bookmarksFileNew.append("bookmarks.exported.html");
 
   // create bookmarks.exported.html
@@ -242,20 +241,19 @@ function testCanonicalBookmarks(aFolder)
 
   // post data
   do_check_true(annosvc.itemHasAnnotation(testBookmark1.itemId,
                                           POST_DATA_ANNO));
   do_check_eq("hidden1%3Dbar&text1%3D%25s",
               annosvc.getItemAnnotation(testBookmark1.itemId, POST_DATA_ANNO));
 
   // last charset
-  do_check_true(annosvc.itemHasAnnotation(testBookmark1.itemId,
-                                          LAST_CHARSET_ANNO));
-  do_check_eq("ISO-8859-1", annosvc.getItemAnnotation(testBookmark1.itemId,
-                                                      LAST_CHARSET_ANNO));
+  var testURI = uri(testBookmark1.uri);
+  do_check_eq("ISO-8859-1", histsvc.getCharsetForURI(testURI));
+
   // description
   do_check_true(annosvc.itemHasAnnotation(testBookmark1.itemId,
                                           DESCRIPTION_ANNO));
   do_check_eq("item description",
               annosvc.getItemAnnotation(testBookmark1.itemId,
                                         DESCRIPTION_ANNO));
 
   /*
--- a/browser/components/places/tests/unit/test_placesTxn.js
+++ b/browser/components/places/tests/unit/test_placesTxn.js
@@ -182,20 +182,20 @@ function run_test() {
   ptSvc.doTransaction(ptSvc.createItem(uri("http://www.example3.com"), root, -1, "Testing2"));
   ptSvc.doTransaction(ptSvc.createItem(uri("http://www.example3.com"), root, -1, "Testing3"));   
   ptSvc.doTransaction(ptSvc.createItem(uri("http://www.example3.com"), fldrId, -1, "Testing4"));
   var bkmkIds = bmsvc.getBookmarkIdsForURI(uri("http://www.example3.com"), {});
   bkmkIds.sort();
   var bkmk1Id = bkmkIds[0];
   var bkmk2Id = bkmkIds[1];
   var bkmk3Id = bkmkIds[2];
+
+  // Moving items between the same folder
   var txn3 = ptSvc.moveItem(bkmk1Id, root, -1);
   txn3.doTransaction();
-
-  // Moving items between the same folder
   do_check_eq(observer._itemMovedId, bkmk1Id);
   do_check_eq(observer._itemMovedOldParent, root);
   do_check_eq(observer._itemMovedOldIndex, 1);
   do_check_eq(observer._itemMovedNewParent, root);
   do_check_eq(observer._itemMovedNewIndex, 2);
   txn3.undoTransaction();
   do_check_eq(observer._itemMovedId, bkmk1Id);
   do_check_eq(observer._itemMovedOldParent, root);
@@ -231,21 +231,20 @@ function run_test() {
   do_check_eq(observer._itemAddedParent, root);
   do_check_eq(observer._itemAddedIndex, 3);
 
   // Test removing an item
   var txn5 = ptSvc.removeItem(bkmk2Id);
   txn5.doTransaction();
   do_check_eq(observer._itemRemovedId, bkmk2Id);
   do_check_eq(observer._itemRemovedFolder, root);
-  do_check_eq(observer._itemRemovedIndex, 1);
+  do_check_eq(observer._itemRemovedIndex, 2);
   txn5.undoTransaction();
-
   do_check_eq(observer._itemAddedParent, root);
-  do_check_eq(observer._itemAddedIndex, 1);
+  do_check_eq(observer._itemAddedIndex, 2);
 
   // Test creating a separator
   var txn6 = ptSvc.createSeparator(root, 1);
   txn6.doTransaction();
   var sepId = observer._itemAddedId;
   do_check_eq(observer._itemAddedIndex, 1);
   do_check_eq(observer._itemAddedParent, root);
   txn6.undoTransaction();
--- a/browser/components/safebrowsing/content/blockedSite.xhtml
+++ b/browser/components/safebrowsing/content/blockedSite.xhtml
@@ -142,20 +142,16 @@
         el.parentNode.removeChild(el);
 
         el = document.getElementById("errorShortDescText_malware");
         el.parentNode.removeChild(el);
 
         el = document.getElementById("errorLongDescText_malware");
         el.parentNode.removeChild(el);
 
-        // Unhide clickthrough button
-        el = document.getElementById("ignoreWarningButton");
-        el.style.display = "-moz-box";
-        
         // Set sitename
         document.getElementById("phishing_sitename").textContent = getHostString();
         document.title = document.getElementById("errorTitleText_phishing")
                                  .innerHTML;
       }
     ]]></script>
     <style type="text/css">
       /* Style warning button to look like a small text link in the
@@ -169,17 +165,16 @@
         color: white;  /* Hard coded because netError.css forces this page's background to dark red */
         text-decoration: underline;
         margin: 0;
         padding: 0;
         position: relative;
         top: 23px;
         left: 20px;
         font-size: smaller;
-        display: none; /* Hide the button by default */
       }
       
       #ignoreWarning {
         text-align: right;
       }
     </style>
   </head>
 
--- a/browser/components/safebrowsing/content/malware-warden.js
+++ b/browser/components/safebrowsing/content/malware-warden.js
@@ -78,17 +78,17 @@ function PROT_MalwareWarden() {
     {
       if (iid.equals(Ci.nsISupports) ||
           iid.equals(Ci.nsIUrlClassifierUpdateObserver))
         return this;
       throw Cr.NS_ERROR_NO_INTERFACE;
     },
 
     updateUrlRequested: function(url) { },
-    streamCompleted: function() { },
+    streamFinished: function(status) { },
     updateError: function(errorCode) { },
     updateSuccess: function(requestedTimeout) { }
   };
 
   try {
     dbService_.beginUpdate(listener, "");
     dbService_.beginStream("", "");
     dbService_.updateStream(testUpdate);
--- a/browser/components/safebrowsing/content/test/browser_bug400731.js
+++ b/browser/components/safebrowsing/content/test/browser_bug400731.js
@@ -10,22 +10,22 @@ function test() {
   
   // Navigate to malware site.  Can't use an onload listener here since
   // error pages don't fire onload
   newBrowser.contentWindow.location = 'http://www.mozilla.com/firefox/its-an-attack.html';
   window.setTimeout(testMalware, 2000);
 }
 
 function testMalware() {
-  // Confirm that "Ignore this warning" is hidden
+  // Confirm that "Ignore this warning" is visible - bug 422410
   var el = newBrowser.contentDocument.getElementById("ignoreWarningButton");
-  ok(el, "Ignore warning button should be present (but hidden) for malware");
+  ok(el, "Ignore warning button should be present for malware");
   
   var style = newBrowser.contentWindow.getComputedStyle(el, null);
-  is(style.display, "none", "Ignore Warning button should be display:none for malware");
+  is(style.display, "-moz-box", "Ignore Warning button should be display:-moz-box for malware");
   
   // Now launch the phishing test
   newBrowser.contentWindow.location = 'http://www.mozilla.com/firefox/its-a-trap.html';
   window.setTimeout(testPhishing, 2000);
 }
 
 function testPhishing() {
   var el = newBrowser.contentDocument.getElementById("ignoreWarningButton");
deleted file mode 100644
--- a/browser/installer/unix/Makefile.in
+++ /dev/null
@@ -1,88 +0,0 @@
-# ***** BEGIN LICENSE BLOCK *****
-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
-#
-# The contents of this file are subject to the Mozilla Public License Version
-# 1.1 (the "License"); you may not use this file except in compliance with
-# the License. You may obtain a copy of the License at
-# http://www.mozilla.org/MPL/
-#
-# Software distributed under the License is distributed on an "AS IS" basis,
-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
-# for the specific language governing rights and limitations under the
-# License.
-#
-# The Original Code is the Mozilla Browser code.
-#
-# The Initial Developer of the Original Code is
-# IBM Corporation.
-# Portions created by the Initial Developer are Copyright (C) 2004
-# the Initial Developer. All Rights Reserved.
-#
-# Contributor(s):
-#  Brian Ryner <bryner@brianryner.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
-# the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
-# in which case the provisions of the GPL or the LGPL are applicable instead
-# of those above. If you wish to allow use of your version of this file only
-# under the terms of either the GPL or the LGPL, and not to allow others to
-# use your version of this file under the terms of the MPL, indicate your
-# decision by deleting the provisions above and replace them with the notice
-# and other provisions required by the GPL or the LGPL. If you do not delete
-# the provisions above, a recipient may use your version of this file under
-# the terms of any one of the MPL, the GPL or the LGPL.
-#
-# ***** END LICENSE BLOCK *****
-
-DEPTH		= ../../..
-topsrcdir	= @top_srcdir@
-srcdir		= @srcdir@
-VPATH		= @srcdir@
-
-include $(DEPTH)/config/autoconf.mk
-
-include $(topsrcdir)/toolkit/mozapps/installer/package-name.mk
-
-CONFIG_DIR = $(shell pwd)/instgen
-ABS_topsrcdir = $(shell cd $(topsrcdir) && pwd)
-ABS_depth = $(shell cd $(DEPTH) && pwd)
-
-LOCALIZED_FILES = \
-	install.it \
-	$(NULL)
-
-PP_LOCALIZED_FILES = \
-	packages-static \
-	installer.cfg \
-	config.it \
-	$(NULL)
-
-INSTALLER_FILES = \
-	abe.jst \
-	adt.jst \
-	browser.jst \
-	talkback.jst \
-	xpcom.jst \
-	$(NULL)
-
-AB_CD = $(MOZ_UI_LOCALE)
-
-DEFINES += -DAB_CD=$(AB_CD) -DPKG_BASENAME=$(PKG_BASENAME) -DMOZ_APP_VERSION=$(MOZ_APP_VERSION) -DMOZ_APP_NAME=$(MOZ_APP_NAME)
-
-installer:
-	$(NSINSTALL) -D instgen
-	$(INSTALL) $(addprefix $(topsrcdir)/toolkit/locales/$(AB_CD)/installer/unix/,$(LOCALIZED_FILES)) $(addprefix $(srcdir)/,$(INSTALLER_FILES)) instgen
-	$(EXIT_ON_ERROR) \
-	for i in $(PP_LOCALIZED_FILES); do \
-	  $(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) -I$(topsrcdir)/browser/locales/$(AB_CD)/installer/installer.inc $(srcdir)/$$i > instgen/$$i; \
-	done
-	$(PERL) $(topsrcdir)/config/preprocessor.pl $(DEFINES) $(ACDEFINES) -I$(topsrcdir)/browser/locales/$(AB_CD)/defines.inc $(srcdir)/ab-CD.jst > instgen/$(AB_CD).jst
-ifndef MOZ_BRANDING_DIRECTORY
-	$(NSINSTALL) -D $(DIST)/install
-	cp $(srcdir)/header.png $(DIST)/install/header.png
-	cp $(srcdir)/watermark.png $(DIST)/install/watermark.png
-endif
-	$(PERL) $(topsrcdir)/toolkit/mozapps/installer/build_static.pl -config $(CONFIG_DIR) -objdir $(ABS_depth) -srcdir $(ABS_topsrcdir)
-
-include $(topsrcdir)/config/rules.mk
deleted file mode 100644
--- a/browser/installer/unix/ab-CD.jst
+++ /dev/null
@@ -1,72 +0,0 @@
-#filter substitution
-
-var srDest = $SpaceRequired$;
-var err;
-var fProgram;
-var platformNode;
-var searchPlugins = "searchplugins";
-
-platformNode = getPlatform();
-if (platformNode == 'mac') {
-  searchPlugins = "Search Plugins";
-}
-logComment("initInstall: platformNode=" + platformNode);
-// end
-// end - OS type detection
-
-var prettyName = "@AB_CD@ Language Pack";
-var chromeNode = "@AB_CD@";
-
-var regName    = "locales/mozilla/" + chromeNode;
-var chromeName = chromeNode + ".jar";
-var localeName = "locale/" + chromeNode + "/";
-
-err = initInstall(prettyName, regName, "$Version$"); 
-logComment("initInstall: " + err);
-
-fProgram = getFolder("Program");
-logComment("fProgram: " + fProgram);
-
-if (verifyDiskSpace(fProgram, srDest))
-{
-    var chromeType = LOCALE;
-    var fTarget;
-
-    err = addDirectory("",
-                       "bin",
-                       fProgram,
-                       "");
-    logComment("addDirectory() returned: " + err);
-
-    setPackageFolder(fProgram);
- 
-    // check return value
-    if (err == SUCCESS)
-    {
-        fTarget = getFolder("Program", "defaults");
-        logComment("fTarget: " + fTarget);
-        err = addDirectory("",
-                           "bin/defaults", // dir name in JAR to extract
-                           fTarget,        // Where to put this file
-                           "");            // subdir name relative to fProgram
-        logComment("addDirectory() returned: " + err);
-
-        fTarget = getFolder("Program", searchPlugins);
-        logComment("fTarget: " + fTarget);
-        err = addDirectory("",
-                           "bin/searchplugins",
-                           fTarget,
-                           "");
-        logComment("addDirectory() returned: " + err);
-
-        err = performInstall(); 
-        logComment("performInstall() returned: " + err);
-    }
-    else
-    {
-        cancelInstall(err);
-        logComment("cancelInstall due to error: " + err);
-    }
-}
-else
-    cancelInstall(INSUFFICIENT_DISK_SPACE);
deleted file mode 100644
deleted file mode 100644
--- a/browser/installer/unix/adt.jst
+++ /dev/null
@@ -1,14 +0,0 @@
-var err = initInstall("Developer Tools", "Developer Tools", "$Version$"); 
-logComment("initInstall: " + err);
-
-// DOM Inspector
-var fProgram = getFolder("Program");
-logComment("fProgram: " + fProgram);
-
-err = addDirectory("", "$Version$", "bin", fProgram, "", true);
-logComment("addDirectory: " + err);
-
-if (err==SUCCESS)
-    performInstall(); 
-else
-    cancelInstall(err);
deleted file mode 100644
--- a/browser/installer/unix/browser.jst
+++ /dev/null
@@ -1,118 +0,0 @@
-function upgradeCleanup()
-{
-  // Get rid of Chrome directory cruft.
-  deleteThisFolder("Chrome",      "classic");
-  deleteThisFolder("Chrome",      "comm");
-  deleteThisFolder("Chrome",      "en-mac");
-  deleteThisFile("Chrome",        "en-mac.jar");
-  deleteThisFolder("Chrome",      "en-unix");
-  deleteThisFile("Chrome",        "en-unix.jar");
-  deleteThisFolder("Chrome",      "en-US");
-  deleteThisFolder("Chrome",      "en-win");
-  deleteThisFile("Chrome",        "en-win.jar");
-  deleteThisFolder("Chrome",      "US");
-  deleteThisFile("Chrome",        "help.jar");
-
-  deleteThisFile("Chrome",        "chrome.rdf");
-  deleteThisFile("Chrome",        "installed-chrome.txt");
-  deleteThisFile("Chrome",        "app-chrome.manifest");
-  deleteThisFolder("Chrome",      "overlayinfo");
-
-  // Remove defunct components and type libraries
-  deleteThisFile("Components",    "typeaheadfind.xpt");
-  deleteThisFile("Components",    "chrome.xpt");
-  deleteThisFile("Components",    "ipcd.xpt");
-  deleteThisFile("Components",    "nsUpdateNotifier.js");
-  deleteThisFile("Components",    "nsBackgroundUpdateService.js");
-  deleteThisFile("Components",    "p3p.xpt");
-  deleteThisFile("Components",    "prefmigr.xpt");
-  deleteThisFile("Components",    "profilesharingsetup.xpt");
-  deleteThisFile("Components",    "related.xpt");
-  deleteThisFile("Components",    "ucnative.xpt");
-  deleteThisFile("Components",    "util.xpt");
-  deleteThisFile("Components",    "compreg.dat");
-  deleteThisFile("Components",    "xpti.dat");
-
-  // Remove non-linked xpt files for rev'd interfaces; this prevents a
-  // conflict if you had previously installed a zip build in the app directory.
-  deleteThisFile("Components",    "autocomplete.xpt");
-  
-  // Remove defunct defaults files. 
-  deleteThisFile("Program",	      "defaults/pref/all.js");
-  deleteThisFile("Program",	      "defaults/pref/editor.js");
-  deleteThisFile("Program",	      "defaults/pref/mailnews.js");
-  deleteThisFile("Program",	      "defaults/pref/non-shared.txt");
-  deleteThisFile("Program",	      "defaults/pref/security-prefs.js");
-  deleteThisFile("Program",	      "defaults/pref/unix.js");
-  deleteThisFile("Program",	      "defaults/pref/xpinstall.js");
-  deleteThisFile("Program",	      "defaults/pref/bug307259.js");
-  deleteThisFile("Program",	      "defaults/profile/panels.rdf");
-  deleteThisFolder("Program",	    "defaults/profile/US");
-  
-  // Delete dictionary.com search plugin  
-  deleteThisFile("Program",     "searchplugins/dictionary.src");
-  deleteThisFile("Program",     "searchplugins/dictionary.png");
-
-  // These files are related to app patches and will interfere with the 
-  // UA/app version strings if we do not remove them. 
-  deleteThisFile("Program",	    "defaults/pref/bug259708.js");
-  
-  // Remove defunct miscellany
-  deleteThisFolder("Program",     "ipc");
-  deleteThisFile("Program",       "mangle");
-  deleteThisFile("Program",       "mozipcd");
-  deleteThisFile("Program",       "regchrome");
-  deleteThisFile("Program",       "regxpcom");
-  deleteThisFile("Program",       "shlibsign");
-}
-
-var srDest = $SpaceRequired$;
-
-var err = initInstall("$ProductName$", "Browser", "$Version$"); 
-logComment("initInstall: " + err);
-
-var communicatorFolder = getFolder("Program");
-logComment("communicatorFolder: " + communicatorFolder);
-
-if (verifyDiskSpace(communicatorFolder, srDest))
-{
-    // Call upgradeCleanup() before addDirectory() in case we accidentaly
-    // delete files that we happen to be also installing.  This way, if we do,
-    // it will just get reinstalled.  This is for safety measure.
-    upgradeCleanup();
-    err = addDirectory("Program",
-                       "$Version$",
-                       "bin",              // jar source folder
-                       communicatorFolder, // target folder
-                       "",                 // target subdir 
-                       true );             // force flag 
-
-    logComment("addDirectory() returned: " + err);
-
-    // create the plugins folder next to mozilla 
-    var pluginsFolder = getFolder("Plugins");
-    var ignoreErr = dirCreate(pluginsFolder);
-    logComment("dirCreate() returned: " + ignoreErr);
-
-    if (err==SUCCESS)
-    {
-	    err = performInstall(); 
-	    logComment("performInstall() returned: " + err);
-        if (! ('buildID' in Install))
-        {
-          logComment("Running Pre-Mozilla 0.9.1");
-          initInstall("Post-install Cleanup Utility", "Browser/xpicleanup", "$Version$");
-          cleanupUtility = getFolder(communicatorFolder, "xpicleanup");
-          err = File.execute(cleanupUtility);
-          logComment("execute() returned: " + err);
-          err = performInstall();
-        }
-    }
-    else
-    {
-	    cancelInstall(err);
-	    logComment("cancelInstall() due to error: " + err);
-    }
-}
-else
-    cancelInstall(INSUFFICIENT_DISK_SPACE);
deleted file mode 100644
--- a/browser/installer/unix/config.it
+++ /dev/null
@@ -1,1174 +0,0 @@
-#filter substitution
-
-[General]
-; Run Mode values:
-;   Normal - Shows all dialogs.  Requires user input.
-;   Auto   - Shows some dialogs, but none requiring user input.  It will
-;            automatically install the product using default values.
-;   Silent - Show no dialogs at all.  It will install product using default
-;            values.
-Run Mode=Normal
-
-Company Name=$CompanyName$
-Product Name=$ProductName$
-Product NameInternal=$ProductName$
-User Agent=$UserAgent$
-
-; Destination Path values:
-;   PROGRAMFILESDIR
-;   WINDISK
-;   WINDIR
-;   WINSYSDIR
-Path=[PROGRAMFILESDIR]\$ProductName$
-Default Location=/usr/local/$MainExeFile$
-
-; Sub Path, when set will indicate to Setup to create a subfolder from
-; what is offered to the user to change.  It will not be shown to the user
-; but simply created:
-;
-; ie: shown to user   : [Path]
-;     actually created: [Path]\[Sub Path]
-;     (where [Path] is the Path= key above)
-Sub Path=
-
-; Controls the Browse button that allows the user to 
-; change the destination path of the product.
-; Default value is FALSE;
-Lock Path=FALSE
-
-Program Name=$MainExeFile$
-
-; Program Folder Path values:
-;   COMMON_STARTUP
-;   COMMON_PROGRAMS
-;   COMMON_STARTMENU
-;   COMMON_DESKTOP
-;
-;   PERSONAL_STARTUP
-;   PERSONAL_PROGRAMS
-;   PERSONAL_STARTMENU
-;   PERSONAL_DESKTOP
-;
-;   PERSONAL_APPDATA
-;   PERSONAL_CACHE
-;   PERSONAL_COOKIES
-;   PERSONAL_FAVORITES
-;   PERSONAL_FONTS
-;   PERSONAL_HISTORY
-;   PERSONAL_NETHOOD
-;   PERSONAL_PERSONAL
-;   PERSONAL_PRINTHOOD (supported only under Windows NT)
-;   PERSONAL_RECENT
-;   PERSONAL_SENDTO
-;   PERSONAL_TEMPLATES
-;
-;   PROGRAMS (Default value is the same as COMMON_PROGRAMS, but if the user
-;             has restricted access to the system, then it's the same as
-;             PERSONAL_PROGRAMS)
-;
-;   PROGRAMFILESDIR
-;   COMMONFILESDIR
-;   MEDIAPATH
-;   CONFIGPATH (supported only under Windows95 and Windows98)
-;   DEVICEPATH
-Program Folder Name=$ProductName$
-Program Folder Path=[PROGRAMS]
-
-Uninstall Filename=$UninstallFile$
-
-; This key is used as a fail over key.  This url will be used when the
-; url in the Site Selector fails.
-url=$ArchiveUrl$
-
-; Default Setup Type values:
-;   Setup Type 0 - first radio button (easy install)
-;   Setup Type 1 - second radio button (custom)
-Default Setup Type=Setup Type 0
-
-; Forces the icons on the system to be refreshed.
-; Default value is FALSE.
-; Possible values:
-;   FALSE
-;   TRUE
-Refresh Icons=FALSE
-
-; Setting to control whether or not GRE should be installed to app's dir
-; to be used as a private/local GRE.
-;
-; Possible values (default is 'Shared'):
-;   Local
-;   Shared
-;
-; If this key is set to 'Local', make
-; sure to provide a GRE Private Key= below!
-GRE Type=Shared
-GRE ID=$GreUniqueID$
-
-; Private key that overrides the default shared key
-; (HKEY_LOCAL_MACHINE\Software\mozilla.org\GRE) set by GRE's installer.
-; This key will be created under HKEY_LOCAL_MACHINE and should be 
-; declared in the following format:
-;
-;   Software\[company name]\[product name]
-;   (ie: Software\mozilla.org\GRE_1.4a_0000000000_PRIVATE)
-;
-; If it is not in the above format, the GRE installer/uninstaller can
-; fail to work properly.
-; The value to Prodduct Name Internal= (at the beginning of this
-; config.ini file) will be appended as follows:
-;
-;   Software\mozilla.org\GRE_1.4a_0000000000_PRIVATE_[Product Name Internal]
-GRE Private Key=Software\mozilla.org\GRE_$GreUniqueID$_PRIVATE_$ProductNameInternal$
-
-; Controls the display of the banner image in the download and install progress dialogs.
-; Default value is TRUE.
-Show Banner Image=TRUE
-Header Image=header.png
-
-; Controls the check to see if user is installing on top of a previous
-; installation of the product. If so, then prompt the user that cleanup
-; of destination folder is highly recommended, or instability of product
-; can occurr.
-[Cleanup On Upgrade]
-Cleanup=TRUE
-ObjectToIgnore0=plugins
-ObjectToIgnore1=uninstall
-ObjectToIgnore2=install_status.log
-
-; List of files/dirs that is used to determine if a directory is a profile
-; or not.  This is so the directory is not deleted as part of the Cleanup
-; On Upgrade.
-; All of the object files must be found in order for a dir to be assumed
-; to be a Profile dir.
-[Profile Dir Object List]
-Object0=chrome
-Object1=bookmarks.html
-Object2=localstore.rdf
-
-; This section contains info on how to send error information in case of
-; either a download or xpinstall error.
-; By default, this feature is enabled, unless disabled.
-[Message Stream]
-; Values:
-;   Enabled
-;   Disabled
-;   default is Enabled.
-Status=Disabled
-
-; URL to cgi script to send error information to.  The information will
-; be appended to the url in the form of parameters to the cgi script.
-url=http://orb.mcom.com/install/error.cgi
-
-; Indicates whether to show a confirmation dialog or not.  If this
-; dialog is not shown, the error information will be *automatically*
-; sent without any indication to the user unless the Status= is set
-; to Disabled.
-;
-; Default value is TRUE if nothing is set.
-Show Confirmation=TRUE
-Confirmation Message=There was an error encountered during installation of $ProductName$.  The following information will be sent back to us to help us improve the product: %s
-
-
-
-; HKey:              valid decryptable setup key is [Product CurrentVersion] or [Product PreviousVersion]
-; Decrypt HKey:      there are times when '[' and ']' are valid part of windows registry key names.
-; Contains Filename: tells setup that the path contains filename needed to be removed before
-;                    using it as a path.
-; Verify Existence:  FILE or PATH
-;
-[Locate Previous Product Path0]
-HRoot=HKEY_LOCAL_MACHINE
-HKey=[Product CurrentVersion]\Main
-Name=Install Directory
-Decrypt HKey=TRUE
-Contains Filename=FALSE
-Verify Existence=
-
-[Dialog Welcome]
-Show Dialog=TRUE
-Title=@SETUP_TITLE@
-MessageWelcome=@SETUP_WELCOME@
-Message0=@SETUP_MESSAGE0@
-Message1=@SETUP_MESSAGE1_UNIX@
-Message2=@SETUP_MESSAGE2@
-Message3=@SETUP_MESSAGE3@
-Watermark=watermark.png
-
-[Dialog License]
-Show Dialog=TRUE
-Title=@LICENSE_TITLE@
-Sub Title=@LICENSE_SUBTITLE@
-License File=license.txt
-Message0=@LICENSE_MESSAGE0@
-RadioAccept=@LICENSE_ACCEPT@
-RadioDecline=@LICENSE_DECLINE@
-
-[Dialog Setup Type]
-Show Dialog=TRUE
-Title=@SETUP_TYPE_TITLE@
-Sub Title=@SETUP_TYPE_SUBTITLE@
-Message0=@SETUP_TYPE_MESSAGE0@
-MessageExistingInstall=@SETUP_TYPE_EXISTING@
-
-; at least one Setup Type needs to be set, and up to 4 can be
-; set (Setup Type0, Setup Type1, Setup Type2, Setup Type3).
-[Setup Type0]
-Description Short=@TYPE_STANDARD@
-Description Long=@TYPE_STANDARD_DESC@
-
-; List of components to install/enable for this Setup Type.
-; All other components not listed here will be disabled if
-; this Setup Type is selected.
-C0=Component XPCOM
-C1=Component Browser
-;C2=Component Uninstaller
-C2=Component Langpack
-; Make sure Component QFA is LAST so 3rd party developers who might not want
-; this component can easily remove it.
-C3=Component QFA
-
-[Setup Type1]
-Description Short=@TYPE_CUSTOM@
-Description Long=@TYPE_CUSTOM_DESC@
-
-; List of components to install/enable for this Setup Type.
-; All other components not listed here will be disabled if
-; this Setup Type is selected.
-C0=Component XPCOM
-C1=Component Browser
-C2=Component ADT
-;C3=Component Uninstaller
-C3=Component Langpack
-; Make sure Component QFA is LAST so 3rd party developers who might not want
-; this component can easily remove it.
-C4=Component QFA
-
-[Dialog Select Components]
-Show Dialog=TRUE
-Title=@SELECT_TITLE@
-Sub Title=@SELECT_SUBTITLE@
-Message0=@SELECT_MESSAGE0@
-
-[Dialog Select Install Path]
-Show Dialog=TRUE
-Title=@LOCATION_TITLE@
-Sub Title=@LOCATION_SUBTITLE@
-Message0=@LOCATION_MESSAGE0@
-
-[Dialog Upgrade]
-Show Dialog=FALSE
-Show In Easy Install=FALSE
-Title=@UPGRADE_TITLE@
-Sub Title=@UPGRADE_SUBTITLE@
-Message Cleanup=@UPGRADE_CLEANUP@
-; XXXben - we need a strategy for uninstallation that obviates the need for "Safe Upgrade" which can doing nasty things if you have installed the app into a stupid location.
-
-Checkbox Clean Install=@UPGRADE_CLEAN@
-Message Clean Install=@UPGRADE_CLEAN_MSG@
-Message Install Over=@UPGRADE_OVER@
-Message Install Over Windir=@UPGRADE_OVER_WINDIR@
-; xxxbsmedberg this doesn't make sense in the unix installer
-
-[Dialog Select Additional Components]
-Show Dialog=FALSE
-Title=@ADD_TITLE@
-Message0=@ADD_MESSAGE0@
-
-[Dialog Windows Integration]
-; Note - this dialog isn't actually used yet!
-Show Dialog=TRUE
-Title=@WININT_TITLE@
-Sub Title=@WININT_SUBTITLE@
-Message0=@WININT_MESSAGE0@
-
-; Only a maximum of 4 "Windows Integration-Item"s are allowed.  Each Item
-; shows up as a checkbox in the Windows Integration dialog.
-[Windows Integration-Item0]
-CheckBoxState=TRUE
-Description=@WININT_DESKTOP@
-Archive=
-
-[Windows Integration-Item1]
-CheckBoxState=TRUE 
-;*** LOCALIZE ME BABY ***
-Description=@WININT_START@
-Archive=
-
-[Windows Integration-Item2]
-CheckBoxState=TRUE
-;*** LOCALIZE ME BABY ***
-Description=@WININT_QUICKL@
-Archive=
-
-[Windows Integration-Item3]
-CheckBoxState=TRUE
-Description=@USE_AS_DEFAULT@
-Archive=
-
-[Dialog Program Folder]
-Show Dialog=TRUE
-Title=@WININT_PFOLDER_TITLE@
-Message0=@WININT_PFOLDER_MESSAGE0@
-
-[Dialog Additional Options]
-Show Dialog=TRUE
-Title=@ADDL_OPTIONS_TITLE@
-Message1=@ADDL_OPTIONS_MSG1@
-Save Installer=
-; The following settings control whether the Recapture Homepage checkbox is displayed.
-;    For this option to work the file nsResetPref.js must be installed into the 
-;    components directory
-Message0=The following checkbox gives users the option of reverting to
-the default home page
-Show Homepage Option=FALSE
-Recapture Homepage=FALSE
-
-[Dialog Advanced Settings]
-Show Dialog=TRUE
-Title=@ADV_SETTINGS_TITLE@
-Message0=@ADV_SETTINGS_MSG@
-Proxy Server=
-Proxy Port=
-Proxy User=
-Proxy Password=
-; Use Protocol accepts only two options:
-;   FTP
-;   HTTP
-; Default is FTP if key is not set.
-Use Protocol=HTTP
-; Use Protocol Settings key shows or hides the
-; Use FTP/Use HTTP radio buttons in the Download Dialog.
-; Default value is ENABLED unless DISABLED is specified.
-Use Protocol Settings=ENABLED
-; Controls the radio buttons visibility
-; Default value is TRUE
-Show Protocols=TRUE
-
-[Dialog Quick Launch]
-Show Dialog=TRUE
-;*** LOCALIZE ME BABY ***
-Title=$ProductName$ Setup - Quick Launch
-;*** LOCALIZE ME BABY ***
-Message0=Quick Launch starts Mozilla faster by keeping portions of the program in computer memory.
-;*** LOCALIZE ME BABY ***
-Message1=You can access Quick Launch through the icon on the Windows taskbar tray.
-;*** LOCALIZE ME BABY ***
-Message2=Check the box below to activate Quick Launch when you restart your computer.
-; Turbo Mode (Quick Launch) values: TRUE, FALSE
-; Defaults to FALSE if not set
-Turbo Mode=FALSE
-; Turbo Mode Settings value: TRUE, FALSE
-; Defaults to FALSE if not set.
-; This will hide the turbo mode checkbox in the Start Install dialog
-; and ignore the Turbo Mode= key, thus disabling it.
-Turbo Mode Enabled=TRUE
-
-[Dialog Start Install]
-Show Dialog=TRUE
-Title=@START_TITLE@
-Sub Title=@START_SUBTITLE@
-Message Install=@START_INSTALL@
-Message Download=@START_DOWNLOAD@
-Message0=@START_MESSAGE0@
-XPInstall Engine=xpcom.xpi
-
-[Dialog Downloading]
-Show Dialog=TRUE
-Title=@DL_TITLE@
-Sub Title=@DL_SUBTITLE@
-Blurb=@DL_BLURB@
-File Name=@DL_FILENAME@
-Time Remaining=@DL_TIMELEFT@
-
-[Dialog Installing]
-Show Dialog=TRUE
-Title=@INSTALL_TITLE@
-Sub Title=@INSTALL_SUBTITLE@
-Blurb=@INSTALL_BLURB@
-Status File=@INSTALL_STATUSFILE@
-Status Component=@INSTALL_STATUSCOMP@
-
-[Dialog Install Successful]
-Show Dialog=TRUE
-Title=@COMPLETE_TITLE@
-MessageHeader=@COMPLETE_TITLE@
-Message0=@COMPLETE_MESSAGE0@
-Message1=@COMPLETE_MESSAGE1@
-Launch App=@COMPLETE_LAUNCH@
-Launch App Checked=TRUE
-
-[Dialog Download]
-Show Dialog=TRUE
-Title=@DL2_TITLE@
-Message Download0=@DL2_MESSAGE0@
-Message Retry0=@DL2_RETRY@
-
-[Dialog Reboot]
-; Show Dialog values are:
-;   TRUE  - Always show
-;   FALSE - Don't show unless at least one component has its reboot show value set
-;           to TRUE.  This will not show even if some files were in use and a reboot
-;           is necessary.
-;   AUTO  - Don't show unless a component has its reboot show value set to
-;           TRUE or there was at least one file in use and a reboot is
-;           is required for the file to be replaced correctly.
-Show Dialog=AUTO
-
-[Check Instance0]
-Class Name=MozillaMessageWindow
-Window Name=
-Process Name=$MainExeFile$
-Pretty Name=$ProductNameInternal$
-Message=@CLOSE_CHECK@
-Message Full Installer=@CLOSE_CHECK2@
-Message wait=@CLOSE_WAIT@
-
-; This key indicates whether or not to close all the windows associated with
-; the process id of this app instance window found.
-Close All Process Windows=TRUE
-
-; These keys are not normally necessary for checking instances.  They are
-; set here because Mozilla requires a way to shut down it's turbo mode.
-Extra Cmd0 Reg Key Root=HKEY_LOCAL_MACHINE
-Extra Cmd0 Reg Key=Software\Microsoft\Windows\CurrentVersion\App Paths\$MainExeFile$
-Extra Cmd0 Reg Name=
-Extra Cmd0 Parameter=-kill
-
-[Check Instance1]
-Class Name=Netscape6MessageWindow
-Window Name=
-Process Name=Netscp.exe
-Pretty Name=Netscape
-;*** LOCALIZE ME BABY ***
-Message=Download of $ProductName$ was successful. However, Netscape must be closed to proceed with this installation. Click OK to exit Netscape automatically and to begin installation.
-;*** LOCALIZE ME BABY ***
-Message Full Installer=Netscape must be closed to proceed with this installation. Click OK to exit Netscape automatically and to begin installation.
-;*** LOCALIZE ME BABY ***
-Message wait=Shutting down Netscape.  Please wait…
-
-; This key indicates whether or not to close all the windows associated with
-; the process id of this app instance window found.
-Close All Process Windows=TRUE
-
-; These keys are not normally necessary for checking instances.  They are
-; set here because Netscape 6 requires a way to shut down it's turbo mode.
-; This will stop at the first one that succeeds (key and file found).
-Extra Cmd0 Reg Key Root=HKEY_LOCAL_MACHINE
-Extra Cmd0 Reg Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Netscp6.exe
-Extra Cmd0 Reg Name=
-Extra Cmd0 Parameter=-kill
-
-Extra Cmd1 Reg Key Root=HKEY_LOCAL_MACHINE
-Extra Cmd1 Reg Key=Software\Microsoft\Windows\CurrentVersion\App Paths\Netscp.exe
-Extra Cmd1 Reg Name=
-Extra Cmd1 Parameter=-kill
-
-
-;DependeeX=Component A means
-;  - if Component A gets checked this component gets checked
-;  - if Component A gets unchecked this component gets unchecked
-;  - if this component is visible it can still be checked/unchecked
-;      independantly after Component A has changed its state.  I.e
-;      this components checkbox will not be disabled or hidden.
-;Dependee0=
-;
-;DependencyX= is not supported at this time. 
-;Dependency0=
-;
-; Attributes can be the following values:
-;
-;   The following Attributes can be overridden:
-;   ------------------------------------------
-;
-;   SELECTED      - Component is selected to be installed by default.
-;
-;   UNSELECTED    - Component is to be displayed unselected in the Options
-;                   dialog.  If the component is listed in the non-custom
-;                   Setup Type section, it will be assumed to be selected
-;                   by default.
-;
-;   ADDITIONAL    - Component is to be shown in the Additional Options
-;                   dialog (2nd Options dialog) instead of the 1st Options
-;                   dialog.
-;
-;   NOTADDITIONAL - Component will be shown (if visible) in the 1st
-;                   1st Options dialog rather than the Additional Options
-;                   dialog (default).
-;
-;   VISIBLE       - Component is shown in one of the two Options dialogs
-;                   (default).
-;
-;   INVISIBLE     - Component is not shown in either of the two Options dialogs.
-;
-;   ENABLED       - Component is to be shown as enabled (not greyed out) in
-;                   either of the two Options dialogs.
-;                   (default).
-;
-;   DISABLED      - Component is to be shown as disabled (greyed out) in
-;                   either of two Options dialog.
-;
-;
-;   The following attributes cannot be overridden:
-;   ---------------------------------------------
-;
-;   LAUNCHAPP     - Component is downloaded and simply run (like a .exe file)
-;                   after all the components have been downloaded and
-;                   xpinstall'ed.
-;
-;   DOWNLOAD_ONLY - Component is to be only downloaded to the ns_temp folder,
-;                   then deleted as Setup is quitting.
-;
-;   FORCE_UPGRADE - Force Upgrade checks for a particular file or directory
-;                   provided in the Force Upgrade FileX= key(s).  If any of
-;                   the listed file or directory exists, then this component
-;                   will have its SELECTED and DISABLED Attributes set
-;                   automatically.  Force Upgrade will override the following:
-;
-;                       Random Install Percentage= setting
-;                       UNSELECTED Attribute setting
-;                       Dependency settings
-;                       Dependee settings
-;                       Setup Type settings - meaning that even if this
-;                                             component is not listed in the
-;                                             selected Setup Type, it will be
-;                                             affected.
-;
-;   IGNORE_DOWNLOAD_ERROR  - If the component needs to be downloaded from a
-;                            server, setting this attribute will indicate that
-;                            any download error encountered will be ignored
-;                            and treated as if there were no error.
-;                            If the component does not need to be downloaded,
-;                            then this attribute has no effect.
-;
-;   IGNORE_XPINSTALL_ERROR - If the component is a .xpi file, then any error
-;                            resulting from the installation of the .xpi file
-;                            will be ignored.  If the .xpi file is not to be
-;                            installed, then this attribute is ignored.
-;
-;   SUPERSEDE     - Component is to be shown as disabled and unselected
-;                   if a file exists.
-;                   Use SupersedeType=File Exists to specify the type of comparison
-;                   Use SupersedeFileX=File Name to specify the file
-;                   Use SupersedeMinVersionX=a.b.c.d (optional) to specify the 
-;                   minimum version of the file.  If the version of the existing file
-;                   is greater than or equal to the SupersedeMinVersion the component
-;                   will be superseded.
-;
-
-;We're not installing Component XPCOM because we're using it
-;for it's xpinstall engine from the TEMP dir.  The files that
-;this component has are already in Component GRE.
-[Component XPCOM]
-Description Short=@XPCOM_SHORT@
-Description Long=@XPCOM_SHORT@
-Archive=xpcom.xpi
-$InstallSize$:xpcom
-$InstallSizeSystem$
-$InstallSizeArchive$:xpcom.xpi
-Attributes=SELECTED|INVISIBLE
-FileCount=$FileCount$
-
-[Component Browser]
-Description Short=@BROWSER_SHORT@
-Description Long=@BROWSER_SHORT@
-Archive=browser.xpi
-$InstallSize$:browser
-$InstallSizeSystem$
-$InstallSizeArchive$:browser.xpi
-Attributes=SELECTED|INVISIBLE|FORCE_UPGRADE|MAIN_COMPONENT
-Force Upgrade File0=[SETUP PATH]\$MainExeFile$
-FileCount=$FileCount$
-
-[Component ADT]
-Description Short=@ADT_SHORT@
-Description Long=@ADT_LONG@
-Archive=adt.xpi
-$InstallSize$:adt
-$InstallSizeSystem$
-$InstallSizeArchive$:adt.xpi
-Attributes=FORCE_UPGRADE|VISIBLE
-;Force Upgrade File0=[SETUP PATH]\chrome\venkman.jar
-Force Upgrade File0=[SETUP PATH]\chrome\inspector.jar
-FileCount=$FileCount$
-
-[Component Uninstaller]
-Description Short=@UNINSTALL_SHORT@
-Description Long=@UNINSTALL_SHORT@
-Archive=$UninstallFileZip$
-$InstallSize$:$UninstallFileZip$
-$InstallSizeSystem$
-$InstallSizeArchive$:$UninstallFileZip$
-Attributes=SELECTED|INVISIBLE|DOWNLOAD_ONLY
-FileCount=$FileCount$
-
-;Since the uninstaller program is going to be installed into the Windows folder,
-;Setup.exe needs to know to calculate the disk space required for the Windows folder.
-;This section overrides the default user-chosen path for the Uninstaller only.
-[Component Uninstaller-Destination Path0]
-Path=[WINDIR]
-
-[Component Langpack]
-Description Short=@AB_CD@ @LANGPACK_TITLE@
-Description Long=@AB_CD@ @LANGPACK_TITLE@
-Archive=@AB_CD@.xpi
-$InstallSize$:@AB_CD@
-$InstallSizeSystem$
-$InstallSizeArchive$:@AB_CD@.xpi
-Attributes=SELECTED|INVISIBLE|FORCE_UPGRADE
-Force Upgrade File0=[SETUP PATH]\chrome\@AB_CD@.jar
-FileCount=$FileCount$
-
-[Component QFA]
-Description Short=@QFA_SHORT@
-Description Long=@QFA_LONG@
-Archive=talkback.xpi
-$InstallSize$:talkback
-$InstallSizeSystem$
-$InstallSizeArchive$:talkback.xpi
-Attributes=SELECTED|FORCE_UPGRADE
-Force Upgrade File0=[SETUP PATH]\components\fullsoft.dll
-FileCount=$FileCount$
-; This is to randomly set the default checkbox for this component.
-; This particular value will set the checkbox checked [number]% of the time.
-; This logic is done only during the initialization of setup, not in any
-; particular dialog.
-Random Install Percentage=100
-
-[Core]
-Source=[XPI PATH]\xpcom.xpi
-Destination=[WIZTEMP]\xpcom.ns
-$InstallSize$:xpcom
-Cleanup=TRUE
-Message=@CORE_PREPARING@
-; Status= values: Disabled, Enabled
-; If nothing is set, default value is Enabled.  If set to Disabled,
-; it will then use GRE as the xpinstall engine, in which case, there
-; should be a GRE component in this installer package!
-Status=Enabled
-
-[Redirect]
-Status=Disabled
-; This is used in conjunction with the Site Selector info to build a
-; url to where to download the needed redirect.ini file from.
-; If there's more than one server path, they will be used as fail
-; over paths.
-;
-; The Server Path= keys need to be named in the following convention:
-;
-;   Server Path0=
-;   Server Path1=
-;   Server Path2=
-;
-; and so on...
-Server Path=redirect.ini
-;*** LOCALIZE ME BABY ***
-Description=Redirect File
-Message=
-
-
-; The Timing key needs to be one of the following values:
-;   pre download     - process before any files have been downloaded.
-;   post download    - process after all files have been downloaded.
-;   pre xpcom        - process before the xpcom file has been uncompressed.
-;   post xpcom       - process after the xpcom file has been uncompressed.
-;   pre smartupdate  - process before the smartupdate engine has been launched.
-;   post smartupdate - process after the smartupdate engine has been launched.
-;   pre launchapp    - process before the launching of executables.
-;   post launchapp   - process after the launching of executables.
-;   pre archive      - process before the launching of each individual archive file.
-;   post archive     - process after the launching of each individual archive file.
-;   depend reboot    - process depending on if a reboot is necessary or not.
-;                      if reboot is necessary, installer can set it up so
-;                      the app runs once upon windows reboot.
-
-;Uncompress FileX sections
-[Uncompress File0]
-Timing=post smartupdate
-Source=[XPI PATH]\$UninstallFileZip$
-Destination=[WINDIR]
-;*** LOCALIZE ME BABY ***
-Message=@INST_UNINST@
-Only If Exists=FALSE
-
-
-;Copy FileX sections
-;Copy the uninstaller to the [Setup Path]\uninstall folder.
-;This copy is to be used when the user installed on a system with
-;restricted access.
-[Copy File0]
-Timing=post smartupdate
-Source=[WINDIR]\$UninstallFile$
-Destination=[SETUP PATH]\uninstall
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File1]
-Timing=post smartupdate
-Source=[XPI PATH]\$UninstallFile$
-Destination=[WINDIR]
-Fail If Exists=FALSE
-Do Not Uninstall=TRUE
-
-; nss3.dll, softokn3.dll, ssl3.dll, and smime3.dll all need to be copied from
-; the GRE dir to the destination app folder (see bug 202326)
-[Copy File2]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\nss3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File3]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\softokn3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File4]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\softokn3.chk
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File5]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\ssl3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File6]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\smime3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File7]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\freebl3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File8]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\freebl3.chk
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Copy File9]
-Timing=post smartupdate
-Source=[$GRE_INSTALL_DIR]\nssutil3.dll
-Destination=[SETUP PATH]
-Fail If Exists=FALSE
-Do Not Uninstall=FALSE
-
-[Path Lookup $GRE_INSTALL_DIR]
-Path Reg Key Root=HKEY_LOCAL_MACHINE
-Path Reg Key=Software\mozilla.org\GRE\$GreUniqueID$\Main
-Path Reg Name=Install Directory
-Strip Filename=FALSE
-
-
-;Copy File SequentialX sections
-[Copy File Sequential0]
-Timing=post smartupdate
-Filename=install_wizard.log
-Source=[SETUP PATH]
-Destination=[SETUP PATH]\uninstall
-
-
-;Create DirectoryX sections
-[Create Directory0]
-Timing=post download
-Destination=[SETUP PATH]\plugins
-
-
-;Delete FileX sections
-[Delete File0]
-Timing=post download
-Destination=[COMMON_PROGRAMS]\Mozilla Seamonkey\Mozilla AppRunner.lnk
-
-[Delete File1]
-Timing=post smartupdate
-Destination=[SETUP PATH]\install_wizard.log
-
-
-;Remove DirectoryX sections
-;[Remove Directory0]
-;Timing=post launchapp
-;Destination=[TEMP]\xtratest
-;Remove subdirs=TRUE
-
-
-;RunAppX sections
-[RunApp0]
-Timing=depend reboot
-Wait=FALSE
-;Target=[SETUP PATH]\$MainExeFile$
-Target=$MainExeFile$
-Parameters=-installer
-WorkingDir=[SETUP PATH]
-;  Additional Options dialog.
-Condition=not RecaptureHPChecked
-
-[Windows Registry0]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry1]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry2]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry3]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Main
-Name=Program Folder Path
-Name Value=[Default Folder]
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry4]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Uninstall
-Name=Description
-Name Value=$ProductName$ ($UserAgentShort$)
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=FALSE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry5]
-Root Key=HKEY_LOCAL_MACHINE
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Uninstall
-Name=Uninstall Log Folder
-Name Value=[SETUP PATH]\uninstall
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry6]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry7]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry8]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry9]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Main
-Name=Program Folder Path
-Name Value=[Default Folder]
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry10]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Uninstall
-Name=Description
-Name Value=$ProductName$ ($UserAgentShort$)
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=FALSE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry11]
-Root Key=HKEY_CURRENT_USER
-;*** LOCALIZE ME BABY ***
-Key=Software\$CompanyName$\$ProductName$\$UserAgent$\Uninstall
-Name=Uninstall Log Folder
-Name Value=[SETUP PATH]\uninstall
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Windows Registry12]
-Root Key=HKEY_LOCAL_MACHINE
-Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\$ProductName$ ($UserAgentShort$)
-Name=DisplayName
-Name Value=$ProductName$ ($UserAgentShort$)
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=FALSE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=post smartupdate
-
-[Windows Registry13]
-Root Key=HKEY_LOCAL_MACHINE
-Key=Software\Microsoft\Windows\CurrentVersion\Uninstall\$ProductName$ ($UserAgentShort$)
-Name=UninstallString
-;*** LOCALIZE ME BABY ***
-Name Value=[WINDIR]\$UninstallFile$ /ua "$UserAgent$"
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=post smartupdate
-
-; The following keys are to help JRE's installer locate where mozilla gets
-; installed to.  It has not been updated to look for the new keys.
-[Windows Registry14]
-Root Key=HKEY_LOCAL_MACHINE
-Key=Software\Mozilla
-Name=
-Name Value=
-Type=REG_SZ
-Decrypt Key=FALSE
-Decrypt Name=FALSE
-Decrypt Name Value=TRUE
-Overwrite Key=TRUE
-Overwrite Name=TRUE
-Timing=pre smartupdate
-
-[Cleanup Previous Product RegKeys]
-Reg Key Root0=HKEY_LOCAL_MACHINE
-Product Name0=Mozilla
-Product Reg Key0=Software\Mozilla.org\Mozilla
-Current Version0=$UserAgent$
-
-Reg Key Root1=HKEY_CURRENT_USER
-Product Name1=Mozilla
-Product Reg Key1=Software\Mozilla.org\Mozilla
-Current Version1=$UserAgent$
-
-
-
-; Values for Show Folder:
-;   HIDE             Hides the window and activates another window.
-;   MAXIMIZE         Maximizes the specified window.
-;   MINIMIZE         Minimizes the specified window and activates the next
-;                    top-level window in the z-order.
-;   RESTORE          Activates and displays the window. If the window is
-;                    minimized or maximized, Windows restores it to its
-;                    original size and position. An application should specify
-;                    this flag when restoring a minimized window.
-;   SHOW             Activates the window and displays it in its current size
-;                    and position.
-;   SHOWMAXIMIZED    Activates the window and displays it as a maximized
-;                    window.
-;   SHOWMINIMIZED    Activates the window and displays it as a minimized
-;                    window.
-;   SHOWMINNOACTIVE  Displays the window as a minimized window. The active
-;                    window remains active.
-;   SHOWNA           Displays the window in its current state. The active
-;                    window remains active.
-;   SHOWNOACTIVATE   Displays a window in its most recent size and position.
-;                    The active window remains active.
-;   SHOWNORMAL       Activates and displays a window. If the window is
-;                    minimized or maximized, Windows restores it to its
-;                    original size and position. An application should specify
-;                    this flag when displaying the window for the first time.
-[Program Folder0]
-Timing=post smartupdate
-Show Folder=HIDE
-Program Folder=[Default Folder]
-
-[Program Folder0-Shortcut0]
-File=[SETUP PATH]\uninstall\$UninstallFile$
-Arguments=/ua "$UserAgent$"
-Working Dir=[SETUP PATH]
-Description=Uninstall $ProductName$
-Icon Path=[SETUP PATH]\uninstall\$UninstallFile$
-Icon Id=0
-
-; Default value:
-;    IGNORE
-;
-; Possible values:
-;    ONLY_RESTRICTED    - create shortcut only if user access is restricted
-;    ONLY_NONRESTRICTED - create shortcut only if user access is not restricted
-Restricted Access=ONLY_RESTRICTED
-
-;[Program Folder0-Shortcut1]
-;File=[SETUP PATH]\$MainExeFile$
-;Arguments=-ProfileManager
-;Working Dir=[SETUP PATH]
-;Description=Profile Manager
-;Icon Path=[SETUP PATH]\$MainExeFile$
-;Icon Id=0
-
-;[Program Folder0-Shortcut2]
-;File=[SETUP PATH]\bin\Net2fone.exe
-;Arguments=
-;Working Dir=[SETUP PATH]
-;Description=Net2Fone
-;Icon Path=[SETUP PATH]\bin\Net2fone.exe
-;Icon Id=0
-
-;[Program Folder1]
-;Timing=post download
-;Show Folder=SHOW
-;Program Folder=[Default Folder]\lala land
-
-;[Program Folder1-Shortcut0]
-;File=c:\bin\getver.exe
-;Arguments=
-;Working Dir=[TEMP]
-;Description=Getver Test
-;Icon Path=[WINDISK]\4nt\4nt.exe
-;Icon Id=0
-
-;[Program Folder1-Shortcut1]
-;File=c:\perl\bin\perl.exe
-;Arguments=
-;Working Dir=[WINSYS]
-;Description=Perl
-;Icon Path=c:\perl\bin\perl.exe
-;Icon Id=0
-
-[Strings]
-Message Unfinished Download Restart=@MSG_UNFINISHED_DL@
-Message Unfinished Install Xpi Restart=@MSG_UNFINISHED_INSTALL@
-Error Corrupted Archives Detected=@MSG_CORRUPTED@
-Error Corrupted Archives Detected AUTO mode=@MSG_CORRUPTED_AUTO@
-Error Too Many CRC Failures=@MSG_TOO_MANY_CRC@
-Error Too Many Network Errors=@MSG_TOO_MANY_NETWORK@
-Message Verifying Archives=@MSG_VERIFYING@
-Error Undefined=@MSG_UNDEFINED@
-Error Out Of Memory=@MSG_OOM@
-Status Download=@MSG_STATUS_DL@
-Status Retry=@MSG_STATUS_DL@
-Status File Info=%s
-Status Percentage Completed=%d%%
-Dialog Download Title Minimized=@MSG_COMPLETED@
-STR Force Upgrade Required=@MSG_REQUIRED@
-Message Cancel Setup AUTO mode=@MSG_CANCELING@
-Error File Uncompress=@MSG_ERROR_UNCOMPRESS@
-UsageMsg Usage=@MSG_USAGE@
-IDC Use FTP=@MSG_USE_FTP@
-IDC Use HTTP=@MSG_USE_HTTP@
-IDC Save Installer Files=@MSG_SAVE_LOCALLY@
-;*** LOCALIZE ME BABY ***
-IDC Recapture Homepage=&Make Netscape.com my home page
-;*** LOCALIZE ME BABY ***
-IDC Turbo Mode=&Use Quick Launch for faster startup times when possible
-Message Download Paused=@MSG_DL_PAUSED@
-Message NORMAL Restricted Access=@MSG_NOT_ADMIN@
-Message AUTO Restricted Access=@MSG_NOT_ADMIN_AUTO@
-
-
-[Site Selector]
-; Dictates whether or not to show the pull down menu.
-; Default value is SHOW.
-; If Status= is set to HIDE, then Identifier0 will be used
-; and all other IdentifiersX will be ignored.
-Status=HIDE
-
-Identifier0=Site0
-;*** LOCALIZE ME BABY ***
-Description0=Default
-;*** LOCALIZE ME BABY ***
-Domain0=$ArchiveUrl$
-
-Identifier1=Site1
-;*** LOCALIZE ME BABY ***
-Description1=North America
-;*** LOCALIZE ME BABY ***
-Domain1=$ArchiveUrl$
-
deleted file mode 100644
index 963e72abbce123c8f1d87432db42f02f0a71c12e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/installer/unix/installer.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-#filter substitution
-VersionLanguage           = @AB_CD@
-NameCompany               = Mozilla
-NameProduct               = Minefield
-NameProductInternal       = Minefield
-ShortNameProduct          = Minefield
-VersionProduct            = @MOZ_APP_VERSION@
-FileInstallerEXE          = @PKG_BASENAME@.installer
-FileMainEXE               = @MOZ_APP_NAME@
-FileUninstall             = UninstallFirefox
-FileUninstallZIP          = UninstallFirefox.zip
-FileInstallerNETRoot      = @PKG_BASENAME@.net-installer
-ComponentList             = xpcom,browser,talkback,@AB_CD@,adt
-LicenseFile               = browser/EULA
deleted file mode 100644
--- a/browser/installer/unix/talkback.jst
+++ /dev/null
@@ -1,127 +0,0 @@
-// this function verifies disk space in kilobytes
-function verifyDiskSpace(dirPath, spaceRequired)
-{
-  var spaceAvailable;
-
-  // Get the available disk space on the given path
-  spaceAvailable = fileGetDiskSpaceAvailable(dirPath);
-
-  // Convert the available disk space into kilobytes
-  spaceAvailable = parseInt(spaceAvailable / 1024);
-
-  // do the verification
-  if(spaceAvailable < spaceRequired)
-  {
-    logComment("Insufficient disk space: " + dirPath);
-    logComment("  required : " + spaceRequired + " K");
-    logComment("  available: " + spaceAvailable + " K");
-    return(false);
-  }
-
-  return(true);
-}
-
-// this function deletes a file if it exists
-function deleteThisFile(dirKey, file)
-{
-  var fFileToDelete;
-
-  fFileToDelete = getFolder(dirKey, file);
-  logComment("File to delete: " + fFileToDelete);
-  if(File.isFile(fFileToDelete))
-  {
-    File.remove(fFileToDelete);
-    return(true);
-  }
-  else
-    return(false);
-}
-
-// this function deletes a folder if it exists
-function deleteThisFolder(dirKey, folder, recursiveDelete)
-{
-  var fToDelete;
-
-  if(typeof recursiveDelete == "undefined")
-    recursiveDelete = true;
-
-  fToDelete = getFolder(dirKey, folder);
-  logComment("Folder to delete: " + fToDelete);
-  if(File.isDirectory(fToDelete))
-  {
-    File.dirRemove(fToDelete, recursiveDelete);
-    return(true);
-  }
-  else
-    return(false);
-}
-
-// OS type detection
-// which platform?
-function getPlatform()
-{
-  var platformStr;
-  var platformNode;
-
-  if('platform' in Install)
-  {
-    platformStr = new String(Install.platform);
-
-    if (!platformStr.search(/^Macintosh/))
-      platformNode = 'mac';
-    else if (!platformStr.search(/^Win/))
-      platformNode = 'win';
-    else
-      platformNode = 'unix';
-  }
-  else
-  {
-    var fOSMac  = getFolder("Mac System");
-    var fOSWin  = getFolder("Win System");
-
-    logComment("fOSMac: "  + fOSMac);
-    logComment("fOSWin: "  + fOSWin);
-
-    if(fOSMac != null)
-      platformNode = 'mac';
-    else if(fOSWin != null)
-      platformNode = 'win';
-    else
-      platformNode = 'unix';
-  }
-
-  return platformNode;
-}
-
-var srDest = $SpaceRequired$;
-
-var err = initInstall("Quality Feedback Agent", "Quality Feedback Agent", "$Version$"); 
-logComment("initInstall: " + err);
-
-var communicatorFolder = getFolder("Program");
-logComment("communicatorFolder: " + communicatorFolder);
-
-if (verifyDiskSpace(communicatorFolder, srDest))
-{
-    err = addDirectory("Program",
-                       "$Version$",
-                       "bin",              // jar source folder 
-                       communicatorFolder, // target folder 
-                       "",                 // target subdir 
-                       true );             // force flag 
-
-    logComment("addDirectory() returned: " + err);
-
-    if (err==SUCCESS)
-    {
-	    err = performInstall(); 
-	    logComment("performInstall() returned: " + err);
-    }
-    else
-    {
-	    cancelInstall(err);
-	    logComment("cancelInstall() returned: " + err);
-    }
-}
-else
-    cancelInstall(INSUFFICIENT_DISK_SPACE);
deleted file mode 100644
index ab08dffbeb11189a0a6327315038c6c0edc30745..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
deleted file mode 100644
--- a/browser/installer/unix/xpcom.jst
+++ /dev/null
@@ -1,48 +0,0 @@
-function upgradeCleanup()
-{
-  // Obsolete files from Netscape 6.0 and Netscape 6.01 that
-  // need to be cleaned up.
-  deleteThisFile("Program",    "component.reg");
-  deleteThisFile("Program",    "libjsdom.so");
-  deleteThisFile("Program",    "libz.so");
-  deleteThisFile("Components", "compreg.dat");
-  deleteThisFile("Components", "xpti.dat");
-  deleteThisFile("Components", "xptitemp.dat");
-}
-
-var srDest = $SpaceRequired$;
-
-var err = initInstall("Mozilla XPCOM", "XPCOM", "$Version$"); 
-logComment("initInstall: " + err);
-
-var communicatorFolder = getFolder("Program");
-logComment("communicatorFolder: " + communicatorFolder);
-
-if (verifyDiskSpace(communicatorFolder, srDest))
-{
-    // Call upgradeCleanup() before addDirectory() in case we accidentaly
-    // delete files that we happen to be also installing.  This way, if we do,
-    // it will just get reinstalled.  This is for safety measure.
-    upgradeCleanup();
-    err = addDirectory("Program",
-                       "$Version$",
-                       "bin",              // jar source folder 
-                       communicatorFolder, // target folder 
-                       "",                 // target subdir 
-                       true );             // force flag 
-
-    logComment("addDirectory() returned: " + err);
-
-    if (err==SUCCESS)
-    {
-	    err = performInstall(); 
-	    logComment("performInstall() returned: " + err);
-    }
-    else
-    {
-	    cancelInstall(err);
-	    logComment("cancelInstall() returned: " + err);
-    }
-}
-else
-    cancelInstall(INSUFFICIENT_DISK_SPACE);
--- a/browser/installer/windows/nsis/installer.nsi
+++ b/browser/installer/windows/nsis/installer.nsi
@@ -483,16 +483,23 @@ Section /o "Developer Tools" DOMI_IDX
   ${EndIf}
 SectionEnd
 
 ; Cleanup operations to perform at the end of the installation.
 Section "-InstallEndCleanup"
   SetDetailsPrint both
   DetailPrint "$(STATUS_CLEANUP)"
   SetDetailsPrint none
+
+  ${MUI_INSTALLOPTIONS_READ} $0 "options.ini" "Field 6" "State"
+  ${If} "$0" == "1"
+    ${LogHeader} "Setting as the default browser"
+    ${SetAsDefaultAppUser}
+  ${EndIf}
+
   ${LogHeader} "Updating Uninstall Log With Previous Uninstall Log"
 
   ; Refresh desktop icons
   System::Call "shell32::SHChangeNotify(i, i, i, i) v (0x08000000, 0, 0, 0)"
 
   ${InstallEndCleanupCommon}
 
   ; If we have to reboot give SHChangeNotify time to finish the refreshing
@@ -640,16 +647,30 @@ Function leaveOptions
   ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 2" "State"
   StrCmp $R0 "1" +1 +2
   StrCpy $InstallType ${INSTALLTYPE_BASIC}
   ${MUI_INSTALLOPTIONS_READ} $R0 "options.ini" "Field 3" "State"
   StrCmp $R0 "1" +1 +2
   StrCpy $InstallType ${INSTALLTYPE_CUSTOM}
 
   ${If} $InstallType != ${INSTALLTYPE_CUSTOM}
+!ifndef NO_INSTDIR_FROM_REG
+    SetShellVarContext all      ; Set SHCTX to HKLM
+    ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9
+
+    StrCmp "$R9" "false" +1 fix_install_dir
+
+    SetShellVarContext current  ; Set SHCTX to HKCU
+    ${GetSingleInstallPath} "Software\Mozilla\${BrandFullNameInternal}" $R9
+
+    fix_install_dir:
+    StrCmp "$R9" "false" +2 +1
+    StrCpy $INSTDIR "$R9"
+!endif
+
     Call CheckExistingInstall
   ${EndIf}
 FunctionEnd
 
 Function preComponents
   ${CheckCustomCommon}
   ; If DOMi isn't available skip the components page
   ${Unless} ${FileExists} "$EXEDIR\optional\extensions\inspector@mozilla.org"
@@ -750,17 +771,17 @@ Function .onInit
   ${SetBrandNameVars} "$EXEDIR\localized\distribution\setup.ini"
 
   ${InstallOnInitCommon} "$(WARN_UNSUPPORTED_MSG)"
 
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "options.ini"
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "components.ini"
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "shortcuts.ini"
   !insertmacro MUI_INSTALLOPTIONS_EXTRACT "summary.ini"
-  !insertmacro createBasicCustomOptionsINI
+  !insertmacro createBasicCustomSetAsDefaultOptionsINI
   !insertmacro createComponentsINI
   !insertmacro createShortcutsINI
 
   ; There must always be nonlocalized and localized directories.
   ${GetSize} "$EXEDIR\nonlocalized\" "/S=0K" $R5 $R7 $R8
   ${GetSize} "$EXEDIR\localized\" "/S=0K" $R6 $R7 $R8
   IntOp $R8 $R5 + $R6
   SectionSetSize ${APP_IDX} $R8
--- a/browser/installer/windows/nsis/uninstaller.nsi
+++ b/browser/installer/windows/nsis/uninstaller.nsi
@@ -213,16 +213,19 @@ Section "Uninstall"
     Sleep 5000
     ${DeleteFile} "$INSTDIR\${FileMainEXE}"
     ClearErrors
   ${EndIf}
 
   ${MUI_INSTALLOPTIONS_READ} $0 "unconfirm.ini" "Field 3" "State"
   ${If} "$0" == "1"
     ${un.DeleteRelativeProfiles} "Mozilla\Firefox"
+    RmDir "$APPDATA\Mozilla\Extensions\{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+    RmDir "$APPDATA\Mozilla\Extensions"
+    RmDir "$APPDATA\Mozilla"
   ${EndIf}
 
   SetShellVarContext current  ; Set SHCTX to HKCU
   ${un.RegCleanMain} "Software\Mozilla"
   ${un.RegCleanUninstall}
 
   ClearErrors
   WriteRegStr HKLM "Software\Mozilla\InstallerTest" "InstallerTest" "Test"
deleted file mode 100644
--- a/browser/locales/en-US/installer/installer.inc
+++ /dev/null
@@ -1,193 +0,0 @@
-#filter emptyLines
-
-# This file is in the UTF-8 encoding
-
-# Installer keys (don't translate strings in $$)
-#define SETUP_TITLE $ProductShortName$ Setup
-#define SETUP_WELCOME Welcome to %s
-#define SETUP_MESSAGE0 You are about to install %s.
-#define SETUP_MESSAGE1 It is strongly recommended that you exit all Windows programs before running this Setup program.
-#define SETUP_MESSAGE1_UNIX It is strongly recommended that you exit all instances of %s before running this Setup program.
-#define SETUP_MESSAGE2 Click Cancel to quit Setup and then close any programs you have running.  Click Next to continue the Setup program.
-#define SETUP_MESSAGE3 Click Next to continue installing %s.
-
-#define LICENSE_TITLE Software License Agreement
-#define LICENSE_SUBTITLE Terms and conditions for using this software.
-#define LICENSE_MESSAGE0 Please read the following license agreement. Use the scroll bar to view the rest of this agreement.
-#define LICENSE_ACCEPT I &Accept the terms of the License Agreement
-#define LICENSE_DECLINE I do NO&T Accept the terms of the License Agreement
-
-#define SETUP_TYPE_TITLE Setup Type
-#define SETUP_TYPE_SUBTITLE Choose setup options.
-#define SETUP_TYPE_MESSAGE0 Choose the type of Setup you prefer, then click Next.
-#define SETUP_TYPE_EXISTING The selected directory already contains a Firefox installation. To delete %s completely, please press the 'Delete Directory' button. Your Firefox settings should not be affected. Or, please press the 'Cancel' button and choose a different destination directory.
-
-# &Ampersand is used to select a shortcut key
-#define TYPE_STANDARD &Standard
-#define TYPE_STANDARD_DESC Browser will be installed with the most common options.
-
-#define TYPE_CUSTOM &Custom
-#define TYPE_CUSTOM_DESC You may choose individual options to be installed. Recommended for experienced users.
-
-#define SELECT_TITLE Select Components
-#define SELECT_SUBTITLE Additional components that enhance $ProductShortName$.
-#define SELECT_MESSAGE0 Choose additional components you want to install, then click Next.
-
-#define LOCATION_TITLE Install Folder
-#define LOCATION_SUBTITLE Where $ProductShortName$ will be installed.
-#define LOCATION_MESSAGE0 $ProductShortName$ will be installed into the following folder:
-
-#define UPGRADE_TITLE Upgrade
-#define UPGRADE_SUBTITLE Upgrades an existing $ProductShortName$ installation.
-#define UPGRADE_CLEANUP A previous $ProductNameInternal$ installation has been found in the chosen folder.
-
-#define UPGRADE_CLEAN Perform a Clean Install
-#define UPGRADE_CLEAN_MSG A Clean Install will COMPLETELY REMOVE the contents of the install folder! Any third party components you have installed will be lost. This is recommended as it may prevent incompatibilities. (XXXben)
-#define UPGRADE_OVER If you choose not to perform a Clean Install, third party components will not be removed, which may cause unpredictable behavior.
-#define UPGRADE_OVER_WINDIR A Safe Upgrade of $ProductNameInternal$ cannot be performed because the program is installed within the Windows folder. It is recommended that you choose another folder to install $ProductNameInternal$ into.
-
-#define ADD_TITLE $ProductShortName$ Setup - Select Additional Components
-#define ADD_MESSAGE0 Select or clear the additional components you want to install.
-
-#define WININT_TITLE Set Up Shortcuts
-#define WININT_SUBTITLE Creates Program Icons
-#define WININT_MESSAGE0 Create icons for $ProductShortName$:
-
-#define WININT_DESKTOP On my Desktop
-#define WININT_START In my Start Menu Programs folder
-#define WININT_QUICKL In my Quick Launch bar
-
-#define USE_AS_DEFAULT Use %s as my Default Browser.
-
-#define WININT_PFOLDER_TITLE $ProductShortName$ Setup - Select Program Folder
-#define WININT_PFOLDER_MESSAGE0 Setup will add program icons to the Program Folder listed below.  You may type a new folder name, or select one from the Existing Folders list.  Click Next to continue.
-
-#define ADDL_OPTIONS_TITLE $ProductShortName$ Setup - Additional Options
-#define ADDL_OPTIONS_MSG1 Select the following option if you wish to save downloaded Setup files on your own computer.  This allows you to re-run Setup without downloading the files again.  The Setup files will be saved to the path below.
-
-#define ADV_SETTINGS_TITLE $ProductShortName$ Setup - Advanced Settings
-#define ADV_SETTINGS_MSG If your Internet connection requires a proxy server, enter your server name and port information.  If your Internet connection doesn't require a proxy server, leave the fields blank.
-
-#define START_TITLE Summary
-#define START_SUBTITLE Ready to start installing $ProductShortName$.
-#define START_INSTALL Setup will now install the following components:
-#define START_DOWNLOAD Setup will now download and install the following components:
-#define START_MESSAGE0 Click Next to continue.
-
-#define DL_TITLE Downloading
-#define DL_SUBTITLE Downloading required components…
-#define DL_BLURB Setup is downloading the files required to install $ProductShortName$.
-#define DL_FILENAME Currently Downloading:
-#define DL_TIMELEFT Time Remaining:
-
-#define INSTALL_TITLE Installing
-#define INSTALL_SUBTITLE Installing $ProductShortName$…
-#define INSTALL_BLURB Setup is installing application files.
-#define INSTALL_STATUSFILE Preparing File:
-#define INSTALL_STATUSCOMP Currently Installing:
-
-#define COMPLETE_TITLE Install Complete
-#define COMPLETE_MESSAGE0 %s was successfully installed.
-#define COMPLETE_MESSAGE1 Click Finish to complete Setup.
-#define COMPLETE_LAUNCH Launch %s now.
-
-#define DL2_TITLE $ProductShortName$ Setup - Download
-#define DL2_MESSAGE0 Setup is downloading the required files now.  This may take some time depending on your network connection speed.
-#define DL2_RETRY Some files have failed the CRC check and are being downloaded again.  Only those files that have failed will be downloaded.
-
-#define CLOSE_CHECK Download of $ProductShortName$ was successful. $ProductNameInternal$ must be closed to proceed with installation. Click OK to exit $ProductNameInternal$ automatically and to begin installation.
-#define CLOSE_CHECK2 $ProductNameInternal$ must be closed to proceed with installation. Click OK to exit $ProductNameInternal$ automatically and to begin installation.
-#define CLOSE_WAIT Shutting down $ProductNameInternal$.  Please wait…
-
-#define XPCOM_SHORT Cross-Platform COM
-#define BROWSER_SHORT $ProductShortName$ Browser
-#define HELP_SHORT $ProductShortName$ Help
-#define UNINSTALL_SHORT $CompanyName$ Uninstaller
-#define LANGPACK_TITLE Language Pack
-
-#define ADT_SHORT Developer Tools
-#define ADT_LONG The Document Inspector - a tool for web developers.
-
-#define QFA_SHORT Quality Feedback Agent
-#define QFA_LONG for reporting $ProductShortName$ crash information
-
-#define RPT_SHORT Website Reporter
-#define RPT_LONG for reporting $ProductShortName$ website compatibility problems
-
-#define CORE_PREPARING Preparing Install, please wait…
-#define INST_UNINST Installing the uninstaller, please wait…
-
-#define MSG_UNFINISHED_DL A previous session of Setup did not finish downloading all the necessary files.  Would you like to use the files previously downloaded, to avoid downloading them again?
-#define MSG_UNFINISHED_INSTALL A previous session of Setup did not finish with installation of all the necessary files.  Would you like to use the files previously downloaded, to avoid downloading them again?
-#define MSG_CORRUPTED Setup has detected that the following archives within this Setup are corrupted:%sYou will need to obtain another copy of the $ProductShortName$ Setup in order for installation to proceed.
-#define MSG_CORRUPTED_AUTO Setup has detected that at least one archive within this Setup is corrupt.  You will need to obtain another copy of the $ProductShortName$ Setup in order for installation to proceed.
-#define MSG_TOO_MANY_CRC Too many download failures.  Setup will cancel.  Any files already downloaded will not be deleted.  The next time Setup is run, these files will be taken into account during the download.
-#define MSG_TOO_MANY_NETWORK Too many network errors trying to download %s.  Setup will now Pause.  Please click Resume to retry downloading the files.
-#define MSG_VERIFYING Verifying integrity of archives, please wait…
-#define MSG_UNDEFINED Error undefined
-#define MSG_OOM Out of memory!
-#define MSG_STATUS_DL %s at %.2f KB/sec (%u KB of %u KB downloaded)
-#define MSG_COMPLETED %d%% completed
-#define MSG_REQUIRED (Required)
-#define MSG_CANCELING Canceling Setup, please wait…
-#define MSG_ERROR_UNCOMPRESS Error uncompressing file %s: %d
-#define MSG_USAGE Usage: %s [options]\n	[options] can be any of the following combination:\n		-h: This help.\n		-a [path]: Alternate archive search path.\n		-app [app id]: ID of application which is launching the installer (shared installs)\n		-app_path [app]: Points to (full path) representative file of application (Shared installs)\n	*	-dd [path]: Suggested install destination directory. (Shared installs)\n	*	-greLocal: Forces GRE to be installed into the application dir.\n	*	-greShared: Forces GRE to be installed into a global, shared dir (normally)\n			c:\program files\common files\mozilla.org\GRE\n		-reg_path [path]: Where to make entries in the Windows registry. (Shared installs)\n		-f: Force install of GRE installer (Shared installs), though it'll work\n			for non GRE installers too.\n		-greForce: Force 'Component GRE' to be downloaded, run, and installed.  This\n			bypasses GRE's logic of determining when to install by running its\n			installer with a '-f' flag.\n		-n [filename]: Setup's parent process filename.\n	*	-ma: Run setup in Auto mode.\n	*	-ms: Run setup in Silent mode.\n		-ira: Ignore the [RunAppX] sections\n		-ispf: Ignore the [Program FolderX] sections that show\n			the Start Menu shortcut folder at the end of installation.\n	*	-showBanner: Show the banner image in the download and install progress dialogs\n	*	-hideBanner: Hide the banner image in the download and install progress dialogs\n	*	-cleanupOnUpgrade: Tells Setup to check to see if user is upgrading (installing on top\n		of previous version of product).  If user is upgrading:\n			* NORMAL mode: prompt user on how to proceed\n			* All other modes: assume user wants to cleanup.\n	*	-noCleanupOnUpgrade: Tells Setup to not check if user is upgrading (installing on top\n		of previous version of product).  This will disable the cleanup feature.\n\n	* means it will override config.ini
-#define MSG_USE_FTP Use &FTP for downloading files
-#define MSG_USE_HTTP Use &HTTP for downloading files
-#define MSG_SAVE_LOCALLY &Save installer files locally
-#define MSG_DL_PAUSED Setup has encountered a network problem and has paused the download.  If you have just lost your network connection, please click Resume once your network has been reestablished.
-#define MSG_NOT_ADMIN Setup has detected that you do not have the appropriate Administrator privileges to this system.  It is highly recommended that you do not continue with the installation of $ProductShortName$, or it may not function properly.  Would you still like to continue?
-#define MSG_NOT_ADMIN_AUTO Setup has detected that you do not have the appropriate Administrator privileges to this system.  Setup cannot continue with the installation of $ProductShortName$.
-
-#define UNINST_RUNNING $ProductNameInternal$ is detected to be currently running.  Please quit $ProductNameInternal$ before continuing.  Click OK to exit $ProductNameInternal$ automatically and proceed with uninstallation.
-#define UNINST_SHUTDOWN Shutting down $ProductNameInternal$.  Please wait…
-
-#define UNINST_FONT MS Sans Serif
-#define UNINST_FONTSIZE 8
-#define UNINST_CHARSET 0
-# Here is a partial list CHAR_SETS
-#  ANSI_CHARSET = 0
-#  DEFAULT_CHARSET = 1
-#  SYMBOL_CHARSET = 2
-#  SHIFTJIS_CHARSET = 128
-#  GB2312_CHARSET = 134
-#  HANGEUL_CHARSET = 129
-#  CHINESEBIG5_CHARSET = 136
-#  OEM_CHARSET 255
-
-#define UNINST_TITLE $ProductName$ Uninstaller
-#define UNINST_MESSAGE0 Are you sure you want to completely remove %s and all of its components?
-#define BTN_UNINST &Uninstall
-#define BTN_CANCEL &Cancel
-#define BTN_MESSAGE1 Uninstall has detected that the following shared file is no longer used by any programs.  If any programs still require the shared file and it is removed, those programs may no longer function.  Are you sure you want to remove this shared file?
-#define BTN_MESSAGE2 Leaving this file will not harm your system.  If you are not sure, it is recommended that the shared file be not removed from the system.
-#define BTN_FILENAME File name:
-#define BTN_NO &No
-#define BTN_NOTOALL N&o to all
-#define BTN_YES &Yes
-#define BTN_YESTOALL Y&es to all
-
-#define ERROR_DLL_LOAD Could not load %s
-#define ERROR_STRING_LOAD Could not load string resource ID %d
-#define ERROR_STRING_NULL Null pointer encountered.
-#define ERROR_GLOBALALLOC Memory allocation error.
-#define ERROR_FAILED %s failed.
-#define ERROR_DIALOG_CREATE Could not create %s dialog.
-#define DLGQUITTITLE Question
-#define DLGQUITMSG Are you sure you want to cancel?
-#define ERROR_GET_SYSTEM_DIRECTORY_FAILED GetSystemDirectory() failed.
-#define ERROR_GET_WINDOWS_DIRECTORY_FAILED GetWindowsDirectory() failed.
-#define ERROR_CREATE_TEMP_DIR Uninstall was not able to create the TEMP directory: %s
-#define ERROR_SETUP_REQUIREMENT Windows95 or greater Operating System is required!  Exiting Uninstall…
-#define MB_WARNING_STR Warning
-#define ERROR_UNINSTALL_LOG_FOLDER Uninstall log folder not found:%s
-#define MB_MESSAGE_STR Message
-#define DLG_REMOVE_FILE_TITLE Remove File?
-#define ERROR_GETVERSION GetVersionEx() failed!
-#define MB_ATTENTION_STR Attention
-#define MSG_FORCE_QUIT_PROCESS Uninstall has detected that %s (%s) is still running.  Click OK to quit %s and proceed with uninstallation. Alternatively, use the Windows Task Manager to quit %s, and then click OK to continue with uninstallation.
-#define MSG_FORCE_QUIT_PROCESS_FAILED Uninstall will now exit.  Uninstall could not continue because %s (%s) is still running. Try manually quitting %s using Windows Task Manager, and then run Uninstall again.
-#define MSG_DELETE_INSTALLATION_PATH Not all files were uninstalled from the installation directory:\n\n  %s\n\nDo you want to completely delete this directory?
-#define MSG_INSTALLATION_PATH_WITHIN_WINDIR Uninstall has detected that the installation path of $ProductNameInternal$ is installed to a folder within your Windows folder.  Uninstall will not attempt to delete this installation due to the potential removal of critical system files.
-
-#unfilter emptyLines
--- a/browser/locales/shipped-locales
+++ b/browser/locales/shipped-locales
@@ -9,23 +9,24 @@ el
 en-GB
 en-US
 es-AR
 es-ES
 eu
 fi
 fr
 fy-NL
-gu-IN
+ga-IE
+gu-IN linux win32
 he linux win32
 hu
 id
 it
+ja linux win32
 ja-JP-mac osx
-ja win32 linux
 ka
 ko
 ku
 lt
 mk
 mn
 nb-NO
 nl
--- a/browser/makefiles.sh
+++ b/browser/makefiles.sh
@@ -50,17 +50,16 @@ browser/components/places/Makefile
 browser/components/preferences/Makefile
 browser/components/search/Makefile
 browser/components/sidebar/Makefile
 browser/components/sidebar/src/Makefile
 browser/components/shell/Makefile
 browser/components/shell/public/Makefile
 browser/components/shell/src/Makefile
 browser/installer/Makefile
-browser/installer/unix/Makefile
 browser/installer/windows/Makefile
 browser/locales/Makefile
 browser/themes/Makefile
 browser/themes/pinstripe/browser/Makefile
 browser/themes/pinstripe/Makefile
 browser/themes/winstripe/browser/Makefile
 browser/themes/winstripe/Makefile
 "
--- a/browser/themes/gnomestripe/browser/browser.css
+++ b/browser/themes/gnomestripe/browser/browser.css
@@ -418,16 +418,20 @@ menuitem[command="Browser:ShowAllHistory
   -moz-image-region: rect(0px 32px 16px 16px);
 }
 
 menuitem[command="Browser:ShowAllBookmarks"] {
   list-style-image: url("chrome://browser/skin/Toolbar-small.png");
   -moz-image-region: rect(0px 48px 16px 32px);
 }
 
+#bookmarksToolbarFolderMenu {
+  list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png");  
+}
+
 #menu_openDownloads {
   list-style-image: url("chrome://browser/skin/Toolbar-small.png");
   -moz-image-region: rect(0px 16px 16px 0px);
 }
 
 menuitem[command="View:PageInfo"],
 #context-viewinfo,
 #context-viewframeinfo {
@@ -839,17 +843,17 @@ toolbar[iconsize="small"] #paste-button[
   -moz-image-region: rect(0px, 16px, 16px, 0px);
 }
 
 #page-proxy-favicon[pageproxystate="invalid"] {
   -moz-image-region: rect(16px, 16px, 32px, 0px);
 }
 
 #urlbar-throbber {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://browser/skin/places/searching_16.png");
 }
 
 /* Identity indicator */
 #identity-box {
   background-color: -moz-dialog;
   color: -moz-dialogtext;
   -moz-border-end: 1px solid ThreeDShadow;
 }
@@ -1020,18 +1024,22 @@ toolbar[iconsize="small"] #paste-button[
   width: 16px;
   height: 16px;
 }
 
 .ac-comment {
   font-size: 1.15em;
 }
 
+.ac-extra > .ac-comment {
+  font-size: inherit;
+}
+
 .ac-url-text {
-  color: #336633;
+  color: GrayText;
 }
 
 .autocomplete-treebody::-moz-tree-cell-text(treecolAutoCompleteComment) {
   color: GrayText;
 }
 
 .ac-comment[selected="true"], .ac-url-text[selected="true"] {
   color: inherit !important;
@@ -1137,37 +1145,37 @@ statusbarpanel#statusbar-display {
 #navigator-throbber {
   -moz-appearance: none;
   -moz-user-focus: ignore;
   margin: 0 !important;
   border: none !important;
   padding: 0px !important;
   min-width: 0;
   background-color: transparent;
-  list-style-image: url("chrome://browser/skin/Throbber-small.png");
+  list-style-image: url("chrome://global/skin/icons/notloading_16.png");
 }
 
 #navigator-throbber[busy="true"] {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://global/skin/icons/loading_16.png");
   opacity: 0.5;
 }
 
 #navigator-throbber > hbox {
   border-top: 0px;
   border-bottom: 0px;
   padding-bottom: 1px;
 }
 
 toolbar[mode="text"] #navigator-throbber,
 toolbar[iconsize="small"] #navigator-throbber {
-  list-style-image: url("chrome://browser/skin/Throbber-small.png");
+  list-style-image: url("chrome://global/skin/icons/notloading_16.png");
 }
 toolbar[mode="text"] #navigator-throbber[busy="true"],
 toolbar[iconsize="small"] #navigator-throbber[busy="true"] {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://global/skin/icons/loading_16.png");
   opacity: 0.5;
 }
 
 tabpanels {
   -moz-appearance: none;
 }
 
 /* Tabs */
@@ -1187,17 +1195,17 @@ tabpanels {
   height: 16px;
   -moz-margin-start: 4px;
   -moz-margin-end: 3px;
   list-style-image: url("chrome://global/skin/icons/folder-item.png");
   -moz-image-region: rect(0px, 16px, 16px, 0px);
 }
 
 .tabbrowser-tab[busy] > .tab-icon-image {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif") !important;
+  list-style-image: url("chrome://global/skin/icons/loading_16.png") !important;
   opacity: 0.6;
 }
 
 .tabs-bottom {
   border-bottom: 1px solid threedshadow;
 }
 
 #context_newTab {
@@ -1306,32 +1314,32 @@ tabpanels {
   -moz-image-region: rect(0px, 16px, 16px, 0px);
 }
 
 .alltabs-item[selected="true"] {
   font-weight: bold;
 }
 
 .alltabs-item[busy] > .menu-iconic-left > .menu-iconic-icon {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://global/skin/icons/loading_16.png");
   opacity: 0.6;
 }
 
 .tabs-alltabs-button > .toolbarbutton-icon {
    margin: 0px;
 }
 
 /* Sidebar */
 #sidebar-box .tabs-closebutton {
   margin-bottom: 0px !important;
   padding: 0px 2px 0px 2px !important;
 }
 
 #sidebar-throbber[loading="true"] {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://global/skin/icons/loading_16.png");
   opacity: 0.5;
   -moz-margin-end: 4px;
 }
 
 toolbarbutton.chevron {
   list-style-image: url("chrome://global/skin/toolbar/chevron.gif") !important;
 }
 
@@ -1360,15 +1368,15 @@ toolbar[mode="text"] > #window-controls 
 }
 
 /* Popup blocking dialog */
 #pageReportFirstTime statusbarpanel.statusbar-resizerpanel {
   visibility: collapse;
 }
 
 #checkForUpdates[loading="true"] {
-  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+  list-style-image: url("chrome://global/skin/icons/loading_16.png");
 }
 
 #download-monitor {
   list-style-image: url("chrome://browser/skin/Toolbar-small.png");
   -moz-image-region: rect(0px 16px 16px 0px);
 }
index 0baa2dd8fc26ee6179e88dc6154358868f139788..b0327496a133ca87d242ba89c04a4126e76cd0a7
GIT binary patch
literal 1248
zc$@*?1Rwi}P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800004b3#c}2nYxW
zd<bNS00009a7bBm000fw000fw0YWI7cmMzZ8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ@H11YJo)K~z|U#h1@(TvZguKj+SyH}huFbecAClGr9~Hf=3MN?R$k
z8(noHf*^uB3vNXJ02hiI!F6$|tNsC66a+y;s0+10#1>H+(%PoMM4QH$%&+(EadF?9
znPlEfUPS2G%*?&#p6~a5&pG$r5mn_$nt7t=fY<-y;+0SKb^PLoYI$8%3;!pOh=j(-
zXYIDUz4-B~E2#uRKX~u>+~k$>r;qr4-c6N!kGpF%I-%VYVBRy#O^vbD3IXVZk+*pJ
z!ArO9th9jFQVFQlH_x9w;@|tLNf=rFc(Bgp3k$T{P42Ef-V=ej>VDc`z*pZdad`F+
zUe0jl<ZSNe-&S53O2DcX^Z6WM<aWDRYq0$AF$*&l?%li3W^F4I`1n|fW7BioS$WK6
ztpPw7S@K>ERo#Z^?Ofd76xGQJHx`#TJoPM>&Ys|#?|$In>e@)~>FOkx&Yqwh!i~ix
zo}QiTi#^zJ0|cz?IUStXM>`C;_W4a-eEt-dU%1HX>Yw~_>o$Ks+F)a21At1U!o-0J
zr=B@UwK~PhdY$WE|HRDfAr4OL>%~s#_(1|YoTjG^5EOjA`1V)wo^bBe5zd^uK;U~6
zeAmUTwx!VydAR-$UtV9N6DkYGW~l5h?}(j20Z@!=ADO6>nW!A4zSZLP(i%VBx=*9o
zq1oyHP%PvLig`+<0t-iHD3{VZSW?CY2ndkd$snE?9}5^C3x-BaTeWRI#bHnZft=ap
zfE<A|n#AC2iUKl3flLS^T{0;kGDtvGkx``5OcmLIn5hQl?tjY5tM8<`XT3MmsVX<8
zKLDzu2>|%TQXHv2)E*V+ryI9l<}UCHr5Id51XY(B&8UGOE^U&4>-HmdBmn_GD0RU>
zP$VXh%^a@cR%n;Ru0<#UAN{_-yN}+-h+xF+TqKq+Ekc^9(@ND5vFc92>O={V`fvgO
zk#%5#B4RKmCIa269+nD;v#jbWz$#b^q81_RU0|J5Vhl#ysVIOkF#&Z@Lrok3Yw6a2
z8iQE7?V=k>K(R@juKbRKbn9|AQv}H=k#%Q*#08k?GKy@kSd!c);QiyN!2R)6;xzWw
zL{Sz3k-9+A%cY{AJ=EP^@@`$P5R<V?3Upd+Y#1g<2P;?sBN7+kZp|oh<-3hUkrJt5
zt)<-@^!5P6MV51KT%%Fn#9H?zh>Vakrk9G0ZK!>17{$eB6|^M~j3Xk(x%D212Jiv4
zHrL~vOWcAEy<3Et2qbB9vRkXDDlJjU!8kwxXai9{fg%uYZLE2c0Gi|w$|`?i606|S
zptkqDJasHguz<)*<OgyR)vi8u{JFPO@q}dOamfEbfMi9ihzKEJ?JAISAw|Sp8j=Ub
zVrID@2n3*5EXJRRo7#&tX*L~xv)NRDMx&uX1T=w~s&*0rIb01CafK=6ayk8Bn9T;H
zs@LoB%|sXzXsc?J5a_0X^nc7UKR=%l+u8E+aw-wP;#5#o)qer~Yv?Cpme_m%0000<
KMNUMnLSTY!z)r6K
--- a/browser/themes/gnomestripe/browser/jar.mn
+++ b/browser/themes/gnomestripe/browser/jar.mn
@@ -38,16 +38,17 @@ classic.jar:
   skin/classic/browser/places/livemark-item.png       (places/livemark-item.png)
   skin/classic/browser/places/pageStarred.png         (places/pageStarred.png)
   skin/classic/browser/places/starred48.png           (places/starred48.png)
   skin/classic/browser/places/unstarred48.png         (places/unstarred48.png)
   skin/classic/browser/places/places.css              (places/places.css)
 * skin/classic/browser/places/organizer.css           (places/organizer.css)
 * skin/classic/browser/places/organizer.xml           (places/organizer.xml)
   skin/classic/browser/places/query.png               (places/query.png)
+  skin/classic/browser/places/searching_16.png        (places/searching_16.png)
   skin/classic/browser/places/starPage.png            (places/starPage.png)
   skin/classic/browser/places/tag.png                 (places/tag.png)
   skin/classic/browser/places/toolbarDropMarker.png   (places/toolbarDropMarker.png)
   skin/classic/browser/places/wrench.png              (places/wrench.png)
   skin/classic/browser/preferences/alwaysAsk.png      (preferences/alwaysAsk.png)
   skin/classic/browser/preferences/application.png    (preferences/application.png)
   skin/classic/browser/preferences/mail.png           (preferences/mail.png)
   skin/classic/browser/preferences/Options.png        (preferences/Options.png)
--- a/browser/themes/gnomestripe/browser/places/organizer.css
+++ b/browser/themes/gnomestripe/browser/places/organizer.css
@@ -50,31 +50,16 @@
 }
 
 #placesMenu > menu > .menubar-right {
   -moz-appearance: toolbarbutton-dropdown;
   width: 12px;
   height: 12px;
 }
 
-/* organize button */
-#organizeButton {
-  list-style-image: url("moz-icon://stock/gtk-properties?size=button");
-}
-
-/* view button */
-#viewMenu {
-  list-style-image: url("moz-icon://stock/gtk-sort-ascending?size=button");
-}
-
-/* maintenance button */
-#maintenanceButton {
-  list-style-image: url("moz-icon://stock/gtk-revert-to-saved?size=button");
-}
-
 /* Root View */
 #placesView {
   background-color: Window;
 }
 
 #splitter {
   min-width: 3px;
 }
@@ -89,16 +74,21 @@
   border: none;
   padding: 0;
 }
 
 #placeContent {
   border: 0px;
 }
 
+#infoPaneBox {
+  border-top: 1px solid ThreeDShadow;
+  padding: 5px;
+}
+
 /* Search Bar */
 #searchbar {
   margin: 6px -4px 0px 2px;
 }
 
 .textbox-input-closebutton {
   -moz-appearance: none;
   margin: 1px 2px 1px 1px;
--- a/browser/themes/gnomestripe/browser/places/places.css
+++ b/browser/themes/gnomestripe/browser/places/places.css
@@ -18,19 +18,25 @@
 }
 
 /* Trees */
 treechildren::-moz-tree-image(title) {
   padding-right: 2px;
   margin: 0px 2px;
   width: 16px;
   height: 16px;
+  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
+}
+
+treechildren::-moz-tree-image(title, livemarkItem) {
+  list-style-image: url("chrome://browser/skin/places/livemark-item.png");
 }
 
 treechildren::-moz-tree-image(title, separator) {
+  list-style-image: none;
   width: 0;
   height: 0;
 }
 
 treechildren::-moz-tree-image(title, container) {
   list-style-image: url("moz-icon://stock/gtk-directory?size=menu");
 }
 
@@ -39,22 +45,42 @@ treechildren::-moz-tree-image(title, con
   -moz-image-region: auto;
 }
 
 treechildren::-moz-tree-image(title, container, tagContainer) {
   list-style-image: url("chrome://mozapps/skin/places/tagContainerIcon.png");
   -moz-image-region: auto;
 }
 
+treechildren::-moz-tree-image(container, OrganizerQuery_AllBookmarks) {
+  list-style-image: url("chrome://browser/skin/Toolbar-small.png");
+  -moz-image-region: rect(0px 48px 16px 32px);
+}
+
+treechildren::-moz-tree-image(container, OrganizerQuery_BookmarksToolbar) {
+  list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png");
+  -moz-image-region: auto;
+}
+
+treechildren::-moz-tree-image(container, OrganizerQuery_BookmarksMenu) {
+  list-style-image: url("chrome://browser/skin/places/bookmarksMenu.png");
+  -moz-image-region: auto;
+}
+
 /* query-nodes should be styled even if they're not expandable */
 treechildren::-moz-tree-image(title, query) {
   list-style-image: url("chrome://browser/skin/places/query.png");
   -moz-image-region: auto;
 }
 
+treechildren::-moz-tree-image(title, query, OrganizerQuery_History) {
+  list-style-image: url("chrome://browser/skin/Toolbar-small.png");
+  -moz-image-region: rect(0px 32px 16px 16px);
+}
+
 /* We want some queries to look like ordinary folders. This must come
    after the (title, query) selector, or it would get overridden. */
 treechildren::-moz-tree-image(title, query, folder) {
   list-style-image: url("moz-icon://stock/gtk-directory?size=menu");
 }
 
 treechildren::-moz-tree-row(session-start) {
   border-top:1px dotted ThreeDShadow;
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..e807a531efe73461cc9adf4f878b2b8e8885cdf5
GIT binary patch
literal 3763
zc${_Cc{Ei09|!O|#=efRjioRK5h8n(!NeFe60(Kt9!oTYh_Pl%X0n74SyC86_9bN+
zW34AqDN4$el07QRZ#<9RIsSN>bMAb;=bm%__`L4>`}y8ft5c>toMM~+0PvWhQPzwK
z*}d3V8UK<iJLegN{k(^b1*38^F2JHonV(U_y#Kui{Qm*q|33xrXAlUb0}^4ZTg_00
zHagduZX6F{GUQHrn9Ou*k)?T3m_h<R0ZxG}xTwKy(=-?dqQT65d1Ae6sgZ4)!&F^d
zrt~CAy^&vMo7xH%Q#GH<Z}Xgm-vi@9Iy6^=KKCHLeEXiz!ABhFv3a}Jk!8+t0^cjJ
zZRLDqer9Nm!ttsuqxHz}&=q-atpbO<P)9Ye)E7_huCy&9)Po`Cw^ue4dM2+9Im1i4
zj<~I`2PoIy_q(>3Y}}sI89lHb@l$<Ew3u+f(E)P*3w~dxp#Sdlo%z>Z#(LA+)6j-d
znHb%k(GBWVg^=Wucs5v=Z0b)-!#8_aYg29JP{<vr9yX3mF3AUD<qlj%AMANEEOhlc
z-g>Za3a9{YRk;mqjs1s3!&9^YP!F?ID$U}e!%Iz35sMZ7Wi~wXdjb4)wM&TKq(*I(
z{MjHvxPUW=v_N?(Y<_1;ZN;;WbTA|0=y2lJDM$a>@dAv(Ou|QTldq2hGpbmLT>aaJ
z^r){=Y5Ls8uh0uuAOv0Ns{=w(uWvZpXnu?I2|SQ#g%R~9_jlG$H_3{*9FtibM(g@u
z8(O;by~>>kfLm3Q95Fp*C^y3Q({UBDW@Xi*k+oHyU+Ud}#+;+7uXk$9J}vNnYaN}`
zQDjhZ>}fGGw5-*3wPuLYpiL%natozPgn9CTy>aL3!gp@8vV#@2JI`=84MntBto05#
zW`>*2Wx^M+cYzlG#qltrkc3;~T>_B6DqsQ_v!9pJja;}ep%*}?!+Zmrft%Sx>DOuK
z%C4_ixa6@#j`ypjvCpUOHoDSu&#vgN{~8FHp_B!^EZeX_Hc0Cd0<>v-q_FhMWF0yp
zQI!H47H4AZ!MlIv{QE;KGUM+=2rK=qcAVqOV+$Nv0c&q(+gxtL8vRRCLI)dG>*Cjb
zU$Ch$gc3463$2eH>UIw87?wJYqC~~Y=q5o}1#zawL(~TjUmOwYr#c?SR4qx69#Rfu
zUUi|pz$o9_N5}Gqpow6t7<7m|I@W*a(h`x78X=Wu=lLx(HEabXgExROFQm7Tx~onx
zWL8gLjAfLoy5p-$@L4zauqInC@J`}kycm+N#5K1<F8@YnG&CmlGiwi%su>YRC&}KU
zM}GI3C2u$-3gCs24z{+UM!qe9h1u42-na5#9>+vsAWzd6Sh9r<SIHX!5gWB2PY$~b
zRTB!=rrd&$hmmD{aPaOjev!4A!Gm~(w9?Hd@lZVfa7<iQW!80l<-1SD``8iUbkez8
zFOlgq`=Lbp7v{d?GYeZN>l;JYqvcghetMaD0wxvNn$*xE8xd%X!q={1BlbXBTUqxb
z<kqNI^tvqL%^{j_BXVZ$5Uxh((rPvcKpa8f6z=6!QfH<&Wn+M|XWVWN<HAh$sj~ec
zka78K3{{yuRrcNOtCpF-*uH2hXGo5@BZ3npn9e435P;t9J&<H>zB#aC_(2cH64k~P
z+$PvYXs!>x6h7|pz8C^VgM3pT1isl2azB)K5D!uXVA<B*4!PoHfn*-Od@qM&Kv7x?
zPywJoD(<^c!^%{l6uY9|Di2YfI1zPWS-%cMYT-efIOL8!fB!33H`7D^DGu8pBYK>$
zAw9ZgzaDB@m3?$nLkLTAJ>;3TO218QzyC3bDfQ!Ai!j=&#z59$)aFpdC8&E%y5D`3
zIS4|AIH~`1OD9v$;~eOw(%_t{%LfuYa=uF&q1ivGCCwdQLQEXd4cCU+oza9hLPzJ%
zlX=YMyc~i`aapSH(;i<R%h38FH!NPk=z$x|KfK)iN}jcJ?nCAHLsXaVe%c+Fd#Ied
zsCsF=s)8iBM4k}Y;2F$&tw-(nM{HJ~f^0V~Dmt@Avj}xx6`%C5-e4g%Ez12CjToNU
z^44J5=3v2#;R$zT*OhsnKLZB?CuB+E?N|j-VqbuKf7yDsEk+j*?h!)Dh7{fDCrWg#
zla(%;VD3rlQeb*O<xo7F`l>(PyVt>g@+w5Be}(r6Ut4XTh~;0?(XaiwXW&h19?#u`
zsxO~M$~Mhn*)|J|;%s5*ws)1#w~X2C{JZ%10kMkgbjHxd)#?qeyd_9jV+wtk@d@kQ
zvbu>7EfXfU!G_Qoo#u`p=iDc>RIHtF8mq2|_u|acRjr`BTsMl{Ah~a!7}p<S=oz(p
zx_0l0asLxT-UL<d&LoUf*noGkQjOFy3#A~H{PV7BmO^Yh?;6tYo}w>y*}WLso(|sR
zI13!WyNx+4sH5%RP(TTQ;tOq=?x&!o9Oji>(Wj~kPzWX%@W3u11!ZfAkSFGefEKoV
z6Wg+%2hc0BlRwr}^+y?WuXO6r-ACG{8gJrii*SD{o$z{||1{=8WYSdYWV`4hd-ax4
ziDuBoy&gZVN@M-43_4#wDzkW*weQ3z|634^^Fsc%TI08U{qp=FA+;Qr80+o5etG}-
zM%dkUNe|`Hph*Kzo*dZ;R4@p^i#*w)(n{juG<S}Rk9xLou#x2qV%oI&+xHuH>V2k$
z#0`24q(K);UeMOQ!QdA&)pExtgoAtXlEIF$dh=t&o$EO%p}ndaJz$!~L8M1UNC9pN
zekemNNTSaX)lBW0J163y)U45h1UvI0ri|FHVWRzr)g!-MmIS^R6dFk8Dh&?AAhY~}
zepWI+%+0d*e*-a+fwv@l;2JDFYmT7Wr=Ybh&+s_EJA4u$+E=ed)p1+PNTIbY{8qF)
zQ+duMqkJ@M>UWxqc7u|SmzRH_-cwu~{c(8okNgvlw2S84C{Dg)?R{Q+f5?Z<L@{GW
zN$q(-_Km4K=zqu5;nNU4q&|Q!x~eClLfFXJNuY$!a%w@_63hCpJ-F7TK6PM$X(z5Z
zPyi6c8^OU@640)7{(g6d+^gdgOfZBJ-i1<nJf=Lm%7{JJQ#*5p2dNkWewJcooBPR>
zpa&GvBQ1|^2gj;WUo0aHmmhRllv7xHBI{5@wf>-6^eNr-4`y<o&aKn17Nem;u?_Q)
zabq>BXyirK>1eFfsN);I0$!({iCKTHkv7j;^jn@SD_|_CUTo4s&mMtAq(kC0sV@MP
zhxv#Z{iptsTibHVy{FBL62c;^fiF6l+Qf70j}$8uH#M)>4}Ur73#j^%=Npvxh)L@)
zd7V$*9PN+4B5ANYqiWZOdH0F(|F`IrZs2u>sN$X|ROcF*Xqd*N202;GqoR@WzB%f(
z)06k0a=xrFh%eFW(k<0I$i*U;ob>FHnbprd(KI>Rwd%Q-S9g+Alu(Qle-2b#$EH>M
z;z(b}1NaBrNWEVHz%0e&ifJY(vyM=2Ms&GMYFJ*a{pwi4!izssx+2kkS|EA!%Y$v{
zZdO(g3vOwNhiux%O2KwGnac}jD+J}?E~w_~^)4L?^t1&C;mU}vi%Q=1(mU%Xf4$@X
zcB#V-H_sKv`ffT$s^SHmRF=|tF0S3Xy!M<l+=+jwLXh57EJRSeU&gr|Py>1VH%uTd
z?s9|tXFs<2?TaQ>GJf%81(oydwMBQnSYbjY+{V%2&}tbIDGf^j8%cxAnL4`|O0pu6
zB>;2pY>{xW;0}kjwUgWJ?=L-a_t^^kx2<|zw>QI<XU|rUkyfHw&|@nI%GDS|#J(49
z1N&g{&)e#`-d+hOf%2Cn2gnOc*VP55>>>Q(3jNu?!+m_{e4A|6nEdk6Dn&5&EAVT*
zM)96s-3I3E6c`wS=k+ZLXw-;iI;LJNn=_*`i{zDvn@BxnK!}d$mA@ag)V<O&5>=el
zMiG0ZLTc4){B^mjS)oE6`(q^99>$8aR`>$H7f~aA!{MjcBUSFm3^ff)4_v*USh`yB
zd6*qXwAo@sW6fi)oC^?%n<JA?bF!^3bxb;{J82U7Kj(@(`ZcEg*f=YCke}8UG9;T*
z8>EJIMa)9=q$se2a`SiVK6a&>DH;8U>Z$>R(7S{cpH^^|fD0|bVf4yAKA}HE(`!hA
z!3W;s6W$$;|9m7fSB9JiUycLW2H4+ZH$cj0-o_NMf0kt4kcx|)POv}6If`*dG%(3H
zO?_8x4L9A853LZi^>1?Y=Q>pKW;6m&QdJp*qC78+SRw%`^+0n$ouxhnb}eOf>bJTZ
z{&vXAcNS9x?+@r~^%RSV6#R&q{Xqfg1fle`hH1SPHn{Ep4RDrq`$v+o!b$Q;a#Prd
zrSgIts$7K7HvZR3ck);oO$olG4qn)Lt*b5Sae@b<ph#yNm{^(MbkWu)E=$Xh=_i_x
zd!<3ts90gb32N)ttnYHo$JKP`a{T$Yk&aV84<AGNkpszN%|#2pEMlo_YPpW8uUXAs
P?b?`~JcX(?a*O{TaQ_Co
index 61a5b18e45967fa6fac23b2ce0fde8e436fa1fb2..20ca2028765a7b64e3590f3a1673162c7deff3ea
GIT binary patch
literal 11688
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
--- a/browser/themes/gnomestripe/browser/searchbar.css
+++ b/browser/themes/gnomestripe/browser/searchbar.css
@@ -22,36 +22,39 @@
   -moz-margin-start: 2px;
 }
 
 .searchbar-engine-button {
   -moz-appearance: none;
   min-width: 0;
   margin: 0;
   -moz-margin-end: 2px;
-  padding: 2px 0;
   border: 0;
   -moz-box-align: center;
   background-color: -moz-dialog;
   -moz-border-end: 1px solid;
   -moz-border-right-colors: ThreeDShadow;
   -moz-border-left-colors: ThreeDShadow;
 }
 
 .searchbar-engine-button > .button-box {
   -moz-appearance: none;
-  padding: 0;
+  padding: 2px 0;
   -moz-padding-end: 2px;
   border: 0;
 }
 
 .searchbar-engine-button[addengines="true"] {
   background-color: Highlight;
 }
 
+.searchbar-engine-button[addengines="true"] > .button-box {
+  background-color: rgba(230, 230, 230, 0.3);
+}
+
 .searchbar-dropmarker-image {
   -moz-appearance: toolbarbutton-dropdown !important;
   width: 12px;
   height: 12px;
   -moz-margin-start: 1px;
 }
 
 /* Search go button */
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d32ef3d14bf8859d0aafe0240877bda70b346694
GIT binary patch
literal 385
zc%17D@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVg?3oVGw3ym^DWND9DoT
z=<CS9u(7Y^ci?0oUm@8e$d`ekN|k}3p_zf<=YJsml7XSrfPvvv0t1893<d`A{7Lag
z-GFMpd%8G=RNU&BwAYK-QKWVMn^)Q#2gL(eHj36XL~~A3x^d%H1gB!cWWR_B4HJ%C
zbDMPRTgkMh&<&qhYgn{BuRY^gGh6Wcfv4x@%ryR<UsW1ASwQgk0o8(xSF#lozIbu(
zRq5%_e$Zx<r+U_`rEd$vwF4qEe%ElsFtZv=_%f{}`djh>mQ~kIe;3?Xq?Vj8fsgCA
z?eFD2vpTIaCb8ZPeAXiW?YZQ^4Hpw{nTF+^(@@&inEp9^UG7us{mNB-q8oU98kXiJ
ztz+@qRGd@Wpd9SIzI@OA$tHINo(Tx<KA^nezR3UEp`P;(Xnsgqb-z+((!K`n=&PDn
d_kS>E;FS)zGco182`~s4JYD@<);T3K0RRV5mNNhV
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..a14aea4a015eb6b25160470b2f24c3c489be137f
GIT binary patch
literal 512
zc$@(M0{{JqP)<h;3K|Lk000e1NJLTq000;O000;W1^@s6;CDUv0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzqDe$SRCwC#RKZFDK^UH~U7-vD>!1|~
zb`BIo=n(EZ^a4FbMc3*9JS7UgMF)?0szXGV4h6z)dRhsWHFVv!|Erl;Y+Wt4n?HOo
z^UwEx-^}jJ&pgj#VbN$b)_T3((O@vRBCZZ#j2zb3v<NYX>AJ2tj&n<#b`Y=z4!FNH
zh_za+gGs{U0C%EEkU_0h+jL#`SqfN|^;j;KFEmX%1TaQUu7iu3Sq&7!FwSIgx7)qX
z=kwTMj*u0|A!nNAo#degwX+zk((anFuv)F2Qf>!%A)ttHwo<7a`%c*u`KbmQbYxu?
zmP(~P$|V90zfvd^ijp@R4xdmvi$Ti&18JTiECm=Kml@-xe%zLTLOwQk2yOt+6>DL&
zjN=5H^H`_T*-s{uC-HcEm(3CMsUGNJoTt<2Ynr}GgJpU&H;SUHvj}1|8kwr97HRk<
zKT#qo@y~nyrIqmi1C>P|s^5VBg8^ruO)8>T7%U8;Gw}NT{%cgCLd)|TIQ4q{(zb1D
zUU6tZOLp4tW=G>K!nWuke|_25wM{SxFKBij0t^7lIa$H!RZT<y0000<MNUMnLSTZr
Cao-jI
index e798328ed326d1bd5f8e311c1870375e63c28174..bb1921857add3acc80e55bd9a0349afbaaf6ef7d
GIT binary patch
literal 43590
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%0D~+eI-a&s#=L9bt>f
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
N_*6}{MB4bn{{Y2YOo9La
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..786373b1ad673e16e46c113676a4580908ec0dbc
GIT binary patch
literal 156
zc%17D@N?(olHy`uVBq!ia0vp^tUz4B!2~3?Zd|_>NJ*BsMwA5Sr<If^7Ns&crsOB3
zDtP85rl$s_CZ<#to=mj?Dzfu*aSW-rl~nWVizc&BLXrdP;y;1^G~^j0{{8>&?_0_9
zZ-4!NkD&k0&&yA`5}YN^Xt(mA;VJp2{V8@14U7zKi_PlK{%^Jen#ADg>gTe~DWM4f
DmOnP`
--- a/browser/themes/pinstripe/browser/browser.css
+++ b/browser/themes/pinstripe/browser/browser.css
@@ -20,16 +20,17 @@
  *
  * Contributor(s):
  *   Joe Hewitt (hewitt@netscape.com)
  *   Jason Kersey (kerz@netscape.com)
  *   Pierre Chanial (chanial@noos.fr)
  *   Kevin Gerich (kevin@kmgerich.com)
  *   Pamela Greene (pamg.bugs@gmail.com)
  *   Dao Gottwald (dao@design-noir.de)
+ *   Stephen Horlander (stephen@noved.org)
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either the GNU General Public License Version 2 or later (the "GPL"), or
  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  * in which case the provisions of the GPL or the LGPL are applicable instead
  * of those above. If you wish to allow use of your version of this file only
  * under the terms of either the GPL or the LGPL, and not to allow others to
  * use your version of this file under the terms of the MPL, indicate your
@@ -46,44 +47,44 @@
 @namespace html url("http://www.w3.org/1999/xhtml");
 
 #main-window {
   -moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedWindow");
   -moz-appearance: none;
 }
 
 #main-window[chromehidden~="toolbar"][chromehidden~="location"][chromehidden~="directories"] {
-  border-top: 1px solid #606060;
+  border-top: 1px solid rgba(0,0,0,0.65);
 }
 
 /* ----- SEARCH FIELD ----- */
 
 #wrapper-search-container #searchbar html|*.textbox-input {
   visibility: hidden;
 }
 
 /* ----- BOOKMARK TOOLBAR ----- */
 
 #PersonalToolbar {
   background: url("chrome://browser/skin/bookmark_toolbar_background.gif") repeat-x center center;
-  border-top: 1px solid #DDDDDD;
+  border-top: 1px solid rgba(255,255,255,0.25);
   border-bottom: 2px solid;
-  -moz-border-bottom-colors: #404040 #9D9D9D;
+  -moz-border-bottom-colors: rgba(0,0,0,0.35) transparent;
   padding: 2px 0;
 }
 
 
 /* ----- BOOKMARK BUTTONS ----- */	
 
 .bookmark-item[container] {
   list-style-image: url("chrome://global/skin/tree/folder.png");
 }
 
 .query-item[container] {
-  list-style-image: url("chrome://browser/skin/places/query.png");
+  list-style-image: url("chrome://browser/skin/places/history.png");
 }
 
 toolbarbutton.bookmark-item:hover
 {
   background: url("chrome://global/skin/toolbar/toolbarbutton-customhover-left.png") no-repeat left center;
 }
 
 toolbarbutton.bookmark-item:hover:active, toolbarbutton.bookmark-item[open="true"] {
@@ -241,25 +242,34 @@ toolbarpaletteitem[place="toolbar"] .pla
 
 /* ----- BOOKMARK MENUS ----- */	
 
 .bookmark-item > .menu-iconic-left > .menu-iconic-icon {
   width: 16px;
   height: 16px;
 }
 
+#bookmarksToolbarFolderMenu {
+  list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png");  
+}
+
 /* ----- PRIMARY TOOLBAR BUTTONS ----- */	
 
 .toolbarbutton-1,
 #back-forward-dropmarker {
   min-width: 0px;
   list-style-image: url("chrome://browser/skin/Toolbar.png");
   -moz-box-orient: vertical;
 }
 
+toolbar[mode="text"] .toolbarbutton-1,
+toolbar[mode="text"] .toolbarbutton-menubutton-button {
+  -moz-box-orient: horizontal;
+}
+
 toolbar[mode="text"] .toolbarbutton-1 > .toolbarbutton-text {
   margin: 4px;
 }
 
 #nav-bar .toolbarbutton-1 {
   padding-top: 0;
   padding-bottom: 0;
 }
@@ -331,53 +341,53 @@ toolbar[mode="icons"] #forward-button .t
 #forward-button[buttondown="true"],
 #forward-button[open="true"] {
   -moz-image-region: rect(46px, 72px, 69px, 36px);
 }
 
 /* ----- DEFAULT BACK/FORWARD BUTTONS ----- */
 
 toolbar[mode="icons"] #back-button {
-  -moz-image-region: rect(0px, 548px, 39px, 504px) !important;
+  -moz-image-region: rect(0px, 539px, 33px, 504px) !important;
   -moz-margin-end: 0 !important;
   -moz-padding-end: 0 !important;
   border-left: none !important;
   border-right: none !important;
 }
 
 toolbar[mode="icons"] #back-button[disabled="true"] {
- -moz-image-region: rect(39px, 548px, 78px, 504px) !important;
+ -moz-image-region: rect(33px, 539px, 66px, 504px) !important;
 }
 
 toolbar[mode="icons"] #back-button:hover:active:not([disabled]),
 toolbar[mode="icons"] #back-button[open="true"] {
-  -moz-image-region: rect(78px, 548px, 117px, 504px) !important;
+  -moz-image-region: rect(66px, 539px, 99px, 504px) !important;
 }
 
 toolbar[mode="icons"] #forward-button {
-  -moz-image-region: rect(0px, 576px, 39px, 548px) !important;
+  -moz-image-region: rect(0px, 566px, 33px, 539px) !important;
   -moz-margin-start: 0 !important;
   -moz-margin-end: 0 !important;
   -moz-padding-start: 0 !important;
   -moz-padding-end: 0 !important;
   border-left: none !important;
   border-right: none !important;
 }
 
 toolbar[mode="icons"] #forward-button[disabled="true"] {
- -moz-image-region: rect(39px, 576px, 78px, 548px) !important;
+ -moz-image-region: rect(33px, 566px, 66px, 539px) !important;
 }
 
 toolbar[mode="icons"] #forward-button:hover:active:not([disabled]),
 toolbar[mode="icons"] #forward-button[open="true"] {
-  -moz-image-region: rect(78px, 576px, 117px, 548px) !important;
+  -moz-image-region: rect(66px, 566px, 99px, 539px) !important;
 }
 
 toolbar[mode="icons"] #back-forward-dropmarker {
-  -moz-image-region: rect(0px, 590px, 39px, 576px) !important;
+  -moz-image-region: rect(0px, 582px, 33px, 566px) !important;
   -moz-margin-start: 0 !important;
   -moz-margin-end: 3px !important;
   -moz-padding-start: 0 !important;
   -moz-padding-end: 1px !important;
   border-left: none !important;
   border-right: none !important;
 }
 
@@ -387,73 +397,73 @@ toolbar[mode="icons"] #back-forward-drop
   padding: 0;
 }
 
 toolbar[mode="icons"] #back-forward-dropmarker > dropmarker {
   display: none;
 }
 
 toolbar[mode="icons"] #back-forward-dropmarker[disabled="true"] {
- -moz-image-region: rect(39px, 590px, 78px, 576px) !important;
+ -moz-image-region: rect(33px, 582px, 66px, 566px) !important;
 }
 
 toolbar[mode="icons"] #back-forward-dropmarker:hover:active:not([disabled]),
 toolbar[mode="icons"] #back-forward-dropmarker[open="true"] {
-  -moz-image-region: rect(78px, 590px, 117px, 576px) !important;
+  -moz-image-region: rect(0px, 582px, 33px, 566px) !important;
 }
 
 /* ----- SMALL BACK BUTTON, PAIRED----- */	
 
 toolbar[iconsize="small"][mode="icons"] #back-button {
-  -moz-image-region: rect(0px, 623px, 23px, 590px) !important;
+  -moz-image-region: rect(0px, 616px, 23px, 582px) !important;
   -moz-margin-end: 0 !important;
   -moz-padding-end: 0 !important;
   border-left: none !important;
   border-right: none !important;
 }
 
 toolbar[iconsize="small"][mode="icons"] #back-button[disabled="true"] {
- -moz-image-region: rect(23px, 623px, 46px, 590px) !important;
+  -moz-image-region: rect(23px, 616px, 46px, 582px) !important;
 }
 
 toolbar[iconsize="small"][mode="icons"] #back-button:hover:active:not([disabled]),
 toolbar[iconsize="small"][mode="icons"] #back-button[open="true"] {
-  -moz-image-region: rect(46px, 623px, 69px, 590px) !important;
+  -moz-image-region: rect(46px, 616px, 69px, 582px) !important;
 }
 
 /* ----- SMALL FORWARD BUTTON, PAIRED ----- */	
 
 toolbar[iconsize="small"][mode="icons"] #forward-button {
-  -moz-image-region: rect(0px, 657px, 23px, 623px) !important;
+  -moz-image-region: rect(0px, 649px, 23px, 616px) !important;
   -moz-margin-start: 0 !important;
   -moz-padding-start: 0 !important;
   border-left: none !important;
   border-right: none !important;
 }
 toolbar[iconsize="small"][mode="icons"] #forward-button[disabled="true"] {
- -moz-image-region: rect(23px, 657px, 46px, 623px) !important;
+ -moz-image-region: rect(23px, 649px, 46px, 616px) !important;
 }
 toolbar[iconsize="small"][mode="icons"] #forward-button:hover:active:not([disabled]),
 toolbar[iconsize="small"][mode="icons"] #forward-button[open="true"] {
-  -moz-image-region: rect(46px, 657px, 69px, 623px) !important;
+  -moz-image-region: rect(46px, 649px, 69px, 616px) !important;
 }
 
 /* ----- SMALL BACK/FORWARD DROPMARKER ----- */	
 
 toolbar[iconsize="small"][mode="icons"] #back-forward-dropmarker {
-  -moz-image-region: rect(0px, 672px, 23px, 657px) !important;
+  -moz-image-region: rect(0px, 664px, 23px, 649px) !important;
 }
 
 toolbar[iconsize="small"][mode="icons"] #back-forward-dropmarker[disabled="true"] {
- -moz-image-region: rect(23px, 672px, 46px, 657px) !important;
+ -moz-image-region: rect(23px, 664px, 46px, 649px) !important;
 }
 
 toolbar[iconsize="small"][mode="icons"] #back-forward-dropmarker:hover:active:not([disabled]),
 toolbar[iconsize="small"][mode="icons"] #back-forward-dropmarker[open="true"] {
-  -moz-image-region: rect(46px, 672px, 69px, 657px) !important;
+  -moz-image-region: rect(46px, 664px, 69px, 649px) !important;
 }
 
 /* ----- DEFAULT RELOAD BUTTON ----- */	
 
 #reload-button {
   -moz-image-region: rect(0px, 108px, 23px, 72px);
 }
 #reload-button[disabled="true"] {
@@ -650,22 +660,22 @@ toolbar[iconsize="small"][mode="icons"] 
 }
 
 /* ::::: nav-bar-inner ::::: */
 
 #urlbar {
   -moz-appearance: none;
   border: none;
   background: url("chrome://browser/skin/urlbar/endcap.png") transparent right center no-repeat;
-  margin: 1px 4px;
+  margin: 0px 4px 1px 4px;
   -moz-padding-end: 8px;
   font: icon !important;
   width: 7em;
   min-width: 7em;
-  min-height: 26px;
+  height: 26px;
 }
 
 #urlbar[focused="true"] {
   background: url("chrome://browser/skin/urlbar/endcap-focused.png") transparent right center no-repeat;
 }
 
 #urlbar .textbox-input-box,
 #urlbar-icons {
@@ -673,23 +683,26 @@ toolbar[iconsize="small"][mode="icons"] 
   background: url("chrome://browser/skin/urlbar/textfield-mid.png") transparent left center  repeat-x;
 }
 
 #urlbar[focused="true"] .textbox-input-box,
 #urlbar[focused="true"] #urlbar-icons {
   background-image: url("chrome://browser/skin/urlbar/textfield-mid-focused.png");
 }
 
+#urlbar .textbox-input-box {
+  padding-top: 1px;
+}
+
 .autocomplete-textbox {
   background-image: inherit !important;
 }
 
 #urlbar-icons {
   -moz-box-align: center;
-  margin: 2px 0;
   min-height: 26px;
 }
 
 #urlbar[pageproxystate="invalid"] > #urlbar-icons > :not(#go-button) ,
 #urlbar[pageproxystate="valid"] > #urlbar-icons > #go-button {
   visibility: collapse;
 }
 
@@ -708,16 +721,17 @@ toolbar[iconsize="small"][mode="icons"] 
 #wrapper-urlbar-container #urlbar > .autocomplete-history-dropmarker {
   display: none;
 }
 
 /* Keep the URL bar LTR */
 
 #PopupAutoCompleteRichResult {
   direction: ltr !important;
+  margin-top: -2px;
 }
 
 /* ----- PAGE PROXY ICON ----- */
 
 #page-proxy-stack,
 #page-proxy-favicon,
 #urlbar-throbber {
   width: 16px;
@@ -735,17 +749,17 @@ toolbar[iconsize="small"][mode="icons"] 
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
 #page-proxy-favicon[pageproxystate="invalid"] {
   opacity: 0.5;
 }
 
 #urlbar-throbber {
-  list-style-image: url("chrome://global/skin/icons/loading_16.png");
+  list-style-image: url("chrome://browser/skin/places/searching_16.png");
 }
 
 
 #identity-box:active > #page-proxy-stack,
 #identity-box[open="true"] > #page-proxy-stack {
   opacity: 0.75;
 }
 
@@ -777,16 +791,20 @@ statusbarpanel#statusbar-display {
   width: 16px;
   height: 16px;
 }
 
 .ac-comment {
   font-size: 1.15em;
 }
 
+.ac-extra > .ac-comment {
+  font-size: inherit;
+}
+
 .ac-url-text {
   color: #336633;
 }
 
 .autocomplete-treebody::-moz-tree-cell-text(treecolAutoCompleteComment) {
   color: GrayText;
 }
 
@@ -807,45 +825,408 @@ statusbarpanel#statusbar-display {
 
 /* ----- GO BUTTON ----- */
 
 #go-button {
   list-style-image: url("chrome://browser/skin/Go-arrow.png");
   -moz-image-region: rect(0px, 16px, 16px, 0px);  
 }
 
+#go-button:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);  
+}
+
+#go-button:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);  
+}
+
 /* STAR BUTTON */
 #star-button {
   padding: 1px;
-  list-style-image: url("chrome://browser/skin/places/starPage.png");
+  list-style-image: url("chrome://browser/skin/places/star-icons.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);  
+}
+
+#star-button:hover {
+  -moz-image-region: rect(0px, 32px, 16px, 16px);  
+}
+
+#star-button:hover:active {
+  -moz-image-region: rect(0px, 48px, 16px, 32px);  
 }
 
 #star-button[starred="true"] {
-  list-style-image: url("chrome://browser/skin/places/pageStarred.png");
+  -moz-image-region: rect(16px, 16px, 32px, 0px);  
+}
+
+#star-button:hover[starred="true"] {
+  -moz-image-region: rect(16px, 32px, 32px, 16px);  
+}
+
+#star-button:hover:active[starred="true"] {
+  -moz-image-region: rect(16px, 48px, 32px, 32px);  
 }
 
 /* BOOKMARKING PANEL */
-#editBookmarkPanel {
-  padding: 4px;
-}
-
 #editBookmarkPanelStarIcon {
   list-style-image: url("chrome://browser/skin/places/starred48.png");
   width: 48px;
   height: 48px;
 }
 
 #editBookmarkPanelStarIcon[unstarred] {
   list-style-image: url("chrome://browser/skin/places/unstarred48.png");
 }
 
+#editBookmarkPanel {
+  -moz-appearance: none;
+  background-color: rgba(68,68,68,0.9);
+  border: 1px solid rgba(255,255,255,0.15);
+  -moz-border-radius: 8px;
+  -moz-border-radius-topright: 0px ;
+  padding: 10px 8px 6px 8px;
+  margin-top: 4px;
+  color: #ffffff;
+}
+
 #editBookmarkPanelTitle {
   font-size: 130%;
+  font-weight: bold;
+  margin: 8px 12px 0px 9px;
+}
+
+#editBookmarkPanel > hbox {
+ padding-right: 1px;
+}
+
+/**** HUD style buttons ****/
+
+#editBookmarkPanel > hbox > vbox > hbox > button,
+#editBookmarkPanel > #editBookmarkPanelBottomButtons > button {
+  -moz-appearance: none;
+  background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
+  border-width: 3px;
+  border-style: solid;
+  -moz-border-radius: 20px;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-right-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
+  -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  padding: 0 9px;
+  margin: 6px;
+  min-width: 79px;
+  min-height: 22px;
+  color: #ffffff;
+}
+
+#editBookmarkPanel > hbox > vbox > hbox > button:hover:active,
+#editBookmarkPanel > #editBookmarkPanelBottomButtons > button:hover:active {
+  background-color: #86888B;
+}
+
+#editBookmarkPanel > hbox > vbox > hbox > button:focus,
+#editBookmarkPanel > #editBookmarkPanelBottomButtons > button:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 100%;
+}
+
+#editBookmarkPanel > #editBookmarkPanelBottomButtons > button[default="true"] {
+  background-color: #666;
+}
+
+#editBookmarkPanel > #editBookmarkPanelContent {
+  margin-top: 6px;
+}
+
+#editBookmarkPanel #editBMPanel_newFolderBox {
+  background-image: url("chrome://browser/skin/hud-style-new-folder-bar-background.png");
+  background-repeat: repeat-x;
+  border: 0;
+  border-width: 1px 0 1px 0;
+  border-style: solid;
+  border-top-color: #212121;
+  border-bottom-color: #212121;
+  padding: 0;
+  margin: 0;
+  -moz-margin-start: -8px;
+  -moz-margin-end: -8px;
+  margin-bottom: 8px !important;
+  height:  20px;
+}
+
+#editBookmarkPanel #editBMPanel_newFolderButton {
+  -moz-appearance: none;
+  background-color: transparent !important;
+  border-width: 0 3px 0 0;
+  border-style: solid;
+  -moz-border-right-colors: rgba(255,255,255,0.15) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
+  padding: 0 9px;
+  margin: 0;
+  min-width: 21px;
+  min-height: 20px;
+  height:  20px;
+  color: #ffffff;
+  list-style-image: url("chrome://browser/skin/hud-style-new-folder-plus-sign.png") !important;
+}
+
+#editBookmarkPanel #editBMPanel_newFolderButton:hover:active {
+  background-color: #86888B;
+}
+
+#editBookmarkPanel #editBMPanel_newFolderButton:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 1px;
+}
+
+#editBookmarkPanel #editBMPanel_newFolderButton .button-text {
+  display: none !important;
+}
+
+#editBookmarkPanel #editBMPanel_folderMenuList {
+  -moz-appearance: none;
+  background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
+  border: 3px solid;
+  -moz-border-radius: 5px;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-right-colors: rgba(53,53,53,1) rgba(53,53,53,1) rgba(162,162,162,1);
+  -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
+  -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  margin: 0 3px !important;
+  min-height: 22px;
+  -moz-padding-start: 2px;
+  color: #ffffff !important;
+}
+
+#editBookmarkPanel #editBMPanel_folderMenuList:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 5px;
+}
+
+#editBookmarkPanel #editBMPanel_folderMenuList[open="true"],
+#editBookmarkPanel #editBMPanel_folderMenuList:hover:active {
+  background-image: url("chrome://browser/skin/hud-style-button-middle-background-active.png");
+}
+
+#editBookmarkPanel #editBMPanel_folderMenuList > .menulist-dropmarker {
+  -moz-appearance: none;
+  display: -moz-box;
+  background-color: transparent;
+  border: 0;
+  margin: 0;
+  padding: 0;
+}
+
+#editBookmarkPanel #editBMPanel_folderMenuList > .menulist-dropmarker > .dropmarker-icon {
+  list-style-image: url("chrome://browser/skin/hud-style-dropmarker-double-arrows.png");
+}
+
+/**** folder tree ****/
+
+#editBookmarkPanel #editBMPanel_folderTree {
+  background-color: #333333;
+  border-top: 2px solid !important;
+  border-right: 0 !important;
+  border-bottom: 0 !important;
+  border-left: 0 !important;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(255,255,255,0.15);
+  margin: 0px;
+  -moz-margin-start: -8px;
+  -moz-margin-end: -8px;
+  color: #ffffff !important;
+}
+
+#editBookmarkPanel #editBMPanel_folderTree:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 1px;
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-twisty {
+  -moz-appearance: none !important;
+  list-style-image: url("chrome://browser/skin/hud-style-twisties.png");
+  -moz-image-region: rect(0px, 10px, 10px, 0px);
+  margin-top: 1px;
+  -moz-margin-end: 1px;
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-twisty(open) {
+  -moz-appearance: none;
+  -moz-image-region: rect(0px, 20px, 10px, 10px);
 }
 
+#editBMPanel_folderTree treechildren::-moz-tree-twisty(selected) {
+  -moz-appearance: none;
+  -moz-image-region: rect(0px, 30px, 10px, 20px);
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-twisty(selected, open) {
+  -moz-appearance: none;
+  -moz-image-region: rect(0px, 40px, 10px, 30px);
+}
+
+#editBookmarkPanel #editBMPanel_tagsSelector {
+  -moz-appearance: none;
+  background-color: #333333;
+  border-top: 2px solid !important;
+  border-right: 0 !important;
+  border-bottom: 2px solid !important;
+  border-left: 0 !important;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(255,255,255,0.15);
+  -moz-border-bottom-colors: rgba(255,255,255,0.30) rgba(0,0,0,0.35) ;
+  margin: 6px -8px !important;
+  color: #ffffff !important;
+}
+
+#editBookmarkPanel #editBMPanel_tagsSelector:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 1px;
+}
+
+#editBookmarkPanel #editBMPanel_tagsSelector .listcell-check {
+  -moz-appearance: none !important;
+  background-color: transparent;
+  border: 0;
+  list-style-image: url("chrome://browser/skin/hud-style-check-box-empty.png");
+  min-height: 14px;
+  min-width: 14px;
+}
+
+#editBookmarkPanel #editBMPanel_tagsSelector .listcell-check[checked="true"] {
+  list-style-image: url("chrome://browser/skin/hud-style-check-box-checked.png");
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-row {
+  color: #ffffff !important;
+  background-color: transparent !important;
+  border: none !important;
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-row(selected) {
+  background-color: #b3b3b3 !important;
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-cell-text(selected),
+#editBMPanel_folderTree treechildren::-moz-tree-cell-text(selected, focus) {
+  color: #222222 !important;
+}
+
+#editBMPanel_folderTree treechildren::-moz-tree-row(selected, focus) {
+  background-color: #b3b3b3 !important;
+}
+
+#editBookmarkPanel #editBMPanel_tagsSelector > listitem[selected="true"] {
+  color: #222222;
+  background-color: #b3b3b3;
+}
+
+/**** expanders ****/
+
+#editBookmarkPanel .expander-up,
+#editBookmarkPanel .expander-down {
+  -moz-appearance: none;
+  background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
+  border: 3px solid;
+  -moz-border-radius: 5px;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-right-colors: rgba(53,53,53,1) rgba(53,53,53,1) rgba(162,162,162,1);
+  -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
+  -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-margin-start: 4px;
+  -moz-margin-end: 2px;
+  padding: 0 0 0 4px;
+  min-width: 10px;
+  min-height: 22px;
+  color: #ffffff !important;
+}
+
+#editBookmarkPanel .expander-up:focus,
+#editBookmarkPanel .expander-down:focus {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -2px;
+  -moz-outline-radius: 5px;
+}
+
+#editBookmarkPanel .expander-up {
+  list-style-image: url("chrome://browser/skin/hud-style-expander-open.png") !important;
+}
+
+#editBookmarkPanel .expander-down {
+  list-style-image: url("chrome://browser/skin/hud-style-expander-closed.png") !important;
+}
+
+#editBookmarkPanel .expander-down:hover:active {
+  list-style-image: url("chrome://browser/skin/hud-style-expander-open.png") !important;
+  background-image: url("chrome://browser/skin/hud-style-button-middle-background-active.png") !important;
+  background-repeat: repeat-x !important;
+}
+
+#editBookmarkPanel .expander-up:hover:active {
+  list-style-image: url("chrome://browser/skin/hud-style-expander-closed.png") !important;
+  background-image: url("chrome://browser/skin/hud-style-button-middle-background-active.png") !important;
+  background-repeat: repeat-x !important;
+}
+
+
+/**** name picker ****/
+
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"] {
+  color: #ffffff !important;
+}
+
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"] > .menulist-dropmarker {
+  display: none;
+}
+
+#editBookmarkPanel #editBMPanel_tagsField,
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"] > .menulist-editable-box {
+  -moz-appearance: none !important;
+  cursor: text;
+  margin: 2px 4px;
+  border: 2px solid;
+  -moz-border-top-colors: #1c1c1c #545454 ;
+  -moz-border-right-colors: #1c1c1c #636363;
+  -moz-border-bottom-colors: #1c1c1c #797979;
+  -moz-border-left-colors: #1c1c1c #636363;
+  -moz-border-radius: 1px;
+  padding: 0;
+  background-color: #666666;
+  color: #ffffff;
+}
+
+#editBookmarkPanel #editBMPanel_tagsField[empty="true"] {
+  color: #bbbbbb;
+}
+
+#editBookmarkPanel #editBMPanel_tagsField[focused="true"],
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"][focused="true"] > .menulist-editable-box {
+  outline: 2px solid -moz-mac-focusring;
+  outline-offset: -1px;
+  -moz-outline-radius: 1px;
+}
+
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"][disabled="true"] > .menulist-editable-box {
+  color: #ffffff;
+}
+
+#editBookmarkPanel #editBMPanel_namePicker[droppable="false"] > .menulist-editable-box > html|*.menulist-editable-input {
+  margin: 0px !important;
+  border: none !important;
+  padding: 0px !important;
+  background-color: inherit;
+  color: #ffffff !important;
+  font: inherit;
+}
+
+#editBookmarkPanel > #editBookmarkPanelContent > #editBookmarkPanelGrid > rows > row > label {
+  text-align: right;
+}
 
 /* ----- SIDEBAR ELEMENTS ----- */
 
 sidebarheader { 
   background-color: #d6dde5;
   padding: 2px;
   text-transform: uppercase;
 }
@@ -931,24 +1312,24 @@ sidebarheader > .tabs-closebutton > .too
   -moz-binding: url("chrome://global/content/bindings/button.xml#menu");
   -moz-appearance: none; 
   min-width: 0;
   min-height: 0;
   margin-right: 1px !important;
 }
 
 #feed-button[feeds] {
-  list-style-image: url("chrome://browser/skin/livemark-item.png");
-  -moz-image-region: rect(0px, 36px, 18px, 18px);
+  list-style-image: url("chrome://browser/skin/feed-icons.png");
+  -moz-image-region: rect(0px, 16px, 16px, 0px);
 }
 #feed-button[feeds]:hover {
-  -moz-image-region: rect(18px, 36px, 36px, 18px);
+  -moz-image-region: rect(0px, 32px, 16px, 16px);
 }
 #feed-button[feeds]:active {
-  -moz-image-region: rect(54px, 36px, 72px, 18px);
+  -moz-image-region: rect(0px, 48px, 16px, 32px);
 }
 
 /* ----- THROBBER ----- */
 
 #navigator-throbber {
   -moz-appearance: none;
   -moz-user-focus: ignore;
   -moz-box-pack: center;
@@ -984,27 +1365,27 @@ toolbarbutton.chevron {
 
 toolbarbutton.chevron > .toolbarbutton-menu-dropmarker {
   display: none;
 }
 
 #nav-bar {
   background-color: #9B9B9B;
   border-top: none;
-  border-bottom: 1px solid #404040;
+  border-bottom: 1px solid rgba(0,0,0,0.35);
   background-image: url("chrome://global/skin/toolbar/toolbar-background.gif");
   background-repeat: repeat-x;
   background-position: top right;
   padding: 0 4px;
 }
 
 #nav-bar[collapsed="true"] + toolbar[customindex] {
  border-top: 2px solid;
- -moz-border-top-colors: #606060 #C7C7C7;
-}
+ -moz-border-top-colors: rgba(0,0,0,0.35) rgba(255,255,255,0.45);
+} 
 
 .bookmark-item {
   list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
 }
 
 .openintabs-menuitem {
   list-style-image: none;
 }
@@ -1115,16 +1496,17 @@ toolbarbutton.chevron > .toolbarbutton-m
 .tabs-closebutton:hover:active {
   list-style-image: url("chrome://global/skin/icons/closetab-active.png") !important;
   border: none !important;
 }
 
 .tabbrowser-strip {
   margin-top: -1px;
   border-bottom: 1px solid #404040;
+  background-color: #9B9B9B;
 }
 
 .tabbrowser-tabs {
   border: none;
   -moz-box-pack: center;
   -moz-box-align: center;
   background: url("chrome://browser/skin/tabbrowser/tabbrowser-tabs-bkgnd.png") repeat-x;
   height: 27px;
@@ -1151,21 +1533,21 @@ tabbrowser > tabbox > tabpanels {
   height: 10px;
   margin-top: -10px;
   position: relative;
   /* set -moz-margin-start to -1/2 indicator width: */
   -moz-margin-start: -4px;
 }
 
 .tab-drop-indicator {
-  height: 10px;
-  width: 8px;
-  margin-bottom: -5px;
+  height: 33px;
+  width: 10px;
+  margin-bottom: -24px;
   position: relative;
-  background: url('chrome://browser/skin/tabbrowser/tabDragIndicator.png') 50% 50% no-repeat;
+  background: url('chrome://browser/skin/tabbrowser/tabDragIndicator.png') 50% 40% no-repeat;
 }
 
 /**
  * In-tab close button
  */
 
 .tab-close-button > .toolbarbutton-icon {
   -moz-margin-end: 0px !important;
@@ -1232,27 +1614,33 @@ tabbrowser > tabbox > tabpanels {
 
 
 /**
  * All Tabs Button
  */
 
 .tabs-alltabs-box {
   margin: 0;
-  width: 27px;
-  background-image: url("chrome://browser/skin/tabbrowser/alltabs-box-bkgnd.png");
-  background-repeat: no-repeat;
-  list-style-image: none;
+  width: 25px;
 }
 
 .tabs-alltabs-button {
-  margin: 2px 0px 3px 0px;
+  list-style-image: url("chrome://browser/skin/tabbrowser/alltabs-box-bkgnd-icon.png");
+  border-left: 2px solid;
+  -moz-border-left-colors: rgba(0,0,0,0.25) rgba(255,255,255,0.15);
+  margin: 0;
   padding-left: 0;
   padding-right: 0;
-  border: none;
+}
+.tabs-alltabs-button:hover {
+  background-color: rgba(0,0,0,0.10);
+}
+.tabs-alltabs-button:hover:active,
+.tabs-alltabs-button[open="true"] {
+  background-color: rgba(0,0,0,0.20);
 }
 
 .tabs-alltabs-button  > .toolbarbutton-menu-dropmarker {
   display: none;
 }
 
 .tabs-alltabs-button  > .toolbarbutton-text {
   display: none;
@@ -1473,17 +1861,17 @@ toolbarbutton.bookmark-item[dragover="tr
 #identity-popup.verifiedIdentity > #identity-popup-container > #identity-popup-icon {
   -moz-image-region: rect(128px, 64px, 192px, 0px);
 }
 
 /* Popup Body Text */
 #identity-popup-content-box > description,
 #identity-popup-encryption-label {
   white-space: pre-wrap;
-  color: black;
+  color: #ffffff;
   padding-left: 15px;
   margin: 2px 0 4px;
 }
 
 #identity-popup-content-box > label {
   white-space: pre-wrap;
   margin-left: 0;
   padding-left: 15px;
@@ -1507,28 +1895,64 @@ toolbarbutton.bookmark-item[dragover="tr
 
 #identity-popup-content-verifier {
   margin: 4px 0 2px;
 }
 
 #identity-popup-content-box.verifiedIdentity > #identity-popup-encryption ,
 #identity-popup-content-box.verifiedDomain > #identity-popup-encryption {
   margin-top: 10px;
-  margin-left: -18px;
+  margin-left: -24px;
 }
 
 #identity-popup-content-box.verifiedIdentity > #identity-popup-encryption > vbox > #identity-popup-encryption-icon ,
 #identity-popup-content-box.verifiedDomain > #identity-popup-encryption > vbox > #identity-popup-encryption-icon {
-  list-style-image: url("chrome://browser/skin/Secure.png");
-  -moz-image-region: rect(0px, 18px, 18px, 0px);
+  margin-top: 5px;
+  list-style-image: url("chrome://browser/skin/Secure-Glyph-White.png");
 }
 
 /* Popup Bounding Box */
+#identity-popup {
+  -moz-appearance: none;
+  background-color: rgba(68,68,68,0.9);
+  border: 1px solid rgba(255,255,255,0.15);
+  -moz-border-radius: 8px;
+  -moz-border-radius-topleft: 0px;
+  padding: 10px 8px 6px 8px;
+  margin-top: -3px;
+  -moz-margin-start: 11px;
+  color:  #ffffff;
+  min-width: 280px;
+}
+
 #identity-popup-container {
-  background-image: none;
-  background-color: white;
-  min-width: 280px;
-  padding: 10px;
+  -moz-appearance: none;
+  color:  #ffffff;
+}
+
+/* Popup Buttons */
+#identity-popup-more-info-button {
+  -moz-appearance: none;
+  background: url("chrome://browser/skin/hud-style-button-middle-background.png") repeat-x #464646 center center;
+  border: 3px solid;
+  -moz-border-radius: 5px;
+  -moz-border-top-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-right-colors: rgba(53,53,53,1) rgba(53,53,53,1) rgba(162,162,162,1);
+  -moz-border-bottom-colors: rgba(128,128,128,0.35) rgba(0,0,0,0.5) rgba(255,255,255,0.15);
+  -moz-border-left-colors: rgba(0,0,0,0.35) rgba(26,26,26,0.5) rgba(255,255,255,0.4);
+  -moz-border-radius: 20px;
+  padding: 1px 9px;
+  margin: 6px;
+  min-height: 0px;
+  color:  #ffffff;	
+}
+
+#identity-popup-more-info-button > .button-box > .button-text {
+  margin: 0 !important;
+}
+
+#identity-popup-more-info-button:hover:active {
+  background-color: #86888B;
 }
 
 #download-monitor {
   list-style-image: url("chrome://mozapps/skin/downloads/downloadStatusIcon.png");
 }
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c27ec500ac3c5a454983165895cf499501b5595e
GIT binary patch
literal 2094
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
Y05$NZh1Kej_5c6?07*qoM6N<$f+#TpO8@`>
index 4d15304643248fb3380cdd7e7614888bb1e8feb6..236b5f82106ed4e9f74eff40a29ee36701a894c2
GIT binary patch
literal 1816
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
GLSTZS`fO<c
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d3ce59b19fea5ee7356186d2c6bc47d64f38033d
GIT binary patch
literal 2850
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
AApigX
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3328a5bf0b9e69ee268bfef161560242557104a3
GIT binary patch
literal 502
zc$@+D0SW$zP)<h;3K|Lk000e1NJLTq000gE000gM1^@s6A4o0H0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzm`OxIRCwBql1ppCKoo^f9vHN?ASy1z
z(oKEh#=Q#z1+fbey7Q+9{tv;uAcBz6t+*0gxf8Le)QW3S<J%;inUX-8R(j!N9-MFP
zotxp3$>a@yN1}To9+$%)dL?=h$)|Wc9%Z5j!!W{s5!q}O)oN8AjYe;kN<|Vmj=MV?
z4o~TH+8d9@e}yDTLb+VVe!mw8945@I$n(5lnx;1zjbgc6g3KLYsZ?Tcx7)>HvAFX2
ze7q<K!dLNzfz#>afD(xWVzC&8!y(4wG25dI&BzuMDijLHWHRV<I_z|}+l_oakKJwu
zMN!~#xtNzScE<DhjCQ+?Kp=ozF2^beg+lOnJZLl;>>8v*J0ov_nx@hEQLELMNtR`#
zQYj1u1N3@5tX3=Lae!7(s9vu_*L7^STQr+Z$GzDdEs(UBiN<s~MXS|f;AXS2_pR|;
zbLgfhiuUj5_xrZ#=fPHUbTV1b=kx1GBy#b+&1N$StqEh$jPJo<P?=07MO9V3mq6mx
ssF#c%^vNlHzuzQM@xP$H=T89!0Eh&m=XOEw*#H0l07*qoM6N<$f}PppQUCw|
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..d8a55bd3fe4f2d1aae26ad0ced833a88597242a8
GIT binary patch
literal 364
zc$@)j0h9iTP)<h;3K|Lk000e1NJLTq000gE000gM1^@s6A4o0H0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz4oO5oRCwBylFw>{Fc8Ma81-U%5l@TI
zOGN}<qR>+hd)X)5(o^3;FG9tZiVvXc#XlW8W68oonRW+0lbHGCOD3_>G`$6YC(=Dh
zfgDJBBfV()?5AmZAUz`DPNI}jt?Rn4Bu`tGbvKUVA<Hs9NfObnEX!R{6bH}q-Ziaa
zuj}f^aSUD80rh`{$N)Ge&vTy`rES~(**qf5^DG|_ach}j$8Eq6ol^wO!pxi<mu1-`
zg_++R4LA$~^nEXaj^ms`Wx#9V!jY@SlETbi6o-Fmt;OpwpefE5bxv*D-b7I(IyOzi
z(1{pi$B!@!k9A$|tE%$<cya^hQv1nI?id8YN~-=@8_s+F7GMC-b7I<_F*uC?0000<
KMNUMnLSTYdG@Ew-
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ecf5ee24eb6e706cc726b86b0f1c3a0baeefe2f2
GIT binary patch
literal 166
zc%17D@N?(olHy`uVBq!ia0vp^%s|Y|!3HFERhwS|Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>Jiab1B978H@CH?sS-=0~Zy*Wd`nV}<}d833dGqbaTKyh=1
z+kz8(3eNl;>y4VOIxz|}3pqU8z+f1|?~$e&lEm9(%X31Hfy02IOwov!>+4!8pqUJw
Lu6{1-oD!M<Q|~Ua
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..25219fea2257b75ec400cd71c2c98d9ce4f15fba
GIT binary patch
literal 236
zc%17D@N?(olHy`uVBq!ia0vp@K+MU(1|(lrEz1H@k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X`aE46Ln>}1{rUgDUYMD=S)BP}0=sg6u=s?HA|0un7e4TG
zES}MD#9Uz=<D>g5CV!Y8St<NG#3H(b>&Ru!j9J`A#2t9lR1Ug2)bO;oc{|uhA7lK<
z85tzd5zesDVA2io3HA&AB|2>9WVz@3x1Gmof@#8K7N+G3{a71w7bqMHU@VdoJHvG(
h*WpaFubjdGhRti;U06d4F9BV~;OXk;vd$@?2>|(*QNsWL
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..168b53a5e8b9bba12051917b323ad64222ace4ca
GIT binary patch
literal 221
zc%17D@N?(olHy`uVBq!ia0vp@K+MU(1|(lrEz1H@k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X>OEZ?Ln>}1{rLaio>}Y+*O6R@GtIv9IvK4`uq2r)=p9z;
z^qs6JaNO}`oWq;Obq#_kvO)qZk3=1GdQ`r#b}VlAA*nZ8>Y_;l1HZs_h1IUtSc)cz
z^4Y&)EY#Yimb>El$Ho)|vxc9Y+#dR@Ns(-a7@n-xn6OMOLqm|ejDbah;c2qXaW)A~
RBcM|lJYD@<);T3K0RZ31Na6qh
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1a7ed7d2281eec53d76c1933323458d2034bd939
GIT binary patch
literal 163
zc%17D@N?(olHy`uVBq!ia0vp^j6f{H!2~1^=N$M3q*&4&eH|GXuHCreA7KRKOP07s
zlmzFem6RtIr7}3C<R_&nc;+Uirv{}arc@T5Otk?jGWB$E45_%~b9^B$g98VPqlM?y
zFWnCFm_K#!CrygoVXefZa`Eo!RoC9C8!IXWTz$W9W-kLXgLko#(%Fqn=0F1&JYD@<
J);T3K0RT@6GT8tC
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..509b0be0a02ae3f6130226f13b5aa8b357ece73d
GIT binary patch
literal 148
zc${<hbhEHbWMmLwIKsf-;^N}&?j9Ex=j!U3ot+&M6VuSpkd%}Z9v+^Um>3)!9334U
z8XB6AkPsOe>FMd|=H}+%;lV&OQ2faPrgcCB$W8`U!3B;op2{NK%?1nx4vqr0UK|Y8
E0G~4&qW}N^
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1a6ee66f65fdf891292a4a27adb1d8fd189f2c6c
GIT binary patch
literal 149
zc%17D@N?(olHy`uVBq!ia0vp^j6f{H!2~1^=N$M3q$EpRBT9nv(@M${i&7aJQ}UBi
z6+Ckj(^G>|6H_V+Po~-c6`6awIEGZ*%IPxXVld!1a_;t@o&BN**;g#R%f+WCz+{~4
va^Ws#gYn^2N#*tXY>n?LD`~H)Vv%5It&msn`@TjUXas|&tDnm{r-UW|Ek`b!
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5d3e60d3e8401858bc5e61b01665a8914f36aa1a
GIT binary patch
literal 160
zc%17D@N?(olHy`uVBq!ia0vp^96-#;!3HGxgLCzO6id3JuOkD)wHsIbBaDE2$r9Iy
zlHmNblJdl&R0hYC{G?O`&)mfH)S%SFl*+=BsWw1GMxHK?Ar-fh5*(QR|Np<A^AOJt
zhDa`nkFONG7zI`<MsAeUIdS5Jx2^jkX44dHM+Suh3@ty6>M~cUssME}c)I$ztaD0e
F0szf}FH-;j
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..6da77597fb62d65d9ea54bf0275ca267e9dfb67d
GIT binary patch
literal 3174
zc$@)d44LzZP)<h;3K|Lk000e1NJLTq001Ze000UI1^@s6#+n>Z00009a7bBm000XU
z000XU0RWnu7ytkYO=&|zP*7-ZbZ>KLZ*U+<Lqi~Na&Km7Y-Iodc-oy)cUY767Czti
zWe-+D*zmEJY=HnGBdiF>5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1<Rh~l6qxMx9%
zh+2zPTsZC@+^4mDdhhM+``7!t=bY#K&Uw!dfDsZVk>;Xm069{HJUZAPk55R%$-RIA
z6-eL&AQ0xu!e<4=008g<d3b(wus{3(uWtYX0C3eVBofEr|AV?vCRYF;kpSQ#66Xs6
zkWv81E>y@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e
zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5
z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7}
z<RYAxn<EoQ=L1a63;+Nc`O(4tI6si*=H%h#X6J10^u?n7Yw&L(J|Xen{=AF=1OO0D
z&+pn_<>l4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf
zVxhe-<BLB3GvROGi+=X}Kpy_vdhh^onn0PYz@vlxaba$Du2PQY%LGC(ZujRS{>O!X
z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4
ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR
z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#<bWIsp%|7y8C1YJ*aWq(0~(+a
zn&A+%!7(@u=im}tf$MM=24EPT!Wg`U2?RmN2oqr;I*1Wsj@Tm32p5@-1R`NbG?IX%
zAnAw{Q6k02a-;&OLTZs+NF(wsauhj@TtNDe+sGg?iu{VaM=_LvvQY!n0(C&Ss2>`N
z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd
zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS=
zB9o|3v?Y2H`NVi)I<b&gMyw|8As!)~C0-{E6JL`^Bo4`v<W349C6F>n3rTB8+ej^>
zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv
zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&G<BLK&6^fO%cL!%)zF%0XKD9nFX?o;
z3EhJpMVHW*(rf4k>F4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^
zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN
zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS
zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^#<Ae=IoX^_&LPeX&U-BbEk7->
z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ib<gTP(_`y-
z=?V49^$zLX(MR=d^rQ6`>hIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyE<W%V@fh
z#Au_@NuwvYChmu4<285}K4z?M9Ad0A-euftJYiyKGTWrYq{ZaEDb18?nr6Duw9|CV
z%*ZU<tk|r{?2b9roNJz8zS+Fn{EdaBMV!S-i#ChLmfDtl%LSHAmiMffRz6mFR`pib
ztVz~f>n!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>><a9f>;~;Q
z_F?uV_HFjh9n2gO9o9Q^JA86<b<B2baJ=iJ;WWdk#HqvSS7#e%p>v({H5aB!kjoO6
zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a
zam?eLr<<q3^N{B+UUpttUi-ZsPqUmRp4KpJ$lJtQ;JwRxU^+fMW%|zP13tz+0-t)H
zhrXu1BHul}BYxI?nSKZSp8Grc%l(h|zu|fE7V%C6U;)7a<pI5c8iBI|YXctynFOT=
zH3f|Yy9O@|J{3X?2@P2va+7bs7xEkVV>8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT
zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^H<bj`5GFjJZ48
zYPNEAXRK;$Qfy=Fo4A0us<?r8hxkSDmlAXnBnj<_<iyy-J&EIU0_SX+Go0j_RF-sO
zuI1dKxfkZ?&dZ*6JXtkakbF3Wm=c$=KjniULQpRlPvxg>O&t^Rgqwv=MZThqqEWH8
zxJo>d=ABlR_Bh=;eM9<ahEGOy#xn^|QY(3p8Irjp^G#Mn*50ho*>Tw|Ih34~oTE|=
zX_mAr*D$vzw@+p(E0Yc6dFE}(8<U61_v9n_bMxC3Y=unGqqI`4P!1MMFQ_YcTNqn-
zxJbQ7TGTV&X8!8=BMX8Se7%scP`I$O*tmFE@!%rAMY|Rwi&GbOE-_tFx@351@X~$D
zXv?ye{ZQgqQdRP5dED}jQiIZ^r9&%%S2UHWl*!9(uJl^DV-;bQWL58Km(^QVe<~N1
zU#xJfsIK_1M!4qUS59BmeD!&4+S=Yqx61A7Nb98QZmjoNzpqNYYC+Y|hVTuo8}W_h
z8((co-gKdQYW0rIw9U%R12tha?OV*YtlRRTHly}>oqt`+R{gE3x4zjX+Sb3_cYE^=
zgB=w+-tUy`ytONMS8KgRef4hA?t<Nq8e$u|zvh13xJP$S#h#CQrF#eVMeplsbZ>0j
zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3?
zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j<Jb;mW2SDv7qC_VA{<bspqr(~y|
zolZYJ)S29Q_e}hmYh6)Yy=Ozuo<A3K?o78|_sR3#=Z{_Rym0g)_hQ>6w@a-(u02P7
zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W
z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU
zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R
za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)}
z^ZO;zpECde00d`2O+f$vv5tKEQIh}w03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`
z>R<o>I+y?e7jKeZ#YO-C0fR|IK~#9!tkgYdR6!I4;LnAm&`zvG2!s?V1wjx}zOfRt
zw6hijK~qH#f0|$#i@-t}8<8zdp`aJ67KDHh1W`c*L9E1LLsFPxY-V8{_q{;Ofq|Jb
zhcoBCce!%Ta?bsn^Xanx@6|NTplO;jN8xoW=M0~*hd!QQ-@ll_b1Z1b8(dE*jj)R~
ztVhJ}T9{Ir#Sn`felL3yhvT?iLY$i--pBn8vpqbVIG?~h3{y%MYH<mDtHW;>%e^TV
z3wVY{I9c6oVY9`sj~`R`MZ8KWZKRY=RUwBMwD_$>#P?oD1()#}a}~deor?QXTB8eB
zv7J(yulN;=D((~3p)24=T*J4D|AogDcekZ)C-EMaBI0ZH6@TJErM)@s+i3xJN-tf(
zhnB~lmI9Pt{;ng~2+I+%6cO9g1QD@O3V=aGydB@w0XK261ULwHN-?V)ngPz100-el
zDQ4v_w#=IsIp_0-m{W5tb8xF^nx#X`&-t1gZ)T2aNSB9ZkIL)M0K`|oV^32{9RL6T
M07*qoM6N<$g2R>onE(I)
--- a/browser/themes/pinstripe/browser/jar.mn
+++ b/browser/themes/pinstripe/browser/jar.mn
@@ -1,60 +1,83 @@
 classic.jar:
 % skin browser classic/1.0 %skin/classic/browser/
   skin/classic/browser/bookmark_toolbar_background.gif
+  skin/classic/browser/bookmark_toolbar_background-inactive.png
   skin/classic/browser/bookmark-open-left.png
   skin/classic/browser/bookmark-open-mid.png
   skin/classic/browser/bookmark-open-right.png
 * skin/classic/browser/browser.css                          (browser.css)
   skin/classic/browser/browser.xml
   skin/classic/browser/contextDialogBackground.png
 * skin/classic/browser/engineManager.css                    (engineManager.css)
   skin/classic/browser/expander-round.png 
+  skin/classic/browser/feed-icons.png
   skin/classic/browser/find.png
   skin/classic/browser/find-bar-background.png
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/home.png
+  skin/classic/browser/hud-style-button-middle-background.png
+  skin/classic/browser/hud-style-check-box-checked.png
+  skin/classic/browser/hud-style-check-box-empty.png
+  skin/classic/browser/hud-style-dropmarker-double-arrows.png
+  skin/classic/browser/hud-style-expander-closed.png
+  skin/classic/browser/hud-style-expander-open.png
+  skin/classic/browser/hud-style-new-folder-bar-background-active.png
+  skin/classic/browser/hud-style-new-folder-bar-background.gif
+  skin/classic/browser/hud-style-new-folder-bar-background.png
+  skin/classic/browser/hud-style-new-folder-plus-sign.png
+  skin/classic/browser/hud-style-twisties.png
   skin/classic/browser/identity.png
   skin/classic/browser/Info.png
   skin/classic/browser/page-livemarks.png
   skin/classic/browser/livemark-item.png
   skin/classic/browser/pageInfo.css
   skin/classic/browser/pageInfo.png
   skin/classic/browser/Popup-blocked.png
   skin/classic/browser/searchbar.css
   skin/classic/browser/Search.png
   skin/classic/browser/Search-addengines.png
+  skin/classic/browser/Search-bar.png
   skin/classic/browser/search-bar-background-left.png
   skin/classic/browser/search-bar-background-mid.png
   skin/classic/browser/search-bar-background-right.png
+  skin/classic/browser/Secure-Glyph-White.png
   skin/classic/browser/Secure.png
   skin/classic/browser/Security-broken.png
   skin/classic/browser/Secure-statusbar.png
   skin/classic/browser/Secure-statusbar-broken.png
   skin/classic/browser/Secure-background.gif
   skin/classic/browser/Toolbar.png
   skin/classic/browser/feeds/subscribe.css                  (feeds/subscribe.css)
   skin/classic/browser/feeds/feedIcon.png                   (feeds/feedIcon.png)
   skin/classic/browser/feeds/feedIcon16.png                 (feeds/feedIcon16.png)
   skin/classic/browser/feeds/videoFeedIcon.png              (feeds/videoFeedIcon.png)
   skin/classic/browser/feeds/videoFeedIcon16.png            (feeds/videoFeedIcon16.png)
   skin/classic/browser/feeds/audioFeedIcon.png              (feeds/audioFeedIcon.png)
   skin/classic/browser/feeds/audioFeedIcon16.png            (feeds/audioFeedIcon16.png)
-  skin/classic/browser/radio-selected-bg.gif
+  skin/classic/browser/radio-selected-bg.png
   skin/classic/browser/setDesktopBackground.css
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
   skin/classic/browser/wrench.png
   skin/classic/browser/places/places.css                    (places/places.css)
 * skin/classic/browser/places/organizer.css                 (places/organizer.css)
   skin/classic/browser/places/query.png                     (places/query.png)
   skin/classic/browser/places/livemarkItem.png              (places/livemarkItem.png)
   skin/classic/browser/places/bookmarksMenu.png             (places/bookmarksMenu.png)
   skin/classic/browser/places/bookmarksToolbar.png          (places/bookmarksToolbar.png)
+  skin/classic/browser/places/history.png                   (places/history.png)
+  skin/classic/browser/places/menubutton-end-pressed.png    (places/menubutton-end-pressed.png)
+  skin/classic/browser/places/menubutton-mid-pressed.png    (places/menubutton-mid-pressed.png)
+  skin/classic/browser/places/menubutton-start-pressed.png  (places/menubutton-start-pressed.png)
+  skin/classic/browser/places/star-icons.png                (places/star-icons.png)
+  skin/classic/browser/places/toolbar-button-backup.png     (places/toolbar-button-backup.png)
+  skin/classic/browser/places/toolbar-button-organize.png   (places/toolbar-button-organize.png)
+  skin/classic/browser/places/toolbar-button-view.png       (places/toolbar-button-view.png)
   skin/classic/browser/places/toolbarDropMarker.png         (places/toolbarDropMarker.png)
   skin/classic/browser/places/folderDropArrow.png           (places/folderDropArrow.png)
   skin/classic/browser/places/infoPaneGrippy.png            (places/infoPaneGrippy.png)
   skin/classic/browser/places/folderDropHoverArrow.png      (places/folderDropHoverArrow.png)
   skin/classic/browser/places/livemarkFolder.png            (places/livemarkFolder.png)
   skin/classic/browser/places/livemarkFolderHover.png       (places/livemarkFolderHover.png)
   skin/classic/browser/places/back-forward.png              (places/back-forward.png)
   skin/classic/browser/places/bookmarkProperties.css        (places/bookmarkProperties.css)
@@ -64,16 +87,17 @@ classic.jar:
   skin/classic/browser/places/menubutton-end.png            (places/menubutton-end.png)
   skin/classic/browser/places/menubutton-mid.png            (places/menubutton-mid.png)
   skin/classic/browser/places/minus.png						(places/minus.png)
   skin/classic/browser/places/minus-active.png				(places/minus-active.png)
   skin/classic/browser/places/plus.png						(places/plus.png)
   skin/classic/browser/places/plus-active.png				(places/plus-active.png)
   skin/classic/browser/places/starPage.png                  (places/starPage.png)
   skin/classic/browser/places/pageStarred.png               (places/pageStarred.png)
+  skin/classic/browser/places/searching_16.png              (places/searching_16.png)
   skin/classic/browser/places/starred48.png                 (places/starred48.png)
   skin/classic/browser/places/unstarred48.png               (places/unstarred48.png)
   skin/classic/browser/places/twisty-open.gif               (places/twisty-open.gif)
   skin/classic/browser/places/twisty-closed.gif             (places/twisty-closed.gif)
   skin/classic/browser/places/tag.png                       (places/tag.png)
   skin/classic/browser/places/selected-gradient.png         (places/selected-gradient.png)
   skin/classic/browser/places/selected-focused-gradient.png (places/selected-focused-gradient.png)
   skin/classic/browser/places/organizer-toolbar.png         (bookmarks/Bookmarks-toolbar.png)
@@ -82,35 +106,39 @@ classic.jar:
   skin/classic/browser/places/expander-open-active.png      (bookmarks/expander-open-active.png)
   skin/classic/browser/places/expander-open.png             (bookmarks/expander-open.png)
   skin/classic/browser/preferences/application.png          (preferences/application.png)
   skin/classic/browser/preferences/Options.png              (preferences/Options.png)
   skin/classic/browser/preferences/plugin.png               (preferences/plugin.png)
   skin/classic/browser/preferences/preferences.css          (preferences/preferences.css)
   skin/classic/browser/preferences/applications.css         (preferences/applications.css)
   skin/classic/browser/tabbrowser/alltabs-box-bkgnd.png                  (tabbrowser/alltabs-box-bkgnd.png)
+  skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon.png             (tabbrowser/alltabs-box-bkgnd-icon.png)
   skin/classic/browser/tabbrowser/alltabs-box-overflow-bkgnd.png         (tabbrowser/alltabs-box-overflow-bkgnd.png)
   skin/classic/browser/tabbrowser/alltabs-box-overflow-bkgnd-animate.png (tabbrowser/alltabs-box-overflow-bkgnd-animate.png)
   skin/classic/browser/tabbrowser/tab-arrow-start.png                    (tabbrowser/tab-arrow-start.png)
   skin/classic/browser/tabbrowser/tab-arrow-start-bkgnd.png              (tabbrowser/tab-arrow-start-bkgnd.png)
   skin/classic/browser/tabbrowser/tab-arrow-start-bkgnd-animate.png      (tabbrowser/tab-arrow-start-bkgnd-animate.png)
   skin/classic/browser/tabbrowser/tab-arrow-end.png                      (tabbrowser/tab-arrow-end.png)
   skin/classic/browser/tabbrowser/tab-arrow-end-bkgnd.png                (tabbrowser/tab-arrow-end-bkgnd.png)
   skin/classic/browser/tabbrowser/tab-arrow-end-bkgnd-animate.png        (tabbrowser/tab-arrow-end-bkgnd-animate.png)
   skin/classic/browser/tabbrowser/tabbrowser-tabs-bkgnd.png              (tabbrowser/tabbrowser-tabs-bkgnd.png)
   skin/classic/browser/tabbrowser/tabDragIndicator.png                   (tabbrowser/tabDragIndicator.png)
   skin/classic/browser/tabbrowser/tab-left.png                           (tabbrowser/tab-left.png)
   skin/classic/browser/tabbrowser/tab-left-bkgnd.png                     (tabbrowser/tab-left-bkgnd.png)
   skin/classic/browser/tabbrowser/tab-left-hover.png                     (tabbrowser/tab-left-hover.png)
+  skin/classic/browser/tabbrowser/tab-left-inactive.png                  (tabbrowser/tab-left-inactive.png)
   skin/classic/browser/tabbrowser/tab-middle.png                         (tabbrowser/tab-middle.png)
   skin/classic/browser/tabbrowser/tab-middle-bkgnd.png                   (tabbrowser/tab-middle-bkgnd.png)
   skin/classic/browser/tabbrowser/tab-middle-hover.png                   (tabbrowser/tab-middle-hover.png)
+  skin/classic/browser/tabbrowser/tab-middle-inactive.png                (tabbrowser/tab-middle-inactive.png)
   skin/classic/browser/tabbrowser/tab-right.png                          (tabbrowser/tab-right.png)
   skin/classic/browser/tabbrowser/tab-right-bkgnd.png                    (tabbrowser/tab-right-bkgnd.png)
   skin/classic/browser/tabbrowser/tab-right-hover.png                    (tabbrowser/tab-right-hover.png)
+  skin/classic/browser/tabbrowser/tab-right-inactive.png                 (tabbrowser/tab-right-inactive.png)
   skin/classic/browser/tabbrowser/tabs-bottom-bg.png                     (tabbrowser/tabs-bottom-bg.png)
   skin/classic/browser/urlbar/endcap.png                                 (urlbar/endcap.png)
   skin/classic/browser/urlbar/endcap-focused.png                         (urlbar/endcap-focused.png)
   skin/classic/browser/urlbar/startcap.png                               (urlbar/startcap.png)
   skin/classic/browser/urlbar/startcap-focused.png                       (urlbar/startcap-focused.png)
   skin/classic/browser/urlbar/startcap-secure-start.png                  (urlbar/startcap-secure-start.png)
   skin/classic/browser/urlbar/startcap-secure-mid.png                    (urlbar/startcap-secure-mid.png)
   skin/classic/browser/urlbar/startcap-secure-end.png                    (urlbar/startcap-secure-end.png)
--- a/browser/themes/pinstripe/browser/pageInfo.css
+++ b/browser/themes/pinstripe/browser/pageInfo.css
@@ -43,17 +43,17 @@
   -moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedWindow");
 }
 
 
 #topStackBar {
   display: -moz-box;
   background-color: #969696;
   border-bottom: 1px solid #404040;
-  background-image: url("chrome://global/skin/toolbar/toolbar-background-tall.gif");
+  background-image: url("chrome://global/skin/toolbar/toolbar-background.gif");
   background-repeat: repeat-x;
   background-position: top right;
   padding: 4px 0 8px;
   -moz-box-pack: center;
 }
 
 /* View buttons */
 
index d37e20db8430cf404be7aecc64822df10946c191..ae33de5934a701a5b5b50b505d0955c0ceaee8f7
GIT binary patch
literal 2891
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
index 0c1a1e9471df83832b4c2b4ed41c0ad1c4284bb7..c27bd6a6fe58d4e8c492fb4973bed581b10e4442
GIT binary patch
literal 353
zc$@)Y0iOPeP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz14%?dRCwBA{Qv(y10{e3#&A!2jn$-`
zvqTvQ8o<cN=wuoG7^?!HTqF*?FM+P##|ZKQNYVH2-<Of%bWTprD4^cuEXaaURdX5Y
zGyE8~u35|=E-uahGF(VVhyiFgm=+ZkWl&aD25CmP5ZMJFg+$tp>4Gm`zA(Ig{hBBP
zKrX?E1s)zA24-evqFsPt00<;EFJoxU31Ha1VI_lrfB=J_pdeT=$ZOA@Jp=pS+}s>B
zmWE*%bmj*!?Ao#p#sBZ$zX$U{bW~Ins%g;76#3-IlZQaX|B1mMwIDs<@Ph`T15iMc
z#EkeHsP_OPEIR`Y;ROW+k($2%^?e3000ImEJ=v_smI=eu00000NkvXXu0mjfF<y-n
index 33f9a22eb83c79bbab044f306693c5351d1a6094..f89101f60390319fd4878abe63bc0a38c0410f5c
GIT binary patch
literal 405
zc$@*10c!q<P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUzH%UZ6RCwBA{Qv(y10{fwVgtm)#OeeE
z1@Dog`R&`cnvBbqE&Fe7Zcdi%Cr_SaVEO+2JHwYRU&t~5q?hI2zkduMj1BBQcppr=
z+ACs}2kB$^^XCu4@87>MB%i(b%CK(72QXVr=>vn51UH5nkY1L*fB%9R$e^m@9K+K$
zd<^Vd5SvRo9y3Ubd}3&;FhWrW(#!Js^Jj*4@7|$Elw=w)bj)UC`2JTE%opI}U?@rb
zkD(5vmkHz#kV(jx@!xv}aS;{<MkY2e2D5=;=<2{>0P_E@U%yaH2JwIX{KydL&I0D|
zKmL*7+qZ8RVF1#LGZ4#?*?>-b24<UT@iIJl@*8^~f(UdMfWW<bh{XB&^=qur2-3@F
zYis*oR8*9#gak5}5lD*xF*})g=_kdx5g@<-`N_11{<7{B00000NkvXXu0mjf|3tUT
new file mode 100755
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0918714221c6d4e602dee063292c2503c2e8bf06
GIT binary patch
literal 559
zc$@(*0?_@5P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00004XF*Lt007q5
z)K6G40000PbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz!AV3xRCwBA
z{Qv(y10{e3U7(|*lLtr@0kH=Vn?Z$70r3tX?yIOM|AMTZ5!nT;t!?(q%*+c64Gk4E
zH8mKdrKQ2*PoF+zxPJWx!};^)AN>9MH=(+^>L6Sb$N&&-Y-|eb>+Apj{Q2|$FfeD%
zod3uGBnMIhQVY|^1Tv(qu3iYpSrio&$si#i0XF#Avu6xHfBr=A9!L(P2Ba3G2P6hI
z;P>y}ML=ish>MG(X!!Q+8%Cgk)PU52^dKAHt*fhpq4>*}FIYn!q!y$H*#Ip$IXR*Y
z0I3D)QG^@t>({UE*wVxI@821A?AU=J{^!phkRE1a1MWY3_z**3O-&8M#fujiCQO)s
z;+iK<o`Ce+LH5Gd6DLk!gg6@;8$(i35`&703PXQ?Kf}k5AHi}UwIDsn229+sW9OI0
zj~~MgU}9oo5Ed3@;Nak3Ff}!0NJvOv;OFOO0I30~1?fRaNWsA&A*rcp|AAilj}Cy&
z1=AookQ$I$m_C%G91sxb%F4<*%frK6!NS6VL0elJEPnm^b%tZdj)81`0JJ%C!-n-c
xu;v92@b&crWu{UbnW=m8=1sUW6FC4NzyR3WCel2vMV<fv002ovPDHLkV1gfu^z;A#
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ec7d722dd12a2cca4f1a51ce93ac405ddf7e0123
GIT binary patch
literal 679
zc$@*J0$BZtP)<h;3K|Lk000e1NJLTq000pH000*V1^@s6?KGt40000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Nl8RORCwByR6EZSQ4pPl%lokuw1k!h
z3s4ecK}RW(j>d{u(ip-YF!?M@jE%p*XzXk>#@ZNTVl**d_Z1o>$a{G%EG#(Z#w8m+
zb^|v#naeWw%$d0}S1Fgvd-}Kb`@P+oY`?Q@vwhF@HQUjDKGG`1V(~y?UzQV=&*!6H
zFgW3Fj~UPSlWr#w>2&%S2brcxo6UyS>ow`RPP5reWuglqM1>FDWtTseugGSz*AxIC
z0l{*)q{(DL<MCL632%i$p)c%n8>vc?R4R2%#csEgM3xee42MJNcDvN;^+22ohr@3;
z&>eO+L@X9NS`PqZ+wGR3(I~->6_DTWr*^vyMK^i>ko_(MWIHWIQON7{5=SMjh1>%;
z(`vQg(que$C9yA%Kn?s+=*40|{eEBN0QUvtp1PonZ-^3!gv4kx!u8)fiv)G@cs#N$
zkw`?=h>L&YY!VdPB7!PS)6}y`P!rkeoEpfu(B|1B@CU4p4g><@lS!=JF$_aCAb`E9
zs=rUVV*4oIAg&m|o;&`ts}lR9f&jj&)r#ixxf}(qi(aWzUI^sn7Tw<dh-?ickk9Ae
zGQJ7q=Jbx>FkpWcpkgo>pnHGSYPBb&Qppf#U#B!I0=o)yDW{<|o6Sf37JZc?!H<n&
z9qcL)Y&xBy-G4S3ji<R>?iH($1r_+i?K-VA__tmt6h74J^_R(H@*NW#QV^X^$MJT!
z2U_uXT+3uKm(^<ZBg_B9pMO{i4ui=N9=No~kb#JJJgyk)V@`hs7ytq#;KSlaRAT@D
N002ovPDHLkV1hHZH>3an
index fe3b0a3a6969b295971ada4f94f92586986830ba..a885c9c7e3ed1564f8ccea3d3deec499c6306feb
GIT binary patch
literal 573
zc$@(}0>b@?P)<h;3K|Lk000e1NJLTq000pH000*V1^@s6?KGt40000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz-$_J4RCwB?l+Q~7Q4q&x{ecIC1@RW@
z!HX9|v_R;rD8fpD2QM8vdhyUnPaQgh(%)bd9X%uwc#}v=3PS`*Nj4!B%a9aT*KM9?
zm{{oU7iNd|cHZaBd(0ck=kp0Ll^_W7o=5+PzK;G1{RR5>g_wz_gxP38<M9}()hg8M
zb;x8gkj-X4d7eMQ@RL+3)t|+=-EN@p$5P0m%H=Y|Vle`}LlA?Yw;4o+5Lm@bCKJTt
zabOr`o1&<k$K%<UZ9w&Uy_GVVS2CG|L?UsI@Esg-ve9S+>zdc=1&712g&BnjR1}0*
zAP@khQh9(3S}`0BL5#FoE!gdLI-k$)iG~naEEXsf3cHdZ27>``{iY;{Mxz0a<7fqb
zL_-FH0m$WYUQ#CQb{kYG)rTZVtyUvPdX)qzl}e!3>u+TQBF0*+7I~C?zu$i<I+Jud
z4OXl55)1A@K}vXCVU<Fo(Wr&P;bWJ}#jOP)Eg_f7L9tluM5EC|qtTcr^D9G|&F16?
z_;Oz&kx1NTvz_DgWU+$K{}Q>pZnq1SN(ES!?c@2cL!r=_PNz%Z@2{Vx<a9d!Y)Uju
zvud@vV>X+M!C)|h>EGb=6W+tG^hu-M|F0;gJF;lcq|%oKeG4!Ex1x>~fYLYA00000
LNkvXXu0mjfHfaNz
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..8441993ed05c7ee09488305028af24822f726f57
GIT binary patch
literal 188
zc%17D@N?(olHy`uVBq!ia0vp^oIotj!3HF6`lkK{Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JisC$7978H@-MO%l_kaQqgX4rtMomXq&OFlHWVM!ckwe2A
z!F>x)T@SAf3FW_#oW>Y<Zf2ln>%<NNFHJ+M=P^#z@8uU)b6<<<c{Zo#m_$$2`<|%m
ko~*SUi+1mCv14Ron9XC+u|7d@AJ8TSPgg&ebxsLQ0Qb2=c>n+a
index 671203540867c1f535c376ab2f4c2d61e506ba57..62c2b3f7ec4fec50765be97b501d9e890de31737
GIT binary patch
literal 189
zc%17D@N?(olHy`uVBq!ia0vp^oIotj!3HF6`lkK{Qj#UE5hcO-X(i=}MX3yqDfvmM
z3ZA)%>8U}fi7AzZCsS>JisC(8978H@?YV5o#bC(6a)9HzX?A^~zW?N7hYlT*5USr0
zE_1Ug!7)Z?;$4S~aD}MsL=i!Woz`w?Z4*}|nH)Q?;yd3(<L5d57wih&9Z@cs`ph?E
lKBu7J=jDofIAj^w7}!2~mK?KM=LfWk!PC{xWt~$(697)FKzINE
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..9793ec83b1f944df3551e3bbf98943e08ede558b
GIT binary patch
literal 759
zc$@+E0to$yP)<h;3K|Lk000e1NJLTq0077U000*V1^@s6PA~vu0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!nMp)JRCwC#n!BnRQ51%^*YPqs8gGL#
zm?B+B2zX8t(yAd{BoIiE<~%?MDNHM*GnK7vz%~TZ_yS3x*ovKyMiiojjyhhl*2Xyu
zhmZ%z{y$h}%N(nXAM0PbeD!)=_<TOWcu%T(^zt>G&*?1D`Gn5E-S-0UKNI}RvnbU&
zs*l_4)^Hr>_8*V}s4j>}5_~%x4%Z}yh(sbn*L9(3nh1qLA`l4R#(=VdaE$t4+qT6b
z6bc2APN#)o7$O#nNlEzmC4S-NfI5Pl&*w0G_`hy88;fPg=krpKOeP}*aXSc$;rIJ-
zYd|eQ=!5@(BGpwq9v7ujNfe7kDM&Jzlrbw93`#N3J%EaW7*tJ`z%)%^S(cQ8J4ZMi
zzLkQyj4S|@5`-jpOVP^6<#JMtY&I(riG=JLm-r=)$0KeEs3{1|7B6}DPNh<^I8t%P
zIGs+i08m;G$8jD<qfx>02S+NNHCPP9DF8^2{eEw7=kUsLI2<sH1Hgh%ygHH?L3a>m
zIrxMi0FWS>rv0XvW%3}-a`0*i1Oeb8h_36uR;!h{+wBAw$1GP6NCK1>#ImfP^ZESB
zwr#=X?ptB41OO7G(P(@bjYc=rMWVcB;tuNkJBTX@15tpIf>bJ%5!LtMaQKP^VG(#9
z;cvC>u9!d)pqwDJT5aF$c0W%hlk3G|QFc3scg3Bbd6yI+3Q$H6{!=cOhs|d5Q>)c#
z&t|g}f0M=C#O)%kB#;BBhOb(!$`}29KTa|0rrmD8UoMyTd6SoaUH5ho%p*WqK`xT$
z6tiA*I-NIz!JtMWMBS+6-RuQGNkJ}>aO`?Colc+jdc9}k@%Z6-y-uxGD+|{JloRA1
pONkoQ11c6HPL;uR0oC{;zyNph)HySfvmO8d002ovPDHLkV1oOPP_zI5
index 6dec24b452d30be6ca28a913821d7995aff45ce4..9f374ba627291bb79da0627c2c5ba184f073112a
GIT binary patch
literal 653
zc$@)^0&@L{P)<h;3K|Lk000e1NJLTq0077U000*V1^@s6PA~vu0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!FG)l}RCwC#nm?=BP#A|#%vG^f6pJEA
zv}kd#Sc-a8ikqlaL8(*<MZ5F^TxvnP2qN9=<m%eu-bHXPt%I`;E`e?;#lZ~zOW#0m
z$qn`kG`|N<-sI#=KX`c0A>s1*JmWZyDX1$AC*8iH`kbnl>Qkz`b}az^Ggr!GJRbj@
zC>DzrDmMm$;X^W+w5QW)=Jk46AP`_Qhs1#X1X0Q1q0aD?gt%@tn=BLx-C2A-pOF~Q
zryzww!Al+Dd%0W|>h(G^nM~|-Iw2vTYdGZ$LYR1-|JG<U;+0ATsQ{qvAhfM|pGu|T
zrBaC<k4K~efJzX%(P(VfYBk6KfL0JXYrKiYVs@v~$qt7D5&=Lh2z8Gakw^q`0B}hV
z661-_=Yt>sToPoz-`lNLD+B@Hk{~?KpCn1TGMmjv0|2ccB*w4JX5(?WTu1`|tsu0$
z`YDQ{$Kh}w4FI%)2!ilqKA*?K;V{wwKr2YKTK(MZcHgd6D+{^^0C(YJSvGY#oiE$%
z_GP(TMj`;HJ4h~<+Yg7sPpww#dODr@W3d=g0pL~;<>L4IXYF?TW3SiiOOoVBBod70
zd87j%$e((QMx!IzYTfJi`|p;^<-<%S!`yB+5(4@@gJiQ=HknLrpRMclx;PjNUe9K;
zoFE96U@*vRHXFlt5};c_)Q~JnSBZ$C_-r&9r5B6E<K1rOphLWXxPa~ik!AT`@05Q}
n9??+5xKHB&;sSc(w*UhGjCGT^w#(b<00000NkvXXu0mjfDrqKX
--- a/browser/themes/pinstripe/browser/places/organizer.css
+++ b/browser/themes/pinstripe/browser/places/organizer.css
@@ -53,103 +53,109 @@
 #placesView > splitter {
   border-left: none !important;
   border-right: 1px solid #404040;
   min-width: 1px;
   width: 1px;
   background-image: none !important;       
 } 
 
-
 /* back button */
 
 #back-button {
   list-style-image: url("chrome://browser/skin/places/back-forward.png");
-  -moz-image-region: rect(0px, 27px, 23px, 0px);
+  -moz-image-region: rect(0px, 34px, 23px, 0px);
   -moz-margin-end: 0;
   -moz-padding-end: 0;
   border-left: none;
   border-right: none;
 }
 
 #back-button[disabled="true"] {
- -moz-image-region: rect(23px, 27px, 46px, 0px) !important;
+ -moz-image-region: rect(23px, 34px, 46px, 0px) !important;
 }
 
 #back-button:hover:active,
 #back-button[buttondown="true"],
 #back-button[open="true"] {
-  -moz-image-region: rect(46px, 27px, 69px, 0px);
+  -moz-image-region: rect(46px, 34px, 69px, 0px);
 }
 
 #back-button > .toolbarbutton-text,
 #forward-button > .toolbarbutton-text {
   display: none;
 }
 
 /* forward button */
 
 #forward-button {
   list-style-image: url("chrome://browser/skin/places/back-forward.png");
-  -moz-image-region: rect(0px, 53px, 23px, 27px);
+  -moz-image-region: rect(0px, 67px, 23px, 34px);
   -moz-margin-start: 0;
   -moz-margin-end: 8px;
   -moz-padding-start: 0;
   border-left: none;
   border-right: none;
 }
 
 #forward-button[disabled="true"] {
- -moz-image-region: rect(23px, 53px, 46px, 27px) !important;
+ -moz-image-region: rect(23px, 67px, 46px, 34px) !important;
 }
 
 #forward-button:hover:active,
 #forward-button[buttondown="true"],
 #forward-button[open="true"] {
-  -moz-image-region: rect(46px, 53px, 69px, 27px);
+  -moz-image-region: rect(46px, 67px, 69px, 34px);
 }
 
 #placesToolbar > toolbarbutton[type="menu"] {
   -moz-margin-start: 5px;
-  -moz-padding-end: 6px;
+  -moz-padding-end: 10px;
   background: url("chrome://browser/skin/places/menubutton-end.png") center right no-repeat;
 }
+#placesToolbar > toolbarbutton[type="menu"][open="true"] {
+  background: url("chrome://browser/skin/places/menubutton-end-pressed.png") center right no-repeat;
+}
 
 #placesToolbar > toolbarbutton[type="menu"] > menupopup {
   -moz-margin-start: 2px;
   margin-top: -4px;
 }
 
 #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-icon {
   background: url("chrome://browser/skin/places/menubutton-start.png") center left no-repeat;
-  padding: 4px 2px;
+  padding: 3px 4px 4px 10px;
   height: 23px;
 }
+#placesToolbar > toolbarbutton[type="menu"][open="true"] > .toolbarbutton-icon {
+  background: url("chrome://browser/skin/places/menubutton-start-pressed.png") center left no-repeat;
+}
 
 #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-text {
-  background: url("chrome://browser/skin/places/menubutton-mid.png") center left repeat-x;
-  height: 23px;
-  margin: 0;
-  padding: 4px;
+  display:  none;
 }
 
 #placesToolbar > toolbarbutton[type="menu"] > .toolbarbutton-menu-dropmarker {
   list-style-image: url("chrome://browser/skin/places/folderDropArrow.png");
+  padding: 0;
 }
 
 /* organize button */
 #organizeButton {
+  list-style-image: url("chrome://browser/skin/places/toolbar-button-organize.png");
 }
 
 /* view button */
 #viewMenu {
+  list-style-image: url("chrome://browser/skin/places/toolbar-button-view.png");
 }
 
 /* maintenance button */
 #maintenanceButton {
+  list-style-image: url("chrome://browser/skin/places/toolbar-button-backup.png");
 }
 
 /* Root View */
 #placesView {
   border-top: 1px solid ThreeDDarkShadow;
   -moz-user-focus: ignore;
 }
 
@@ -167,50 +173,47 @@
 #placesList {
   -moz-appearance: none;
   background-color: #d2d8e2;
   width: 160px;
   margin: 0px;
   border: 0px;
 }
 
-#contentSplitter {
-  height: 10px !important;
-  min-height: 10px;
+#infoPaneBox {
   border-top: 1px solid #919191;
-  border-bottom: none;
-  background-color: #f0f0f0;
-  background-image: none;
-}
-
-#contentSplitter > grippy {
-  background-image: url('chrome://browser/skin/places/infoPaneGrippy.png');
-  background-position: center center;
-  height: 5px;
-}
-
-#contentSplitter > grippy:hover {
-  background-color: transparent;
-}
-
-#infoPane {
   background-color: #f0f0f0;
   padding: 10px;
 }
 
 #placeContent {
   -moz-appearance: none;
   border: 0px;
 }
 
 #placeContent treechildren::-moz-tree-row {
   border-top: none !important;
   padding-top: 1px;
 }
 
+#placeContent treechildren::-moz-tree-row(odd) {
+  background-color: #edf3fe;
+}
+
+#placeContent treechildren::-moz-tree-row(selected),
+#placeContent treechildren::-moz-tree-row(odd, selected) {
+  background-color: -moz-mac-secondaryhighlight;
+}
+
+#placeContent treechildren::-moz-tree-row(selected, focus), 
+#placeContent treechildren::-moz-tree-row(odd, selected, focus) {
+  background-color: Highlight;
+  color: HighlightText !important;
+}
+
 #placeContent treechildren::-moz-tree-cell,
 #placeContent treechildren::-moz-tree-column {
   border-right: 1px solid #d7dad7;
 }
 
 #placeContent treechildren::-moz-tree-cell(separator) {
   border-color: transparent;
 }
@@ -260,23 +263,29 @@
 
 #searchFilter {
   -moz-appearance: none;
   border: 3px solid;
   -moz-border-top-colors: #676767 #C5C5C5 -moz-Field;
   -moz-border-bottom-colors: #C2C2C2 #A4A4A4 -moz-Field;
   -moz-border-right-colors: #969696 #C5C5C5 -moz-Field;
   -moz-border-left-colors: #969696 #C5C5C5 -moz-Field;
-  -moz-border-radius: 11.5px;
+  -moz-border-radius: 12px;
   background: url("chrome://global/skin/icons/search-textbox.png") -moz-Field no-repeat 1px center;
-  -moz-background-clip: padding !important;
+  -moz-background-clip: border !important;
   padding: 0;
   -moz-padding-start: 14px;
 }
 
+#searchFilter[focused="true"] {
+  outline: 2px solid #4F8EC9;
+  -moz-outline-radius: 12px;
+  -moz-outline-offset: -2px;
+}
+
 #searchFilter > .textbox-input-box {
   padding: 2px;
   border-left: 2px solid transparent;
 }
 
 .filterList {
   -moz-appearance: none;
   background-color: transparent;
@@ -339,17 +348,17 @@
   margin: 0 1px;
 }
 
 #organizerScopeBar .toolbarbutton-text {
    margin: 0 !important;
    padding: 0 5px !important;
 }
 
-#organizerScopeBar> toolbarbutton:hover {
+#organizerScopeBar> toolbarbutton:not([disabled="true"]):hover {
   color: #fff;
   background: url("chrome://global/skin/20pct_transparent_pixel.png") repeat;
 }
 
 #organizerScopeBar > toolbarbutton[checked="true"]  {
   background: url("chrome://global/skin/icons/white-gray-gradient-active.gif") repeat-x -1px 50%;
   border-color:   #656565;
   color: #fff !important;
@@ -413,16 +422,31 @@ menulist[open="true"] > .menulist-label-
   background: url("chrome://global/skin/icons/round-button-active-middle.png") repeat-x center left !important;
 }
 
 #editBMPanel_namePicker {
   background: none !important;
   margin: 0px !important;
   padding:  0px !important;
 }
+#editBMPanel_namePicker[droppable="false"] > .menulist-editable-box {
+  -moz-appearance: textfield;
+  cursor: text;
+  margin: 4px 4px;
+  border: 3px solid;
+  -moz-border-top-colors: transparent #888888 #000000;
+  -moz-border-right-colors: transparent #FFFFFF #000000;
+  -moz-border-bottom-colors: transparent #FFFFFF #000000;
+  -moz-border-left-colors: transparent #888888 #000000;
+  -moz-border-radius-topright: 2px;
+  -moz-border-radius-bottomleft: 2px;
+  padding: 0;
+  background-color: -moz-Field;
+  color: -moz-FieldText;
+}
 
 #saveSearch {
   -moz-appearance: none;
   margin: 0;
   padding: 4px 0 3px 0;
   -moz-padding-start: 7px;
   background: url("chrome://global/skin/icons/round-button-leftcap.png") no-repeat center left;
   border: none;
@@ -528,16 +552,17 @@ menulist[open="true"] > .menulist-label-
 .advancedSearchMinus {
   background: url("chrome://browser/skin/places/minus.png") no-repeat left center;
 }
 
 .advancedSearchMinus:active {
   background: url("chrome://browser/skin/places/minus-active.png") no-repeat left center;
 }
 
+%endif
 
 /**** expanders ****/
 
 .expander-up,
 .expander-down {
   -moz-appearance: none;
   margin-left: 8px;
   padding: 0;
@@ -554,36 +579,36 @@ menulist[open="true"] > .menulist-label-
 
 .expander-down:hover:active {
   list-style-image: url("chrome://browser/skin/places/expander-closed-active.png") !important;
 }
 
 .expander-up:hover:active {
   list-style-image: url("chrome://browser/skin/places/expander-open-active.png") !important;
 }
-%endif
 
 .no-margin-button {
   min-width:0em;
 }
 
 /**
  * info pane
  */
 
 /* More/Less button */
-#infoScrollboxExpander {
+
+#infoBoxExpander {
   list-style-image: url("chrome://browser/skin/places/twisty-open.gif");
   -moz-appearance: none;
   margin: 0;
   padding: 0;
   max-width: 0;
 }
 
-#infoScrollbox[minimal="true"] #infoScrollboxExpander {
+#infoBox[minimal="true"] #infoBoxExpander {
   list-style-image: url("chrome://browser/skin/places/twisty-closed.gif");
 }
 
 #itemsCountText,
 #selectItemDescription {
   color: GrayText;
 }
 
--- a/browser/themes/pinstripe/browser/places/places.css
+++ b/browser/themes/pinstripe/browser/places/places.css
@@ -94,22 +94,27 @@
 
 page > hbox {
  margin: 0 4px 6px 4px;
 }
 
 /* Trees */
 
 treechildren::-moz-tree-image(title) {
+  list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png");
   padding-right: 2px;
   margin: 0px 2px;
   width: 16px;
   height: 16px;
 }
 
+treechildren::-moz-tree-image(title, livemarkItem) {
+  list-style-image: url("chrome://browser/skin/places/livemarkItem.png");
+}
+
 treechildren::-moz-tree-image(title, container),
 treechildren::-moz-tree-image(title, open) {
   list-style-image: url("chrome://global/skin/tree/folder.png");
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
 
 treechildren::-moz-tree-image(title, separator) {
   list-style-image: none;
@@ -125,21 +130,33 @@ treechildren::-moz-tree-row(session-star
 treechildren::-moz-tree-image(container, livemark) {
   list-style-image: url("chrome://browser/skin/page-livemarks.png");
 }
 
 treechildren::-moz-tree-image(container, tagContainer) {
   list-style-image: url("chrome://mozapps/skin/places/tagContainerIcon.png");
 }
 
+treechildren::-moz-tree-image(container, OrganizerQuery_BookmarksToolbar) {
+  list-style-image: url("chrome://browser/skin/places/bookmarksToolbar.png");
+}
+
+treechildren::-moz-tree-image(container, OrganizerQuery_BookmarksMenu) {
+  list-style-image: url("chrome://browser/skin/places/bookmarksMenu.png");
+}
+
 /* query-nodes should be styled even if they're not expandable */
 treechildren::-moz-tree-image(query) {
   list-style-image: url("chrome://browser/skin/places/query.png");
 }
 
+treechildren::-moz-tree-image(query, OrganizerQuery_History) {
+  list-style-image: url("chrome://browser/skin/places/history.png");
+}
+
 /* We want some queries to look like ordinary folders. This must come
    after the (title, query) selector, or it would get overridden. */
 treechildren::-moz-tree-image(title, query, folder),
 treechildren::-moz-tree-image(title, query, folder, open) {
   list-style-image: url("chrome://global/skin/tree/folder.png");
   -moz-image-region: rect(0, 16px, 16px, 0);
 }
 
index 0918714221c6d4e602dee063292c2503c2e8bf06..0ccb8470256d32b201cfb508c7276310b7d7e46b
GIT binary patch
literal 549
zc$@(x0^0qFP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz$4Nv%RCwB?Q_C*{K^*>VcTu7QO&a2r
zxOmhfk~VRXN+c4FPENw1{tE{O4*miT#LY!qaB}EPQ0m|&LDNW6>bcs^?#}F*N4r~T
zQ^F>*nfbooe81;NmSw?zK85|l^BY@);DusBmX+<zou$QJ39!qdQ0N;GiA0#-&jQr@
zDbiGUeS7>yAng<8W>+ib=c#WwQ>gdg@=CaboSGR1D07`d`MRyI?FM-Y>BlT+8nKN`
z(*l=Eg7cFkKL^HIZOjh6%H`C+&`mHj6GS~MI6k@uNs^$W%fqq5y<1@2nw;*Y#T6o!
zSyV)w3TV0$K~HZJAcR4#7GB!A>cQ<+027lgVM9!j2Di|tabX?o-$42)1K1!iIO64t
z?HR_nf*r~kP6W9e1BG;ZX9Hl}f{cM7aj$YLqhgywIg+0f$q_)v5$N}OAr?(hLkw3J
zDLXB9tpY=SAH2RG5xT2bfU4^GE<7Yucur?&&Q-Q(ja%jz<78RXMUsk&$Z}$xC=lZl
zoxBT|=OTj9fRA?}mCOLaq;!;-cf&AkFcJUYv(h)v%+K+=cP?D+-Eo0v?6~}_URQnx
nb+wJaGHGY~KfdPdmjD9*$A{ukNh|z>00000NkvXXu0mjfQMC8L
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..15ec5d0a76f7bc9cd478f44c17e1af60d92b8abf
GIT binary patch
literal 4415
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
P{fZTB?O;`8;Ticqa(Rfl
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..19ae80a16c68b590d431f7a017a7965f946a7ded
GIT binary patch
literal 3864
zc$@(k59jcSP)<h;3K|Lk000e1NJLTq001xm001xu1^@s6R|5Hm0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU=x=BPqRCwCdSqqSq)s;T~yZ^r*(~s#H
z7#OAp1|5RHD3!RR)&M1223=N{WHnnU1H@pF=q~KCE@+}ORxHVu+0v{=O)QJrthH5Z
zOg2#$a7j7%KuIxXL=bcare~1HJp0}Kzwe&&cMr@$k1|$jVQ<x$zH|G0_ulW`bI&>V
zHn;7E&qJ-EC=zrJ`}%kuG7Dq+wT5BAR0`og81bce0kZQW`l8A3+kf!wN&EQX%I^*F
zJXbvM>Qk+g>F~801%ZbT^Px4(SG6T(w6%2{$%WQX+ocxL{iqnaE79K8(mc0q;YWqg
zT~onRS$g~ZTf*^ZJQRy0zVcW1Z<!JSP4hu89#7WKoRNvmn31V#Xh>4qr54hSHa0xe
zFmpz>apufybb8~qso=edN&MzuG+GKoq9sx0H(xRVTB)uv|C&HJlCT}N$#K~xe>j|=
zwo6$>(m9+9tPe#avm6HZIgH&GiiDe~?NWE)hC3eEA}MlQ2}B<D1tSlOSf{pHy4?5~
z;5dMHPO>`HALwXknYA<A5Qke^%AW20reE#L3=hLlYG7@-Sm<8T%w-w7pd-Zp;S7r?
z{=nj<)>+TjH#TxNHkF#`yWgGGPL2%@!RfyKZzKNTwbQxuIDX<8SbX!QxFkzAD4P6?
z77D_yXSOy_`^pVFhD!N77)5h~Wm<1`{nz8e;~4Sauy32}Q<e#$)Df93h5dD52-Y`%
zQ8w20p7_L5GR&4_AR6E4IM7+lX5eti$~d;&ZR&cbEP|{k%2H917Q~w55Uw^v;|-vf
z_3!o^uj0AHBjJX|r(FiG<ue&Lp_@6=whx=SvG2N@H^$IWEMd%<!}G2t$UMlJ27;(<
zJ-4f(_G8Is@31ZVCC71L@h$h3I8He3y6_Hn=c8}1V0}IC0-xf5O9BU}b=PwH22Kt_
z?}<}h2W_)wz^vv**!c&xl({ScJePEACy^f+1{DVk$73K0;wL<?M>v7&TRji<44fQ-
z-YS8%IWrO80KY!U-Q+rME85xjZPS{W9vOl6-~0{u0s#;td05dxKjwL%=arv)_gA&d
z<<I~2>D8`d&o%Y@X4^F5dZ7Tq^{f9rRoBpT8*mcj#<DwZY8p9^8aNB5&x}B+q=RMI
zP$-lkn=3$j#OyyjD1kp5+n@%+K3tKt0l&H{Hf_c#L69Mz$^O%l=;#}%{tCWW#TSc&
zFT(7Qb-Xt%@u5ildVeUan3lC6lOB0XQj`^d%x#O?vFGV~cTaXUK0fg3(OHYWD&S(T
zlN41_wD4Bpha123{^1cV<2vlN?C8ih-gxiS?x>I(EbAsPG*lA9v~UtS{IW}5B&k}b
zf_7#a=BB@B8Gg1cVt4gqd<O5rE!p(wH{R|(^*g_tJyk9n=kXW=3P@tl5#vj0z`s}Z
zheEnxJg~fR<nf0$ef{mW>%XR&dTDtfJ#t69b;(<Uz5DxX5m>bHzOUF;X_p`?n&b=p
zXwTF4Z0Aq(oq^Sfvria?v(p!>5Bq}AP6|S`0uv`jI&BsUj}03;|FY%m6NEjEX0~G5
z&<?|PUkujO2SbtA-pTNqKe|^GW5I0Nd~tch;G@T@Cc5XTySH+pwp&y*4bQ@^$#%dp
z>|KtlX{M>{-u>j=-WlQ3nLOI+DOkH8vyKV=ZeDGKU_iSFOl@QN7@R&WcHi^m{5rxA
zb}XHTp5BwNsx^H(FKNfrU?YTr{)_O`W;rn~otBP${hHkEgdyyBdHuP+S;<Sm6eooy
zb+1J|0J(xMwf}{UE6;f$+jd}NGz0y3Xb&BrCbwH^6+O53+^gj}YWdDBYF3g&upOb>
zEfm6}OBljZ85zw&s{ai191_r<!Z9%{c=(t18!`HR)t8k~Q51l2(lMh{3X(2i#_{9j
z<cR{}q~qiN*U$T2-0T17Pd&HEINxzgH-Z-hGRtzj1FIWmhoPG(YWw+aew*NnrFayo
zS8UnnCY{RRK0ml=+LZ%qTkVEno}|g|>XIH0MH^BiyWf+Zpf*!C58IY`HR%%O!eSbw
zgl)T?T}9{J^DJX_%0;0%wb?HFkaR8zWYqaH{~c)Y*Uv?Oo3e_-=;`Eyphmp!>~b0$
z+ek@T96czXD310fHvCzke>@nG&TqRybDLV*KgJz6qvr;}r}(C8!7%p2K{1yGUDwa5
zp*WsuZu-E9kFL6Paju8(<AE%)@cu90E*)W<FzlFlTG==!X<py1RRWi>VL=W8$J{vX
z-2C*RM?dsTs1p7Ku$h?9T^Vx_HNpHU*gW6Kcs_}-0UT9Jg6k}^L<P623=ZldrhnW7
z$UGcQYI8sWRrODoWFO9x@6s8!opU*mgKAO=y4P{&YK?Lk2bAX`rf1?VVti_63{97p
z;tbD$D{3Eza?l%}3Hc=0#RWJ9vN6GRopyvwB)~(-5x}rHka)3^bGYQ5@58>~kuk6H
zczt;JP20JpXv0a{F_$^6;9<rI&;l6PRSDZ2M?B~lu>G-b*{=+bWUKhPm;dn>{3^*O
zZ8KbRv5C5bnMlBJdEi`}kmUb>6QyMS-FqemvtI?Te`+;jRuW^+0&vggRNTGEUwm3#
z)rXQnxfVWOq4Pv67EPw`Wb)2Q!8hKzeu(3^;@<!K+0^a>)v^ZEZ~}bc4zE7-a+jb*
zS_Cb;km^$f-+af$Ev_KP9bQUM{qqn=)-|_7XlA=t{~QD!s-Ha%Vu^WF-!@gSp_ewR
z(P_AT)4cjr39J!<@q}7G6MV5I;Iw#Rio3902{+CP#hWm*Z2~#eNNM%@sjNQ8YFr9L
zKnjHMK&$b|c0s)0e+pb=GD+XGIlzz~Lq8_RXM@o{oUGb(ch#<Il?bKvC=Z5bwgG0A
z6n-E$eKw5d1|O>852B=NfmeO=AL8g?ZqQ4G&0_s5I--c?Kn%pe$P8@0<*)y)2m5^U
z<rf|so_L69dzaC~Q90}iK9FMx2sY2d1W`oq$zcv+LjIGZ;AB!DG6Q1)%T$SUqR4cG
zMOlFO5GSb+n%)ZaE$zUIA~1BLnE1hH>KGJ;`hatE^zAH%`iD{W^&a_s%yFzGj&03B
zU#~G<0?{7>B{CgdD(~U(?g4uGEV$)S5SWDv!<F#<a$FFkcZdM9BXbcHLHDeIBrEu-
z;{8BEe+w0{DcYJ~6iOJ7Obl#AU`7UFT(7qZa^uy2S3kfMmjW1wB$9-K<N9N;au9DJ
zzJwX6UNkTkl<;<y0mb+jj&!{aj@AHzqT!e_US2R3;3w@KUVuD2LvL$iCpInwxn9@A
zOxG?!fE)HqXsyD^JC)#U;FJ&okTD`{lf%g~+<__y7qd~h4itgm<wXY3J&V1<T1qrU
zSARATj-lE5F;a4#+0f2;=``Yr2+zxaDLfKmNVEvNfh%gj1{K4#!K@vai2~s6L3Pr0
z6-RZ~`^5Z8P(h-|jO6%o4pd)otMH{|tKVmOF5@`tt4wRc;8a~Pi-ci*Gog;3Hj0=(
z42nIl31><<N|#m28m{fGP{U2$pg@G3ia6t+HmiPeP#QV}PNDw+)O`Gfr?$M^KL3lV
zX&QeDa`@b?6OI<ranAog-k+eKhM;2pXxD%IWIGWcD>%UPbi&s44oe{t%$w-=q=`hS
z=wdR*Kq<Tjnv>dznENN3zqhPndcI}o^W{*51oH;2PTHkJ&h`2$p6LQ7-}fS7HWKjn
zoxg_OBM0`*ZC~^!mQikV#4t{hO(0SEv`oa~yd+}){9<wUo?kw>?m{oLj?bUy$go65
z*{Q<;nFp{;@JxXtZ-ha4nwp}+yRL>4xxF-e{HPF^(+&dWGB)!jLc8gDSs#aHnFFrS
zcZ_r|1i$vuPgkzE?e4x@K9;at)muPs2W-!(fb%9>hNzlNz4p@2R!-(dVeqs8WoFly
zA30TQS3li{kBwM(h#fDB<he?w>e(^=K{ErPGM7n9E@Oj5HdyNo2%OK110CryrmQ@h
zh^j0B7Tpa}r0DpR@!M?(;L<Vh-mtjyc=9MV=O+SJPX=}zJ5jQH<YsG*Z!w>zGg%~V
zDO)n=76)atw~%lO=7sjdyx@MXPHnoy1L=@%jq&H&H~=M>WO|N{UMBl4u*|z)W8ETi
zLeE4xq+271eZj<x*g_o>b$vXU>j{|VJK@!-t@54V>DJnTMA1|rET4gv-~hzbvCi=v
zD6EVnr<MDc_2*lFbX3WtRk-lwpp9%7%ps866v|*1J-m5?SZ9+=XuQr6T5%Os5ILO)
z^h^X(j&Is{@fWiYRmLFfw?2>+)f+!#3??(hu?1sB6iDZy`@p$7s6UU=JwEY$6TVuG
zgqETtt5LgVQH3<9_JM=diN7-8tCuBba23in-1Ehg;RA{e;lQ9b@mK%-U;fv90Mm%o
zVI+cA(ghfL&Rf{)Z@gEtGZ8NwvMdcy-eVZn0>^b~>MgtB^IjGHIHhJbiuYc6B40nP
zG1`oBjo<HEPi<FXsW~fpLa7V+AB;uofQ0JQ_Wyzat+cAj>q8-bv(G033Dv3XO56qh
zg2{&!MOqOG`XBUbK1y3Xp*ptx0KdDDbgm=<q9V(WNRqHr5QJ+)QK-{Y1tO6kD2nW*
z50!UKnc8MyO0l<8Ht01X>p0FKOl`?iJ$N|@a3A-aWWk{3**(4QNTTO`yl0bf0+b8U
z4-2MgVUTjX=M;K2&*h46)!b(8vhDzRm`FJIbKC_qm)bT?M2H+oCFr=7i-qgnb=l8A
zsboB7TGoA21tMlMVxPb41n7x;WF-4oxorL$t?XwN(m~ySMa(}F_OcV8UsA@>Ig&d~
z(>}y5{P}TWLS6Z_<$cs$Lm0wdb^<P5pU@N_lPy50tixv!DC<>S#JJ48`~)g5!xgWB
zSHOjzZ9;4j=}wj#T^0iLgpC0!G0}BS=8Z@Pbz3;#t{?)Qn-tFxAXC9r-d8H=%Sos{
zelI2+()~1||EF=lW5HJ@R{6Qf-lrR8vQQ{@(od^YFjg!J1k|NIMfUCk)m?xq!HWJz
afB^u#i)1h#{rLO<0000<MNUMnLSTZ98H{!S
index 8940b57596cb6dc4c7374cbb459f8eced40a99fa..873d63ccf20b99692c39c3ed85ec0882bcf9372b
GIT binary patch
literal 2905
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
DLpFWG
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0b463b4715be864afe2e29f552c5331245808dad
GIT binary patch
literal 716
zc$@*u0yF)IP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!Zb?KzRCwBSQ%z`+aTtGneYH@Rq(e7^
zNM=eQG(U=>LC|0YVjEt(1bW(S7%cFR5W7TlszXKx51u+ifroWiFia0h;pW8xLvo;q
zqD&N*zJB$4US7x8+ylS&`9J^X<NtiU%y>Lzra`OKJ_ZhmpJzjm(C0MG&dy$z$z(rR
zmQ{{MqfWoyzg@4_51A>%PP>HjYpGPKL;!|3$;>%)CV*bAf5dT|8z5(fILUNBEr3wM
z{QUeKoF4!#7+;gi<%83PJkN83!Qc;$+rVz6Qb`K|3<kpvUa|or0@5BMz>&#h%0V91
zYBhbeS~V^$E$t){iHF1CkQK3CDwS3^1W<Q6o&Mw{olbWUiA3HRjYfKH1gK-N*v-||
z)g7zVx&nDfP%4#bvgbmf(EF{etrtk|0$l_Gfw0Tv()N12R}lArCxt>G1Aa*T5S%!!
z7YqhJ2u*am-Cx$$);^)r)O`ly`UbwC(P&ttU4rvJau%l}fb2aU&*$SNg0A{}zPI^&
z{#L8ilF!V{@DhoH>2|wPWFnoEr&g<Zv)TMJ8jS`Z7Eg|`s8A^ODaBkaw~<b#H&dz9
z=JN9LS8O6bH#gUe$K%gPPj(Y$p`6K~*=+X38b8u!adGhy%2-FrLx;n$>-Bn5q;I#|
zM<>U78~`a_q{Sh!+wC{9*(^=rC7{V<GJliF<QtVr#bB*fQv+b<6|}ler}H^peG2{y
z*CkRR_+9jcR(lK`J2e32o~JVKBi*;zY}*!#CF}S5_rl@u^<uHem&;{yqtUpsu(0s^
y%qojy0PX<|paxV$uA^T><XYgns1xYF00RJp%@DG`;*v!G0000<MNUMnLSTaWyH3pj
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..57f4477366df492521a038be2fcb75b45d3709ca
GIT binary patch
literal 644
zc$@)*0(<?5P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!CP_p=RCwBSQ%#FfQ5e2oevBxNU-*Sh
zD6`T{%76q>3q#V)M60&0Zks9pK+rCbaB6iI5^W+}MKIVRSFKt(Zihga#H*8%BZ^!x
zwdcLuGu@h*1CQ_5b6(GR-gCLlX2V?ttRrAb_BxKvV-C;rF<_s?q9~pLDp?a}pLmxV
zfV69|SUSKj_zLB0Hk-;|a1^Q&4}P3Akm#(jSnSSlINU;aZM|MU!ltm*YUS8M{0X=%
z2!e)9TRxxfF47&U@y303bGh7MtJS(i0h)*)uUG?foKB~Yo6Y7kxZm}n=|1-|nasCf
zFsLRHiIYmD@@h7lJt0dm<*81*e>8BpTt~o^5Q#+2a2>T;t-e5U2N1|Ait?QDRA*e;
zr)%K#diNmAlrybVD)k=b)Cf<r+3Y)LAj4ld91fkkTrT&>3dv;hgak7~mgOCD!(y>`
z^M4NQV<JAFK~PXA6iWSm|Hfo8IiJtxPX~j+mry8lAOHH=?RIa6!{Hx|M&qr~w+nn`
zQ{bY}s1gVS9^$AgEPgy5+ciy->~{NakH@27_M63GA!6Jgd%d2_PNz43K#%=?{~M>%
zxuhh->Zqz3XC!ls$yi3C(LuM{{h(_=Kjm`yC&qLxNfHToT(8$(lFvXf<;f==@h=22
z=DFQ&w-0Ky+98`W9+t|$-U-!-NBm146W|0c-gv20`kK$@Rk9{d+~EEF2$_giEH)io
e?dwQ?1Q-A^9f^21TWDec0000<MNUMnLSTXmS1Bz3
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ad30157df7b401090bcec93c7a518a85fefd5575
GIT binary patch
literal 199
zc%17D@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XGCf@!Ln>}1{rUgjo>{e_v(d?6BcqN&)AZ@zjaN$9*Z(`i
zZO(8)Q|&ry&lEPL8>~%DO)Aw7|Nj2Yq0eB+{Dw6%Gjr134_{sew}>~)Vf@y#Xpz#%
vxE=NX?esTsUpld&Ml5uXLtz>dhXKQ#4xOVdC-@D3mNIy{`njxgN@xNA3`j_B
index 4d650ff3c556e7b74e0de71364be5d71cefc5e56..771eb82f16f1924b5666f0e5cb8fcd1af59ed1f4
GIT binary patch
literal 18451
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