| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/crash/MinidumpUploadRetry.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/crash/MinidumpUploadRetry.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/crash/MinidumpUploadRetry.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3e8a4a477c4563b51300b822ccd393353a55bab6
|
| --- /dev/null
|
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/crash/MinidumpUploadRetry.java
|
| @@ -0,0 +1,74 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser.crash;
|
| +
|
| +import android.content.Context;
|
| +import android.os.Handler;
|
| +
|
| +import org.chromium.base.annotations.SuppressFBWarnings;
|
| +import org.chromium.chrome.browser.util.NonThreadSafe;
|
| +import org.chromium.net.ConnectionType;
|
| +import org.chromium.net.NetworkChangeNotifier;
|
| +
|
| +/**
|
| + * This class listens to network changes and determine when it would good to
|
| + * retry uploading minidumps.
|
| + */
|
| +class MinidumpUploadRetry implements NetworkChangeNotifier.ConnectionTypeObserver {
|
| + private final Context mContext;
|
| + private static MinidumpUploadRetry sSingleton = null;
|
| +
|
| + private static class Scheduler implements Runnable {
|
| + private static NonThreadSafe sThreadCheck;
|
| + private final Context mContext;
|
| +
|
| + private Scheduler(Context context) {
|
| + this.mContext = context;
|
| + }
|
| +
|
| + @Override
|
| + public void run() {
|
| + if (sThreadCheck == null) {
|
| + sThreadCheck = new NonThreadSafe();
|
| + }
|
| + // Make sure this is called on the same thread all the time.
|
| + assert sThreadCheck.calledOnValidThread();
|
| + if (!NetworkChangeNotifier.isInitialized()) {
|
| + return;
|
| + }
|
| + if (sSingleton == null) {
|
| + sSingleton = new MinidumpUploadRetry(mContext);
|
| + }
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * Schedule a retry. If there is already one schedule, this is NO-OP.
|
| + */
|
| + static void scheduleRetry(Context context) {
|
| + // NetworkChangeNotifier is not thread safe. We will post to UI thread
|
| + // instead since that's where it fires off notification changes.
|
| + new Handler(context.getMainLooper()).post(new Scheduler(context));
|
| + }
|
| +
|
| + private MinidumpUploadRetry(Context context) {
|
| + this.mContext = context;
|
| + NetworkChangeNotifier.addConnectionTypeObserver(this);
|
| + }
|
| +
|
| + @SuppressFBWarnings("ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD")
|
| + @Override
|
| + public void onConnectionTypeChanged(int connectionType) {
|
| + // Look for "favorable" connections. Note that we never
|
| + // know what the user's crash upload preference is until
|
| + // the time when we are actually uploading.
|
| + if (connectionType == ConnectionType.CONNECTION_NONE) {
|
| + return;
|
| + }
|
| + MinidumpUploadService.tryUploadAllCrashDumps(mContext);
|
| + NetworkChangeNotifier.removeConnectionTypeObserver(this);
|
| + sSingleton = null;
|
| + }
|
| +}
|
|
|