Index: chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java |
index f49b85010197454f3967602b4b0e39ad6b629b2c..de6f5ad6d814e01282d0b10de76bf6a47e97ad59 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java |
@@ -6,9 +6,13 @@ package org.chromium.chrome.browser.webshare; |
import android.app.Activity; |
import android.content.ComponentName; |
+import android.content.DialogInterface; |
+import android.content.DialogInterface.OnCancelListener; |
+import android.content.DialogInterface.OnClickListener; |
import android.support.annotation.Nullable; |
import org.chromium.base.metrics.RecordHistogram; |
+import org.chromium.chrome.browser.externalnav.ExternalNavigationDelegateImpl; |
import org.chromium.chrome.browser.share.ShareHelper; |
import org.chromium.content.browser.ContentViewCore; |
import org.chromium.content_public.browser.WebContents; |
@@ -23,6 +27,7 @@ import org.chromium.ui.base.WindowAndroid; |
*/ |
public class ShareServiceImpl implements ShareService { |
private final Activity mActivity; |
+ private final boolean mIsIncognito; |
// These numbers are written to histograms. Keep in sync with WebShareMethod enum in |
// histograms.xml, and don't reuse or renumber entries (except for the _COUNT entry). |
@@ -40,6 +45,7 @@ public class ShareServiceImpl implements ShareService { |
public ShareServiceImpl(@Nullable WebContents webContents) { |
mActivity = activityFromWebContents(webContents); |
+ mIsIncognito = webContents.isIncognito(); |
} |
@Override |
@@ -60,6 +66,28 @@ public class ShareServiceImpl implements ShareService { |
return; |
} |
+ if (mIsIncognito) { |
+ // In incognito mode, confirm with the user before sending intent externally. |
+ showIncognitoWarningDialog(title, text, url, callback); |
+ } else { |
+ startShare(title, text, url, callback); |
+ } |
+ } |
+ |
+ @Nullable |
+ private static Activity activityFromWebContents(@Nullable WebContents webContents) { |
+ if (webContents == null) return null; |
+ |
+ ContentViewCore contentViewCore = ContentViewCore.fromWebContents(webContents); |
+ if (contentViewCore == null) return null; |
+ |
+ WindowAndroid window = contentViewCore.getWindowAndroid(); |
+ if (window == null) return null; |
+ |
+ return window.getActivity().get(); |
+ } |
+ |
+ private void startShare(String title, String text, Url url, final ShareResponse callback) { |
ShareHelper.TargetChosenCallback innerCallback = new ShareHelper.TargetChosenCallback() { |
public void onTargetChosen(ComponentName chosenComponent) { |
RecordHistogram.recordEnumeratedHistogram("WebShare.ShareOutcome", |
@@ -68,25 +96,33 @@ public class ShareServiceImpl implements ShareService { |
} |
public void onCancel() { |
- RecordHistogram.recordEnumeratedHistogram("WebShare.ShareOutcome", |
- WEBSHARE_OUTCOME_CANCELED, WEBSHARE_OUTCOME_COUNT); |
- callback.call("Share canceled"); |
+ cancelShare(callback); |
} |
}; |
ShareHelper.share(false, false, mActivity, title, text, url.url, null, null, innerCallback); |
} |
- @Nullable |
- private static Activity activityFromWebContents(@Nullable WebContents webContents) { |
- if (webContents == null) return null; |
- |
- ContentViewCore contentViewCore = ContentViewCore.fromWebContents(webContents); |
- if (contentViewCore == null) return null; |
- |
- WindowAndroid window = contentViewCore.getWindowAndroid(); |
- if (window == null) return null; |
+ private static void cancelShare(ShareResponse callback) { |
+ RecordHistogram.recordEnumeratedHistogram("WebShare.ShareOutcome", |
+ WEBSHARE_OUTCOME_CANCELED, WEBSHARE_OUTCOME_COUNT); |
+ callback.call("Share canceled"); |
+ } |
- return window.getActivity().get(); |
+ private void showIncognitoWarningDialog(final String title, final String text, final Url url, |
+ final ShareResponse callback) { |
+ ExternalNavigationDelegateImpl.showLeaveIncognitoWarningDialog(mActivity, |
+ new OnClickListener() { |
+ @Override |
+ public void onClick(DialogInterface dialog, int which) { |
+ startShare(title, text, url, callback); |
+ } |
+ }, |
+ new OnCancelListener() { |
+ @Override |
+ public void onCancel(DialogInterface dialog) { |
+ cancelShare(callback); |
+ } |
+ }); |
} |
} |