OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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.android_webview; | 5 package org.chromium.android_webview; |
6 | 6 |
7 import android.content.ComponentName; | 7 import android.content.ComponentName; |
8 import android.content.Context; | 8 import android.content.Context; |
9 import android.content.Intent; | 9 import android.content.Intent; |
10 import android.content.ServiceConnection; | 10 import android.content.ServiceConnection; |
(...skipping 30 matching lines...) Expand all Loading... |
41 * Wrapper for the steps needed to initialize the java and native sides of webvi
ew chromium. | 41 * Wrapper for the steps needed to initialize the java and native sides of webvi
ew chromium. |
42 */ | 42 */ |
43 public abstract class AwBrowserProcess { | 43 public abstract class AwBrowserProcess { |
44 public static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview"; | 44 public static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "webview"; |
45 | 45 |
46 private static final String TAG = "AwBrowserProcess"; | 46 private static final String TAG = "AwBrowserProcess"; |
47 private static final String EXCLUSIVE_LOCK_FILE = "webview_data.lock"; | 47 private static final String EXCLUSIVE_LOCK_FILE = "webview_data.lock"; |
48 private static RandomAccessFile sLockFile; | 48 private static RandomAccessFile sLockFile; |
49 private static FileLock sExclusiveFileLock; | 49 private static FileLock sExclusiveFileLock; |
50 | 50 |
51 private static final int MAX_MINIDUMP_UPLOAD_TRIES = 3; | |
52 | |
53 /** | 51 /** |
54 * Loads the native library, and performs basic static construction of objec
ts needed | 52 * Loads the native library, and performs basic static construction of objec
ts needed |
55 * to run webview in this process. Does not create threads; safe to call fro
m zygote. | 53 * to run webview in this process. Does not create threads; safe to call fro
m zygote. |
56 * Note: it is up to the caller to ensure this is only called once. | 54 * Note: it is up to the caller to ensure this is only called once. |
57 */ | 55 */ |
58 public static void loadLibrary() { | 56 public static void loadLibrary() { |
59 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); | 57 PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX); |
60 try { | 58 try { |
61 LibraryLoader libraryLoader = LibraryLoader.get(LibraryProcessType.P
ROCESS_WEBVIEW); | 59 LibraryLoader libraryLoader = LibraryLoader.get(LibraryProcessType.P
ROCESS_WEBVIEW); |
62 libraryLoader.loadNow(); | 60 libraryLoader.loadNow(); |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 */ | 156 */ |
159 public static void handleMinidumps( | 157 public static void handleMinidumps( |
160 final String webViewPackageName, final boolean userApproved) { | 158 final String webViewPackageName, final boolean userApproved) { |
161 new AsyncTask<Void, Void, Void>() { | 159 new AsyncTask<Void, Void, Void>() { |
162 @Override | 160 @Override |
163 protected Void doInBackground(Void... params) { | 161 protected Void doInBackground(Void... params) { |
164 final Context appContext = ContextUtils.getApplicationContext(); | 162 final Context appContext = ContextUtils.getApplicationContext(); |
165 final File crashSpoolDir = new File(appContext.getCacheDir().get
Path(), "WebView"); | 163 final File crashSpoolDir = new File(appContext.getCacheDir().get
Path(), "WebView"); |
166 if (!crashSpoolDir.isDirectory()) return null; | 164 if (!crashSpoolDir.isDirectory()) return null; |
167 final CrashFileManager crashFileManager = new CrashFileManager(c
rashSpoolDir); | 165 final CrashFileManager crashFileManager = new CrashFileManager(c
rashSpoolDir); |
168 final File[] minidumpFiles = | 166 |
169 crashFileManager.getAllMinidumpFiles(MAX_MINIDUMP_UPLOAD
_TRIES); | 167 // The lifecycle of a minidump in the app directory is very simp
le: foo.dmpNNNNN -- |
| 168 // where NNNNN is a Process ID (PID) -- gets created, and is eit
her deleted or |
| 169 // copied over to the shared crash directory for all WebView-usi
ng apps. |
| 170 final File[] minidumpFiles = crashFileManager.getMinidumpsSansLo
gcat(); |
170 if (minidumpFiles.length == 0) return null; | 171 if (minidumpFiles.length == 0) return null; |
171 | 172 |
172 // Delete the minidumps if the user doesn't allow crash data upl
oading. | 173 // Delete the minidumps if the user doesn't allow crash data upl
oading. |
173 if (!userApproved) { | 174 if (!userApproved) { |
174 for (File minidump : minidumpFiles) { | 175 for (File minidump : minidumpFiles) { |
175 if (!minidump.delete()) { | 176 if (!minidump.delete()) { |
176 Log.w(TAG, "Couldn't delete file " + minidump.getAbs
olutePath()); | 177 Log.w(TAG, "Couldn't delete file " + minidump.getAbs
olutePath()); |
177 } | 178 } |
178 } | 179 } |
179 return null; | 180 return null; |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 public void onServiceDisconnected(ComponentName className) {
} | 231 public void onServiceDisconnected(ComponentName className) {
} |
231 }; | 232 }; |
232 if (!appContext.bindService(intent, connection, Context.BIND_AUT
O_CREATE)) { | 233 if (!appContext.bindService(intent, connection, Context.BIND_AUT
O_CREATE)) { |
233 Log.w(TAG, "Could not bind to Minidump-copying Service " + i
ntent); | 234 Log.w(TAG, "Could not bind to Minidump-copying Service " + i
ntent); |
234 } | 235 } |
235 return null; | 236 return null; |
236 } | 237 } |
237 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); | 238 }.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); |
238 } | 239 } |
239 } | 240 } |
OLD | NEW |