| 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 3e342b3b52871d7ad5bc117d0ea0e8557d93c337..045aef059bd1ec91fbbf1d01033d8bd8ceddde3f 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
|
| @@ -46,6 +46,7 @@ import org.chromium.chrome.browser.prerender.ExternalPrerenderHandler;
|
| import org.chromium.chrome.browser.profiles.Profile;
|
| import org.chromium.content.browser.ChildProcessLauncher;
|
| import org.chromium.content_public.browser.WebContents;
|
| +import org.chromium.content_public.common.Referrer;
|
|
|
| import java.io.BufferedReader;
|
| import java.io.FileReader;
|
| @@ -139,17 +140,26 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
|
| /** Per-session values. */
|
| private static class SessionParams {
|
| public final int mUid;
|
| + public final Referrer mReferrer;
|
| public final ICustomTabsCallback mCallback;
|
| private ServiceConnection mServiceConnection;
|
| private String mPredictedUrl;
|
| private long mLastMayLaunchUrlTimestamp;
|
|
|
| - public SessionParams(int uid, ICustomTabsCallback callback) {
|
| + public SessionParams(Context context, int uid, ICustomTabsCallback callback) {
|
| mUid = uid;
|
| mCallback = callback;
|
| mServiceConnection = null;
|
| mPredictedUrl = null;
|
| mLastMayLaunchUrlTimestamp = 0;
|
| + mReferrer = constructReferrer(context);
|
| + }
|
| +
|
| + private Referrer constructReferrer(Context context) {
|
| + PackageManager packageManager = context.getPackageManager();
|
| + String[] packageList = packageManager.getPackagesForUid(mUid);
|
| + if (packageList.length != 1 || TextUtils.isEmpty(packageList[0])) return null;
|
| + return IntentHandler.constructValidReferrerForAuthority(packageList[0]);
|
| }
|
|
|
| public ServiceConnection getServiceConnection() {
|
| @@ -206,7 +216,7 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
|
| public boolean newSession(ICustomTabsCallback callback) {
|
| if (callback == null) return false;
|
| final int uid = Binder.getCallingUid();
|
| - SessionParams sessionParams = new SessionParams(uid, callback);
|
| + SessionParams sessionParams = new SessionParams(mApplication, uid, callback);
|
| final IBinder session = callback.asBinder();
|
| synchronized (mLock) {
|
| if (mSessionParams.containsKey(session)) return false;
|
| @@ -389,6 +399,11 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
|
| return null;
|
| }
|
|
|
| + public Referrer getReferrerForSession(IBinder session) {
|
| + if (!mSessionParams.containsKey(session)) return null;
|
| + return mSessionParams.get(session).mReferrer;
|
| + }
|
| +
|
| private ICustomTabsCallback getCallbackForSession(IBinder session) {
|
| synchronized (mLock) {
|
| SessionParams sessionParams = mSessionParams.get(session);
|
| @@ -601,6 +616,9 @@ public class CustomTabsConnection extends ICustomTabsService.Stub {
|
| 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 = "";
|
| WebContents webContents = mExternalPrerenderHandler.addPrerender(
|
| Profile.getLastUsedProfile(), url, referrer, contentSize.x, contentSize.y);
|
|
|