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

Unified Diff: ui/shell_dialogs/select_file_dialog_android.cc

Issue 14758008: Update the HTML Media Capture implementation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Minor adjustments Created 7 years, 6 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 | « content/renderer/render_view_impl.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/shell_dialogs/select_file_dialog_android.cc
diff --git a/ui/shell_dialogs/select_file_dialog_android.cc b/ui/shell_dialogs/select_file_dialog_android.cc
index b4dc7e8dc6945c931bc86367635b7e605349111e..e4d284f52a1a9da03160c3ba7b0d37662ab08dfb 100644
--- a/ui/shell_dialogs/select_file_dialog_android.cc
+++ b/ui/shell_dialogs/select_file_dialog_android.cc
@@ -63,23 +63,50 @@ void SelectFileDialogImpl::SelectFileImpl(
JNIEnv* env = base::android::AttachCurrentThread();
ScopedJavaLocalRef<jstring> capture_value;
- std::vector<base::string16> accept_types;
- if (params) {
- accept_types = *(reinterpret_cast<std::vector<base::string16>*>(params));
- // The last string in params is expected to be the string
- // with capture value.
- capture_value = base::android::ConvertUTF16ToJavaString(env,
- StringToLowerASCII(accept_types.back()));
+ // The first element in the pair is a list of accepted types, the second
+ // indicates whether the device's capture capabilities should be used.
+ typedef std::pair<std::vector<base::string16>, bool> AcceptTypes;
+ AcceptTypes accept_types;
+
+ if (params) {
+ accept_types = *(reinterpret_cast<AcceptTypes*>(params));
+
+ // The latest version of the HTML Media Capture spec says the "capture"
joth 2013/07/03 17:41:42 nit: 'latest' is ambiguous when read in future. In
+ // attribute should be a boolean, and implementations are supposed to infer
+ // which application to launch based on the value of the "accept"
+ // attribute. However, since we have already shipped an implementation of
joth 2013/07/03 17:41:42 likewise, could say versions of chrome up to M29 s
+ // an earlier version of the spec in which the "capture" attribute was an
+ // enum, we need to keep compatibility for a while. We do that by creating
+ // a valid string value accepted by SelectFileDialog.java based on the
+ // contents of the "accept" attribute. This approximation is not 100%
+ // compatible with the previous behavior, as we cannot infer a value for
+ // "capture" if "accept" is set to something like "*/*" or
+ // "audio/*,video/*".
+ // TODO: crbug.com/240252 We need to phase out support for the old version
+ // of the spec at some point.
joth 2013/07/03 17:41:42 I'm still feeling mislead by this comment. An old
+ bool has_capture_attribute = accept_types.second;
+ string16 normalized_capture_value;
+
+ if (has_capture_attribute && accept_types.first.size() == 1) {
+ if (StartsWithASCII(accept_types.front(), "image/*", false)) {
+ normalized_capture_value = "camera";
+ } else if (StartsWithASCII(accept_types.front(), "video/*", false)) {
+ normalized_capture_value = "camcorder";
+ } else if (StartsWithASCII(accept_types.front(), "audio/*", false)) {
+ normalized_capture_value = "microphone";
+ }
+ }
+
+ capture_value = base::android::ConvertUTF16ToJavaString(
+ env, normalized_capture_value);
base::android::CheckException(env);
- accept_types.pop_back();
} else {
capture_value = base::android::ConvertUTF8ToJavaString(env, "filesystem");
}
- // The rest params elements are expected to be accept_types.
ScopedJavaLocalRef<jobjectArray> accept_types_java =
- base::android::ToJavaArrayOfStrings(env, accept_types);
+ base::android::ToJavaArrayOfStrings(env, accept_types.first);
Java_SelectFileDialog_selectFile(env, java_object_.obj(),
accept_types_java.obj(),
« no previous file with comments | « content/renderer/render_view_impl.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698