OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_FILE_SELECT_HELPER_H_ | 5 #ifndef CHROME_BROWSER_FILE_SELECT_HELPER_H_ |
6 #define CHROME_BROWSER_FILE_SELECT_HELPER_H_ | 6 #define CHROME_BROWSER_FILE_SELECT_HELPER_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <memory> | 9 #include <memory> |
10 #include <vector> | 10 #include <vector> |
(...skipping 15 matching lines...) Expand all Loading... |
26 namespace content { | 26 namespace content { |
27 struct FileChooserFileInfo; | 27 struct FileChooserFileInfo; |
28 class RenderViewHost; | 28 class RenderViewHost; |
29 class WebContents; | 29 class WebContents; |
30 } | 30 } |
31 | 31 |
32 namespace ui { | 32 namespace ui { |
33 struct SelectedFileInfo; | 33 struct SelectedFileInfo; |
34 } | 34 } |
35 | 35 |
36 // This class handles file-selection requests coming from WebUI elements | 36 // This class handles file-selection requests coming from renderer processes. |
37 // (via the extensions::ExtensionHost class). It implements both the | 37 // It implements both the initialisation and listener functions for |
38 // initialisation and listener functions for file-selection dialogs. | 38 // file-selection dialogs. |
39 // | 39 // |
40 // Since FileSelectHelper has-a NotificationRegistrar, it needs to live on and | 40 // Since FileSelectHelper has-a NotificationRegistrar, it needs to live on and |
41 // be destroyed on the UI thread. References to FileSelectHelper may be passed | 41 // be destroyed on the UI thread. References to FileSelectHelper may be passed |
42 // on to other threads. | 42 // on to other threads. |
43 class FileSelectHelper : public base::RefCountedThreadSafe< | 43 class FileSelectHelper : public base::RefCountedThreadSafe< |
44 FileSelectHelper, | 44 FileSelectHelper, |
45 content::BrowserThread::DeleteOnUIThread>, | 45 content::BrowserThread::DeleteOnUIThread>, |
46 public ui::SelectFileDialog::Listener, | 46 public ui::SelectFileDialog::Listener, |
47 public content::WebContentsObserver, | 47 public content::WebContentsObserver, |
48 public content::NotificationObserver { | 48 public content::NotificationObserver { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
125 const std::vector<ui::SelectedFileInfo>& files, | 125 const std::vector<ui::SelectedFileInfo>& files, |
126 void* params) override; | 126 void* params) override; |
127 void FileSelectionCanceled(void* params) override; | 127 void FileSelectionCanceled(void* params) override; |
128 | 128 |
129 // content::NotificationObserver overrides. | 129 // content::NotificationObserver overrides. |
130 void Observe(int type, | 130 void Observe(int type, |
131 const content::NotificationSource& source, | 131 const content::NotificationSource& source, |
132 const content::NotificationDetails& details) override; | 132 const content::NotificationDetails& details) override; |
133 | 133 |
134 // content::WebContentsObserver overrides. | 134 // content::WebContentsObserver overrides. |
135 void RenderViewHostChanged(content::RenderViewHost* old_host, | 135 void RenderFrameHostChanged(content::RenderFrameHost* old_host, |
136 content::RenderViewHost* new_host) override; | 136 content::RenderFrameHost* new_host) override; |
| 137 void RenderFrameDeleted(content::RenderFrameHost* render_frame_host) override; |
137 void WebContentsDestroyed() override; | 138 void WebContentsDestroyed() override; |
138 | 139 |
139 void EnumerateDirectory(int request_id, | 140 void EnumerateDirectory(int request_id, |
140 content::RenderViewHost* render_view_host, | 141 content::RenderViewHost* render_view_host, |
141 const base::FilePath& path); | 142 const base::FilePath& path); |
142 | 143 |
143 // Kicks off a new directory enumeration. | 144 // Kicks off a new directory enumeration. |
144 void StartNewEnumeration(const base::FilePath& path, | 145 void StartNewEnumeration(const base::FilePath& path, |
145 int request_id, | 146 int request_id, |
146 content::RenderViewHost* render_view_host); | 147 content::RenderViewHost* render_view_host); |
(...skipping 19 matching lines...) Expand all Loading... |
166 void ProcessSelectedFilesMacOnUIThread( | 167 void ProcessSelectedFilesMacOnUIThread( |
167 const std::vector<ui::SelectedFileInfo>& files, | 168 const std::vector<ui::SelectedFileInfo>& files, |
168 const std::vector<base::FilePath>& zipped_files); | 169 const std::vector<base::FilePath>& zipped_files); |
169 | 170 |
170 // Zips the package at |path| into a temporary destination. Returns the | 171 // Zips the package at |path| into a temporary destination. Returns the |
171 // temporary destination, if the zip was successful. Otherwise returns an | 172 // temporary destination, if the zip was successful. Otherwise returns an |
172 // empty path. | 173 // empty path. |
173 static base::FilePath ZipPackage(const base::FilePath& path); | 174 static base::FilePath ZipPackage(const base::FilePath& path); |
174 #endif // defined(OS_MACOSX) | 175 #endif // defined(OS_MACOSX) |
175 | 176 |
176 // Utility method that passes |files| to the render view host, and ends the | 177 // Utility method that passes |files| to the RenderFrameHost, and ends the |
177 // file chooser. | 178 // file chooser. |
178 void NotifyRenderViewHostAndEnd( | 179 void NotifyRenderFrameHostAndEnd( |
179 const std::vector<ui::SelectedFileInfo>& files); | 180 const std::vector<ui::SelectedFileInfo>& files); |
180 | 181 |
181 // Sends the result to the render process, and call |RunFileChooserEnd|. | 182 // Sends the result to the render process, and call |RunFileChooserEnd|. |
182 void NotifyRenderViewHostAndEndAfterConversion( | 183 void NotifyRenderFrameHostAndEndAfterConversion( |
183 const std::vector<content::FileChooserFileInfo>& list); | 184 const std::vector<content::FileChooserFileInfo>& list); |
184 | 185 |
185 // Schedules the deletion of the files in |temporary_files_| and clears the | 186 // Schedules the deletion of the files in |temporary_files_| and clears the |
186 // vector. | 187 // vector. |
187 void DeleteTemporaryFiles(); | 188 void DeleteTemporaryFiles(); |
188 | 189 |
189 // Cleans up when the RenderViewHost of our WebContents changes. | 190 // Cleans up when the initiator of the file chooser is no longer valid. |
190 void CleanUpOnRenderViewHostChange(); | 191 void CleanUp(); |
191 | 192 |
192 // Helper method to get allowed extensions for select file dialog from | 193 // Helper method to get allowed extensions for select file dialog from |
193 // the specified accept types as defined in the spec: | 194 // the specified accept types as defined in the spec: |
194 // http://whatwg.org/html/number-state.html#attr-input-accept | 195 // http://whatwg.org/html/number-state.html#attr-input-accept |
195 // |accept_types| contains only valid lowercased MIME types or file extensions | 196 // |accept_types| contains only valid lowercased MIME types or file extensions |
196 // beginning with a period (.). | 197 // beginning with a period (.). |
197 static std::unique_ptr<ui::SelectFileDialog::FileTypeInfo> | 198 static std::unique_ptr<ui::SelectFileDialog::FileTypeInfo> |
198 GetFileTypesFromAcceptType(const std::vector<base::string16>& accept_types); | 199 GetFileTypesFromAcceptType(const std::vector<base::string16>& accept_types); |
199 | 200 |
200 // Check the accept type is valid. It is expected to be all lower case with | 201 // Check the accept type is valid. It is expected to be all lower case with |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 content::NotificationRegistrar notification_registrar_; | 246 content::NotificationRegistrar notification_registrar_; |
246 | 247 |
247 // Temporary files only used on OSX. This class is responsible for deleting | 248 // Temporary files only used on OSX. This class is responsible for deleting |
248 // these files when they are no longer needed. | 249 // these files when they are no longer needed. |
249 std::vector<base::FilePath> temporary_files_; | 250 std::vector<base::FilePath> temporary_files_; |
250 | 251 |
251 DISALLOW_COPY_AND_ASSIGN(FileSelectHelper); | 252 DISALLOW_COPY_AND_ASSIGN(FileSelectHelper); |
252 }; | 253 }; |
253 | 254 |
254 #endif // CHROME_BROWSER_FILE_SELECT_HELPER_H_ | 255 #endif // CHROME_BROWSER_FILE_SELECT_HELPER_H_ |
OLD | NEW |