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 #pragma once | 7 #pragma once |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <vector> | 10 #include <vector> |
11 | 11 |
12 #include "base/compiler_specific.h" | 12 #include "base/compiler_specific.h" |
| 13 #include "base/gtest_prod_util.h" |
13 #include "chrome/browser/ui/select_file_dialog.h" | 14 #include "chrome/browser/ui/select_file_dialog.h" |
14 #include "content/public/browser/notification_observer.h" | 15 #include "content/public/browser/notification_observer.h" |
15 #include "content/public/browser/notification_registrar.h" | 16 #include "content/public/browser/notification_registrar.h" |
16 #include "net/base/directory_lister.h" | 17 #include "net/base/directory_lister.h" |
17 | 18 |
18 class Profile; | 19 class Profile; |
19 | 20 |
20 namespace content { | 21 namespace content { |
21 class RenderViewHost; | 22 class RenderViewHost; |
22 struct FileChooserParams; | 23 struct FileChooserParams; |
(...skipping 13 matching lines...) Expand all Loading... |
36 static void RunFileChooser(content::WebContents* tab, | 37 static void RunFileChooser(content::WebContents* tab, |
37 const content::FileChooserParams& params); | 38 const content::FileChooserParams& params); |
38 | 39 |
39 // Enumerates all the files in directory. | 40 // Enumerates all the files in directory. |
40 static void EnumerateDirectory(content::WebContents* tab, | 41 static void EnumerateDirectory(content::WebContents* tab, |
41 int request_id, | 42 int request_id, |
42 const FilePath& path); | 43 const FilePath& path); |
43 | 44 |
44 private: | 45 private: |
45 friend class base::RefCountedThreadSafe<FileSelectHelper>; | 46 friend class base::RefCountedThreadSafe<FileSelectHelper>; |
| 47 FRIEND_TEST_ALL_PREFIXES(FileSelectHelperTest, IsAcceptTypeValid); |
46 explicit FileSelectHelper(Profile* profile); | 48 explicit FileSelectHelper(Profile* profile); |
47 virtual ~FileSelectHelper(); | 49 virtual ~FileSelectHelper(); |
48 | 50 |
49 // Utility class which can listen for directory lister events and relay | 51 // Utility class which can listen for directory lister events and relay |
50 // them to the main object with the correct tracking id. | 52 // them to the main object with the correct tracking id. |
51 class DirectoryListerDispatchDelegate | 53 class DirectoryListerDispatchDelegate |
52 : public net::DirectoryLister::DirectoryListerDelegate { | 54 : public net::DirectoryLister::DirectoryListerDelegate { |
53 public: | 55 public: |
54 DirectoryListerDispatchDelegate(FileSelectHelper* parent, int id) | 56 DirectoryListerDispatchDelegate(FileSelectHelper* parent, int id) |
55 : parent_(parent), | 57 : parent_(parent), |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 const net::DirectoryLister::DirectoryListerData& data); | 118 const net::DirectoryLister::DirectoryListerData& data); |
117 virtual void OnListDone(int id, int error); | 119 virtual void OnListDone(int id, int error); |
118 | 120 |
119 // Cleans up and releases this instance. This must be called after the last | 121 // Cleans up and releases this instance. This must be called after the last |
120 // callback is received from the enumeration code. | 122 // callback is received from the enumeration code. |
121 void EnumerateDirectoryEnd(); | 123 void EnumerateDirectoryEnd(); |
122 | 124 |
123 // Helper method to get allowed extensions for select file dialog from | 125 // Helper method to get allowed extensions for select file dialog from |
124 // the specified accept types as defined in the spec: | 126 // the specified accept types as defined in the spec: |
125 // http://whatwg.org/html/number-state.html#attr-input-accept | 127 // http://whatwg.org/html/number-state.html#attr-input-accept |
126 // |accept_types| contains only valid lowercased MIME types. | 128 // |accept_types| contains only valid lowercased MIME types or file extensions |
| 129 // beginning with a period (.). |
127 SelectFileDialog::FileTypeInfo* GetFileTypesFromAcceptType( | 130 SelectFileDialog::FileTypeInfo* GetFileTypesFromAcceptType( |
128 const std::vector<string16>& accept_types); | 131 const std::vector<string16>& accept_types); |
129 | 132 |
| 133 // Check the accept type is valid. It is expected to be all lower case with |
| 134 // no whitespace. |
| 135 static bool IsAcceptTypeValid(const std::string& accept_type); |
| 136 |
130 // Profile used to set/retrieve the last used directory. | 137 // Profile used to set/retrieve the last used directory. |
131 Profile* profile_; | 138 Profile* profile_; |
132 | 139 |
133 // The RenderViewHost and WebContents for the page showing a file dialog | 140 // The RenderViewHost and WebContents for the page showing a file dialog |
134 // (may only be one such dialog). | 141 // (may only be one such dialog). |
135 content::RenderViewHost* render_view_host_; | 142 content::RenderViewHost* render_view_host_; |
136 content::WebContents* web_contents_; | 143 content::WebContents* web_contents_; |
137 | 144 |
138 // Dialog box used for choosing files to upload from file form fields. | 145 // Dialog box used for choosing files to upload from file form fields. |
139 scoped_refptr<SelectFileDialog> select_file_dialog_; | 146 scoped_refptr<SelectFileDialog> select_file_dialog_; |
140 scoped_ptr<SelectFileDialog::FileTypeInfo> select_file_types_; | 147 scoped_ptr<SelectFileDialog::FileTypeInfo> select_file_types_; |
141 | 148 |
142 // The type of file dialog last shown. | 149 // The type of file dialog last shown. |
143 SelectFileDialog::Type dialog_type_; | 150 SelectFileDialog::Type dialog_type_; |
144 | 151 |
145 // Maintain a list of active directory enumerations. These could come from | 152 // Maintain a list of active directory enumerations. These could come from |
146 // the file select dialog or from drag-and-drop of directories, so there could | 153 // the file select dialog or from drag-and-drop of directories, so there could |
147 // be more than one going on at a time. | 154 // be more than one going on at a time. |
148 struct ActiveDirectoryEnumeration; | 155 struct ActiveDirectoryEnumeration; |
149 std::map<int, ActiveDirectoryEnumeration*> directory_enumerations_; | 156 std::map<int, ActiveDirectoryEnumeration*> directory_enumerations_; |
150 | 157 |
151 // Registrar for notifications regarding our RenderViewHost. | 158 // Registrar for notifications regarding our RenderViewHost. |
152 content::NotificationRegistrar notification_registrar_; | 159 content::NotificationRegistrar notification_registrar_; |
153 | 160 |
154 DISALLOW_COPY_AND_ASSIGN(FileSelectHelper); | 161 DISALLOW_COPY_AND_ASSIGN(FileSelectHelper); |
155 }; | 162 }; |
156 | 163 |
157 #endif // CHROME_BROWSER_FILE_SELECT_HELPER_H_ | 164 #endif // CHROME_BROWSER_FILE_SELECT_HELPER_H_ |
OLD | NEW |