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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java

Issue 1464743005: Remove DocumentTabObserver and merge task description updates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added comment for Webapps and removed needsUpdate in observer call Created 5 years, 1 month 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/document/DocumentActivity.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
index 4fea461dbe7eae72cd0b5cc62fd114da60259b3a..8f48fcd405ff9f344c73dab0ec8a7e56f3de54de 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentActivity.java
@@ -29,7 +29,6 @@ import org.chromium.chrome.browser.KeyboardShortcuts;
import org.chromium.chrome.browser.TabState;
import org.chromium.chrome.browser.compositor.bottombar.OverlayPanel.StateChangeReason;
import org.chromium.chrome.browser.compositor.layouts.LayoutManagerDocument;
-import org.chromium.chrome.browser.document.DocumentTab.DocumentTabObserver;
import org.chromium.chrome.browser.enhancedbookmarks.EnhancedBookmarkUtils;
import org.chromium.chrome.browser.firstrun.FirstRunSignInProcessor;
import org.chromium.chrome.browser.firstrun.FirstRunStatus;
@@ -42,6 +41,7 @@ import org.chromium.chrome.browser.preferences.datareduction.DataReductionPrefer
import org.chromium.chrome.browser.preferences.datareduction.DataReductionPromoScreen;
import org.chromium.chrome.browser.signin.SigninPromoScreen;
import org.chromium.chrome.browser.ssl.ConnectionSecurityLevel;
+import org.chromium.chrome.browser.tab.EmptyTabObserver;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
import org.chromium.chrome.browser.tabmodel.SingleTabModelSelector;
@@ -87,6 +87,109 @@ public class DocumentActivity extends ChromeActivity {
// plus add another 20ms for a re-layout.
private static final int MENU_EXIT_ANIMATION_WAIT_MS = 170;
+ private class DocumentTabObserver extends EmptyTabObserver {
+ @Override
+ public void onPageLoadStarted(Tab tab, String url) {
+ // Discard startup navigation measurements when the user interfered and started the
+ // 2nd navigation (in activity lifetime) in parallel.
+ if (!sIsFirstPageLoadStart) {
+ UmaUtils.setRunningApplicationStart(false);
+ } else {
+ sIsFirstPageLoadStart = false;
+ }
+ }
+
+ @Override
+ public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) {
+ if (!didStartLoad) return;
+ resetIcon();
+ }
+
+ @Override
+ public void onFaviconUpdated(Tab tab, Bitmap icon) {
+ if (mLargestFavicon == null || icon.getWidth() > mLargestFavicon.getWidth()
+ || icon.getHeight() > mLargestFavicon.getHeight()) {
+ mLargestFavicon = icon;
+ updateTaskDescription();
+ }
+ }
+
+ @Override
+ public void onUrlUpdated(Tab tab) {
+ assert mDocumentTab == tab;
+
+ updateTaskDescription();
+ mTabModel.updateEntry(getIntent(), mDocumentTab);
+ }
+
+ @Override
+ public void onTitleUpdated(Tab tab) {
+ super.onTitleUpdated(tab);
+ updateTaskDescription();
+ }
+
+ @Override
+ public void onSSLStateUpdated(Tab tab) {
+ if (hasSecurityWarningOrError(tab)) resetIcon();
+ }
+
+ @Override
+ public void onDidNavigateMainFrame(Tab tab, String url, String baseUrl,
+ boolean isNavigationToDifferentPage, boolean isFragmentNavigation,
+ int statusCode) {
+ if (!isNavigationToDifferentPage) return;
+ mLargestFavicon = null;
+ }
+
+ @Override
+ public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
+ assert mDocumentTab == tab;
+
+ updateTaskDescription();
+ mTabModel.updateEntry(getIntent(), mDocumentTab);
+ }
+
+ @Override
+ public void onDidChangeThemeColor(Tab tab, int color) {
+ updateTaskDescription();
+ }
+
+ @Override
+ public void onDidAttachInterstitialPage(Tab tab) {
+ resetIcon();
+ }
+
+ @Override
+ public void onDidDetachInterstitialPage(Tab tab) {
+ resetIcon();
+ }
+
+ @Override
+ public void onCrash(Tab tab, boolean sadTabShown) {
+ int currentState = ApplicationStatus.getStateForActivity(DocumentActivity.this);
+ if (currentState != ActivityState.STOPPED) return;
+
+ if (!isTaskRoot() || IntentUtils.safeGetBooleanExtra(getIntent(),
+ IntentHandler.EXTRA_APPEND_TASK, false)) {
+ return;
+ }
+
+ // Finishing backgrounded Activities whose renderers have crashed allows us to
+ // destroy them and return resources sooner than if we wait for Android to destroy
+ // the Activities themselves. Problematically, this also removes
+ // IncognitoDocumentActivity instances from Android's Recents menu and auto-closes
+ // the tab. Instead, take a hit and keep the Activities alive -- Android will
+ // eventually destroy the Activities, anyway (crbug.com/450292).
+ if (!isIncognito()) finish();
+ }
+
+ private boolean hasSecurityWarningOrError(Tab tab) {
+ int securityLevel = tab.getSecurityLevel();
+ return securityLevel == ConnectionSecurityLevel.SECURITY_ERROR
+ || securityLevel == ConnectionSecurityLevel.SECURITY_WARNING
+ || securityLevel == ConnectionSecurityLevel.SECURITY_POLICY_WARNING;
+ }
+ }
private DocumentTabModel mTabModel;
private InitializationObserver mTabInitializationObserver;
@@ -531,110 +634,7 @@ public class DocumentActivity extends ChromeActivity {
mDocumentTab.setFullscreenManager(getFullscreenManager());
- mDocumentTab.addObserver(new DocumentTabObserver() {
- @Override
- public void onPageLoadStarted(Tab tab, String url) {
- // Discard startup navigation measurements when the user interfered and started the
- // 2nd navigation (in activity lifetime) in parallel.
- if (!sIsFirstPageLoadStart) {
- UmaUtils.setRunningApplicationStart(false);
- } else {
- sIsFirstPageLoadStart = false;
- }
- }
-
- @Override
- public void onWebContentsSwapped(Tab tab, boolean didStartLoad, boolean didFinishLoad) {
- if (!didStartLoad) return;
- resetIcon();
- }
-
- @Override
- protected void onFaviconReceived(Bitmap image) {
- super.onFaviconReceived(image);
- if (mLargestFavicon == null || image.getWidth() > mLargestFavicon.getWidth()
- || image.getHeight() > mLargestFavicon.getHeight()) {
- mLargestFavicon = image;
- updateTaskDescription();
- }
- }
-
- @Override
- public void onUrlUpdated(Tab tab) {
- assert mDocumentTab == tab;
-
- updateTaskDescription();
- mTabModel.updateEntry(getIntent(), mDocumentTab);
- }
-
- @Override
- public void onTitleUpdated(Tab tab) {
- super.onTitleUpdated(tab);
- updateTaskDescription();
- }
-
- @Override
- public void onSSLStateUpdated(Tab tab) {
- if (hasSecurityWarningOrError(tab)) resetIcon();
- }
-
- @Override
- public void onDidNavigateMainFrame(Tab tab, String url, String baseUrl,
- boolean isNavigationToDifferentPage, boolean isFragmentNavigation,
- int statusCode) {
- if (!isNavigationToDifferentPage) return;
- mLargestFavicon = null;
- }
-
- @Override
- public void onLoadStopped(Tab tab, boolean toDifferentDocument) {
- assert mDocumentTab == tab;
-
- updateTaskDescription();
- mTabModel.updateEntry(getIntent(), mDocumentTab);
- }
-
- @Override
- public void onDidChangeThemeColor(Tab tab, int color) {
- updateTaskDescription();
- }
-
- @Override
- public void onDidAttachInterstitialPage(Tab tab) {
- resetIcon();
- }
-
- @Override
- public void onDidDetachInterstitialPage(Tab tab) {
- resetIcon();
- }
-
- @Override
- public void onCrash(Tab tab, boolean sadTabShown) {
- int currentState = ApplicationStatus.getStateForActivity(DocumentActivity.this);
- if (currentState != ActivityState.STOPPED) return;
-
- if (!isTaskRoot() || IntentUtils.safeGetBooleanExtra(getIntent(),
- IntentHandler.EXTRA_APPEND_TASK, false)) {
- return;
- }
-
- // Finishing backgrounded Activities whose renderers have crashed allows us to
- // destroy them and return resources sooner than if we wait for Android to destroy
- // the Activities themselves. Problematically, this also removes
- // IncognitoDocumentActivity instances from Android's Recents menu and auto-closes
- // the tab. Instead, take a hit and keep the Activities alive -- Android will
- // eventually destroy the Activities, anyway (crbug.com/450292).
- if (!isIncognito()) finish();
- }
-
- private boolean hasSecurityWarningOrError(Tab tab) {
- int securityLevel = tab.getSecurityLevel();
- return securityLevel == ConnectionSecurityLevel.SECURITY_ERROR
- || securityLevel == ConnectionSecurityLevel.SECURITY_WARNING
- || securityLevel == ConnectionSecurityLevel.SECURITY_POLICY_WARNING;
- }
- });
+ mDocumentTab.addObserver(new DocumentTabObserver());
removeWindowBackground();

Powered by Google App Engine
This is Rietveld 408576698