Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java | 
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java | 
| index bf4d756e1fa0d9738c2b3f0016c1bb4985a87122..48128e1a0fe2e6c20c3f2e88aec8ec0f85d18bc9 100644 | 
| --- a/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java | 
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/tab/TabWebContentsObserver.java | 
| @@ -156,17 +156,20 @@ public class TabWebContentsObserver extends WebContentsObserver { | 
| } | 
| @Override | 
| - public void didFailLoad(boolean isProvisionalLoad, boolean isMainFrame, int errorCode, | 
| - String description, String failingUrl, boolean wasIgnoredByHandler) { | 
| + public void didFailLoad( | 
| + boolean isMainFrame, int errorCode, String description, String failingUrl) { | 
| mTab.updateThemeColorIfNeeded(true); | 
| RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| while (observers.hasNext()) { | 
| - observers.next().onDidFailLoad(mTab, isProvisionalLoad, isMainFrame, errorCode, | 
| - description, failingUrl); | 
| + observers.next().onDidFailLoad(mTab, isMainFrame, errorCode, description, failingUrl); | 
| } | 
| if (isMainFrame) mTab.didFailPageLoad(errorCode); | 
| + recordErrorInPolicyAuditor(failingUrl, description, errorCode); | 
| + } | 
| + | 
| + private void recordErrorInPolicyAuditor(String failingUrl, String description, int errorCode) { | 
| PolicyAuditor auditor = | 
| ((ChromeApplication) mTab.getApplicationContext()).getPolicyAuditor(); | 
| auditor.notifyAuditEvent(mTab.getApplicationContext(), AuditEvent.OPEN_URL_FAILURE, | 
| @@ -183,17 +186,31 @@ public class TabWebContentsObserver extends WebContentsObserver { | 
| } | 
| @Override | 
| - public void didStartProvisionalLoadForFrame(long frameId, long parentFrameId, | 
| - boolean isMainFrame, String validatedUrl, boolean isErrorPage) { | 
| - if (isMainFrame) mTab.didStartPageLoad(validatedUrl, isErrorPage); | 
| + public void didStartNavigation(String url, boolean isInMainFrame, boolean isErrorPage) { | 
| + if (isInMainFrame) { | 
| + mTab.didStartPageLoad(url, isErrorPage); | 
| + } | 
| - mTab.handleDidStartProvisionalLoadForFrame(isMainFrame, validatedUrl); | 
| + RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| + while (observers.hasNext()) { | 
| + observers.next().onDidStartNavigation(mTab, url, isInMainFrame, isErrorPage); | 
| + } | 
| } | 
| @Override | 
| - public void didCommitProvisionalLoadForFrame(long frameId, boolean isMainFrame, String url, | 
| - int transitionType) { | 
| - if (isMainFrame && UmaUtils.isRunningApplicationStart()) { | 
| + public void didFinishNavigation(String url, boolean isInMainFrame, boolean isErrorPage, | 
| + boolean hasCommitted, boolean isSamePage, boolean isFragmentNavigation, | 
| + Integer pageTransition, int errorCode, int httpStatusCode) { | 
| + RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| + if (errorCode != 0) { | 
| + mTab.updateThemeColorIfNeeded(true); | 
| + if (isInMainFrame) mTab.didFailPageLoad(errorCode); | 
| + | 
| + // TODO(shaktisahu): Find out how to get the description for this error. | 
| + recordErrorInPolicyAuditor(url, "", errorCode); | 
| 
 
shaktisahu
2017/01/31 01:57:53
I didn't find a way to retrieve the error descript
 
Ted C
2017/01/31 18:57:48
I wonder if we could just do net::ErrorToShortStri
 
Bernhard Bauer
2017/02/07 13:19:16
I think error_page::LocalizedError::GetErrorDetail
 
shaktisahu
2017/02/07 18:08:22
Hmm... but error_page is in components and we may
 
Ted C
2017/02/08 05:31:15
Why wouldn't we able to use it here?  We're in chr
 
shaktisahu
2017/02/08 06:32:10
Oh, I was trying to add this to web_contents_obser
 
Bernhard Bauer
2017/02/08 10:26:38
That sounds good to me, thanks!
 
shaktisahu
2017/02/10 08:07:41
Seems like error_page::LocalizedError::GetErrorDet
 
 | 
| + } | 
| 
 
Ted C
2017/01/31 18:57:47
Should we return in the errorCode case?
 
shaktisahu
2017/02/03 06:56:16
Done.
Yes. In that case I would move the block ha
 
 | 
| + | 
| + if (isInMainFrame && hasCommitted && UmaUtils.isRunningApplicationStart()) { | 
| // Current median is 550ms, and long tail is very long. ZoomedIn gives good view of the | 
| // median and ZoomedOut gives a good overview. | 
| RecordHistogram.recordCustomTimesHistogram( | 
| @@ -209,65 +226,36 @@ public class TabWebContentsObserver extends WebContentsObserver { | 
| UmaUtils.setRunningApplicationStart(false); | 
| } | 
| - if (isMainFrame) { | 
| + if (isInMainFrame && hasCommitted) { | 
| mTab.setIsTabStateDirty(true); | 
| mTab.updateTitle(); | 
| - } | 
| - | 
| - RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| - while (observers.hasNext()) { | 
| - observers.next().onDidCommitProvisionalLoadForFrame( | 
| - mTab, frameId, isMainFrame, url, transitionType); | 
| + mTab.handleDidFinishNavigation(url, pageTransition); | 
| + mTab.setIsShowingErrorPage(isErrorPage); | 
| } | 
| observers.rewind(); | 
| while (observers.hasNext()) { | 
| - observers.next().onUrlUpdated(mTab); | 
| + observers.next().onDidFinishNavigation(mTab, url, isInMainFrame, isErrorPage, | 
| + hasCommitted, isSamePage, isFragmentNavigation, pageTransition, errorCode, | 
| + httpStatusCode); | 
| } | 
| - if (!isMainFrame) return; | 
| - mTab.handleDidCommitProvisonalLoadForFrame(url, transitionType); | 
| - } | 
| + if (hasCommitted) { | 
| + observers.rewind(); | 
| + while (observers.hasNext()) { | 
| + observers.next().onUrlUpdated(mTab); | 
| + } | 
| + } | 
| - @Override | 
| - public void didNavigateMainFrame(String url, String baseUrl, | 
| - boolean isNavigationToDifferentPage, boolean isFragmentNavigation, int statusCode) { | 
| FullscreenManager fullscreenManager = mTab.getFullscreenManager(); | 
| - if (isNavigationToDifferentPage && fullscreenManager != null) { | 
| + if (isInMainFrame && hasCommitted && !isSamePage && fullscreenManager != null) { | 
| fullscreenManager.setPersistentFullscreenMode(false); | 
| } | 
| - RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| - while (observers.hasNext()) { | 
| - observers.next().onDidNavigateMainFrame( | 
| - mTab, url, baseUrl, isNavigationToDifferentPage, | 
| - isFragmentNavigation, statusCode); | 
| - } | 
| - | 
| mTab.stopSwipeRefreshHandler(); | 
| } | 
| @Override | 
| - public void didStartNavigation(String url, boolean isInMainFrame, boolean isErrorPage) { | 
| - RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| - while (observers.hasNext()) { | 
| - observers.next().onDidStartNavigation(mTab, url, isInMainFrame, isErrorPage); | 
| - } | 
| - } | 
| - | 
| - @Override | 
| - public void didFinishNavigation(String url, boolean isInMainFrame, boolean isErrorPage, | 
| - boolean hasCommitted, boolean isSamePage, Integer pageTransition, int errorCode) { | 
| - if (isInMainFrame && hasCommitted) mTab.setIsShowingErrorPage(isErrorPage); | 
| - | 
| - RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| - while (observers.hasNext()) { | 
| - observers.next().onDidFinishNavigation(mTab, url, isInMainFrame, isErrorPage, | 
| - hasCommitted, isSamePage, pageTransition, errorCode); | 
| - } | 
| - } | 
| - | 
| - @Override | 
| public void didFirstVisuallyNonEmptyPaint() { | 
| RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| while (observers.hasNext()) { | 
| @@ -320,14 +308,6 @@ public class TabWebContentsObserver extends WebContentsObserver { | 
| } | 
| @Override | 
| - public void didStartNavigationToPendingEntry(String url) { | 
| - RewindableIterator<TabObserver> observers = mTab.getTabObservers(); | 
| - while (observers.hasNext()) { | 
| - observers.next().onDidStartNavigationToPendingEntry(mTab, url); | 
| - } | 
| - } | 
| - | 
| - @Override | 
| public void destroy() { | 
| MediaCaptureNotificationService.updateMediaNotificationForTab( | 
| mTab.getApplicationContext(), mTab.getId(), 0, mTab.getUrl()); |