| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/DeferredStartupHandler.java | 
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/DeferredStartupHandler.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/DeferredStartupHandler.java | 
| index bd54eaa535c10a8bb4bbbac55816a91cd438cbf3..6e157e2d3e897426ff7cd7dd87b1966678060ff6 100644 | 
| --- a/chrome/android/java_staging/src/org/chromium/chrome/browser/DeferredStartupHandler.java | 
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/DeferredStartupHandler.java | 
| @@ -4,8 +4,11 @@ | 
|  | 
| package org.chromium.chrome.browser; | 
|  | 
| +import android.content.Context; | 
| import android.os.AsyncTask; | 
| +import android.text.TextUtils; | 
|  | 
| +import org.chromium.base.FieldTrialList; | 
| import org.chromium.base.PowerMonitor; | 
| import org.chromium.base.ThreadUtils; | 
| import org.chromium.base.TraceEvent; | 
| @@ -20,11 +23,20 @@ import org.chromium.chrome.browser.precache.PrecacheLauncher; | 
| import org.chromium.chrome.browser.preferences.ChromePreferenceManager; | 
| import org.chromium.chrome.browser.preferences.privacy.PrivacyPreferencesManager; | 
| import org.chromium.chrome.browser.share.ShareHelper; | 
| +import org.chromium.components.variations.VariationsAssociatedData; | 
| +import org.chromium.content.browser.ChildProcessLauncher; | 
|  | 
| /** | 
| * Handler for application level tasks to be completed on deferred startup. | 
| */ | 
| public class DeferredStartupHandler { | 
| +    // Constants for trial of moderate binding support. | 
| +    private static final String MODERATE_BINDING_TRIAL_NAME = "MobileModerateBinding"; | 
| +    private static final String MODERATE_BINDING_LOW_REDUCE_RATIO_PARAM = "low_reduce_ratio"; | 
| +    private static final String MODERATE_BINDING_HIGH_REDUCE_RATIO_PARAM = "high_reduce_ratio"; | 
| +    private static final String MODERATE_BINDING_DISABLED_VALUE = "Disabled"; | 
| +    private static final float DEFAULT_MODERATE_BINDING_REDUCE_RATIO = 0.25f; | 
| + | 
| private static DeferredStartupHandler sDeferredStartupHandler; | 
| private boolean mDeferredStartupComplete; | 
|  | 
| @@ -105,9 +117,43 @@ public class DeferredStartupHandler { | 
| // Clear any media notifications that existed when Chrome was last killed. | 
| MediaNotificationService.clearMediaNotifications(application); | 
|  | 
| +        startModerateBindingManagementIfNeeded(application); | 
| + | 
| mDeferredStartupComplete = true; | 
| } | 
|  | 
| +    private static void startModerateBindingManagementIfNeeded(Context context) { | 
| +        String trialName = FieldTrialList.findFullName(MODERATE_BINDING_TRIAL_NAME); | 
| +        if (TextUtils.isEmpty(trialName) | 
| +                || MODERATE_BINDING_DISABLED_VALUE.equalsIgnoreCase(trialName)) { | 
| +            return; | 
| +        } | 
| +        String lowReduceRatioValue = VariationsAssociatedData.getVariationParamValue( | 
| +                MODERATE_BINDING_TRIAL_NAME, MODERATE_BINDING_LOW_REDUCE_RATIO_PARAM); | 
| +        String highReduceRatioValue = VariationsAssociatedData.getVariationParamValue( | 
| +                MODERATE_BINDING_TRIAL_NAME, MODERATE_BINDING_HIGH_REDUCE_RATIO_PARAM); | 
| +        float lowReduceRatio = DEFAULT_MODERATE_BINDING_REDUCE_RATIO; | 
| +        float highReduceRatio = DEFAULT_MODERATE_BINDING_REDUCE_RATIO * 2; | 
| +        if (!TextUtils.isEmpty(lowReduceRatioValue)) { | 
| +            try { | 
| +                lowReduceRatio = Float.parseFloat(lowReduceRatioValue); | 
| +            } catch (NumberFormatException e) { | 
| +                // Ignore exception. | 
| +            } | 
| +        } | 
| +        if (!TextUtils.isEmpty(highReduceRatioValue)) { | 
| +            try { | 
| +                highReduceRatio = Float.parseFloat(highReduceRatioValue); | 
| +            } catch (NumberFormatException e) { | 
| +                // Ignore exception. | 
| +            } | 
| +        } | 
| +        highReduceRatio = Math.max(0, Math.min(1, highReduceRatio)); | 
| +        lowReduceRatio = Math.max(0, Math.min(highReduceRatio, lowReduceRatio)); | 
| +        ChildProcessLauncher.startModerateBindingManagement( | 
| +                context, lowReduceRatio, highReduceRatio); | 
| +    } | 
| + | 
| /** | 
| * @return Whether deferred startup has been completed. | 
| */ | 
|  |