Bug 721341 - Get zombie tab thumbnails from database. r=blassey

This commit is contained in:
Brian Nicholson 2012-01-31 14:13:33 -08:00
parent 24d618f1de
commit 080d09ed44
4 changed files with 23 additions and 1 deletions

View File

@ -40,6 +40,7 @@
package org.mozilla.gecko; package org.mozilla.gecko;
import org.mozilla.gecko.db.BrowserDB;
import org.mozilla.gecko.gfx.FloatSize; import org.mozilla.gecko.gfx.FloatSize;
import org.mozilla.gecko.gfx.GeckoSoftwareLayerClient; import org.mozilla.gecko.gfx.GeckoSoftwareLayerClient;
import org.mozilla.gecko.gfx.IntSize; import org.mozilla.gecko.gfx.IntSize;
@ -596,6 +597,13 @@ abstract public class GeckoApp
bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos); bitmap.compress(Bitmap.CompressFormat.PNG, 0, bos);
processThumbnail(tab, bitmap, bos.toByteArray()); processThumbnail(tab, bitmap, bos.toByteArray());
} else { } else {
if (!tab.hasLoaded()) {
byte[] thumbnail = BrowserDB.getThumbnailForUrl(getContentResolver(), tab.getURL());
if (thumbnail != null)
processThumbnail(tab, null, thumbnail);
return;
}
mLastScreen = null; mLastScreen = null;
int sw = forceBigSceenshot ? mSoftwareLayerClient.getWidth() : tab.getMinScreenshotWidth(); int sw = forceBigSceenshot ? mSoftwareLayerClient.getWidth() : tab.getMinScreenshotWidth();
int sh = forceBigSceenshot ? mSoftwareLayerClient.getHeight(): tab.getMinScreenshotHeight(); int sh = forceBigSceenshot ? mSoftwareLayerClient.getHeight(): tab.getMinScreenshotHeight();
@ -1290,6 +1298,7 @@ abstract public class GeckoApp
return; return;
tab.updateTitle(title); tab.updateTitle(title);
tab.setHasLoaded(true);
// Make the UI changes // Make the UI changes
mMainHandler.post(new Runnable() { mMainHandler.post(new Runnable() {

View File

@ -83,6 +83,7 @@ public final class Tab {
private String mContentType; private String mContentType;
private boolean mHasTouchListeners; private boolean mHasTouchListeners;
private ArrayList<View> mPluginViews; private ArrayList<View> mPluginViews;
private boolean mHasLoaded;
public static final class HistoryEntry { public static final class HistoryEntry {
public String mUri; // must never be null public String mUri; // must never be null
@ -116,6 +117,7 @@ public final class Tab {
mDocumentURI = ""; mDocumentURI = "";
mContentType = ""; mContentType = "";
mPluginViews = new ArrayList<View>(); mPluginViews = new ArrayList<View>();
mHasLoaded = false;
} }
public int getId() { public int getId() {
@ -436,6 +438,14 @@ public final class Tab {
return mDoorHangers; return mDoorHangers;
} }
public void setHasLoaded(boolean hasLoaded) {
mHasLoaded = hasLoaded;
}
public boolean hasLoaded() {
return mHasLoaded;
}
void handleSessionHistoryMessage(String event, JSONObject message) throws JSONException { void handleSessionHistoryMessage(String event, JSONObject message) throws JSONException {
if (event.equals("New")) { if (event.equals("New")) {
final String uri = message.getString("uri"); final String uri = message.getString("uri");

View File

@ -277,6 +277,8 @@ public class Tabs implements GeckoEventListener {
Tab tab = addTab(message); Tab tab = addTab(message);
if (message.getBoolean("selected")) if (message.getBoolean("selected"))
selectTab(tab.getId()); selectTab(tab.getId());
if (message.getBoolean("delayLoad"))
tab.setHasLoaded(false);
} else if (event.equals("Tab:Close")) { } else if (event.equals("Tab:Close")) {
Tab tab = getTab(message.getInt("tabID")); Tab tab = getTab(message.getInt("tabID"));
closeTab(tab); closeTab(tab);

View File

@ -1440,7 +1440,8 @@ Tab.prototype = {
parentId: ("parentId" in aParams) ? aParams.parentId : -1, parentId: ("parentId" in aParams) ? aParams.parentId : -1,
external: ("external" in aParams) ? aParams.external : false, external: ("external" in aParams) ? aParams.external : false,
selected: ("selected" in aParams) ? aParams.selected : true, selected: ("selected" in aParams) ? aParams.selected : true,
title: aParams.title || "" title: aParams.title || "",
delayLoad: aParams.delayLoad || false
} }
}; };
sendMessageToJava(message); sendMessageToJava(message);