Chromium Code Reviews| 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 d29d305fbe93421ee8de7a180eb26cd7ae8f3524..3a47d2d33f77136237c3c085f6341eef0f45c420 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 |
| @@ -44,6 +44,7 @@ import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument; |
| import org.chromium.chrome.browser.datausage.DataUseTabUIManager; |
| import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
| import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; |
| +import org.chromium.chrome.browser.metrics.PageLoadMetrics; |
| import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
| import org.chromium.chrome.browser.pageinfo.WebsiteSettingsPopup; |
| import org.chromium.chrome.browser.rappor.RapporServiceBridge; |
| @@ -97,15 +98,40 @@ public class CustomTabActivity extends ChromeActivity { |
| private String mPrerenderedUrl; |
| private boolean mHasPrerendered; |
| - // Only the normal tab model is observed because there is no icognito tabmodel in Custom Tabs. |
| + private static class PageLoadMetricsObserver implements PageLoadMetrics.Observer { |
| + private final CustomTabsConnection mConnection; |
| + private final CustomTabsSessionToken mSession; |
| + private final WebContents mWebContents; |
| + |
| + public PageLoadMetricsObserver(CustomTabsConnection connection, |
| + CustomTabsSessionToken session, WebContents webContents) { |
| + mConnection = connection; |
| + mSession = session; |
| + mWebContents = webContents; |
| + } |
| + |
| + @Override |
| + public void onFirstContentfulPaint(WebContents webContents, long firstContentfulPaintMs) { |
| + if (webContents != mWebContents) return; |
|
Bryan McQuade
2016/07/26 14:29:33
do we expect to hit this early return? in what cas
Benoit L
2016/07/27 16:23:44
Yes.
There can be multiple Custom Tabs active at
|
| + |
| + mConnection.notifyPageLoadMetric( |
|
Bryan McQuade
2016/07/26 14:29:33
we've found that it's less useful to track first c
Benoit L
2016/07/27 16:23:45
Thanks for pointing that out!
There is a way to k
|
| + mSession, PageLoadMetrics.FIRST_CONTENTFUL_PAINT, firstContentfulPaintMs); |
| + } |
| + } |
| + |
| + private PageLoadMetricsObserver mMetricsObserver; |
| + |
| + // Only the normal tab model is observed because there is no incognito tabmodel in Custom Tabs. |
| private TabModelObserver mTabModelObserver = new EmptyTabModelObserver() { |
| @Override |
| public void didAddTab(Tab tab, TabLaunchType type) { |
| + PageLoadMetrics.addObserver(mMetricsObserver); |
| tab.addObserver(mTabObserver); |
| } |
| @Override |
| public void didCloseTab(int tabId, boolean incognito) { |
| + PageLoadMetrics.removeObserver(mMetricsObserver); |
| // Finish the activity after we intent out. |
| if (getTabModelSelector().getCurrentModel().getCount() == 0) finish(); |
| } |
| @@ -393,6 +419,9 @@ public class CustomTabActivity extends ChromeActivity { |
| tab.getTabRedirectHandler().updateIntent(getIntent()); |
| tab.getView().requestFocus(); |
| mTabObserver = new CustomTabObserver(getApplication(), mSession); |
| + |
| + mMetricsObserver = new PageLoadMetricsObserver( |
| + CustomTabsConnection.getInstance(getApplication()), mSession, webContents); |
| tab.addObserver(mTabObserver); |
| return tab; |
| } |