author | Joe Drew <joe@drew.ca> |
Mon, 23 Apr 2012 10:29:14 -0700 | |
changeset 92140 | 72ac45a8f8f51cce2e0a5b62fa6ad60cc11a28ce |
parent 92139 | e8826e002d6993541b4ea6fee046b627c15adfb9 |
child 92141 | b552a2a7638be4374f1b11051c2d16d0226268d2 |
push id | 22516 |
push user | eakhgari@mozilla.com |
push date | Mon, 23 Apr 2012 22:53:29 +0000 |
treeherder | mozilla-central@8acbbeca4f42 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | kats, blocker |
bugs | 744439 |
milestone | 14.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
|
--- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -665,16 +665,17 @@ abstract public class GeckoApp return; } tab.updateFavicon(null); tab.updateFaviconURL(null); tab.updateSecurityMode("unknown"); tab.removeTransientDoorHangers(); tab.setHasTouchListeners(false); + tab.setCheckerboardColor(Color.WHITE); maybeCancelFaviconLoad(tab); mMainHandler.post(new Runnable() { public void run() { if (Tabs.getInstance().isSelectedTab(tab)) { mBrowserToolbar.setTitle(uri); mBrowserToolbar.setFavicon(null); @@ -824,24 +825,30 @@ abstract public class GeckoApp final String duration = message.getString("duration"); handleShowToast(msg, duration); } else if (event.equals("DOMContentLoaded")) { final int tabId = message.getInt("tabID"); final String uri = message.getString("uri"); final String title = message.getString("title"); final String backgroundColor = message.getString("bgColor"); handleContentLoaded(tabId, uri, title); - if (getLayerController() != null) { - if (backgroundColor != null) { - getLayerController().setCheckerboardColor(backgroundColor); - } else { - // Default to white if no color is given - getLayerController().setCheckerboardColor(Color.WHITE); - } + Tab tab = Tabs.getInstance().getTab(tabId); + if (backgroundColor != null) { + tab.setCheckerboardColor(backgroundColor); + } else { + // Default to white if no color is given + tab.setCheckerboardColor(Color.WHITE); } + + // Sync up the LayerController and the tab if the tab's + // currently displayed. + if (getLayerController() != null && Tabs.getInstance().isSelectedTab(tab)) { + getLayerController().setCheckerboardColor(tab.getCheckerboardColor()); + } + Log.i(LOGTAG, "URI - " + uri + ", title - " + title); } else if (event.equals("DOMTitleChanged")) { final int tabId = message.getInt("tabID"); final String title = message.getString("title"); handleTitleChanged(tabId, title); Log.i(LOGTAG, "title - " + title); } else if (event.equals("DOMLinkAdded")) { final int tabId = message.getInt("tabID");
--- a/mobile/android/base/Tab.java +++ b/mobile/android/base/Tab.java @@ -35,16 +35,17 @@ * * ***** END LICENSE BLOCK ***** */ package org.mozilla.gecko; import android.content.ContentResolver; import android.database.ContentObserver; import android.graphics.Bitmap; +import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.util.DisplayMetrics; import android.util.Log; import android.view.Surface; import android.view.View; @@ -53,26 +54,29 @@ import org.json.JSONObject; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.gfx.Layer; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.regex.Pattern; +import java.util.regex.Matcher; public final class Tab { private static final String LOGTAG = "GeckoTab"; private static final int kThumbnailWidth = 136; private static final int kThumbnailHeight = 78; private static float sMinDim = 0; private static float sDensity = 1; private static int sMinScreenshotWidth = 0; private static int sMinScreenshotHeight = 0; + private static Pattern sColorPattern; private int mId; private String mUrl; private String mTitle; private Drawable mFavicon; private String mFaviconUrl; private String mSecurityMode; private Drawable mThumbnail; private List<HistoryEntry> mHistory; @@ -84,16 +88,17 @@ public final class Tab { private long mFaviconLoadId; private String mDocumentURI; private String mContentType; private boolean mHasTouchListeners; private ArrayList<View> mPluginViews; private HashMap<Surface, Layer> mPluginLayers; private ContentResolver mContentResolver; private ContentObserver mContentObserver; + private int mCheckerboardColor = Color.WHITE; private int mState; public static final int STATE_DELAYED = 0; public static final int STATE_LOADING = 1; public static final int STATE_SUCCESS = 2; public static final int STATE_ERROR = 3; public static final class HistoryEntry { @@ -556,9 +561,41 @@ public final class Tab { public Collection<Layer> getPluginLayers() { return mPluginLayers.values(); } public Layer removePluginLayer(Surface surface) { return mPluginLayers.remove(surface); } + + public int getCheckerboardColor() { + return mCheckerboardColor; + } + + /** Sets a new color for the checkerboard. */ + public void setCheckerboardColor(int color) { + mCheckerboardColor = color; + } + + /** Parses and sets a new color for the checkerboard. */ + public void setCheckerboardColor(String newColor) { + setCheckerboardColor(parseColorFromGecko(newColor)); + } + + // Parses a color from an RGB triple of the form "rgb([0-9]+, [0-9]+, [0-9]+)". If the color + // cannot be parsed, returns white. + private static int parseColorFromGecko(String string) { + if (sColorPattern == null) { + sColorPattern = Pattern.compile("rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)"); + } + + Matcher matcher = sColorPattern.matcher(string); + if (!matcher.matches()) { + return Color.WHITE; + } + + int r = Integer.parseInt(matcher.group(1)); + int g = Integer.parseInt(matcher.group(2)); + int b = Integer.parseInt(matcher.group(3)); + return Color.rgb(r, g, b); + } }
--- a/mobile/android/base/gfx/GeckoLayerClient.java +++ b/mobile/android/base/gfx/GeckoLayerClient.java @@ -53,16 +53,17 @@ import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.os.SystemClock; import android.util.DisplayMetrics; import android.util.Log; import android.view.View; import java.util.Map; import java.util.HashMap; +import org.mozilla.gecko.Tabs; public class GeckoLayerClient implements GeckoEventResponder, LayerView.Listener { private static final String LOGTAG = "GeckoLayerClient"; private LayerController mLayerController; private LayerRenderer mLayerRenderer; private boolean mLayerRendererInitialized; @@ -324,16 +325,17 @@ public class GeckoLayerClient implements */ public void setFirstPaintViewport(float offsetX, float offsetY, float zoom, float pageWidth, float pageHeight, float cssPageWidth, float cssPageHeight) { synchronized (mLayerController) { ViewportMetrics currentMetrics = new ViewportMetrics(mLayerController.getViewportMetrics()); currentMetrics.setOrigin(new PointF(offsetX, offsetY)); currentMetrics.setZoomFactor(zoom); currentMetrics.setPageSize(new FloatSize(pageWidth, pageHeight), new FloatSize(cssPageWidth, cssPageHeight)); mLayerController.setViewportMetrics(currentMetrics); + mLayerController.setCheckerboardColor(Tabs.getInstance().getSelectedTab().getCheckerboardColor()); // At this point, we have just switched to displaying a different document than we // we previously displaying. This means we need to abort any panning/zooming animations // that are in progress and send an updated display port request to browser.js as soon // as possible. We accomplish this by passing true to abortPanZoomAnimation, which // sends the request after aborting the animation. The display port request is actually // a full viewport update, which is fine because if browser.js has somehow moved to // be out of sync with this first-paint viewport, then we force them back in sync. mLayerController.abortPanZoomAnimation();
--- a/mobile/android/base/gfx/LayerController.java +++ b/mobile/android/base/gfx/LayerController.java @@ -47,18 +47,16 @@ import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.PointF; import android.graphics.RectF; import android.util.Log; import android.view.GestureDetector; import android.view.View.OnTouchListener; -import java.util.regex.Matcher; -import java.util.regex.Pattern; /** * The layer controller manages a tile that represents the visible page. It does panning and * zooming natively by delegating to a panning/zooming controller. Touch events can be dispatched * to a higher-level view. * * Many methods require that the monitor be held, with a synchronized (controller) { ... } block. */ @@ -91,18 +89,16 @@ public class LayerController { private GeckoLayerClient mLayerClient; /* The layer client. */ /* The new color for the checkerboard. */ private int mCheckerboardColor = Color.WHITE; private boolean mCheckerboardShouldShowChecks; private boolean mForceRedraw; - private static Pattern sColorPattern; - public LayerController(Context context) { mContext = context; mForceRedraw = true; mViewportMetrics = new ImmutableViewportMetrics(new ViewportMetrics()); mPanZoomController = new PanZoomController(this); mView = new LayerView(context, this); mCheckerboardShouldShowChecks = true; @@ -354,34 +350,9 @@ public class LayerController { mView.requestRender(); } /** Sets a new color for the checkerboard. */ public void setCheckerboardColor(int newColor) { mCheckerboardColor = newColor; mView.requestRender(); } - - /** Parses and sets a new color for the checkerboard. */ - public void setCheckerboardColor(String newColor) { - setCheckerboardColor(parseColorFromGecko(newColor)); - } - - // Parses a color from an RGB triple of the form "rgb([0-9]+, [0-9]+, [0-9]+)". If the color - // cannot be parsed, returns white. - private static int parseColorFromGecko(String string) { - if (sColorPattern == null) { - sColorPattern = Pattern.compile("rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)"); - } - - Matcher matcher = sColorPattern.matcher(string); - if (!matcher.matches()) { - return Color.WHITE; - } - - int r = Integer.parseInt(matcher.group(1)); - int g = Integer.parseInt(matcher.group(2)); - int b = Integer.parseInt(matcher.group(3)); - return Color.rgb(r, g, b); - } - } -