Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(521)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webshare/ShareServiceImpl.java

Issue 2354833002: Web Share: Show a warning prompt when share is used from incognito. (Closed)
Patch Set: Remove unused local variable. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
+ }
+ });
}
}
« no previous file with comments | « chrome/android/java/src/org/chromium/chrome/browser/externalnav/ExternalNavigationDelegateImpl.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698