| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.content.Context; | 7 import android.content.Context; |
| 8 import android.content.SharedPreferences; | 8 import android.content.SharedPreferences; |
| 9 import android.os.AsyncTask; | 9 import android.os.AsyncTask; |
| 10 import android.os.Looper; | 10 import android.os.Looper; |
| 11 import android.os.MessageQueue; | 11 import android.os.MessageQueue; |
| 12 import android.os.SystemClock; | 12 import android.os.SystemClock; |
| 13 import android.support.annotation.UiThread; | 13 import android.support.annotation.UiThread; |
| 14 import android.support.annotation.WorkerThread; | 14 import android.support.annotation.WorkerThread; |
| 15 import android.view.inputmethod.InputMethodInfo; | 15 import android.view.inputmethod.InputMethodInfo; |
| 16 import android.view.inputmethod.InputMethodManager; | 16 import android.view.inputmethod.InputMethodManager; |
| 17 import android.view.inputmethod.InputMethodSubtype; | 17 import android.view.inputmethod.InputMethodSubtype; |
| 18 | 18 |
| 19 import org.chromium.base.CommandLine; | |
| 20 import org.chromium.base.ContextUtils; | 19 import org.chromium.base.ContextUtils; |
| 21 import org.chromium.base.FieldTrialList; | 20 import org.chromium.base.FieldTrialList; |
| 22 import org.chromium.base.Log; | 21 import org.chromium.base.Log; |
| 23 import org.chromium.base.PowerMonitor; | 22 import org.chromium.base.PowerMonitor; |
| 24 import org.chromium.base.SysUtils; | 23 import org.chromium.base.SysUtils; |
| 25 import org.chromium.base.ThreadUtils; | 24 import org.chromium.base.ThreadUtils; |
| 26 import org.chromium.base.TraceEvent; | 25 import org.chromium.base.TraceEvent; |
| 27 import org.chromium.base.VisibleForTesting; | 26 import org.chromium.base.VisibleForTesting; |
| 28 import org.chromium.base.metrics.RecordHistogram; | 27 import org.chromium.base.metrics.RecordHistogram; |
| 29 import org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProvider; | 28 import org.chromium.chrome.browser.bookmarkswidget.BookmarkWidgetProvider; |
| 30 import org.chromium.chrome.browser.crash.LogcatExtractionRunnable; | 29 import org.chromium.chrome.browser.crash.LogcatExtractionRunnable; |
| 31 import org.chromium.chrome.browser.crash.MinidumpUploadService; | 30 import org.chromium.chrome.browser.crash.MinidumpUploadService; |
| 32 import org.chromium.chrome.browser.init.ProcessInitializationHandler; | 31 import org.chromium.chrome.browser.init.ProcessInitializationHandler; |
| 33 import org.chromium.chrome.browser.locale.LocaleManager; | 32 import org.chromium.chrome.browser.locale.LocaleManager; |
| 34 import org.chromium.chrome.browser.media.MediaCaptureNotificationService; | 33 import org.chromium.chrome.browser.media.MediaCaptureNotificationService; |
| 35 import org.chromium.chrome.browser.metrics.LaunchMetrics; | 34 import org.chromium.chrome.browser.metrics.LaunchMetrics; |
| 36 import org.chromium.chrome.browser.metrics.UmaUtils; | 35 import org.chromium.chrome.browser.metrics.UmaUtils; |
| 37 import org.chromium.chrome.browser.ntp.NewTabPage; | 36 import org.chromium.chrome.browser.ntp.NewTabPage; |
| 38 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; | 37 import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; |
| 39 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; | 38 import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksShim; |
| 40 import org.chromium.chrome.browser.partnercustomizations.HomepageManager; | 39 import org.chromium.chrome.browser.partnercustomizations.HomepageManager; |
| 41 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomiza
tions; | 40 import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomiza
tions; |
| 42 import org.chromium.chrome.browser.physicalweb.PhysicalWeb; | 41 import org.chromium.chrome.browser.physicalweb.PhysicalWeb; |
| 43 import org.chromium.chrome.browser.precache.PrecacheLauncher; | 42 import org.chromium.chrome.browser.precache.PrecacheLauncher; |
| 44 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 43 import org.chromium.chrome.browser.preferences.ChromePreferenceManager; |
| 45 import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager
; | |
| 46 import org.chromium.chrome.browser.share.ShareHelper; | 44 import org.chromium.chrome.browser.share.ShareHelper; |
| 47 import org.chromium.chrome.browser.webapps.ChromeWebApkHost; | 45 import org.chromium.chrome.browser.webapps.ChromeWebApkHost; |
| 48 import org.chromium.chrome.browser.webapps.WebApkVersionManager; | 46 import org.chromium.chrome.browser.webapps.WebApkVersionManager; |
| 49 import org.chromium.chrome.browser.webapps.WebappRegistry; | 47 import org.chromium.chrome.browser.webapps.WebappRegistry; |
| 50 import org.chromium.components.minidump_uploader.CrashFileManager; | 48 import org.chromium.components.minidump_uploader.CrashFileManager; |
| 51 import org.chromium.content.browser.ChildProcessLauncher; | 49 import org.chromium.content.browser.ChildProcessLauncher; |
| 52 | 50 |
| 53 import java.io.File; | 51 import java.io.File; |
| 54 import java.util.ArrayList; | 52 import java.util.ArrayList; |
| 55 import java.util.Arrays; | 53 import java.util.Arrays; |
| (...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 309 SystemClock.uptimeMillis() - mAsyncTaskStartTime, TimeUn
it.MILLISECONDS); | 307 SystemClock.uptimeMillis() - mAsyncTaskStartTime, TimeUn
it.MILLISECONDS); |
| 310 } | 308 } |
| 311 | 309 |
| 312 /** | 310 /** |
| 313 * Initializes the crash reporting system. More specifically, enable
s the crash | 311 * Initializes the crash reporting system. More specifically, enable
s the crash |
| 314 * reporting system if it is user-permitted, and initiates uploading
of any pending | 312 * reporting system if it is user-permitted, and initiates uploading
of any pending |
| 315 * crash reports. Also updates some UMA metrics and performs cleanup
in the local crash | 313 * crash reports. Also updates some UMA metrics and performs cleanup
in the local crash |
| 316 * minidump storage directory. | 314 * minidump storage directory. |
| 317 */ | 315 */ |
| 318 private void initCrashReporting() { | 316 private void initCrashReporting() { |
| 319 // Perform cleanup prior to checking whether crash reporting is
enabled, so that | |
| 320 // users who disable crash reporting are still able to eventuall
y recover disk space | |
| 321 // dedicated to storing pending crash reports. | |
| 322 CrashFileManager crashFileManager = new CrashFileManager(mAppCon
text.getCacheDir()); | |
| 323 crashFileManager.cleanOutAllNonFreshMinidumpFiles(); | |
| 324 | |
| 325 // Likewise, there might be pending metrics from previous runs w
hen crash reporting | |
| 326 // was enabled. | |
| 327 MinidumpUploadService.storeBreakpadUploadStatsInUma( | |
| 328 ChromePreferenceManager.getInstance()); | |
| 329 | |
| 330 // Now check whether crash reporting is enabled. If it is, broad
cast the appropriate | |
| 331 // permission. | |
| 332 boolean crashReportingDisabled = CommandLine.getInstance().hasSw
itch( | |
| 333 ChromeSwitches.DISABLE_CRASH_DUMP_UPLOAD); | |
| 334 if (crashReportingDisabled) return; | |
| 335 PrivacyPreferencesManager.getInstance().enablePotentialCrashUplo
ading(); | |
| 336 | |
| 337 RecordHistogram.recordLongTimesHistogram("UMA.Debug.EnableCrashU
pload.Uptime3", | 317 RecordHistogram.recordLongTimesHistogram("UMA.Debug.EnableCrashU
pload.Uptime3", |
| 338 mAsyncTaskStartTime - UmaUtils.getForegroundStartTime(), | 318 mAsyncTaskStartTime - UmaUtils.getForegroundStartTime(), |
| 339 TimeUnit.MILLISECONDS); | 319 TimeUnit.MILLISECONDS); |
| 340 | 320 |
| 321 // Crash reports can be uploaded as part of a background service
even while the main |
| 322 // Chrome activity is not running, and hence regular metrics rep
orting is not |
| 323 // possible. Instead, metrics are temporarily written to prefs;
export those prefs |
| 324 // to UMA metrics here. |
| 325 MinidumpUploadService.storeBreakpadUploadStatsInUma( |
| 326 ChromePreferenceManager.getInstance()); |
| 327 |
| 328 // Likewise, this is a good time to process and clean up any pen
ding or stale crash |
| 329 // reports left behind by previous runs. |
| 330 CrashFileManager crashFileManager = new CrashFileManager(mAppCon
text.getCacheDir()); |
| 331 crashFileManager.cleanOutAllNonFreshMinidumpFiles(); |
| 332 |
| 341 // Finally, uploading any pending crash reports. | 333 // Finally, uploading any pending crash reports. |
| 342 File[] minidumps = crashFileManager.getAllMinidumpFiles( | 334 File[] minidumps = crashFileManager.getAllMinidumpFiles( |
| 343 MinidumpUploadService.MAX_TRIES_ALLOWED); | 335 MinidumpUploadService.MAX_TRIES_ALLOWED); |
| 344 int numMinidumpsSansLogcat = 0; | 336 int numMinidumpsSansLogcat = 0; |
| 345 for (File minidump : minidumps) { | 337 for (File minidump : minidumps) { |
| 346 if (CrashFileManager.isMinidumpMIMEFirstTry(minidump.getName
())) { | 338 if (CrashFileManager.isMinidumpMIMEFirstTry(minidump.getName
())) { |
| 347 ++numMinidumpsSansLogcat; | 339 ++numMinidumpsSansLogcat; |
| 348 } | 340 } |
| 349 } | 341 } |
| 350 // TODO(isherman): These two histograms are intended to be tempo
rary, and can | 342 // TODO(isherman): These two histograms are intended to be tempo
rary, and can |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 462 } | 454 } |
| 463 | 455 |
| 464 /** | 456 /** |
| 465 * @return Whether deferred startup has been completed. | 457 * @return Whether deferred startup has been completed. |
| 466 */ | 458 */ |
| 467 @VisibleForTesting | 459 @VisibleForTesting |
| 468 public boolean isDeferredStartupCompleteForApp() { | 460 public boolean isDeferredStartupCompleteForApp() { |
| 469 return mDeferredStartupCompletedForApp; | 461 return mDeferredStartupCompletedForApp; |
| 470 } | 462 } |
| 471 } | 463 } |
| OLD | NEW |