Chromium Code Reviews| Index: base/android/java/src/org/chromium/base/CommandLine.java |
| diff --git a/base/android/java/src/org/chromium/base/CommandLine.java b/base/android/java/src/org/chromium/base/CommandLine.java |
| index 9f5407921a9fd492f760d9e9ab2875cc99dcb5a8..409329cfabf8ec6b05adec145155e75f3e973ad8 100644 |
| --- a/base/android/java/src/org/chromium/base/CommandLine.java |
| +++ b/base/android/java/src/org/chromium/base/CommandLine.java |
| @@ -16,6 +16,7 @@ |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.HashMap; |
| +import java.util.List; |
| import java.util.concurrent.atomic.AtomicReference; |
| /** |
| @@ -25,6 +26,15 @@ |
| * ContentShellApplication.COMMAND_LINE_FILE or ChromeShellApplication.COMMAND_LINE_FILE. |
| **/ |
| public abstract class CommandLine { |
| + /** |
| + * Allows classes who cache command line flags to be notified when those arguments are updated |
| + * at runtime. This happens in tests. |
| + */ |
| + public interface ResetListener { |
| + /** Called when the command line arguments are reset. */ |
| + void onCommandLineReset(); |
| + } |
| + |
| // Public abstract interface, implemented in derived classes. |
| // All these methods reflect their native-side counterparts. |
| /** |
| @@ -87,6 +97,7 @@ public boolean isNativeImplementation() { |
| return false; |
| } |
| + private static final List<ResetListener> sResetListeners = new ArrayList<>(); |
| private static final AtomicReference<CommandLine> sCommandLine = |
| new AtomicReference<CommandLine>(); |
| @@ -132,6 +143,20 @@ public static void initFromFile(String file) { |
| @VisibleForTesting |
| public static void reset() { |
| setInstance(null); |
| + ThreadUtils.postOnUiThread(new Runnable() { |
| + @Override |
| + public void run() { |
| + for (ResetListener listener : sResetListeners) listener.onCommandLineReset(); |
| + } |
| + }); |
| + } |
| + |
| + public static void addResetListener(ResetListener listener) { |
|
jdduke (slow)
2015/07/27 15:05:23
Hmm, I'd really like to understand use-cases that
dgn
2015/07/27 15:12:29
It should not be used out of tests, yes. An annota
|
| + sResetListeners.add(listener); |
| + } |
| + |
| + public static void removeResetListener(ResetListener listener) { |
| + sResetListeners.remove(listener); |
| } |
| /** |