| Index: chrome/browser/file_select_helper.cc
|
| diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc
|
| index 7be912fcdd60c504b04b45dd0c2ddccb2acdf7ec..04d9caec86556c3bc78d2489f38d356bc6f82e55 100644
|
| --- a/chrome/browser/file_select_helper.cc
|
| +++ b/chrome/browser/file_select_helper.cc
|
| @@ -30,6 +30,8 @@
|
| #include "content/public/browser/notification_details.h"
|
| #include "content/public/browser/notification_source.h"
|
| #include "content/public/browser/notification_types.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| +#include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/render_widget_host.h"
|
| #include "content/public/browser/render_widget_host_view.h"
|
| @@ -130,13 +132,12 @@ struct FileSelectHelper::ActiveDirectoryEnumeration {
|
|
|
| FileSelectHelper::FileSelectHelper(Profile* profile)
|
| : profile_(profile),
|
| - render_view_host_(NULL),
|
| - web_contents_(NULL),
|
| + render_frame_host_(nullptr),
|
| + web_contents_(nullptr),
|
| select_file_dialog_(),
|
| select_file_types_(),
|
| dialog_type_(ui::SelectFileDialog::SELECT_OPEN_FILE),
|
| - dialog_mode_(FileChooserParams::Open) {
|
| -}
|
| + dialog_mode_(FileChooserParams::Open) {}
|
|
|
| FileSelectHelper::~FileSelectHelper() {
|
| // There may be pending file dialogs, we need to tell them that we've gone
|
| @@ -176,14 +177,15 @@ void FileSelectHelper::FileSelectedWithExtraInfo(
|
| if (IsValidProfile(profile_))
|
| profile_->set_last_selected_directory(file.file_path.DirName());
|
|
|
| - if (!render_view_host_) {
|
| + if (!render_frame_host_) {
|
| RunFileChooserEnd();
|
| return;
|
| }
|
|
|
| const base::FilePath& path = file.local_path;
|
| if (dialog_type_ == ui::SelectFileDialog::SELECT_UPLOAD_FOLDER) {
|
| - StartNewEnumeration(path, kFileSelectEnumerationId, render_view_host_);
|
| + StartNewEnumeration(path, kFileSelectEnumerationId,
|
| + render_frame_host_->GetRenderViewHost());
|
| return;
|
| }
|
|
|
| @@ -286,7 +288,7 @@ void FileSelectHelper::OnListDone(int id, int error) {
|
|
|
| void FileSelectHelper::NotifyRenderViewHostAndEnd(
|
| const std::vector<ui::SelectedFileInfo>& files) {
|
| - if (!render_view_host_) {
|
| + if (!render_frame_host_) {
|
| RunFileChooserEnd();
|
| return;
|
| }
|
| @@ -299,17 +301,15 @@ void FileSelectHelper::NotifyRenderViewHostAndEnd(
|
| }
|
| // Converts |files| into FileChooserFileInfo with handling of non-native
|
| // files.
|
| + content::SiteInstance* site_instance =
|
| + render_frame_host_->GetSiteInstance();
|
| storage::FileSystemContext* file_system_context =
|
| - content::BrowserContext::GetStoragePartition(
|
| - profile_, render_view_host_->GetSiteInstance())->
|
| - GetFileSystemContext();
|
| + content::BrowserContext::GetStoragePartition(profile_, site_instance)
|
| + ->GetFileSystemContext();
|
| file_manager::util::ConvertSelectedFileInfoListToFileChooserFileInfoList(
|
| - file_system_context,
|
| - web_contents_->GetSiteInstance()->GetSiteURL(),
|
| - files,
|
| - base::Bind(
|
| - &FileSelectHelper::NotifyRenderViewHostAndEndAfterConversion,
|
| - this));
|
| + file_system_context, site_instance->GetSiteURL(), files,
|
| + base::Bind(&FileSelectHelper::NotifyRenderViewHostAndEndAfterConversion,
|
| + this));
|
| return;
|
| }
|
| #endif // defined(OS_CHROMEOS)
|
| @@ -327,8 +327,8 @@ void FileSelectHelper::NotifyRenderViewHostAndEnd(
|
|
|
| void FileSelectHelper::NotifyRenderViewHostAndEndAfterConversion(
|
| const std::vector<content::FileChooserFileInfo>& list) {
|
| - if (render_view_host_)
|
| - render_view_host_->FilesSelectedInChooser(list, dialog_mode_);
|
| + if (render_frame_host_)
|
| + render_frame_host_->FilesSelectedInChooser(list, dialog_mode_);
|
|
|
| // No members should be accessed from here on.
|
| RunFileChooserEnd();
|
| @@ -420,14 +420,16 @@ FileSelectHelper::GetFileTypesFromAcceptType(
|
| }
|
|
|
| // static
|
| -void FileSelectHelper::RunFileChooser(content::WebContents* tab,
|
| - const FileChooserParams& params) {
|
| - Profile* profile = Profile::FromBrowserContext(tab->GetBrowserContext());
|
| +void FileSelectHelper::RunFileChooser(
|
| + content::RenderFrameHost* render_frame_host,
|
| + const FileChooserParams& params) {
|
| + Profile* profile = Profile::FromBrowserContext(
|
| + render_frame_host->GetProcess()->GetBrowserContext());
|
| // FileSelectHelper will keep itself alive until it sends the result message.
|
| scoped_refptr<FileSelectHelper> file_select_helper(
|
| new FileSelectHelper(profile));
|
| file_select_helper->RunFileChooser(
|
| - tab->GetRenderViewHost(), tab,
|
| + render_frame_host,
|
| base::WrapUnique(new content::FileChooserParams(params)));
|
| }
|
|
|
| @@ -444,10 +446,9 @@ void FileSelectHelper::EnumerateDirectory(content::WebContents* tab,
|
| }
|
|
|
| void FileSelectHelper::RunFileChooser(
|
| - RenderViewHost* render_view_host,
|
| - content::WebContents* web_contents,
|
| + content::RenderFrameHost* render_frame_host,
|
| std::unique_ptr<FileChooserParams> params) {
|
| - DCHECK(!render_view_host_);
|
| + DCHECK(!render_frame_host_);
|
| DCHECK(!web_contents_);
|
| DCHECK(params->default_file_name.empty() ||
|
| params->mode == FileChooserParams::Save)
|
| @@ -456,13 +457,14 @@ void FileSelectHelper::RunFileChooser(
|
| DCHECK(params->default_file_name == params->default_file_name.BaseName())
|
| << "The default_file_name parameter should not contain path separators";
|
|
|
| - render_view_host_ = render_view_host;
|
| - web_contents_ = web_contents;
|
| + render_frame_host_ = render_frame_host;
|
| + web_contents_ = WebContents::FromRenderFrameHost(render_frame_host);
|
| notification_registrar_.RemoveAll();
|
| content::WebContentsObserver::Observe(web_contents_);
|
| notification_registrar_.Add(
|
| this, content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED,
|
| - content::Source<RenderWidgetHost>(render_view_host_->GetWidget()));
|
| + content::Source<RenderWidgetHost>(
|
| + render_frame_host_->GetRenderViewHost()->GetWidget()));
|
|
|
| BrowserThread::PostTask(
|
| BrowserThread::FILE, FROM_HERE,
|
| @@ -550,8 +552,8 @@ void FileSelectHelper::RunFileChooserOnUIThread(
|
| const base::FilePath& default_file_path,
|
| std::unique_ptr<FileChooserParams> params) {
|
| DCHECK(params);
|
| - if (!render_view_host_ || !web_contents_ || !IsValidProfile(profile_) ||
|
| - !render_view_host_->GetWidget()->GetView()) {
|
| + if (!render_frame_host_ || !web_contents_ || !IsValidProfile(profile_) ||
|
| + !web_contents_->GetNativeView()) {
|
| // If the renderer was destroyed before we started, just cancel the
|
| // operation.
|
| RunFileChooserEnd();
|
| @@ -583,8 +585,8 @@ void FileSelectHelper::RunFileChooserOnUIThread(
|
| NOTREACHED();
|
| }
|
|
|
| - gfx::NativeWindow owning_window = platform_util::GetTopLevel(
|
| - render_view_host_->GetWidget()->GetView()->GetNativeView());
|
| + gfx::NativeWindow owning_window =
|
| + platform_util::GetTopLevel(web_contents_->GetNativeView());
|
|
|
| #if defined(OS_ANDROID)
|
| // Android needs the original MIME types and an additional capture value.
|
| @@ -618,8 +620,8 @@ void FileSelectHelper::RunFileChooserEnd() {
|
| if (!temporary_files_.empty())
|
| return;
|
|
|
| - render_view_host_ = NULL;
|
| - web_contents_ = NULL;
|
| + render_frame_host_ = nullptr;
|
| + web_contents_ = nullptr;
|
| Release();
|
| }
|
|
|
| @@ -649,8 +651,8 @@ void FileSelectHelper::Observe(int type,
|
| switch (type) {
|
| case content::NOTIFICATION_RENDER_WIDGET_HOST_DESTROYED: {
|
| DCHECK(content::Source<RenderWidgetHost>(source).ptr() ==
|
| - render_view_host_->GetWidget());
|
| - render_view_host_ = NULL;
|
| + render_frame_host_->GetRenderViewHost()->GetWidget());
|
| + render_frame_host_ = NULL;
|
| break;
|
| }
|
| default:
|
|
|