diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-15 20:15:53 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-09-15 20:15:53 +0000 |
commit | 479cce780a26eedae06c79662968082c880b00df (patch) | |
tree | cd3ec93b3867b5a73cc184fc2f953f008dc31b03 | |
parent | dde4a4375b9f745a438b660e7338d6acd733117f (diff) | |
download | chromium_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
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; |