Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java |
index 4b2d4ebcd10e8ed9cec8b173399ca6dd9f7582a1..9b857867c85b0e1815aa9fde41138daccc8d0d09 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java |
@@ -89,13 +89,15 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
public final String mUrl; |
public final String mReferrer; |
public final Bundle mExtras; |
+ public final Point mSize; |
PrerenderedUrlParams(IBinder session, WebContents webContents, String url, String referrer, |
- Bundle extras) { |
+ Point size, Bundle extras) { |
mSession = session; |
mWebContents = webContents; |
mUrl = url; |
mReferrer = referrer; |
+ mSize = size; |
mExtras = extras; |
} |
} |
@@ -434,7 +436,7 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
* @param referrer The referrer to use for |url|. |
* @return The prerendered WebContents, or null. |
*/ |
- WebContents takePrerenderedUrl(IBinder session, String url, String referrer) { |
+ WebContents takePrerenderedUrl(IBinder session, String url, String referrer, Point size) { |
ThreadUtils.assertOnUiThread(); |
if (mPrerender == null || session == null || !session.equals(mPrerender.mSession)) { |
return null; |
@@ -442,6 +444,8 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
WebContents webContents = mPrerender.mWebContents; |
String prerenderedUrl = mPrerender.mUrl; |
String prerenderReferrer = mPrerender.mReferrer; |
+ size.x = mPrerender.mSize.x; |
+ size.y = mPrerender.mSize.y; |
if (referrer == null) referrer = ""; |
mPrerender = null; |
if (TextUtils.equals(prerenderedUrl, url) |
@@ -673,17 +677,18 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
if (mExternalPrerenderHandler == null) { |
mExternalPrerenderHandler = new ExternalPrerenderHandler(); |
} |
- Point contentSize = estimateContentSize(); |
Context context = mApplication.getApplicationContext(); |
String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(extrasIntent, context); |
if (referrer == null && getReferrerForSession(session) != null) { |
referrer = getReferrerForSession(session).getUrl(); |
} |
if (referrer == null) referrer = ""; |
+ Point contentSize = estimateContentSize(true); |
WebContents webContents = mExternalPrerenderHandler.addPrerender( |
Profile.getLastUsedProfile(), url, referrer, contentSize.x, contentSize.y); |
if (webContents != null) { |
- mPrerender = new PrerenderedUrlParams(session, webContents, url, referrer, extras); |
+ mPrerender = new PrerenderedUrlParams( |
+ session, webContents, url, referrer, estimateContentSize(false), extras); |
Ted C
2015/09/16 18:12:47
why is this false? Isn't this for prerendered con
|
} |
} |
@@ -693,8 +698,13 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
* 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 forPrerenderedContents Whether the size returned should be for prerendered web |
+ * contents or for ContentViewCore. The former takes the web |
+ * content size that doesn't include control conatiner height |
+ * in dp, the latter includes the control container height and |
+ * is in pixels. |
*/ |
- private Point estimateContentSize() { |
+ private Point estimateContentSize(boolean forPrerenderedContents) { |
// The size is estimated as: |
// X = screenSizeX |
// Y = screenSizeY - top bar - bottom bar - custom tabs bar |
@@ -703,15 +713,20 @@ public class CustomTabsConnection extends ICustomTabsService.Stub { |
wm.getDefaultDisplay().getSize(screenSize); |
Resources resources = mApplication.getResources(); |
int statusBarId = resources.getIdentifier("status_bar_height", "dimen", "android"); |
- int navigationBarId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); |
try { |
- screenSize.y -= |
- resources.getDimensionPixelSize(R.dimen.custom_tabs_control_container_height); |
+ if (forPrerenderedContents) { |
+ screenSize.y -= resources.getDimensionPixelSize( |
+ R.dimen.custom_tabs_control_container_height); |
+ } |
screenSize.y -= resources.getDimensionPixelSize(statusBarId); |
- screenSize.y -= resources.getDimensionPixelSize(navigationBarId); |
} catch (Resources.NotFoundException e) { |
// Nothing, this is just a best effort estimate. |
} |
+ if (forPrerenderedContents) { |
+ float density = resources.getDisplayMetrics().density; |
+ screenSize.x /= density; |
+ screenSize.y /= density; |
+ } |
return screenSize; |
} |