Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
index 28fa0e471ce67fea08ccfd61188d44d53a9577bc..885d767919311307c116029a221975ba8ba5384c 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java |
@@ -37,6 +37,7 @@ import org.chromium.chrome.browser.toolbar.ToolbarControlContainer; |
import org.chromium.chrome.browser.util.IntentUtils; |
import org.chromium.chrome.browser.widget.findinpage.FindToolbarManager; |
import org.chromium.content_public.browser.LoadUrlParams; |
+import org.chromium.content_public.common.Referrer; |
/** |
* The activity for custom tabs. It will be launched on top of a client's task. |
@@ -157,9 +158,15 @@ public class CustomTabActivity extends ChromeActivity { |
@Override |
public void finishNativeInitialization() { |
- String url = IntentHandler.getUrlFromIntent(getIntent()); |
- String referrer = IntentHandler.getReferrerUrlIncludingExtraHeaders(getIntent(), this); |
mSession = mIntentDataProvider.getSession(); |
+ String url = IntentHandler.getUrlFromIntent(getIntent()); |
+ // Get any referrer that has been explicitly set by the app. |
+ String referrerUrl = IntentHandler.getReferrerUrlIncludingExtraHeaders(getIntent(), this); |
+ if (referrerUrl == null) { |
+ Referrer referrer = CustomTabsConnection.getInstance(getApplication()) |
+ .getReferrerForSession(mSession); |
+ if (referrer != null) referrerUrl = referrer.getUrl(); |
+ } |
// If extra headers have been passed, cancel any current prerender, as |
// prerendering doesn't support extra headers. |
if (IntentHandler.getExtraHeadersFromIntent(getIntent()) != null) { |
@@ -167,7 +174,7 @@ public class CustomTabActivity extends ChromeActivity { |
.takePrerenderedUrl(mSession, "", null); |
} |
- mTab = new CustomTab(this, getWindowAndroid(), mSession, url, referrer, |
+ mTab = new CustomTab(this, getWindowAndroid(), mSession, url, referrerUrl, |
Tab.INVALID_TAB_ID, mIntentDataProvider.shouldEnableUrlBarHiding()); |
getTabModelSelector().setTab(mTab); |
@@ -188,8 +195,6 @@ public class CustomTabActivity extends ChromeActivity { |
}); |
mTab.setFullscreenManager(getFullscreenManager()); |
- loadUrlInCurrentTab(new LoadUrlParams(url), |
- IntentHandler.getTimestampFromIntent(getIntent())); |
mCustomTabContentHandler = new CustomTabContentHandler() { |
@Override |
public void loadUrlAndTrackFromTimestamp(LoadUrlParams params, long timestamp) { |
@@ -206,6 +211,8 @@ public class CustomTabActivity extends ChromeActivity { |
return mIntentHandler.shouldIgnoreIntent(CustomTabActivity.this, intent); |
} |
}; |
+ loadUrlInCurrentTab(new LoadUrlParams(url), |
+ IntentHandler.getTimestampFromIntent(getIntent())); |
super.finishNativeInitialization(); |
} |
@@ -245,6 +252,10 @@ public class CustomTabActivity extends ChromeActivity { |
private void loadUrlInCurrentTab(LoadUrlParams params, long timeStamp) { |
Intent intent = getIntent(); |
IntentHandler.addReferrerAndHeaders(params, intent, this); |
+ if (params.getReferrer() == null) { |
+ params.setReferrer(CustomTabsConnection.getInstance(getApplication()) |
+ .getReferrerForSession(mSession)); |
+ } |
mTab.loadUrlAndTrackFromTimestamp(params, timeStamp); |
} |