summaryrefslogtreecommitdiffstats
path: root/chrome/browser/file_select_helper.cc
diff options
context:
space:
mode:
authoravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-11 18:50:54 +0000
committeravi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-11 18:50:54 +0000
commitaaed25234a6000a0f35eda3c5c4b1e58d9a401de (patch)
treeba46f11711cde21dfdcdef395e9b50a88585d6e0 /chrome/browser/file_select_helper.cc
parent6b7a5e329b36cbda1f8e432fbc92cc7acb5ede4c (diff)
downloadchromium_src-aaed25234a6000a0f35eda3c5c4b1e58d9a401de.zip
chromium_src-aaed25234a6000a0f35eda3c5c4b1e58d9a401de.tar.gz
chromium_src-aaed25234a6000a0f35eda3c5c4b1e58d9a401de.tar.bz2
Pull the file picker code out of TabContents.
BUG=71097 TEST=hammer on the HTML file selection dialogs. No visible change; no crashes, nothing. Review URL: http://codereview.chromium.org/6680002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@77835 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/file_select_helper.cc')
-rw-r--r--chrome/browser/file_select_helper.cc29
1 files changed, 28 insertions, 1 deletions
diff --git a/chrome/browser/file_select_helper.cc b/chrome/browser/file_select_helper.cc
index 81616d5..1a38437 100644
--- a/chrome/browser/file_select_helper.cc
+++ b/chrome/browser/file_select_helper.cc
@@ -12,9 +12,11 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/platform_util.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/render_messages.h"
#include "chrome/common/render_messages_params.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/render_widget_host_view.h"
+#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/notification_details.h"
#include "content/common/notification_source.h"
#include "grit/generated_resources.h"
@@ -192,7 +194,7 @@ SelectFileDialog::FileTypeInfo* FileSelectHelper::GetFileTypesFromAcceptType(
void FileSelectHelper::RunFileChooser(
RenderViewHost* render_view_host,
- const ViewHostMsg_RunFileChooser_Params &params) {
+ const ViewHostMsg_RunFileChooser_Params& params) {
DCHECK(!render_view_host_);
render_view_host_ = render_view_host;
notification_registrar_.RemoveAll();
@@ -245,3 +247,28 @@ void FileSelectHelper::Observe(NotificationType type,
DCHECK(Details<RenderViewHost>(details).ptr() == render_view_host_);
render_view_host_ = NULL;
}
+
+FileSelectObserver::FileSelectObserver(TabContents* tab_contents)
+ : TabContentsObserver(tab_contents) {
+}
+
+FileSelectObserver::~FileSelectObserver() {
+}
+
+bool FileSelectObserver::OnMessageReceived(const IPC::Message& message) {
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(FileSelectObserver, message)
+ IPC_MESSAGE_HANDLER(ViewHostMsg_RunFileChooser, OnRunFileChooser)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+
+ return handled;
+}
+
+void FileSelectObserver::OnRunFileChooser(
+ const ViewHostMsg_RunFileChooser_Params& params) {
+ if (!file_select_helper_.get())
+ file_select_helper_.reset(new FileSelectHelper(tab_contents()->profile()));
+ file_select_helper_->RunFileChooser(tab_contents()->render_view_host(),
+ params);
+}