summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-15 20:15:53 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-09-15 20:15:53 +0000
commit479cce780a26eedae06c79662968082c880b00df (patch)
treecd3ec93b3867b5a73cc184fc2f953f008dc31b03
parentdde4a4375b9f745a438b660e7338d6acd733117f (diff)
downloadchromium_src-479cce780a26eedae06c79662968082c880b00df.zip
chromium_src-479cce780a26eedae06c79662968082c880b00df.tar.gz
chromium_src-479cce780a26eedae06c79662968082c880b00df.tar.bz2
[cros] disable GDrive option on certain file pickers
This disables the GDrive folder for features that don't support reading/writing gdata. See bug for complete list. BUG=149184 TEST=manual (all pickers listed on bug under "doesn't work", no longer shows gdrive, others still do) Review URL: https://chromiumcodereview.appspot.com/10908262 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157012 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/extensions/file_manager_util.cc4
-rw-r--r--chrome/browser/download/download_file_picker.cc1
-rw-r--r--chrome/browser/download/save_package_file_picker_chromeos.cc4
-rw-r--r--chrome/browser/file_select_helper.cc19
-rw-r--r--chrome/browser/file_select_helper.h4
-rw-r--r--chrome/browser/resources/file_manager/js/file_manager.js5
-rw-r--r--chrome/browser/ui/browser.cc4
-rw-r--r--chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc2
-rw-r--r--chrome/browser/ui/views/select_file_dialog_extension.cc2
-rw-r--r--chrome/browser/ui/views/select_file_dialog_extension.h1
-rw-r--r--chrome/browser/ui/webui/options/browser_options_handler.cc4
-rw-r--r--chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc1
-rw-r--r--chrome/browser/ui/webui/options/chromeos/set_wallpaper_options_handler.cc1
-rw-r--r--ui/base/dialogs/select_file_dialog.cc4
-rw-r--r--ui/base/dialogs/select_file_dialog.h31
-rw-r--r--ui/base/dialogs/select_file_dialog_mac.mm2
-rw-r--r--ui/base/dialogs/select_file_dialog_win.cc8
17 files changed, 60 insertions, 37 deletions
diff --git a/chrome/browser/chromeos/extensions/file_manager_util.cc b/chrome/browser/chromeos/extensions/file_manager_util.cc
index f11c947..f765324 100644
--- a/chrome/browser/chromeos/extensions/file_manager_util.cc
+++ b/chrome/browser/chromeos/extensions/file_manager_util.cc
@@ -356,6 +356,10 @@ GURL GetFileBrowserUrlWithParams(
arg_value.SetBoolean("includeAllFiles", file_types->include_all_files);
}
+ // Disable showing GDrive unless it's specifically supported.
+ arg_value.SetBoolean("disableGData",
+ !file_types || !file_types->support_gdata);
+
std::string json_args;
base::JSONWriter::Write(&arg_value, &json_args);
diff --git a/chrome/browser/download/download_file_picker.cc b/chrome/browser/download/download_file_picker.cc
index d743a40..2d9f7f2 100644
--- a/chrome/browser/download/download_file_picker.cc
+++ b/chrome/browser/download/download_file_picker.cc
@@ -80,6 +80,7 @@ void DownloadFilePicker::Init(
file_type_info.extensions[0].push_back(extension);
}
file_type_info.include_all_files = true;
+ file_type_info.support_gdata = true;
gfx::NativeWindow owning_window = web_contents ?
platform_util::GetTopLevel(web_contents->GetNativeView()) : NULL;
diff --git a/chrome/browser/download/save_package_file_picker_chromeos.cc b/chrome/browser/download/save_package_file_picker_chromeos.cc
index 4cea198..a7bae50 100644
--- a/chrome/browser/download/save_package_file_picker_chromeos.cc
+++ b/chrome/browser/download/save_package_file_picker_chromeos.cc
@@ -45,10 +45,12 @@ SavePackageFilePickerChromeOS::SavePackageFilePickerChromeOS(
if (g_should_prompt_for_filename) {
select_file_dialog_ = ui::SelectFileDialog::Create(
this, new ChromeSelectFilePolicy(web_contents));
+ ui::SelectFileDialog::FileTypeInfo file_types;
+ file_types.support_gdata = true;
select_file_dialog_->SelectFile(ui::SelectFileDialog::SELECT_SAVEAS_FILE,
string16(),
suggested_path.ReplaceExtension("mhtml"),
- NULL,
+ &file_types,
0,
"mhtml",
platform_util::GetTopLevel(
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc
index 7438a50..43118c5 100644
--- a/chrome/browser/file_select_helper.cc
+++ b/chrome/browser/file_select_helper.cc
@@ -245,15 +245,18 @@ void FileSelectHelper::OnListDone(int id, int error) {
EnumerateDirectoryEnd();
}
-ui::SelectFileDialog::FileTypeInfo*
+scoped_ptr<ui::SelectFileDialog::FileTypeInfo>
FileSelectHelper::GetFileTypesFromAcceptType(
const std::vector<string16>& accept_types) {
+ scoped_ptr<ui::SelectFileDialog::FileTypeInfo> base_file_type(
+ new ui::SelectFileDialog::FileTypeInfo());
+ base_file_type->support_gdata = true;
if (accept_types.empty())
- return NULL;
+ return base_file_type.Pass();
// Create FileTypeInfo and pre-allocate for the first extension list.
scoped_ptr<ui::SelectFileDialog::FileTypeInfo> file_type(
- new ui::SelectFileDialog::FileTypeInfo());
+ new ui::SelectFileDialog::FileTypeInfo(*base_file_type));
file_type->include_all_files = true;
file_type->extensions.resize(1);
std::vector<FilePath::StringType>* extensions = &file_type->extensions.back();
@@ -289,7 +292,7 @@ FileSelectHelper::GetFileTypesFromAcceptType(
// If no valid extension is added, bail out.
if (valid_type_count == 0)
- return NULL;
+ return base_file_type.Pass();
// Use a generic description "Custom Files" if either of the following is
// true:
@@ -307,7 +310,7 @@ FileSelectHelper::GetFileTypesFromAcceptType(
l10n_util::GetStringUTF16(description_id));
}
- return file_type.release();
+ return file_type.Pass();
}
// static
@@ -361,8 +364,7 @@ void FileSelectHelper::RunFileChooser(RenderViewHost* render_view_host,
void FileSelectHelper::RunFileChooserOnFileThread(
const FileChooserParams& params) {
- select_file_types_.reset(
- GetFileTypesFromAcceptType(params.accept_types));
+ select_file_types_ = GetFileTypesFromAcceptType(params.accept_types);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
@@ -412,7 +414,8 @@ void FileSelectHelper::RunFileChooserOnUIThread(
params.title,
default_file_name,
select_file_types_.get(),
- select_file_types_.get() ? 1 : 0, // 1-based index.
+ select_file_types_.get() && !select_file_types_->extensions.empty() ?
+ 1 : 0, // 1-based index of default extension to show.
FILE_PATH_LITERAL(""),
owning_window,
#if defined(OS_ANDROID)
diff --git a/chrome/browser/file_select_helper.h b/chrome/browser/file_select_helper.h
index f4b0cbb..5fe8a38 100644
--- a/chrome/browser/file_select_helper.h
+++ b/chrome/browser/file_select_helper.h
@@ -126,8 +126,8 @@ class FileSelectHelper
// http://whatwg.org/html/number-state.html#attr-input-accept
// |accept_types| contains only valid lowercased MIME types or file extensions
// beginning with a period (.).
- ui::SelectFileDialog::FileTypeInfo* GetFileTypesFromAcceptType(
- const std::vector<string16>& accept_types);
+ static scoped_ptr<ui::SelectFileDialog::FileTypeInfo>
+ GetFileTypesFromAcceptType(const std::vector<string16>& accept_types);
// Check the accept type is valid. It is expected to be all lower case with
// no whitespace.
diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js
index 39c79b0..7d9d531 100644
--- a/chrome/browser/resources/file_manager/js/file_manager.js
+++ b/chrome/browser/resources/file_manager/js/file_manager.js
@@ -2414,8 +2414,9 @@ FileManager.prototype = {
};
FileManager.prototype.isGDataEnabled = function() {
- return !('driveEnabled' in this.gdataPreferences_) ||
- this.gdataPreferences_.driveEnabled;
+ return !this.params_.disableGData &&
+ (!('driveEnabled' in this.gdataPreferences_) ||
+ this.gdataPreferences_.driveEnabled);
};
FileManager.prototype.isOnReadonlyDirectory = function() {
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 7f10f61..f53de24 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -814,9 +814,11 @@ void Browser::OpenFile() {
// TODO(beng): figure out how to juggle this.
gfx::NativeWindow parent_window = window_->GetNativeWindow();
+ ui::SelectFileDialog::FileTypeInfo file_types;
+ file_types.support_gdata = true;
select_file_dialog_->SelectFile(ui::SelectFileDialog::SELECT_OPEN_FILE,
string16(), directory,
- NULL, 0, FILE_PATH_LITERAL(""),
+ &file_types, 0, FILE_PATH_LITERAL(""),
parent_window, NULL);
}
diff --git a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc
index 7768b22..a48d450 100644
--- a/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc
+++ b/chrome/browser/ui/libgtk2ui/select_file_dialog_impl_gtk2.cc
@@ -221,8 +221,6 @@ void SelectFileDialogImplGTK::SelectFileImpl(
file_type_index_ = file_type_index;
if (file_types)
file_types_ = *file_types;
- else
- file_types_.include_all_files = true;
GtkWidget* dialog = NULL;
switch (type) {
diff --git a/chrome/browser/ui/views/select_file_dialog_extension.cc b/chrome/browser/ui/views/select_file_dialog_extension.cc
index 9c42975..a696d2a 100644
--- a/chrome/browser/ui/views/select_file_dialog_extension.cc
+++ b/chrome/browser/ui/views/select_file_dialog_extension.cc
@@ -336,7 +336,7 @@ void SelectFileDialogExtension::SelectFileImpl(
type, title, virtual_path, file_types, file_type_index,
default_extension);
-ExtensionDialog* dialog = ExtensionDialog::Show(file_browser_url,
+ ExtensionDialog* dialog = ExtensionDialog::Show(file_browser_url,
base_window, profile_, tab->web_contents(),
kFileManagerWidth, kFileManagerHeight,
#if defined(USE_AURA)
diff --git a/chrome/browser/ui/views/select_file_dialog_extension.h b/chrome/browser/ui/views/select_file_dialog_extension.h
index 2a751a5..4d397dd 100644
--- a/chrome/browser/ui/views/select_file_dialog_extension.h
+++ b/chrome/browser/ui/views/select_file_dialog_extension.h
@@ -67,7 +67,6 @@ class SelectFileDialogExtension
gfx::NativeWindow owning_window,
void* params) OVERRIDE;
-
private:
friend class SelectFileDialogExtensionBrowserTest;
friend class SelectFileDialogExtensionTest;
diff --git a/chrome/browser/ui/webui/options/browser_options_handler.cc b/chrome/browser/ui/webui/options/browser_options_handler.cc
index cfe37b9..0de2f6f 100644
--- a/chrome/browser/ui/webui/options/browser_options_handler.cc
+++ b/chrome/browser/ui/webui/options/browser_options_handler.cc
@@ -1075,11 +1075,13 @@ void BrowserOptionsHandler::HandleSelectDownloadLocation(
PrefService* pref_service = Profile::FromWebUI(web_ui())->GetPrefs();
select_folder_dialog_ = ui::SelectFileDialog::Create(
this, new ChromeSelectFilePolicy(web_ui()->GetWebContents()));
+ ui::SelectFileDialog::FileTypeInfo info;
+ info.support_gdata = true;
select_folder_dialog_->SelectFile(
ui::SelectFileDialog::SELECT_FOLDER,
l10n_util::GetStringUTF16(IDS_OPTIONS_DOWNLOADLOCATION_BROWSE_TITLE),
pref_service->GetFilePath(prefs::kDownloadDefaultDirectory),
- NULL, 0, FILE_PATH_LITERAL(""),
+ &info, 0, FILE_PATH_LITERAL(""),
web_ui()->GetWebContents()->GetView()->GetTopLevelNativeWindow(), NULL);
}
diff --git a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
index 4238d26..357d60f 100644
--- a/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/change_picture_options_handler.cc
@@ -60,6 +60,7 @@ ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() {
file_type_info.extension_description_overrides[0] =
l10n_util::GetStringUTF16(IDS_IMAGE_FILES);
+ file_type_info.support_gdata = true;
return file_type_info;
}
diff --git a/chrome/browser/ui/webui/options/chromeos/set_wallpaper_options_handler.cc b/chrome/browser/ui/webui/options/chromeos/set_wallpaper_options_handler.cc
index 6ee7fe0..4d76f8f 100644
--- a/chrome/browser/ui/webui/options/chromeos/set_wallpaper_options_handler.cc
+++ b/chrome/browser/ui/webui/options/chromeos/set_wallpaper_options_handler.cc
@@ -44,6 +44,7 @@ ui::SelectFileDialog::FileTypeInfo GetUserImageFileTypeInfo() {
file_type_info.extension_description_overrides[0] =
l10n_util::GetStringUTF16(IDS_IMAGE_FILES);
+ file_type_info.support_gdata = true;
return file_type_info;
}
diff --git a/ui/base/dialogs/select_file_dialog.cc b/ui/base/dialogs/select_file_dialog.cc
index 120faef..838c220 100644
--- a/ui/base/dialogs/select_file_dialog.cc
+++ b/ui/base/dialogs/select_file_dialog.cc
@@ -31,7 +31,9 @@ ui::SelectFileDialogFactory* dialog_factory_ = NULL;
namespace ui {
-SelectFileDialog::FileTypeInfo::FileTypeInfo() : include_all_files(false) {}
+SelectFileDialog::FileTypeInfo::FileTypeInfo()
+ : include_all_files(false),
+ support_gdata(false) {}
SelectFileDialog::FileTypeInfo::~FileTypeInfo() {}
diff --git a/ui/base/dialogs/select_file_dialog.h b/ui/base/dialogs/select_file_dialog.h
index da5ab1f..b5922d9 100644
--- a/ui/base/dialogs/select_file_dialog.h
+++ b/ui/base/dialogs/select_file_dialog.h
@@ -60,15 +60,15 @@ class UI_EXPORT SelectFileDialog
// Notifies the Listener that many files have been selected. The
// files are in |files|. |params| is contextual passed to SelectFile.
virtual void MultiFilesSelected(
- const std::vector<FilePath>& files, void* params) {}
+ const std::vector<FilePath>& files, void* params) {}
// Similar to MultiFilesSelected() but takes SelectedFileInfo instead of
// FilePath. Used for passing extra information (ex. display name).
//
// If not overridden, calls MultiFilesSelected() with paths from |files|.
virtual void MultiFilesSelectedWithExtraInfo(
- const std::vector<ui::SelectedFileInfo>& files,
- void* params);
+ const std::vector<ui::SelectedFileInfo>& files,
+ void* params);
// Notifies the Listener that the file/folder selection was aborted (via
// the user canceling or closing the selection dialog box, for example).
@@ -94,22 +94,29 @@ class UI_EXPORT SelectFileDialog
ui::SelectFilePolicy* policy);
// Holds information about allowed extensions on a file save dialog.
- // |extensions| is a list of allowed extensions. For example, it might be
- // { { "htm", "html" }, { "txt" } }. Only pass more than one extension
- // in the inner vector if the extensions are equivalent. Do NOT include
- // leading periods.
- // |extension_description_overrides| overrides the system descriptions of the
- // specified extensions. Entries correspond to |extensions|; if left blank
- // the system descriptions will be used.
- // |include_all_files| specifies whether there will be a filter added for all
- // files (i.e. *.*).
struct UI_EXPORT FileTypeInfo {
FileTypeInfo();
~FileTypeInfo();
+ // A list of allowed extensions. For example, it might be
+ //
+ // { { "htm", "html" }, { "txt" } }
+ //
+ // Only pass more than one extension in the inner vector if the extensions
+ // are equivalent. Do NOT include leading periods.
std::vector<std::vector<FilePath::StringType> > extensions;
+
+ // Overrides the system descriptions of the specified extensions. Entries
+ // correspond to |extensions|; if left blank the system descriptions will
+ // be used.
std::vector<string16> extension_description_overrides;
+
+ // Specifies whether there will be a filter added for all files (i.e. *.*).
bool include_all_files;
+
+ // Specifies whether the caller can support files/folders that are on
+ // GDrive.
+ bool support_gdata;
};
// Selects a File.
diff --git a/ui/base/dialogs/select_file_dialog_mac.mm b/ui/base/dialogs/select_file_dialog_mac.mm
index e844c93..e0f4003 100644
--- a/ui/base/dialogs/select_file_dialog_mac.mm
+++ b/ui/base/dialogs/select_file_dialog_mac.mm
@@ -235,7 +235,7 @@ void SelectFileDialogImpl::SelectFileImpl(
[dialog setAllowedFileTypes:allowed_file_types];
// else we'll pass it in when we run the open panel
- if (file_types->include_all_files)
+ if (file_types->include_all_files || file_types->extensions.empty())
[dialog setAllowsOtherFileTypes:YES];
if (file_types->extension_description_overrides.size() > 1) {
diff --git a/ui/base/dialogs/select_file_dialog_win.cc b/ui/base/dialogs/select_file_dialog_win.cc
index 0fd90ef..2a41a23 100644
--- a/ui/base/dialogs/select_file_dialog_win.cc
+++ b/ui/base/dialogs/select_file_dialog_win.cc
@@ -126,6 +126,9 @@ std::wstring FormatFilterForExtensions(
DCHECK(file_ext.size() >= ext_desc.size());
+ if (file_ext.empty())
+ include_all_files = true;
+
std::wstring result;
for (size_t i = 0; i < file_ext.size(); ++i) {
@@ -441,11 +444,8 @@ class SelectFileDialogImpl : public ui::SelectFileDialog,
ui_proxy(MessageLoopForUI::current()->message_loop_proxy()),
owner(owner),
params(params) {
- if (file_types) {
+ if (file_types)
this->file_types = *file_types;
- } else {
- this->file_types.include_all_files = true;
- }
}
SelectFileDialog::Type type;
std::wstring title;