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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabsConnection.java

Issue 1284743003: Add referrer through service connection in custom tabs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 5 years, 4 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/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);

Powered by Google App Engine
This is Rietveld 408576698