Index: chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java |
index b4c69bbd2bc9972c84822e8fa4c68a592b3e6f48..e8454ab3a2209d91ed73c4e2443b02603981dbcc 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeApplication.java |
@@ -11,30 +11,21 @@ import android.os.Bundle; |
import android.os.Handler; |
import android.os.Looper; |
import android.os.SystemClock; |
-import android.provider.Settings; |
import android.util.Log; |
import org.chromium.base.ActivityState; |
import org.chromium.base.ApiCompatibilityUtils; |
-import org.chromium.base.ApplicationState; |
import org.chromium.base.ApplicationStatus; |
-import org.chromium.base.ApplicationStatus.ApplicationStateListener; |
import org.chromium.base.CommandLineInitUtil; |
import org.chromium.base.ContextUtils; |
import org.chromium.base.ResourceExtractor; |
import org.chromium.base.ThreadUtils; |
import org.chromium.base.TraceEvent; |
-import org.chromium.base.VisibleForTesting; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.annotations.SuppressFBWarnings; |
import org.chromium.base.library_loader.ProcessInitException; |
-import org.chromium.base.metrics.RecordHistogram; |
import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.accessibility.FontSizePrefs; |
-import org.chromium.chrome.browser.banners.AppBannerManager; |
import org.chromium.chrome.browser.banners.AppDetailsDelegate; |
-import org.chromium.chrome.browser.browsing_data.BrowsingDataType; |
-import org.chromium.chrome.browser.browsing_data.TimePeriod; |
import org.chromium.chrome.browser.customtabs.CustomTabsConnection; |
import org.chromium.chrome.browser.datausage.ExternalDataUseObserver; |
import org.chromium.chrome.browser.document.DocumentActivity; |
@@ -51,15 +42,12 @@ import org.chromium.chrome.browser.metrics.UmaUtils; |
import org.chromium.chrome.browser.metrics.VariationsSession; |
import org.chromium.chrome.browser.multiwindow.MultiWindowUtils; |
import org.chromium.chrome.browser.net.qualityprovider.ExternalEstimateProviderAndroid; |
-import org.chromium.chrome.browser.net.spdyproxy.DataReductionProxySettings; |
-import org.chromium.chrome.browser.notifications.NotificationPlatformBridge; |
import org.chromium.chrome.browser.omaha.RequestGenerator; |
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations; |
import org.chromium.chrome.browser.physicalweb.PhysicalWebBleClient; |
import org.chromium.chrome.browser.physicalweb.PhysicalWebEnvironment; |
import org.chromium.chrome.browser.policy.PolicyAuditor; |
import org.chromium.chrome.browser.preferences.LocationSettings; |
-import org.chromium.chrome.browser.preferences.PrefServiceBridge; |
import org.chromium.chrome.browser.preferences.Preferences; |
import org.chromium.chrome.browser.preferences.PreferencesLauncher; |
import org.chromium.chrome.browser.preferences.autofill.AutofillPreferences; |
@@ -69,22 +57,18 @@ import org.chromium.chrome.browser.preferences.website.SingleWebsitePreferences; |
import org.chromium.chrome.browser.printing.PrintingControllerFactory; |
import org.chromium.chrome.browser.rlz.RevenueStats; |
import org.chromium.chrome.browser.services.AndroidEduOwnerCheckCallback; |
-import org.chromium.chrome.browser.share.ShareHelper; |
import org.chromium.chrome.browser.signin.GoogleActivityController; |
import org.chromium.chrome.browser.sync.GmsCoreSyncListener; |
import org.chromium.chrome.browser.tab.AuthenticatorNavigationInterceptor; |
import org.chromium.chrome.browser.tab.Tab; |
-import org.chromium.chrome.browser.tabmodel.TabModelSelector; |
import org.chromium.chrome.browser.tabmodel.document.ActivityDelegateImpl; |
import org.chromium.chrome.browser.tabmodel.document.DocumentTabModelSelector; |
import org.chromium.chrome.browser.tabmodel.document.StorageDelegate; |
import org.chromium.chrome.browser.tabmodel.document.TabDelegate; |
-import org.chromium.chrome.browser.util.FeatureUtilities; |
import org.chromium.components.sync.signin.AccountManagerDelegate; |
import org.chromium.components.sync.signin.SystemAccountManagerDelegate; |
import org.chromium.content.app.ContentApplication; |
import org.chromium.content.browser.ChildProcessCreationParams; |
-import org.chromium.content.browser.ChildProcessLauncher; |
import org.chromium.policy.AppRestrictionsProvider; |
import org.chromium.policy.CombinedPolicyProvider; |
import org.chromium.policy.CombinedPolicyProvider.PolicyChangeListener; |
@@ -92,9 +76,6 @@ import org.chromium.printing.PrintingController; |
import org.chromium.ui.base.ActivityWindowAndroid; |
import org.chromium.ui.base.ResourceBundle; |
-import java.lang.ref.WeakReference; |
-import java.util.Locale; |
- |
/** |
* Basic application functionality that should be shared among all browser applications that use |
* chrome layer. |
@@ -106,21 +87,9 @@ public class ChromeApplication extends ContentApplication { |
private static final String PREF_BOOT_TIMESTAMP = |
"com.google.android.apps.chrome.ChromeMobileApplication.BOOT_TIMESTAMP"; |
private static final long BOOT_TIMESTAMP_MARGIN_MS = 1000; |
- private static final String PREF_LOCALE = "locale"; |
- private static boolean sIsFinishedCachingNativeFlags; |
private static DocumentTabModelSelector sDocumentTabModelSelector; |
- private final PowerBroadcastReceiver mPowerBroadcastReceiver = new PowerBroadcastReceiver(); |
- |
- // Used to trigger variation changes (such as seed fetches) upon application foregrounding. |
- private VariationsSession mVariationsSession; |
- |
- private boolean mIsStarted; |
- private boolean mInitializedSharedClasses; |
- private boolean mIsProcessInitialized; |
- |
- private ChromeLifetimeController mChromeLifetimeController; |
private PrintingController mPrintingController; |
/** |
@@ -150,101 +119,6 @@ public class ChromeApplication extends ContentApplication { |
} |
/** |
- * Each top-level activity (ChromeTabbedActivity, FullscreenActivity) should call this during |
- * its onStart phase. When called for the first time, this marks the beginning of a foreground |
- * session and calls onForegroundSessionStart(). Subsequent calls are noops until |
- * onForegroundSessionEnd() is called, to handle changing top-level Chrome activities in one |
- * foreground session. |
- */ |
- public void onStartWithNative() { |
- if (mIsStarted) return; |
- mIsStarted = true; |
- |
- assert mIsProcessInitialized; |
- |
- onForegroundSessionStart(); |
- cacheNativeFlags(); |
- } |
- |
- /** |
- * Called when a top-level Chrome activity (ChromeTabbedActivity, FullscreenActivity) is |
- * started in foreground. It will not be called again when other Chrome activities take over |
- * (see onStart()), that is, when correct activity calls startActivity() for another Chrome |
- * activity. |
- */ |
- private void onForegroundSessionStart() { |
- UmaUtils.recordForegroundStartTime(); |
- ChildProcessLauncher.onBroughtToForeground(); |
- updatePasswordEchoState(); |
- FontSizePrefs.getInstance(this).onSystemFontScaleChanged(); |
- updateAcceptLanguages(); |
- mVariationsSession.start(getApplicationContext()); |
- mPowerBroadcastReceiver.onForegroundSessionStart(); |
- |
- // Track the ratio of Chrome startups that are caused by notification clicks. |
- // TODO(johnme): Add other reasons (and switch to recordEnumeratedHistogram). |
- RecordHistogram.recordBooleanHistogram( |
- "Startup.BringToForegroundReason", |
- NotificationPlatformBridge.wasNotificationRecentlyClicked()); |
- } |
- |
- /** |
- * Called when last of Chrome activities is stopped, ending the foreground session. This will |
- * not be called when a Chrome activity is stopped because another Chrome activity takes over. |
- * This is ensured by ActivityStatus, which switches to track new activity when its started and |
- * will not report the old one being stopped (see createStateListener() below). |
- */ |
- private void onForegroundSessionEnd() { |
- if (!mIsStarted) return; |
- flushPersistentData(); |
- mIsStarted = false; |
- mPowerBroadcastReceiver.onForegroundSessionEnd(); |
- |
- ChildProcessLauncher.onSentToBackground(); |
- IntentHandler.clearPendingReferrer(); |
- IntentHandler.clearPendingIncognitoUrl(); |
- |
- int totalTabCount = 0; |
- for (WeakReference<Activity> reference : ApplicationStatus.getRunningActivities()) { |
- Activity activity = reference.get(); |
- if (activity instanceof ChromeActivity) { |
- TabModelSelector tabModelSelector = |
- ((ChromeActivity) activity).getTabModelSelector(); |
- if (tabModelSelector != null) { |
- totalTabCount += tabModelSelector.getTotalTabCount(); |
- } |
- } |
- } |
- RecordHistogram.recordCountHistogram( |
- "Tab.TotalTabCount.BeforeLeavingApp", totalTabCount); |
- } |
- |
- /** |
- * Called after onForegroundSessionEnd() indicating that the activity whose onStop() ended the |
- * last foreground session was destroyed. |
- */ |
- private void onForegroundActivityDestroyed() { |
- if (ApplicationStatus.isEveryActivityDestroyed()) { |
- // These will all be re-initialized when a new Activity starts / upon next use. |
- PartnerBrowserCustomizations.destroy(); |
- ShareHelper.clearSharedImages(this); |
- } |
- } |
- |
- private ApplicationStateListener createApplicationStateListener() { |
- return new ApplicationStateListener() { |
- @Override |
- public void onApplicationStateChange(int newState) { |
- if (newState == ApplicationState.HAS_STOPPED_ACTIVITIES) { |
- onForegroundSessionEnd(); |
- } else if (newState == ApplicationState.HAS_DESTROYED_ACTIVITIES) { |
- onForegroundActivityDestroyed(); |
- } |
- } |
- }; |
- } |
- |
- /** |
* Returns a new instance of VariationsSession. |
*/ |
public VariationsSession createVariationsSession() { |
@@ -261,16 +135,6 @@ public class ChromeApplication extends ContentApplication { |
} |
/** |
- * Starts the application activity tracker. |
- */ |
- protected void startApplicationActivityTracker() {} |
- |
- /** |
- * Stops the application activity tracker. |
- */ |
- protected void stopApplicationActivityTracker() {} |
- |
- /** |
* Initiate AndroidEdu device check. |
* @param callback Callback that should receive the results of the AndroidEdu device check. |
*/ |
@@ -317,34 +181,6 @@ public class ChromeApplication extends ContentApplication { |
ResourceExtractor.setResourcesToExtract(ResourceBundle.getActiveLocaleResources()); |
} |
- /** |
- * The host activity should call this after the native library has loaded to ensure classes |
- * shared by Activities in the same process are properly initialized. |
- */ |
- public void initializeSharedClasses() { |
- } |
- |
- /** |
- * For extending classes to carry out tasks that initialize the browser process. |
- * Should be called almost immediately after the native library has loaded to initialize things |
- * that really, really have to be set up early. Avoid putting any long tasks here. |
- */ |
- public void initializeProcess() { |
- if (mIsProcessInitialized) return; |
- mIsProcessInitialized = true; |
- assert !mIsStarted; |
- |
- DataReductionProxySettings.reconcileDataReductionProxyEnabledState(getApplicationContext()); |
- |
- mVariationsSession = createVariationsSession(); |
- removeSessionCookies(); |
- ApplicationStatus.registerApplicationStateListener(createApplicationStateListener()); |
- AppBannerManager.setAppDetailsDelegate(createAppDetailsDelegate()); |
- mChromeLifetimeController = new ChromeLifetimeController(); |
- |
- PrefServiceBridge.getInstance().migratePreferences(this); |
- } |
- |
@Override |
public void initCommandLine() { |
CommandLineInitUtil.initCommandLine(this, COMMAND_LINE_FILE); |
@@ -373,14 +209,6 @@ public class ChromeApplication extends ContentApplication { |
} |
/** |
- * @return The Application's PowerBroadcastReceiver. |
- */ |
- @VisibleForTesting |
- public PowerBroadcastReceiver getPowerBroadcastReceiver() { |
- return mPowerBroadcastReceiver; |
- } |
- |
- /** |
* Opens the UI to clear browsing data. |
* @param tab The tab that triggered the request. |
*/ |
@@ -450,7 +278,7 @@ public class ChromeApplication extends ContentApplication { |
* by one hour. However, this should only happen at most once when the clock changes since the |
* updated timestamp is immediately saved. |
*/ |
- protected void removeSessionCookies() { |
+ public static void removeSessionCookies() { |
long lastKnownBootTimestamp = |
ContextUtils.getAppSharedPreferences().getLong(PREF_BOOT_TIMESTAMP, 0); |
long bootTimestamp = System.currentTimeMillis() - SystemClock.uptimeMillis(); |
@@ -621,7 +449,7 @@ public class ChromeApplication extends ContentApplication { |
* @return An instance of AppDetailsDelegate that can be queried about app information for the |
* App Banner feature. Will be null if one is unavailable. |
*/ |
- protected AppDetailsDelegate createAppDetailsDelegate() { |
+ public AppDetailsDelegate createAppDetailsDelegate() { |
return null; |
} |
@@ -657,62 +485,4 @@ public class ChromeApplication extends ContentApplication { |
public AccountManagerDelegate createAccountManagerDelegate() { |
return new SystemAccountManagerDelegate(this); |
} |
- |
- /** |
- * Update the accept languages after changing Android locale setting. Doing so kills the |
- * Activities but it doesn't kill the ChromeApplication, so this should be called in |
- * {@link #onStart} instead of {@link #initialize}. |
- */ |
- private void updateAcceptLanguages() { |
- PrefServiceBridge instance = PrefServiceBridge.getInstance(); |
- String localeString = Locale.getDefault().toString(); // ex) en_US, de_DE, zh_CN_#Hans |
- if (hasLocaleChanged(localeString)) { |
- instance.resetAcceptLanguages(localeString); |
- // Clear cache so that accept-languages change can be applied immediately. |
- // TODO(changwan): The underlying BrowsingDataRemover::Remove() is an asynchronous call. |
- // So cache-clearing may not be effective if URL rendering can happen before |
- // OnBrowsingDataRemoverDone() is called, in which case we may have to reload as well. |
- // Check if it can happen. |
- instance.clearBrowsingData( |
- null, new int[]{ BrowsingDataType.CACHE }, TimePeriod.ALL_TIME); |
- } |
- } |
- |
- private boolean hasLocaleChanged(String newLocale) { |
- String previousLocale = ContextUtils.getAppSharedPreferences().getString( |
- PREF_LOCALE, ""); |
- |
- if (!previousLocale.equals(newLocale)) { |
- SharedPreferences prefs = ContextUtils.getAppSharedPreferences(); |
- SharedPreferences.Editor editor = prefs.edit(); |
- editor.putString(PREF_LOCALE, newLocale); |
- editor.apply(); |
- return true; |
- } |
- return false; |
- } |
- |
- /** |
- * Honor the Android system setting about showing the last character of a password for a short |
- * period of time. |
- */ |
- private void updatePasswordEchoState() { |
- boolean systemEnabled = Settings.System.getInt( |
- getApplicationContext().getContentResolver(), |
- Settings.System.TEXT_SHOW_PASSWORD, 1) == 1; |
- if (PrefServiceBridge.getInstance().getPasswordEchoEnabled() == systemEnabled) return; |
- |
- PrefServiceBridge.getInstance().setPasswordEchoEnabled(systemEnabled); |
- } |
- |
- /** |
- * Caches flags that are needed by Activities that launch before the native library is loaded |
- * and stores them in SharedPreferences. Because this function is called during launch after the |
- * library has loaded, they won't affect the next launch until Chrome is restarted. |
- */ |
- private void cacheNativeFlags() { |
- if (sIsFinishedCachingNativeFlags) return; |
- FeatureUtilities.cacheNativeFlags(this); |
- sIsFinishedCachingNativeFlags = true; |
- } |
} |