Merge mozilla-central to mozilla-inbound
authorMatt Brubeck <mbrubeck@mozilla.com>
Wed, 07 Sep 2011 21:55:42 -0700
changeset 78022 c1e043e89bc49696c054a9ebda52356955e3057e
parent 78021 ea4291bb1c1574be796efe8780408c147e02cb43 (current diff)
parent 77962 b7d269a291b6f91a20958011d610cf8d443bd685 (diff)
child 78023 f08b80318718f3070348da0a6f211a30ceadf11c
push id78
push userclegnitto@mozilla.com
push dateFri, 16 Dec 2011 17:32:24 +0000
treeherdermozilla-release@79d24e644fdd [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone9.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge mozilla-central to mozilla-inbound
mobile/chrome/content/browser.xul
--- a/client.mk
+++ b/client.mk
@@ -263,16 +263,17 @@ configure depend realbuild install expor
 else
 
 # MOZ_CURRENT_PROJECT: either doing a single-project build, or building an
 # individual project in a multi-project build.
 
 ####################################
 # Configure
 
+MAKEFILE      = $(wildcard $(OBJDIR)/Makefile)
 CONFIG_STATUS = $(wildcard $(OBJDIR)/config.status)
 CONFIG_CACHE  = $(wildcard $(OBJDIR)/config.cache)
 
 EXTRA_CONFIG_DEPS := \
 	$(TOPSRCDIR)/aclocal.m4 \
 	$(wildcard $(TOPSRCDIR)/build/autoconf/*.m4) \
 	$(TOPSRCDIR)/js/src/aclocal.m4 \
 	$(NULL)
@@ -311,17 +312,23 @@ endif
 	@if test ! -d $(OBJDIR); then $(MKDIR) $(OBJDIR); else true; fi
 	@echo cd $(OBJDIR);
 	@echo $(CONFIGURE) $(CONFIGURE_ARGS)
 	@cd $(OBJDIR) && $(BUILD_PROJECT_ARG) $(CONFIGURE_ENV_ARGS) $(CONFIGURE) $(CONFIGURE_ARGS) \
 	  || ( echo "*** Fix above errors and then restart with\
                \"$(MAKE) -f client.mk build\"" && exit 1 )
 	@touch $(OBJDIR)/Makefile
 
-$(OBJDIR)/Makefile $(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
+ifneq (,$(MAKEFILE))
+$(OBJDIR)/Makefile: $(OBJDIR)/config.status
+
+$(OBJDIR)/config.status: $(CONFIG_STATUS_DEPS)
+else
+$(OBJDIR)/Makefile: $(CONFIG_STATUS_DEPS)
+endif
 	@$(MAKE) -f $(TOPSRCDIR)/client.mk configure
 
 ifneq (,$(CONFIG_STATUS))
 $(OBJDIR)/config/autoconf.mk: $(TOPSRCDIR)/config/autoconf.mk.in
 	cd $(OBJDIR); \
 	  CONFIG_FILES=config/autoconf.mk ./config.status
 endif
 
--- a/content/base/src/nsGenericElement.cpp
+++ b/content/base/src/nsGenericElement.cpp
@@ -5529,18 +5529,20 @@ nsGenericElement::SizeOf() const
 #define TOUCH_EVENT EVENT
 #include "nsEventNameList.h"
 #undef TOUCH_EVENT
 #undef EVENT
 
 PRBool
 nsINode::Contains(const nsINode* aOther) const
 {
+  if (aOther == this) {
+    return PR_TRUE;
+  }
   if (!aOther ||
-      aOther == this ||
       GetOwnerDoc() != aOther->GetOwnerDoc() ||
       IsInDoc() != aOther->IsInDoc() ||
       !(aOther->IsElement() ||
         aOther->IsNodeOfType(nsINode::eCONTENT)) ||
       !GetFirstChild()) {
     return PR_FALSE;
   }
 
--- a/content/base/test/chrome/test_bug683852.xul
+++ b/content/base/test/chrome/test_bug683852.xul
@@ -16,23 +16,25 @@ https://bugzilla.mozilla.org/show_bug.cg
 
   <!-- test code goes here -->
   <script type="application/javascript">
   <![CDATA[
   /** Test for Bug 683852 **/
   SimpleTest.waitForExplicitFinish();
 
   function startTest() {
-    is(document.contains(document), false, "Document should not contain itself!");
+    is(document.contains(document), true, "Document should contain itself!");
 
     var tb = document.getElementById("testbutton");
     is(document.contains(tb), true, "Document should contain element in it!");
+    is(tb.contains(tb), true, "Element should contain itself.")
     var anon = document.getAnonymousElementByAttribute(tb, "anonid", "button-box");
     is(document.contains(anon), false, "Document should not contain anonymous element in it!");
     is(tb.contains(anon), false, "Element should not contain anonymous element in it!");
+    is(anon.contains(anon), true, "Anonymous element should contain itself.")
     is(document.documentElement.contains(tb), true, "Element should contain element in it!");
     is(document.contains(document.createElement("foo")), false, "Document shouldn't contain element which is't in the document");
     is(document.contains(document.createTextNode("foo")), false, "Document shouldn't contain text node which is't in the document");
 
     var link = document.getElementById("link");
     is(document.contains(link.firstChild), true,
        "Document should contain a text node in it.");
     is(link.contains(link.firstChild), true,
@@ -45,17 +47,17 @@ https://bugzilla.mozilla.org/show_bug.cg
     is(pi.contains(document), false, "Processing instruction shouldn't contain document");
     document.documentElement.appendChild(pi);
     document.contains(pi, true, "Document should contain processing instruction");
 
     var df = document.createRange().createContextualFragment("<div>foo</div>");
     is(df.contains(df.firstChild), true, "Document fragment should contain its child");
     is(df.contains(df.firstChild.firstChild), true,
        "Document fragment should contain its descendant");
-    is(df.contains(df), false, "Document fragment shouldn't contain itself.");
+    is(df.contains(df), true, "Document fragment should contain itself.");
 
     var d = document.implementation.createHTMLDocument("");
     is(document.contains(d), false,
        "Document shouldn't contain another document.");
     is(document.contains(d.createElement("div")), false,
        "Document shouldn't contain an element from another document.");
 
     SimpleTest.finish();
--- a/mobile/chrome/content/Util.js
+++ b/mobile/chrome/content/Util.js
@@ -156,25 +156,39 @@ let Util = {
     Services.io.offline = false;
   },
 
   isParentProcess: function isInParentProcess() {
     let appInfo = Cc["@mozilla.org/xre/app-info;1"];
     return (!appInfo || appInfo.getService(Ci.nsIXULRuntime).processType == Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT);
   },
 
-  isTablet: function isTablet() {
+  isTablet: function isTablet(options) {
+    let forceUpdate = options && 'forceUpdate' in options && options.forceUpdate;
+
+    if ('_isTablet' in this && !forceUpdate)
+      return this._isTablet;
+
+    let tabletPref = Services.prefs.getIntPref("browser.ui.layout.tablet");
+
+    // Act according to user prefs if tablet mode has been
+    // explicitly disabled or enabled.
+    if (tabletPref == 0)
+      return this._isTablet = false;
+    else if (tabletPref == 1)
+      return this._isTablet = true;
+
     let dpi = this.displayDPI;
     if (dpi <= 96)
-      return (window.innerWidth > 1024);
+      return this._isTablet = (window.innerWidth > 1024);
 
     // See the tablet_panel_minwidth from mobile/themes/core/defines.inc
     let tablet_panel_minwidth = 124;
     let dpmm = 25.4 * window.innerWidth / dpi;
-    return (dpmm >= tablet_panel_minwidth);
+    return this._isTablet = (dpmm >= tablet_panel_minwidth);
   },
 
   isPortrait: function isPortrait() {
 #ifdef MOZ_PLATFORM_MAEMO
     return (screen.width <= screen.height);
 #elifdef ANDROID
     return (screen.width <= screen.height);
 #else
--- a/mobile/chrome/content/browser-ui.js
+++ b/mobile/chrome/content/browser-ui.js
@@ -181,16 +181,18 @@ var BrowserUI = {
 
   _toolbarLocked: 0,
 
   isToolbarLocked: function isToolbarLocked() {
     return this._toolbarLocked;
   },
 
   lockToolbar: function lockToolbar() {
+    if (Util.isTablet())
+      return;
     this._toolbarLocked++;
     document.getElementById("toolbar-moveable-container").top = "0";
     if (this._toolbarLocked == 1)
       Browser.forceChromeReflow();
   },
 
   unlockToolbar: function unlockToolbar() {
     if (!this._toolbarLocked)
@@ -374,21 +376,16 @@ var BrowserUI = {
   get toolbarH() {
     if (!this._toolbarH) {
       let toolbar = document.getElementById("toolbar-main");
       this._toolbarH = toolbar.boxObject.height;
     }
     return this._toolbarH;
   },
 
-  get sidebarW() {
-    delete this._sidebarW;
-    return this._sidebarW = Elements.controls.getBoundingClientRect().width;
-  },
-
   sizeControls: function(windowW, windowH) {
     // tabs
     document.getElementById("tabs").resize();
     AwesomeScreen.doResize(windowW, windowH);
 
     // content navigator helper
     document.getElementById("content-navigator").contentHasChanged();
   },
@@ -547,21 +544,37 @@ var BrowserUI = {
   },
 
   observe: function observe(aSubject, aTopic, aData) {
     if (aTopic == "nsPref:changed" && aData == "browser.ui.layout.tablet")
       this.updateTabletLayout();
   },
 
   updateTabletLayout: function updateTabletLayout() {
-    let tabletPref = Services.prefs.getIntPref("browser.ui.layout.tablet");
-    if (tabletPref == 1 || (tabletPref == -1 && Util.isTablet()))
+    if (Util.isTablet({ forceUpdate: true })) {
+      this.unlockToolbar();
       Elements.urlbarState.setAttribute("tablet", "true");
-    else
+    } else {
       Elements.urlbarState.removeAttribute("tablet");
+    }
+
+    // Tablet mode changes the size of the thumbnails
+    // in the tabs container. Hence we have to force a
+    // thumbnail update on all tabs.
+    setTimeout(function(self) {
+      self._updateAllTabThumbnails();
+    }, 0, this);
+  },
+
+  _updateAllTabThumbnails: function() {
+    let tabs = Browser.tabs;
+
+    tabs.forEach(function(tab) {
+      tab.updateThumbnail({ force: true });
+    });
   },
 
   update: function(aState) {
     let browser = Browser.selectedBrowser;
 
     switch (aState) {
       case TOOLBARSTATE_LOADED:
         this._updateToolbar();
--- a/mobile/chrome/content/browser.js
+++ b/mobile/chrome/content/browser.js
@@ -1033,17 +1033,17 @@ var Browser = {
         snappedX = -ritevis * ritew * dirVal;
       }
     }
 
     return Math.round(snappedX);
   },
 
   tryFloatToolbar: function tryFloatToolbar(dx, dy) {
-    if (this.floatedWhileDragging)
+    if (this.floatedWhileDragging || Util.isTablet())
       return;
 
     let [leftvis, ritevis, leftw, ritew] = Browser.computeSidebarVisibility(dx, dy);
     if (leftvis > 0 || ritevis > 0) {
       BrowserUI.lockToolbar();
       this.floatedWhileDragging = true;
     }
   },
@@ -1284,17 +1284,17 @@ Browser.MainDragger.prototype = {
     return { x: true, y: true };
   },
 
   dragStart: function dragStart(clientX, clientY, target, scroller) {
     let browser = getBrowser();
     let bcr = browser.getBoundingClientRect();
     this._contentView = browser.getViewAt(clientX - bcr.left, clientY - bcr.top);
     this._stopAtSidebar = 0;
-    this._panToolbars = !Elements.urlbarState.getAttribute("tablet");
+    this._panToolbars = !Util.isTablet();
     if (this._sidebarTimeout) {
       clearTimeout(this._sidebarTimeout);
       this._sidebarTimeout = null;
     }
   },
 
   dragStop: function dragStop(dx, dy, scroller) {
     if (this._contentView && this._contentView._updateCacheViewport)
@@ -1903,17 +1903,17 @@ const ContentTouchHandler = {
     let bcr = browser.getBoundingClientRect();
     let rect = new Rect(0, 0, window.innerWidth, window.innerHeight);
     rect.restrictTo(Rect.fromRect(bcr));
 
     // Check if the user touched near to one of the edges of the browser area
     // or if the urlbar is showing
     this.canCancelPan = (aX >= rect.left + kSafetyX) && (aX <= rect.right - kSafetyX) &&
                         (aY >= rect.top  + kSafetyY) &&
-                        (bcr.top == 0 || Elements.urlbarState.getAttribute("tablet"));
+                        (bcr.top == 0 || Util.isTablet());
   },
 
   tapDown: function tapDown(aX, aY) {
     let browser = getBrowser();
     browser.focus();
 
     // if the page might capture touch events, we give it the option
     this.updateCanCancel(aX, aY);
@@ -2892,17 +2892,16 @@ Tab.prototype = {
   _createBrowser: function _createBrowser(aURI, aInsertBefore) {
     if (this._browser)
       throw "Browser already exists";
 
     // Create a notification box around the browser
     let notification = this._notification = document.createElement("notificationbox");
     notification.classList.add("inputHandler");
 
-    // Create the browser using the current width the dynamically size the height
     let browser = this._browser = document.createElement("browser");
     browser.setAttribute("class", "viewable-width viewable-height");
     this._chromeTab.linkedBrowser = browser;
 
     browser.setAttribute("type", "content");
 
     let useRemote = Services.prefs.getBoolPref("browser.tabs.remote");
     let useLocal = Util.isLocalScheme(aURI);
@@ -3146,25 +3145,28 @@ function rendererFactory(aBrowser, aCanv
 
 /* ViewableAreaObserver is an helper object where width/height represents the
  * size of the currently viewable area in pixels. This is use instead of
  * window.innerHeight/innerWidth because some keyboards does not resize the
  * window but floats over it.
  */
 var ViewableAreaObserver = {
   get width() {
-    return this._width || window.innerWidth;
+    let width = this._width || window.innerWidth;
+    if (Util.isTablet()) {
+      let sidebarWidth = Math.round(Elements.tabs.getBoundingClientRect().width);
+      width -= sidebarWidth;
+    }
+    return width;
   },
 
   get height() {
     let height = (this._height || window.innerHeight);
-    if (Elements.urlbarState.getAttribute("tablet")) {
-      let toolbarHeight = Math.round(document.getElementById("toolbar-main").getBoundingClientRect().height);
-      height -= toolbarHeight;
-    }
+    if (Util.isTablet())
+      height -= BrowserUI.toolbarH;
     return height;
   },
 
   _isKeyboardOpened: true,
   get isKeyboardOpened() {
     return this._isKeyboardOpened;
   },
 
--- a/mobile/chrome/content/browser.xul
+++ b/mobile/chrome/content/browser.xul
@@ -193,32 +193,32 @@
     <key id="key_newTab" key="t" modifiers="accel" command="cmd_newTab"/>
     <key id="key_closeTab" key="w" modifiers="accel" command="cmd_closeTab"/>
     <key id="key_undoCloseTab" key="t" modifiers="accel,shift" command="cmd_undoCloseTab"/>
   </keyset>
 
   <stack flex="1" id="stack">
     <scrollbox id="controls-scrollbox" style="overflow: hidden; -moz-box-orient: horizontal; position: relative;" flex="1" observes="bcast_urlbarState">
       <vbox id="tabs-sidebar" class="sidebar" observes="bcast_uidiscovery">
-        <spacer class="toolbar-height"/>
+        <spacer class="toolbar-height" id="tabs-spacer" observes="bcast_urlbarState"/>
         <!-- Left toolbar -->
-        <vbox id="tabs-container" class="panel-dark" flex="1">
-          <vbox id="tabs" flex="1"
+        <vbox id="tabs-container" class="panel-dark" flex="1" observes="bcast_urlbarState">
+          <vbox id="tabs" flex="1" observes="bcast_urlbarState"
                 onselect="BrowserUI.selectTab(this);"
                 onreloadtab="BrowserUI.undoCloseTab()"
                 onclosetab="BrowserUI.closeTab(this)"
                 onclosereloadtab="this._container.removeTab(this)"/>
           <hbox id="tabs-controls">
-            <toolbarbutton id="newtab-button" class="button-control" command="cmd_newTab"/>
+            <toolbarbutton id="newtab-button" class="button-control" command="cmd_newTab" observes="bcast_urlbarState"/>
           </hbox>
         </vbox>
       </vbox>
 
       <!-- Page Area -->
-      <stack>
+      <stack id="page-stack" observes="bcast_urlbarState">
         <scrollbox id="page-scrollbox">
           <vbox>
             <!-- Main Toolbar -->
             <box id="toolbar-container" class="panel-dark toolbar-height">
               <box id="toolbar-moveable-container" observes="bcast_uidiscovery">
                 <toolbar id="toolbar-main" class="panel-dark viewable-width" observes="bcast_urlbarState">
                   <toolbarbutton id="tool-back2" class="tool-back button-actionbar" command="cmd_back"/>
                   <toolbarbutton id="tool-forward2" class="tool-forward button-actionbar" command="cmd_forward"/>
--- a/mobile/chrome/content/tabs.xml
+++ b/mobile/chrome/content/tabs.xml
@@ -2,31 +2,71 @@
 
 <bindings
     xmlns="http://www.mozilla.org/xbl"
     xmlns:xbl="http://www.mozilla.org/xbl"
     xmlns:html="http://www.w3.org/1999/xhtml"
     xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
   <binding id="documenttab">
-    <content>
+    <content observes="bcast_urlbarState">
       <xul:stack anonid="page" class="documenttab-container" flex="1">
-        <html:canvas anonid="thumbnail" class="documenttab-thumbnail" left="0" width="104" height="65" moz-opaque="true" empty="true"
-          onclick="document.getBindingParent(this)._onClick()"/>
-        <xul:hbox class="documenttab-reload" left="0" top="0" width="104" height="65" onclick="document.getBindingParent(this)._onUndo();"/>
-        <xul:hbox class="documenttab-close-container" start="-16" top="0" height="65" width="55" align="center" onclick="document.getBindingParent(this)._onClose()">
-          <xul:image anonid="close" class="documenttab-close" mousethrough="always"/>
+        <html:canvas anonid="thumbnail" class="documenttab-thumbnail" left="0" moz-opaque="true" empty="true"
+          onclick="document.getBindingParent(this)._onClick()" observes="bcast_urlbarState"/>
+        <xul:hbox anonid="reload" class="documenttab-reload" left="0" top="0" onclick="document.getBindingParent(this)._onUndo();" observes="bcast_urlbarState"/>
+        <xul:hbox anonid="close-container" class="documenttab-close-container" top="0" align="center" onclick="document.getBindingParent(this)._onClose()" observes="bcast_urlbarState">
+          <xul:image anonid="close" class="documenttab-close" mousethrough="always" observes="bcast_urlbarState"/>
         </xul:hbox>
       </xul:stack>
     </content>
 
     <implementation>
       <field name="ignoreUndo">false</field>
-      <field name="thumbnail">document.getAnonymousElementByAttribute(this, "anonid", "thumbnail");</field>
-      <field name="_container">this.parentNode.parentNode;</field>
+      <field name="thumbnail" readonly="true">document.getAnonymousElementByAttribute(this, "anonid", "thumbnail");</field>
+      <field name="_reload" readonly="true">document.getAnonymousElementByAttribute(this, "anonid", "reload");</field>
+      <field name="_closeContainer" readonly="true">document.getAnonymousElementByAttribute(this, "anonid", "close-container");</field>
+      <field name="_container" readonly="true">this.parentNode.parentNode;</field>
+
+      <constructor>
+        <![CDATA[
+          this.updateTabletLayout(this.thumbnail);
+        ]]>
+      </constructor>
+
+      <method name="updateTabletLayout">
+        <parameter name="thumbnail"/>
+        <body>
+          <![CDATA[
+            let tabWidth, tabHeight, closeWidth, closeHeight;
+
+            if (Util.isTablet()) {
+              tabWidth = 176;
+              tabHeight = 110;
+              closeWidth = 41;
+              closeHeight = 117;
+            } else {
+              tabWidth = 104;
+              tabHeight = 65;
+              closeWidth = 55;
+              closeHeight = 65;
+            }
+
+            if (tabWidth != thumbnail.width) {
+              let reload = this._reload;
+              let closeContainer = this._closeContainer;
+
+              thumbnail.width = reload.width = tabWidth;
+              thumbnail.height = reload.height = tabHeight;
+              closeContainer.width = closeWidth;
+              closeContainer.height = closeHeight;
+            }
+          ]]>
+        </body>
+      </method>
+
       <method name="_onClick">
         <body>
           <![CDATA[
             this._container.selectedTab = this;
 
             let selectFn = new Function("event", this._container.parentNode.getAttribute("onselect"));
             selectFn.call(this);
           ]]>
@@ -56,24 +96,28 @@
 
       <method name="updateThumbnail">
         <parameter name="browser"/>
         <parameter name="width"/>
         <parameter name="height"/>
         <body>
           <![CDATA[
             let thumbnail = this.thumbnail;
+            // Ensure the thumbnail will have the correct
+            // dimensions for tablet and phone modes
+            this.updateTabletLayout(thumbnail);
+
             if (browser.currentURI.spec == "about:blank") {
               thumbnail.setAttribute("empty", "true");
               return;
             }
             thumbnail.removeAttribute("empty");
 
-            const tabWidth = 104;
-            const tabHeight = 65;
+            const tabWidth = thumbnail.width;
+            const tabHeight = thumbnail.height;
 
             let ratio = tabHeight / tabWidth;
             if (browser.contentDocumentWidth > 0)
               width = Math.min(width, browser.contentDocumentWidth);
 
             if (browser.contentDocumentHeight > 0)
               height = Math.min(height, browser.contentDocumentHeight);
 
--- a/mobile/themes/core/browser.css
+++ b/mobile/themes/core/browser.css
@@ -981,16 +981,17 @@ documenttab[selected="true"] {
 documenttab:hover:active > stack > .documenttab-thumbnail,
 documenttab[selected="true"] > stack > .documenttab-thumbnail {
   opacity: 1.0;
 }
 
 .documenttab-close-container {
   position: relative;
   left: -16px;
+  -moz-margin-start: -16px;
   -moz-margin-end: 49px;
 }
 
 .documenttab-close {
   width: 40px;
   height: 40px;
   list-style-image: url("chrome://browser/skin/images/close-inactive-tab-hdpi.png");
 }
@@ -1570,56 +1571,16 @@ setting {
   from { -moz-transform: translateX(0); }
   10% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   45% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   55% { -moz-transform: translateX(@sidebar_width_minimum@); }
   90% { -moz-transform: translateX(@sidebar_width_minimum@); }
   to { -moz-transform: translateX(0); }
 }
 
-/* Tablet mode */
-
-.spacer-actionbar,
-.button-actionbar {
-  visibility: collapse;
-}
-
-.button-actionbar[disabled="true"] {
-  opacity: 0.5;
-}
-
-.button-actionbar:hover:active {
-  background-color: #8db8d8;
-}
-
-#toolbar-main[tablet="true"] > .spacer-actionbar,
-#toolbar-main[tablet="true"] > .button-actionbar {
-  visibility: visible;
-}
-
-#controls-scrollbox[tablet="true"] > #controls-sidebar {
-  visibility: collapse;
-}
-
-#controls-scrollbox[tablet="true"] > #tabs-sidebar {
-  border: none;
-  position: fixed;
-  top: -moz-calc(@touch_button_xlarge@ + @margin_normal@);
-  visibility: collapse;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(ltr) {
-  right: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(rtl) {
-  left: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar[open] {
-  visibility: visible;
-}
-
 /* Text selection handles */
 
 #selectionhandle-start,
 #selectionhandle-end {
   min-width: 35px !important;
   width: 35px !important;
   padding: 0 !important;
   margin: 0 !important;
@@ -1635,9 +1596,11 @@ setting {
 
 @media (min-width: @tablet_panel_minwidth@) {
   #awesome-panels {
     -moz-box-shadow: 0px 0px @shadow_width_small@ black;
   }
   #search-engines-popup {
     max-width: -moz-calc(@tablet_panel_minwidth@);
   }
-}
\ No newline at end of file
+}
+
+%include tablet.css
--- a/mobile/themes/core/gingerbread/browser.css
+++ b/mobile/themes/core/gingerbread/browser.css
@@ -930,16 +930,17 @@ documenttab[selected="true"] {
 documenttab:hover:active > stack > .documenttab-thumbnail,
 documenttab[selected="true"] > stack > .documenttab-thumbnail {
   opacity: 1.0;
 }
 
 .documenttab-close-container {
   position: relative;
   left: -16px;
+  -moz-margin-start: -16px;
   -moz-margin-end: 49px;
 }
 
 .documenttab-close {
   width: 40px;
   height: 40px;
   list-style-image: url("chrome://browser/skin/images/close-inactive-tab-hdpi.png");
 }
@@ -1540,56 +1541,16 @@ setting {
   from { -moz-transform: translateX(0); }
   10% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   45% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   55% { -moz-transform: translateX(@sidebar_width_minimum@); }
   90% { -moz-transform: translateX(@sidebar_width_minimum@); }
   to { -moz-transform: translateX(0); }
 }
 
-/* Tablet mode */
-
-.spacer-actionbar,
-.button-actionbar {
-  visibility: collapse;
-}
-
-.button-actionbar[disabled="true"] {
-  opacity: 0.5;
-}
-
-.button-actionbar:hover:active {
-  background-color: #8db8d8;
-}
-
-#toolbar-main[tablet="true"] > .spacer-actionbar,
-#toolbar-main[tablet="true"] > .button-actionbar {
-  visibility: visible;
-}
-
-#controls-scrollbox[tablet="true"] > #controls-sidebar {
-  visibility: collapse;
-}
-
-#controls-scrollbox[tablet="true"] > #tabs-sidebar {
-  border: none;
-  position: fixed;
-  top: -moz-calc(@touch_button_xlarge@ + @margin_normal@);
-  visibility: collapse;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(ltr) {
-  right: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(rtl) {
-  left: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar[open] {
-  visibility: visible;
-}
-
 /* Text selection handles */
 
 #selectionhandle-start,
 #selectionhandle-end {
   min-width: 35px !important;
   width: 35px !important;
   padding: 0 !important;
   margin: 0 !important;
@@ -1598,16 +1559,9 @@ setting {
 #selectionhandle-start {
   list-style-image: url("chrome://browser/skin/images/handle-start.png");
 }
 
 #selectionhandle-end {
   list-style-image: url("chrome://browser/skin/images/handle-end.png");
 }
 
-@media (min-width: @tablet_panel_minwidth@) {
-  #awesome-panels {
-    -moz-box-shadow: 0px 0px @shadow_width_small@ black;
-  }
-  #search-engines-popup {
-    max-width: -moz-calc(@tablet_panel_minwidth@);
-  }
-}
+%include ../tablet.css
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..478e9c85e270e51428f181c423d04d5aa448eadb
GIT binary patch
literal 1572
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
WE)xgo3A0520000<MNUMnLSTY9jN{n=
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd8e46b0c15e533f5c6360a659fbddc5a386b7fa
GIT binary patch
literal 546
zc$@(u0^R+IP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz#7RU!RCwC#mN84iKp2Kwn^sX2gb-}(
zAUZjSprV54ApQX9>`$nJlm9@}MW}<5xcCSB2kPYFYA1(^sI&#a(pn`F-@`X}grvDP
zU>)w@fnM*;_ws%B-6cuabrZc9eTg0oZLE#8u{PGm|KHe9)TO`xf49I_gwCMuBaX4q
z*kFY7H}DGTK3xWkQJ1FfG0a@W*aQ~HbAADa7_=^#+SF}=EI0x0;3+Vw_z;L-0<43E
z`!lY<5|{?Vpr4vWP;`IC2AB+stI}L8mhF`DHE_t1=7`923v5$!%x7AmQ57;yOBwA2
zWG*<9GA&Xop2>v8O)7qKd5t47TLuSU5L`=D@G?CI74Ge4oQypTV1orvkTUNm(@yr-
z8xFg;0d7G_TC0Ie9-U^}OuM+bOg55es(mm|lP1@Wz!Z;?6&X#j%odmht86Nlr7n;v
z|0{z$wN|^BDyE}gh5^eyQ?cK3zBSq0jANVyE8s4`)RwB@Hy72(#c8e-dqG^24`3JE
z@VHdSGq?vk)R?@lL$73&b1Z_4`(6@N8ak5BVq^JV5-;5vd*<?Mu@<2-B%Kq-SbzFx
kV{NRBwXrt-yYVf+01?=dN6%R1uK)l507*qoM6N<$f(;q;0ssI2
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1d9d1ae2308f8adcb70fddb823b04e25b12d456a
GIT binary patch
literal 263
zc%17D@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*A(MJzX3_DsH_AG3076;8`Pd<mAbVC-;B3`tRt)lP6d1xDwIi
zvGPmHB~5mB&)Z)(GS_{)CoLdbobpY``q?>~i77@Fc@sM=J!($unkx3nHD%(BeXC9{
zGM&1>Nh>72LrD0)c=0nE3l3GaeM?R}R+uuQLgdBY2MVFpPnOvH-YoRx-`{P@8>^V>
z+IFaGPxxHZCcNd>`eW-~@n|i1$E#d6!TDPk_fft_an+GAOgs#;BNY2GFZ%8RI-0@L
L)z4*}Q$iB}x3+FW
--- a/mobile/themes/core/honeycomb/browser.css
+++ b/mobile/themes/core/honeycomb/browser.css
@@ -32,16 +32,17 @@
  * 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 ***** */
 
 %filter substitution
 %include defines.inc
+%define honeycomb 1
 
 /* main toolbar (URL bar) -------------------------------------------------- */
 #toolbar-main {
   -moz-appearance: none;
   -moz-box-align: center;
   padding: 0;
   background: @color_toolbar_background@;
   border: none;
@@ -1013,16 +1014,17 @@ documenttab[selected="true"] {
 documenttab:hover:active > stack > .documenttab-thumbnail,
 documenttab[selected="true"] > stack > .documenttab-thumbnail {
   opacity: 1.0;
 }
 
 .documenttab-close-container {
   position: relative;
   left: -16px;
+  -moz-margin-start: -16px;
   -moz-margin-end: 49px;
 }
 
 .documenttab-close {
   width: 40px;
   height: 40px;
   list-style-image: url("chrome://browser/skin/images/close-inactive-tab-hdpi.png");
 }
@@ -1689,52 +1691,16 @@ setting {
   from { -moz-transform: translateX(0); }
   10% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   45% { -moz-transform: translateX(-moz-calc(-121px - @border_width_large@ - 2*@padding_normal@)); }
   55% { -moz-transform: translateX(@sidebar_width_minimum@); }
   90% { -moz-transform: translateX(@sidebar_width_minimum@); }
   to { -moz-transform: translateX(0); }
 }
 
-/* Tablet mode */
-
-.spacer-actionbar,
-.button-actionbar {
-  visibility: collapse;
-}
-
-.button-actionbar[disabled="true"] {
-  opacity: 0.5;
-}
-
-#toolbar-main[tablet="true"] > .spacer-actionbar,
-#toolbar-main[tablet="true"] > .button-actionbar {
-  visibility: visible;
-}
-
-#controls-scrollbox[tablet="true"] > #controls-sidebar {
-  visibility: collapse;
-}
-
-#controls-scrollbox[tablet="true"] > #tabs-sidebar {
-  border: none;
-  position: fixed;
-  top: @touch_button_xlarge@;
-  visibility: collapse;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(ltr) {
-  left: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(rtl) {
-  right: 0;
-}
-#controls-scrollbox[tablet="true"] > #tabs-sidebar[open] {
-  visibility: visible;
-}
-
 /* Text selection handles */
 
 #selectionhandle-start,
 #selectionhandle-end {
   min-width: 35px !important;
   width: 35px !important;
   padding: 0 !important;
   margin: 0 !important;
@@ -1809,8 +1775,10 @@ setting {
   }
   
   #search-engines-list > .action-button > .button-box > .button-text {
     text-align: start;
     font-size: @font_tiny@ !important;
   }
 
 }
+
+%include ../tablet.css
index 935b7555e4d8aceb67a15f9eb137b6ddade69522..1f19cd10638b54797e21db629ef041bcedc54f17
GIT binary patch
literal 1202
zc$@*U1Wo&iP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$R7pfZRCwCVm`P|9K@^5-dX~(h&V;BW
z;t~Y)pu~6;k?28i0moYu!5jnyAvx;BC3?}5C<qFI5k$Sk;07Kvh=?bNq8A01-~thy
znIyAszQ3&+I^A8pO$>QZ=_K9n{a?STdev3FdcDr(vngzz+q?%1;Kx><ubCL#)DqNs
zbpIcvmZmo5HSlv9egO}DfJsu@%dav!t@-^PwGn<zyAktYlJqTDYWv`)?5|EPn&gnG
zg_HpEQxAmwp&8E?swGyX*ri%U`|mV|99$h+^2JVbXnMj~1_|yAT?PQA5KPS9!lHqY
zdX-u*+W0kFEwWstglnQ!ulM04Ddr`DJkwMLDF`w(jPVul`B`fyszNCq$1K6Au&Gjx
zRq9p7$LBTzP0KQ<SY!=@|1;oPLov2I(#jSF!k*#Ol0m+Rfmn#iC)j7M<-E*rhi4Qp
z(GgCtR_ZRLxtVSNMNEJ~16ndjMb@n}_!BE5Z7kvs{<j*32?h;lL6d9SX7C0%bS|UJ
z&1TlDvI#9{LfaCM-XKX1$@cJ~If2tca!t(cq*VqlE@@fFFk@x5vTFm|a<JDm1bpBt
zUD8Ms+F&p&bv%20R6;tfY8wPjJRWAzcwGJa#jU%J;SOKD%yO9wJHK-u8-M%G^f_pQ
z0W4H{hV&U6XlsdCifG{==p>T@4hG+|FP~caafX2zU5sUn>QlE>*P6XGgoU`79k_7L
za35KeWl(fASoqS~$Y4)A7_rO*f}(pMAj^;*e#fyR1~{uO7RFh68h}B?zZo^j&Jg(2
z=IsUnJ)~Lpix;$m6ZH{HjkS1JF#Kj|%c3r)GZJG7<552=#iWtJ>9cQT6UE85kIIFO
zD&XEw>;tWhYuuC#8Kl#pVP~mQ_Txw?yH@SufZ~t1t!qxklUFz`Q&W2q2w&cRNO~Xl
zyucY&l1i<b_u`Ch?!R+WdLQ>h-E?b$Nd>I3`g<>Mc4JV#^0+a<qyiSJmC@ON!z|V>
ze_kO4(?7skc|^Clk=o)_E2MDOkM^rg25C3rg@FZ34M6O$rYePTJ4Xm$EtSCuYZekL
zV%OK0#hG&cG~dX$8c%vSE##9c*IbWVFo4DIJ&4bnKc(!1Ro9w9n869Vef*^9eJemP
zh)*p;9h|Ndk6>G9X0Pu*o>6qoy3x$E85YG|<_B#sSni9z=6*lu2*-EJJ|6J)Xih&?
zwI38%S!62@y7qfM{cu&ZZI5<eYyia0Dy#%wwTI*D=4xMp4gJqT`bV)=S+Cv1n{M3k
zK%rLdC5Nfn92{<PxG93$ZFa(7x)#%eW8|=PJpVhBua^HC9O@l3pao4=2bgf6x9g<0
z8%>pSY&NrrScv&8pHeksaJFAFNIA7_^ldiyJ)fGS0@@TPd=Ue&5R+nWk{uj*J|Cos
zvyZlhaogiJUHRb0ZyACdc5^=H7*Kb1(>P&uc!1eBVYSPcDd2oQqy8(v04{5M+MdAo
QYybcN07*qoM6N<$f?N<W0ssI2
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..478e9c85e270e51428f181c423d04d5aa448eadb
GIT binary patch
literal 1572
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
WE)xgo3A0520000<MNUMnLSTY9jN{n=
index 3961ad1baaa1e26175cdf58f16e54b1801996206..7e4b9f7d8d82e74551c48a938a16606d2d041901
GIT binary patch
literal 1087
zc$@)01i<@=P)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU#;Ymb6RCwCFnN3JlK@`X5`IJCJ-zFE8
z@S--A;0s!0P+058C$$J#WUFYCxM~rh5iMGYZK9R72wD_sMJ)<5f)o;bg4xDUup)Hx
zeE9jkZu7sMvGIP)ojdP64-BKuJ?H%HoVjOajuFeU*xSaVtOQB$7UQkW@%J&_(!8Zi
z4PRWEW7P(FfJyS!PQ9P>NIwtrHbQ+mjI*i`&&GKh;BB7zWC-1)LpNS-z+T>_c<ZDY
zG?f_Hm?E1c1H#}Z3Rfv$UUqv3G-e8zppdk&%8Bri2n(2?nTxT?i-=M}7Z3_VdjuEg
z(+e=vS5`(5Swabz3`!sM&Bs{N)ytv1LkGGV>1daKXQJ*4f@>Xm&T1O!?cWz)ywZki
zdHjgwRx)h7;~LA%{7^mKM+x0EgPp3-!ifwAhdMJU;2_XFH~J<>FHS5jz%G^6%FL|m
zZ*VM}d&!9hcU|L{MK4<p>2d<bRk;X)upm5e;5S1~_`^4ExZpHGEYe(D2GmN%F#P4h
zC6@yyq*wUG3u?eInMr&kExKCki@$6~Sda2oDFgYzIcGmWY^Dg#gCmVc#-l89I*c|J
zyc06a(g>0QvnJY?ezw{n&RSOJT|;L*nZn6THelXjbtb7Fjwi3*@*T&R37pKd4ah7b
zK!o|!vnRge7!!FjG$1imF+<T=gU+4DL~OuJvA9|eIBb2+?avfaFxh}B#ez0qZPOuN
zxar$>?B)llaaj1ja}kpb__vtXx@p0|+0oa&a6-xfDVRivC(^}2Ae>jIoNzMa{L=xW
z+zA#i$sft|Ts|8ZS}zDMI3eHfJ@g!JXg;p=MJ&@Y;MhVw$JVT(|CGP~uq)|$h0#mo
z85YT1r3VJEP-S9!t3&DI<$7l7K(sn>W?yY!s4)Y&hgErh#xX1Cu<&(jo&71~Q&(#1
zPdZB<{d{16H^xDg+gFGa$*!3U68J^~i|fG3i3fSN@GZN+f<Bl^2to_rU?3LHOH+4_
zhkP=-$<XhWz}NWJhVa?#d#mH*xU39g20!z)uosZ<0bdlgVPa6;i*Zg*LE+uzDqG%O
z6BQBRgWwj(xBBAF-yls7rp4RM=C;Z@o3I6&A2-*8UHI%E-@&yR{vfKN=S8tm7(;$4
z1r)ll0b8&sCKA5Lr%NKL5-`t=qGqylsj7)Y*g>9#4n%8|>ByZva_l$n9WR(7IM1^H
z@?b=#M$JKc>8|R!8pNuiHuQep%d*VZ6<~Z)7J&LWn6iku1K3&Ds9W6Wq1uUQ<tt5P
zjr;UbC}nVUDHNbwD$^;V%VJbSHwE;n0#xMR5CHrqzyS6nJ3M6*QC$E4002ovPDHLk
FV1hM@1Hb?P
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
index 105d7852eddc5783d5936d836efcc94d08a38450..77d71107fa1bc1016d6119bcbea054e9765fd36b
GIT binary patch
literal 1150
zc$@)#1cCdBP)<h;3K|Lk000e1NJLTq001Ze001Zm1^@s6jQ+T70000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$AW1|)RCwCFnN4UDK@`VllQd1*DygCs
zFQ$6*U@Crs2a5+Uq7gq%wp2wyFQw>BF|FuLDZS`H)S{k5F^U%tejEhr2c`uJo-~SR
zt6-yTt=2a2{ns~PlkCUrCh3D=m)&{q{dQjF&6|mq%jLvrO%r8Ej9P@+=A!3MsAZ@P
zdNq8C*a9B(028OSgRfSSFx)4p-Q{b>jWeH%zENsdslDfG+=XtuNH<z(z;0?OY8^a+
zUM0ddQf#wqKp1??;VK8r%x;1~BVGYx9FonVdLn(q+ycgU<RYT_BBK;j1%$$#If8Ta
zX$I(OmQ_$>maqkkJEe~$%T|imu6^!*Y@`ESg>+Qlzc^9%I>EKSekwu>C=$DAiMV}3
z8E*Tn>*DwKjJURXlNk9hY}dV)6MD%AcG!g$PV#UhaHukp5)K00!|69pdQoO60qnHX
z8hMo}c?QSZFI=|N*?Q(&9!?5I(actnbQS|f?Q)S0NMS*E;GkfHjvO$B#IyA$j+MYE
zgjlAzs1Z;p8N=|U=t?pAGGz;idpt7=bQIx)kx5RHRjOKJ<DbQ~b(=){i>IP#ZA$^9
z*?k_4bf&~FHxplH(ohffXufBf$Zc?=9Ts&ZkY?f$PUM6(kjP~>>LH%hG}o&J9KvyN
zxGMo?WYPh1n%3YY^~3SaE!!;L<DC~cBa;r872W_5=DiQ^TfWCT^zkB+$tOID%5M<w
z(8nue9&p+hn5YEY;KeI?s|2KE3b+MqoVQdDof+J{qX$h>jfA|rr%gEzN+x{-fBAz-
zJ1rCohtk82aJV-eNm|PlDjH#A(gFYa`~yVn2xlx7tl*50&(EGOcm`b+NU(s(I7x<n
z)P(Iz-WAQI5WCw<;iNn`d0g*P^08~|lRL8v83CV+2SQ>-^IIyteRRK|Sb$@ddJugi
zq%0Qf^uPcXKAHHx)ZyskUHzg|{p_Du)9;^-p~eWP7OTd(5M`FrBpD6O7nA<l!R3?R
zT8fW8`sl?~YJxy*D;gISNx?`u34Ei0rKDgb;(ofMztzqYP7|gYg3!V@7?{O$)6|uv
zaDSza+44@j+%0S5YlK3}KD#V;bwrNMN)jXZITV=_Ncey+j#`o#Z1=_c@sokV$M8Zi
z<*%t4ob<tPY4&Zuai=fHaK{Y3?hAe0SWR6;M-#SS^HaD{+J(=Z?A!TlhC1R@v{fE9
zjs@#=W5`eCfI=5GU<)=`;G>m&s-JGLLbFVma+V<^xN<sB67)6d8WsfIhZUUJ$%0w9
zTPcZm^IkO~M}f1w2xe!5pAu?lcDitj=?|i8w@O*C+eh{t4>9$Xq@!W6>fug;&rZCa
zd}a7pqlYJjt@KZPbyZQzS=P+gqzm0-k#1U5G2n3&`nkzdfU5ir0r@Au0H<ui;K+$Q
QAOHXW07*qoM6N<$f&xb#MF0Q*
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd8e46b0c15e533f5c6360a659fbddc5a386b7fa
GIT binary patch
literal 546
zc$@(u0^R+IP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz#7RU!RCwC#mN84iKp2Kwn^sX2gb-}(
zAUZjSprV54ApQX9>`$nJlm9@}MW}<5xcCSB2kPYFYA1(^sI&#a(pn`F-@`X}grvDP
zU>)w@fnM*;_ws%B-6cuabrZc9eTg0oZLE#8u{PGm|KHe9)TO`xf49I_gwCMuBaX4q
z*kFY7H}DGTK3xWkQJ1FfG0a@W*aQ~HbAADa7_=^#+SF}=EI0x0;3+Vw_z;L-0<43E
z`!lY<5|{?Vpr4vWP;`IC2AB+stI}L8mhF`DHE_t1=7`923v5$!%x7AmQ57;yOBwA2
zWG*<9GA&Xop2>v8O)7qKd5t47TLuSU5L`=D@G?CI74Ge4oQypTV1orvkTUNm(@yr-
z8xFg;0d7G_TC0Ie9-U^}OuM+bOg55es(mm|lP1@Wz!Z;?6&X#j%odmht86Nlr7n;v
z|0{z$wN|^BDyE}gh5^eyQ?cK3zBSq0jANVyE8s4`)RwB@Hy72(#c8e-dqG^24`3JE
z@VHdSGq?vk)R?@lL$73&b1Z_4`(6@N8ak5BVq^JV5-;5vd*<?Mu@<2-B%Kq-SbzFx
kV{NRBwXrt-yYVf+01?=dN6%R1uK)l507*qoM6N<$f(;q;0ssI2
index aacf3b927b0da779ef18c830863e3109604c3b9f..e71e89cd79b51c9a0ba31ecafd73760dff9adc8f
GIT binary patch
literal 208
zc%17D@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5XiacE$Ln>~)x#q}qK!L|4FxX~w`=?Eh_ccvOO3kRh<|wCT
z*tX=6Ot>L`b%O7+{WtkPc1q`T-|^#TGMVv6U0BnLr{Jpg$@5J{(Fw;Tzh00!eduxd
z`JRe2hFNQ^0+SjT7@1f&1QZVZF4x}S*ud~yf{BOW?mvN0wrr-$K-(ESUHx3vIVCg!
E0J9BAjsO4v
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1d9d1ae2308f8adcb70fddb823b04e25b12d456a
GIT binary patch
literal 263
zc%17D@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*A(MJzX3_DsH_AG3076;8`Pd<mAbVC-;B3`tRt)lP6d1xDwIi
zvGPmHB~5mB&)Z)(GS_{)CoLdbobpY``q?>~i77@Fc@sM=J!($unkx3nHD%(BeXC9{
zGM&1>Nh>72LrD0)c=0nE3l3GaeM?R}R+uuQLgdBY2MVFpPnOvH-YoRx-`{P@8>^V>
z+IFaGPxxHZCcNd>`eW-~@n|i1$E#d6!TDPk_fft_an+GAOgs#;BNY2GFZ%8RI-0@L
L)z4*}Q$iB}x3+FW
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..478e9c85e270e51428f181c423d04d5aa448eadb
GIT binary patch
literal 1572
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
WE)xgo3A0520000<MNUMnLSTY9jN{n=
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1e616b6698a5fc77fbf709cf62af43e7aeb949df
GIT binary patch
literal 626
zc$@)p0*(ENP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!6iGxuRCwC#mcdKHa1_V2Hj5-78pD={
zu!D4vAS08gLxiB-Iz}L<;3fSB^c>|Su(NjQU+`YtyJ_KZ5D^sw#lq6C_u&0tjNF!k
z?C|@+2Y%bWd*8kHd%tb&e!uS;#TavqXmDe0%#FD*H~#;|f(^|$FiG<c@MWPBNcZ8y
z7_TdUkB(n~7vRmH^8kL*iKM$TGq)<W1jyxbc@Kg491sAe4W{^Te$?c0xgyMGiNOPZ
z1WZ@}wnL$i77PaaiA3TOj-$X5FbzzQX01>tR8fP#*a3oOv8^)3wR(-m<25{Jx7%CE
zWU@jf4G?m%Sln+k8U@s(QmIoab;n7@BFm^$Djoiic{H2Np0P|ZYt+&`9<$hP8~<Fa
zapZcvzFw(Rj=SCN6g<Qgs{+fkTCJYL^bxoRKAmLD5C8>Ot<`D=Ec0P9wY$b_^k@rd
znM~$dQIuPD!Rz%t=kxgs+B)x+nf~(4B~c^!pt+7zRgH+E_>O3rCZ*HqlUA#>NZU=e
z712gnWMCQC#HPa1VyUs@NH`pR!gG;GL~S;kyQGz^;#!%`0AUP>f%T@i-oT3fn!#Lh
zVmt?I#A30VA50Zi4Wl_$2M9PZ#+x@W7-BFL^h?3a@!{}oM;$)&KE|e+H+&?XXs`Bk
zI++^F_>p)R6xhxSL^6C9pDlEPPS<l{%zu5jF*oMM+?X5x?f4d804qkI*d{1O6951J
M07*qoM6N<$f_zRRW&i*H
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fd8e46b0c15e533f5c6360a659fbddc5a386b7fa
GIT binary patch
literal 546
zc$@(u0^R+IP)<h;3K|Lk000e1NJLTq0015U001lq1^@s6a)Jm10000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUz#7RU!RCwC#mN84iKp2Kwn^sX2gb-}(
zAUZjSprV54ApQX9>`$nJlm9@}MW}<5xcCSB2kPYFYA1(^sI&#a(pn`F-@`X}grvDP
zU>)w@fnM*;_ws%B-6cuabrZc9eTg0oZLE#8u{PGm|KHe9)TO`xf49I_gwCMuBaX4q
z*kFY7H}DGTK3xWkQJ1FfG0a@W*aQ~HbAADa7_=^#+SF}=EI0x0;3+Vw_z;L-0<43E
z`!lY<5|{?Vpr4vWP;`IC2AB+stI}L8mhF`DHE_t1=7`923v5$!%x7AmQ57;yOBwA2
zWG*<9GA&Xop2>v8O)7qKd5t47TLuSU5L`=D@G?CI74Ge4oQypTV1orvkTUNm(@yr-
z8xFg;0d7G_TC0Ie9-U^}OuM+bOg55es(mm|lP1@Wz!Z;?6&X#j%odmht86Nlr7n;v
z|0{z$wN|^BDyE}gh5^eyQ?cK3zBSq0jANVyE8s4`)RwB@Hy72(#c8e-dqG^24`3JE
z@VHdSGq?vk)R?@lL$73&b1Z_4`(6@N8ak5BVq^JV5-;5vd*<?Mu@<2-B%Kq-SbzFx
kV{NRBwXrt-yYVf+01?=dN6%R1uK)l507*qoM6N<$f(;q;0ssI2
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1d9d1ae2308f8adcb70fddb823b04e25b12d456a
GIT binary patch
literal 263
zc%17D@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J4k%k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*A(MJzX3_DsH_AG3076;8`Pd<mAbVC-;B3`tRt)lP6d1xDwIi
zvGPmHB~5mB&)Z)(GS_{)CoLdbobpY``q?>~i77@Fc@sM=J!($unkx3nHD%(BeXC9{
zGM&1>Nh>72LrD0)c=0nE3l3GaeM?R}R+uuQLgdBY2MVFpPnOvH-YoRx-`{P@8>^V>
z+IFaGPxxHZCcNd>`eW-~@n|i1$E#d6!TDPk_fft_an+GAOgs#;BNY2GFZ%8RI-0@L
L)z4*}Q$iB}x3+FW
--- a/mobile/themes/core/jar.mn
+++ b/mobile/themes/core/jar.mn
@@ -85,16 +85,17 @@ chrome.jar:
   skin/images/panelrow-selected-hdpi.png    (images/panelrow-selected-hdpi.png)
   skin/images/forward-default-hdpi.png        (images/forward-default-hdpi.png)
   skin/images/downloads-default-hdpi.png      (images/downloads-default-hdpi.png)
   skin/images/settings-default-hdpi.png       (images/settings-default-hdpi.png)
   skin/images/preferences-default-hdpi.png    (images/preferences-default-hdpi.png)
   skin/images/row-header-bg.png             (images/row-header-bg.png)
   skin/images/console-default-hdpi.png        (images/console-default-hdpi.png)
   skin/images/newtab-default-hdpi.png         (images/newtab-default-hdpi.png)
+  skin/images/newtab-default-tablet-hdpi.png (images/newtab-default-tablet-hdpi.png)
   skin/images/tab-active-hdpi.png           (images/tab-active-hdpi.png)
   skin/images/tab-inactive-hdpi.png         (images/tab-inactive-hdpi.png)
   skin/images/tab-closed-hdpi.png           (images/tab-closed-hdpi.png)
   skin/images/tab-reopen-hdpi.png           (images/tab-reopen-hdpi.png)
   skin/images/remotetabs-48.png             (images/remotetabs-48.png)
   skin/images/remotetabs-32.png             (images/remotetabs-32.png)
   skin/images/mozilla-32.png                (images/mozilla-32.png)
   skin/images/toggle-on.png                 (images/toggle-on.png)
@@ -105,18 +106,22 @@ chrome.jar:
   skin/images/next-hdpi.png                 (images/next-hdpi.png)
   skin/images/next-disabled-hdpi.png        (images/next-disabled-hdpi.png)
   skin/images/identity-default-hdpi.png     (images/identity-default-hdpi.png)
   skin/images/identity-ssl-hdpi.png         (images/identity-ssl-hdpi.png)
   skin/images/identity-ev-hdpi.png          (images/identity-ev-hdpi.png)
   skin/images/unlocked-hdpi.png             (images/unlocked-hdpi.png)
   skin/images/locked-hdpi.png               (images/locked-hdpi.png)
   skin/images/close-default-hdpi.png        (images/close-default-hdpi.png)
+  skin/images/close-default-tablet-hdpi.png (images/close-default-tablet-hdpi.png)
   skin/images/close-active-hdpi.png         (images/close-active-hdpi.png)
+  skin/images/close-active-tablet-hdpi.png  (images/close-active-tablet-hdpi.png)
   skin/images/close-inactive-tab-hdpi.png   (images/close-inactive-tab-hdpi.png)
+  skin/images/close-inactive-tab-tablet-hdpi.png   (images/close-inactive-tab-tablet-hdpi.png)
+  skin/images/close-background-hdpi.png     (images/close-background-hdpi.png)
   skin/images/check-30.png                  (images/check-30.png)
   skin/images/search-glass-30.png           (images/search-glass-30.png)
   skin/images/search-clear-30.png           (images/search-clear-30.png)
   skin/images/section-expanded-16.png       (images/section-expanded-16.png)
   skin/images/section-collapsed-16.png      (images/section-collapsed-16.png)
   skin/images/task-switch-hdpi.png          (images/task-switch-hdpi.png)
   skin/images/task-close-hdpi.png           (images/task-close-hdpi.png)
   skin/images/task-back-hdpi.png            (images/task-back-hdpi.png)
@@ -209,16 +214,17 @@ chrome.jar:
   skin/gingerbread/images/bookmark-starred-hdpi.png     (gingerbread/images/bookmark-starred-hdpi.png)
   skin/gingerbread/images/forward-default-hdpi.png        (gingerbread/images/forward-default-hdpi.png)
   skin/gingerbread/images/downloads-default-hdpi.png      (gingerbread/images/downloads-default-hdpi.png)
   skin/gingerbread/images/settings-default-hdpi.png       (gingerbread/images/settings-default-hdpi.png)
   skin/gingerbread/images/preferences-default-hdpi.png    (gingerbread/images/preferences-default-hdpi.png)
   skin/gingerbread/images/row-header-bg.png             (gingerbread/images/row-header-bg.png)
   skin/gingerbread/images/console-default-hdpi.png        (gingerbread/images/console-default-hdpi.png)
   skin/gingerbread/images/newtab-default-hdpi.png         (gingerbread/images/newtab-default-hdpi.png)
+  skin/gingerbread/images/newtab-default-tablet-hdpi.png (gingerbread/images/newtab-default-tablet-hdpi.png)
   skin/gingerbread/images/tab-active-hdpi.png           (gingerbread/images/tab-active-hdpi.png)
   skin/gingerbread/images/tab-inactive-hdpi.png         (gingerbread/images/tab-inactive-hdpi.png)
   skin/gingerbread/images/tab-closed-hdpi.png           (gingerbread/images/tab-closed-hdpi.png)
   skin/gingerbread/images/tab-reopen-hdpi.png           (gingerbread/images/tab-reopen-hdpi.png)
   skin/gingerbread/images/remotetabs-48.png             (gingerbread/images/remotetabs-48.png)
   skin/gingerbread/images/remotetabs-32.png             (gingerbread/images/remotetabs-32.png)
   skin/gingerbread/images/mozilla-32.png                (images/mozilla-32.png)
   skin/gingerbread/images/toggle-on.png                 (gingerbread/images/toggle-on.png)
@@ -228,18 +234,22 @@ chrome.jar:
   skin/gingerbread/images/next-hdpi.png                 (gingerbread/images/next-hdpi.png)
   skin/gingerbread/images/next-disabled-hdpi.png        (gingerbread/images/next-disabled-hdpi.png)
   skin/gingerbread/images/identity-default-hdpi.png     (gingerbread/images/identity-default-hdpi.png)
   skin/gingerbread/images/identity-ssl-hdpi.png         (gingerbread/images/identity-ssl-hdpi.png)
   skin/gingerbread/images/identity-ev-hdpi.png          (gingerbread/images/identity-ev-hdpi.png)
   skin/gingerbread/images/unlocked-hdpi.png             (gingerbread/images/unlocked-hdpi.png)
   skin/gingerbread/images/locked-hdpi.png               (gingerbread/images/locked-hdpi.png)
   skin/gingerbread/images/close-default-hdpi.png        (gingerbread/images/close-default-hdpi.png)
+  skin/gingerbread/images/close-default-tablet-hdpi.png (gingerbread/images/close-default-tablet-hdpi.png)
   skin/gingerbread/images/close-active-hdpi.png         (gingerbread/images/close-active-hdpi.png)
+  skin/gingerbread/images/close-active-tablet-hdpi.png  (gingerbread/images/close-active-tablet-hdpi.png)
+  skin/gingerbread/images/close-background-hdpi.png     (gingerbread/images/close-background-hdpi.png)
   skin/gingerbread/images/close-inactive-tab-hdpi.png   (gingerbread/images/close-inactive-tab-hdpi.png)
+  skin/gingerbread/images/close-inactive-tab-tablet-hdpi.png   (gingerbread/images/close-inactive-tab-tablet-hdpi.png)
   skin/gingerbread/images/check-30.png                  (gingerbread/images/check-30.png)
   skin/gingerbread/images/search-glass-30.png           (gingerbread/images/search-glass-30.png)
   skin/gingerbread/images/search-clear-30.png           (gingerbread/images/search-clear-30.png)
   skin/gingerbread/images/section-expanded-16.png       (images/section-expanded-16.png)
   skin/gingerbread/images/section-collapsed-16.png      (images/section-collapsed-16.png)
   skin/gingerbread/images/task-switch-hdpi.png          (gingerbread/images/task-switch-hdpi.png)
   skin/gingerbread/images/task-close-hdpi.png           (gingerbread/images/task-close-hdpi.png)
   skin/gingerbread/images/task-back-hdpi.png            (gingerbread/images/task-back-hdpi.png)
@@ -334,16 +344,17 @@ chrome.jar:
   skin/honeycomb/images/panelrow-selected-hdpi.png    (honeycomb/images/panelrow-selected-hdpi.png)
   skin/honeycomb/images/forward-default-hdpi.png        (honeycomb/images/forward-default-hdpi.png)
   skin/honeycomb/images/downloads-default-hdpi.png      (honeycomb/images/downloads-default-hdpi.png)
   skin/honeycomb/images/settings-default-hdpi.png       (honeycomb/images/settings-default-hdpi.png)
   skin/honeycomb/images/preferences-default-hdpi.png    (honeycomb/images/preferences-default-hdpi.png)
   skin/honeycomb/images/row-header-bg.png             (honeycomb/images/row-header-bg.png)
   skin/honeycomb/images/console-default-hdpi.png        (honeycomb/images/console-default-hdpi.png)
   skin/honeycomb/images/newtab-default-hdpi.png         (honeycomb/images/newtab-default-hdpi.png)
+  skin/honeycomb/images/newtab-default-tablet-hdpi.png (honeycomb/images/newtab-default-tablet-hdpi.png)
   skin/honeycomb/images/tab-active-hdpi.png           (honeycomb/images/tab-active-hdpi.png)
   skin/honeycomb/images/tab-inactive-hdpi.png         (honeycomb/images/tab-inactive-hdpi.png)
   skin/honeycomb/images/tab-closed-hdpi.png           (honeycomb/images/tab-closed-hdpi.png)
   skin/honeycomb/images/tab-reopen-hdpi.png           (honeycomb/images/tab-reopen-hdpi.png)
   skin/honeycomb/images/remotetabs-48.png             (honeycomb/images/remotetabs-48.png)
   skin/honeycomb/images/remotetabs-32.png             (honeycomb/images/remotetabs-32.png)
   skin/honeycomb/images/mozilla-32.png                (images/mozilla-32.png)
   skin/honeycomb/images/toggle-on.png                 (honeycomb/images/toggle-on.png)
@@ -354,18 +365,22 @@ chrome.jar:
   skin/honeycomb/images/next-hdpi.png                 (honeycomb/images/next-hdpi.png)
   skin/honeycomb/images/next-disabled-hdpi.png        (honeycomb/images/next-disabled-hdpi.png)
   skin/honeycomb/images/identity-default-hdpi.png     (honeycomb/images/identity-default-hdpi.png)
   skin/honeycomb/images/identity-ssl-hdpi.png         (honeycomb/images/identity-ssl-hdpi.png)
   skin/honeycomb/images/identity-ev-hdpi.png          (honeycomb/images/identity-ev-hdpi.png)
   skin/honeycomb/images/unlocked-hdpi.png             (honeycomb/images/unlocked-hdpi.png)
   skin/honeycomb/images/locked-hdpi.png               (honeycomb/images/locked-hdpi.png)
   skin/honeycomb/images/close-default-hdpi.png        (honeycomb/images/close-default-hdpi.png)
+  skin/honeycomb/images/close-default-tablet-hdpi.png (honeycomb/images/close-default-tablet-hdpi.png)
   skin/honeycomb/images/close-active-hdpi.png         (honeycomb/images/close-active-hdpi.png)
+  skin/honeycomb/images/close-active-tablet-hdpi.png  (honeycomb/images/close-active-tablet-hdpi.png)
+  skin/honeycomb/images/close-background-hdpi.png     (honeycomb/images/close-background-hdpi.png)
   skin/honeycomb/images/close-inactive-tab-hdpi.png   (honeycomb/images/close-inactive-tab-hdpi.png)
+  skin/honeycomb/images/close-inactive-tab-tablet-hdpi.png   (honeycomb/images/close-inactive-tab-tablet-hdpi.png)
   skin/honeycomb/images/check-30.png                  (images/check-30.png)
   skin/honeycomb/images/check-selected-hdpi.png       (honeycomb/images/check-selected-hdpi.png)
   skin/honeycomb/images/check-unselected-hdpi.png     (honeycomb/images/check-unselected-hdpi.png)
   skin/honeycomb/images/search-glass-30.png           (honeycomb/images/search-glass-30.png)
   skin/honeycomb/images/search-clear-30.png           (honeycomb/images/search-clear-30.png)
   skin/honeycomb/images/section-expanded-16.png       (images/section-expanded-16.png)
   skin/honeycomb/images/section-collapsed-16.png      (images/section-collapsed-16.png)
   skin/honeycomb/images/task-switch-hdpi.png          (honeycomb/images/task-switch-hdpi.png)
new file mode 100644
--- /dev/null
+++ b/mobile/themes/core/tablet.css
@@ -0,0 +1,134 @@
+
+.spacer-actionbar,
+.button-actionbar {
+  visibility: collapse;
+}
+
+.button-actionbar[disabled="true"] {
+  opacity: 0.5;
+}
+
+%ifndef honeycomb
+.button-actionbar:hover:active {
+  background-color: #8db8d8;
+}
+%endif
+
+#toolbar-main[tablet="true"] > .spacer-actionbar,
+#toolbar-main[tablet="true"] > .button-actionbar {
+  visibility: visible;
+}
+#toolbar-main[tablet="true"] > #tool-tabs {
+  visibility: collapse;
+}
+
+#controls-scrollbox[tablet="true"] > #controls-sidebar {
+  visibility: collapse;
+}
+
+#tabs-spacer[tablet="true"]  {
+  visibility: collapse;
+}
+
+#tabs-container[tablet="true"] {
+  -moz-border-end: 0px;
+  background: #000;
+}
+
+#tabs[tablet="true"] > scrollbox {
+  max-width: 200px;
+}
+
+#tabs[tablet="true"] .tabs-list {
+  -moz-column-width: 200px;
+  -moz-padding-end: 0px;
+  -moz-padding-start: 0px;
+}
+
+documenttab[tablet="true"] {
+  width: 200px;
+  padding: @padding_xxnormal@;
+  -moz-margin-start: 0px;
+  background: none;
+}
+
+documenttab[tablet="true"][selected="true"] {
+  background: none;
+}
+
+.documenttab-thumbnail[tablet="true"] {
+  border-radius: @border_radius_tiny@;
+}
+
+.documenttab-close-container[tablet="true"] {
+  left: 0px;
+  -moz-margin-end: 0px;
+  -moz-margin-start: 135px;
+  -moz-box-pack: end;
+  -moz-box-align: center;
+}
+
+documenttab[selected="true"] > stack > .documenttab-close-container[tablet="true"] {
+  background: url("chrome://browser/skin/images/close-background-hdpi.png");
+  background-repeat: no-repeat;
+  background-position: right;
+  -moz-margin-end: -@padding_xxnormal@;
+  padding-right: 2px;
+}
+
+.documenttab-close[tablet="true"] {
+  width: 30px;
+  height: 44px;
+  list-style-image: url("chrome://browser/skin/images/close-inactive-tab-tablet-hdpi.png");
+}
+
+documenttab[selected="true"] > stack > hbox > .documenttab-close[tablet="true"] {
+  list-style-image: url("chrome://browser/skin/images/close-default-tablet-hdpi.png");
+}
+
+.documenttab-close-container:hover:active > .documenttab-close[tablet="true"] {
+  list-style-image: url("chrome://browser/skin/images/close-active-tablet-hdpi.png");
+}
+
+#newtab-button[tablet="true"] {
+  list-style-image: url("images/newtab-default-tablet-hdpi.png");
+}
+
+@media (@orientation@: portrait) {
+  #toolbar-main[tablet="true"] > #tool-tabs {
+    visibility: visible;
+  }
+
+  #controls-scrollbox[tablet="true"] > #tabs-sidebar {
+    border: none;
+%ifdef honeycomb
+    top: @touch_button_xlarge@;
+%else
+    top: -moz-calc(@touch_button_xlarge@ + @margin_normal@);
+%endif
+    visibility: collapse;
+  }
+
+  #controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(ltr) {
+    left: 0;
+  }
+  #controls-scrollbox[tablet="true"] > #tabs-sidebar:-moz-locale-dir(rtl) {
+    right: 0;
+  }
+
+  #controls-scrollbox[tablet="true"] > #tabs-sidebar[open] {
+    position: fixed;
+    visibility: visible;
+  }
+}
+
+%ifndef honeycomb
+@media (min-width: @tablet_panel_minwidth@) {
+  #awesome-panels {
+    -moz-box-shadow: 0px 0px @shadow_width_small@ black;
+  }
+  #search-engines-popup {
+    max-width: -moz-calc(@tablet_panel_minwidth@);
+  }
+}
+%endif