Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 package org.chromium.android_webview; | |
| 6 | |
| 7 import android.content.Context; | |
| 8 | |
| 9 import org.chromium.base.ContextUtils; | |
| 10 import org.chromium.base.Log; | |
| 11 import org.chromium.base.ThreadUtils; | |
| 12 import org.chromium.components.variations.firstrun.VariationsSeedFetcher; | |
| 13 | |
| 14 import java.io.FileNotFoundException; | |
| 15 import java.io.FileOutputStream; | |
| 16 import java.io.IOException; | |
| 17 import java.io.ObjectOutputStream; | |
| 18 import java.util.HashMap; | |
| 19 import java.util.Map; | |
| 20 | |
| 21 /** | |
| 22 * Fetches the variations seed before the actual first run of Android WebView. | |
|
paulmiller
2017/07/06 23:09:05
I don't think this is true in WebView's case.
sgurun-gerrit only
2017/07/06 23:38:10
yep not true. Please update class doc to explain i
| |
| 23 */ | |
| 24 public class AwVariationsSeedFetcher { | |
| 25 private static final String TAG = "AwVariatnsSeedFetch"; | |
| 26 | |
| 27 public static final String VARIATIONS_PLATFORM = "android_webview"; | |
|
Alexei Svitkine (slow)
2017/07/06 22:01:10
I think this is fine to put in the VariationsSeedF
| |
| 28 private static final String SEED_DATA_FILENAME = "seed"; | |
| 29 private static final String SEED_DATA_PREF_FILENAME = "seed_pref"; | |
| 30 | |
| 31 // Synchronization lock | |
|
paulmiller
2017/07/06 23:09:05
Superfluous comment (not yours, but still).
| |
| 32 private static final Object sLock = new Object(); | |
| 33 | |
| 34 private static AwVariationsSeedFetcher sInstance; | |
| 35 | |
| 36 AwVariationsSeedFetcher() {} | |
|
sgurun-gerrit only
2017/07/06 23:38:11
is this class supposed to be publicly instantiatab
| |
| 37 | |
| 38 public static AwVariationsSeedFetcher get() { | |
| 39 // TODO(aberent) Check not running on UI thread. Doing so however makes Robolectric testing | |
|
sgurun-gerrit only
2017/07/06 23:38:11
why are we expecting aberent to fix that? is this
| |
| 40 // of dependent classes difficult. | |
| 41 synchronized (sLock) { | |
| 42 if (sInstance == null) { | |
| 43 Log.d(TAG, "using android webview fetcher"); | |
|
sgurun-gerrit only
2017/07/06 23:38:11
does not look necessary, remove.
| |
| 44 sInstance = new AwVariationsSeedFetcher(); | |
| 45 } | |
| 46 return sInstance; | |
| 47 } | |
| 48 } | |
| 49 | |
| 50 public void fetchSeed(String restrictMode) { | |
|
sgurun-gerrit only
2017/07/06 23:38:11
and who is going to call that? write tests maybe?
sgurun-gerrit only
2017/07/06 23:38:11
static
| |
| 51 assert !ThreadUtils.runningOnUiThread(); | |
| 52 // Prevent multiple simultaneous fetches | |
|
sgurun-gerrit only
2017/07/06 23:38:11
document how multiple simultanous fetches are poss
| |
| 53 synchronized (sLock) { | |
| 54 Map<String, String> headerFields = new HashMap<String, String>(); | |
| 55 byte[] rawSeed = VariationsSeedFetcher.get().downloadContent( | |
| 56 VariationsSeedFetcher.VARIATIONS_SERVER_URL + VARIATIONS_PLA TFORM, restrictMode, | |
| 57 headerFields); | |
| 58 storeSeed(rawSeed, headerFields); | |
| 59 } | |
| 60 } | |
| 61 | |
| 62 private void storeSeed(byte[] rawSeed, Map<String, String> headerFields) { | |
|
sgurun-gerrit only
2017/07/06 23:38:11
static
| |
| 63 FileOutputStream fosSeed = null; | |
| 64 ObjectOutputStream fosSeedPref = null; | |
| 65 try { | |
| 66 fosSeed = ContextUtils.getApplicationContext().openFileOutput( | |
| 67 SEED_DATA_FILENAME, Context.MODE_PRIVATE); | |
| 68 fosSeed.write(rawSeed, 0, rawSeed.length); | |
| 69 fosSeedPref = | |
| 70 new ObjectOutputStream(ContextUtils.getApplicationContext(). openFileOutput( | |
| 71 SEED_DATA_PREF_FILENAME, Context.MODE_PRIVATE)); | |
| 72 fosSeedPref.writeObject(headerFields); | |
| 73 } catch (FileNotFoundException e) { | |
| 74 Log.e(TAG, "FileNotFoundException storing seed: ", e); | |
|
paulmiller
2017/07/06 23:09:05
Mention Finch in these error messages, so people h
| |
| 75 } catch (IOException e) { | |
| 76 Log.e(TAG, "IOException storing seed: ", e); | |
| 77 } finally { | |
| 78 if (fosSeed != null) { | |
| 79 try { | |
| 80 fosSeed.close(); | |
| 81 } catch (IOException e) { | |
| 82 Log.e(TAG, "IOException file close: ", e); | |
| 83 } | |
| 84 } | |
| 85 if (fosSeedPref != null) { | |
| 86 try { | |
| 87 fosSeedPref.close(); | |
| 88 } catch (IOException e) { | |
| 89 Log.e(TAG, "IOException file close: ", e); | |
| 90 } | |
| 91 } | |
| 92 } | |
| 93 } | |
| 94 } | |
| OLD | NEW |