Chromium Code Reviews| Index: chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java |
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java |
| index d38dc9b3f037a8e1b40ff6c7ab74d08d726a0701..a4aec34a85852a353d4406f844a7eacf7024b291 100644 |
| --- a/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java |
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/permissions/PermissionDialogController.java |
| @@ -89,6 +89,7 @@ public class PermissionDialogController implements AndroidPermissionRequester.Re |
| */ |
| private void queueDialog(PermissionDialogDelegate delegate) { |
| mRequestQueue.add(delegate); |
| + delegate.setDialogController(this); |
| scheduleDisplay(); |
| } |
| @@ -101,6 +102,11 @@ public class PermissionDialogController implements AndroidPermissionRequester.Re |
| return mDialog; |
| } |
| + @VisibleForTesting |
| + public int getQueueLengthForTesting() { |
| + return mRequestQueue.size(); |
| + } |
| + |
| @Override |
| public void onAndroidPermissionAccepted() { |
| mDialogDelegate.onAccept(mSwitchView.isChecked()); |
| @@ -196,6 +202,7 @@ public class PermissionDialogController implements AndroidPermissionRequester.Re |
| // For some reason this is ocassionally null. See crbug.com/708562. |
| if (mDialogDelegate == null) { |
| scheduleDisplay(); |
| + return; |
| } |
| mDialog = null; |
| @@ -253,6 +260,18 @@ public class PermissionDialogController implements AndroidPermissionRequester.Re |
| return fullString; |
| } |
| + public void destroyFromNative(PermissionDialogDelegate delegate) { |
|
dominickn
2017/05/24 03:33:38
Nit: I would call this dismissFromNative. "Destroy
Timothy Loh
2017/05/24 04:59:33
Done.
|
| + if (mDialogDelegate == delegate) { |
|
dominickn
2017/05/24 03:33:38
Maybe compare the native pointer to be safe.
Timothy Loh
2017/05/24 04:59:33
Not sure what you want, do you mean that the C++ P
|
| + mDialogDelegate = null; |
| + AlertDialog dialog = mDialog; |
|
dominickn
2017/05/24 03:33:38
Nit: is it problematic to do:
mDialog.dismiss();
Timothy Loh
2017/05/24 04:59:33
Probably not but I think we end up in a weird stat
|
| + mDialog = null; |
| + dialog.dismiss(); |
| + } else { |
| + assert mRequestQueue.contains(delegate); |
|
dominickn
2017/05/24 03:33:38
I don't think remove() fails if delegate isn't in
Timothy Loh
2017/05/24 04:59:33
I added it as a sanity check because remove() does
|
| + mRequestQueue.remove(delegate); |
| + } |
| + } |
| + |
| private void destroyDelegate() { |
| mDialogDelegate.destroy(); |
| mDialogDelegate = null; |