Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1244)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java

Issue 2147543006: Set the prerender size right and avoid resets (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile for real Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java b/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java
index fa94115cd6a15303d3a0fa73696ab0caaea5195d..aaf7b31f7a067cc950fe10d785c3e97a3bcc198c 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/prerender/ExternalPrerenderHandler.java
@@ -4,8 +4,15 @@
package org.chromium.chrome.browser.prerender;
+import android.app.Application;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.view.WindowManager;
+
import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.JNINamespace;
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.WebContentsFactory;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.content_public.browser.WebContents;
@@ -102,6 +109,41 @@ public class ExternalPrerenderHandler {
return nativeHasPrerenderedAndFinishedLoadingUrl(profile, url, webContents);
}
+ /**
+ * Provides an estimate of the contents size.
+ *
+ * The estimate is likely to be incorrect. This is not a problem, as the aim
+ * is to avoid getting a different layout and resources than needed at
+ * render time.
+ * @param application The application to use for getting resources.
+ * @param convertToDp Whether the value should be converted to dp from pixels.
+ * @return The estimated prerender size in pixels or dp.
+ */
+ public static Point estimateContentSize(Application application, boolean convertToDp) {
+ // The size is estimated as:
+ // X = screenSizeX
+ // Y = screenSizeY - top bar - bottom bar - custom tabs bar
+ Point screenSize = new Point();
+ WindowManager wm = (WindowManager) application.getSystemService(Context.WINDOW_SERVICE);
+ wm.getDefaultDisplay().getSize(screenSize);
+ Resources resources = application.getResources();
+ int statusBarId = resources.getIdentifier("status_bar_height", "dimen", "android");
+ try {
+ screenSize.y -=
+ resources.getDimensionPixelSize(R.dimen.custom_tabs_control_container_height);
+ screenSize.y -= resources.getDimensionPixelSize(statusBarId);
+ } catch (Resources.NotFoundException e) {
+ // Nothing, this is just a best effort estimate.
+ }
+
+ if (convertToDp) {
+ float density = resources.getDisplayMetrics().density;
+ screenSize.x = (int) Math.ceil(screenSize.x / density);
+ screenSize.y = (int) Math.ceil(screenSize.y / density);
+ }
+ return screenSize;
+ }
+
private static native long nativeInit();
private static native boolean nativeAddPrerender(
long nativeExternalPrerenderHandlerAndroid, Profile profile,

Powered by Google App Engine
This is Rietveld 408576698