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

Unified Diff: android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java

Issue 450003002: Pass display names for uploaded content URI files (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: nits Created 6 years, 4 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
Index: android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
diff --git a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
index 85466cecd6db88d9d7b636ba107591430121121e..2caf6a98d8f43e23385d32e3a905c1ec4f7cf174 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwWebContentsDelegateAdapter.java
@@ -4,14 +4,20 @@
package org.chromium.android_webview;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.net.Uri;
+import android.os.AsyncTask;
import android.os.Handler;
import android.os.Message;
+import android.provider.MediaStore;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.ConsoleMessage;
import android.webkit.ValueCallback;
+import org.chromium.base.ContentUriUtils;
import org.chromium.base.ThreadUtils;
import org.chromium.content.browser.ContentVideoView;
import org.chromium.content.browser.ContentViewCore;
@@ -26,11 +32,13 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
final AwContentsClient mContentsClient;
View mContainerView;
+ final Context mContext;
public AwWebContentsDelegateAdapter(AwContentsClient contentsClient,
- View containerView) {
+ View containerView, Context context) {
mContentsClient = contentsClient;
setContainerView(containerView);
+ mContext = context;
}
public void setContainerView(View containerView) {
@@ -161,10 +169,10 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
}
@Override
- public void runFileChooser(final int processId, final int renderId, final int mode_flags,
+ public void runFileChooser(final int processId, final int renderId, final int modeFlags,
String acceptTypes, String title, String defaultFilename, boolean capture) {
AwContentsClient.FileChooserParams params = new AwContentsClient.FileChooserParams();
- params.mode = mode_flags;
+ params.mode = modeFlags;
params.acceptTypes = acceptTypes;
params.title = title;
params.defaultFilename = defaultFilename;
@@ -178,7 +186,14 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
throw new IllegalStateException("Duplicate showFileChooser result");
}
mCompleted = true;
- nativeFilesSelectedInChooser(processId, renderId, mode_flags, results);
+ if (results == null) {
+ nativeFilesSelectedInChooser(
+ processId, renderId, modeFlags, null, null);
+ return;
+ }
+ GetDisplayNameTask task = new GetDisplayNameTask(
+ mContext.getContentResolver(), processId, renderId, modeFlags, results);
+ task.execute();
}
}, params);
}
@@ -200,4 +215,46 @@ class AwWebContentsDelegateAdapter extends AwWebContentsDelegate {
if (videoView != null) videoView.exitFullscreen(false);
}
}
+
+ private static class GetDisplayNameTask extends AsyncTask<Void, Void, String[]> {
+ final int mProcessId;
+ final int mRenderId;
+ final int mModeFlags;
+ final String[] mFilePaths;
+ final ContentResolver mContentResolver;
+
+ public GetDisplayNameTask(ContentResolver contentResolver, int processId, int renderId,
+ int modeFlags, String[] filePaths) {
+ mProcessId = processId;
+ mRenderId = renderId;
+ mModeFlags = modeFlags;
+ mFilePaths = filePaths;
+ mContentResolver = contentResolver;
+ }
+
+ @Override
+ protected String[] doInBackground(Void...voids) {
+ String[] displayNames = new String[mFilePaths.length];
+ for (int i = 0; i < mFilePaths.length; i++) {
+ displayNames[i] = resolveFileName(mFilePaths[i]);
+ }
+ return displayNames;
+ }
+
+ @Override
+ protected void onPostExecute(String[] result) {
+ nativeFilesSelectedInChooser(mProcessId, mRenderId, mModeFlags, mFilePaths, result);
+ }
+
+ /**
+ * @return the display name of a path if it is a content URI and is present in the database
+ * or an empty string otherwise.
+ */
+ private String resolveFileName(String filePath) {
+ if (mContentResolver == null || filePath == null) return "";
+ Uri uri = Uri.parse(filePath);
+ return ContentUriUtils.getDisplayName(
+ uri, mContentResolver, MediaStore.MediaColumns.DISPLAY_NAME);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698