OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #include "chrome/browser/extensions/file_manager_util.h" | 4 #include "chrome/browser/extensions/file_manager_util.h" |
5 | 5 |
6 #include "base/json/json_writer.h" | 6 #include "base/json/json_writer.h" |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/metrics/histogram.h" |
8 #include "base/string_util.h" | 9 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
10 #include "base/values.h" | 11 #include "base/values.h" |
11 #include "chrome/browser/chromeos/media/media_player.h" | 12 #include "chrome/browser/chromeos/media/media_player.h" |
12 #include "chrome/browser/platform_util.h" | 13 #include "chrome/browser/platform_util.h" |
13 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
14 #include "chrome/browser/ui/browser.h" | 15 #include "chrome/browser/ui/browser.h" |
15 #include "chrome/browser/ui/browser_list.h" | 16 #include "chrome/browser/ui/browser_list.h" |
16 #include "content/browser/browser_thread.h" | 17 #include "content/browser/browser_thread.h" |
17 #include "content/browser/user_metrics.h" | 18 #include "content/browser/user_metrics.h" |
(...skipping 25 matching lines...) Expand all Loading... |
43 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) | 44 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_PROPRIETARY_CODECS) |
44 ".3gp", ".avi", ".mp3", ".mp4", ".m4v", ".mov", ".m4a", | 45 ".3gp", ".avi", ".mp3", ".mp4", ".m4v", ".mov", ".m4a", |
45 #endif | 46 #endif |
46 ".flac", ".ogm", ".ogv", ".ogx", ".ogg", ".oga", ".wav", ".webm", | 47 ".flac", ".ogm", ".ogv", ".ogx", ".ogg", ".oga", ".wav", ".webm", |
47 /* TODO(zelidrag): Add unsupported ones as we enable them: | 48 /* TODO(zelidrag): Add unsupported ones as we enable them: |
48 ".mkv", ".divx", ".xvid", ".wmv", ".asf", ".mpeg", ".mpg", | 49 ".mkv", ".divx", ".xvid", ".wmv", ".asf", ".mpeg", ".mpg", |
49 ".wma", ".aiff", | 50 ".wma", ".aiff", |
50 */ | 51 */ |
51 }; | 52 }; |
52 | 53 |
| 54 // List of all extensions we want to be shown in histogram that keep track of |
| 55 // files that were unsuccessfully tried to be opened. |
| 56 // The list has to be synced with histogram values. |
| 57 const char* kUMATrackingExtensions[] = { |
| 58 "other", ".doc", ".docx", ".odt", ".rtf", ".pdf", ".ppt", ".pptx", ".odp", |
| 59 ".xls", ".xlsx", ".ods", ".csv", ".odf", ".rar", ".asf", ".wma", ".wmv", |
| 60 ".mov", ".mpg", ".log" |
| 61 }; |
| 62 |
53 bool IsSupportedBrowserExtension(const char* ext) { | 63 bool IsSupportedBrowserExtension(const char* ext) { |
54 for (size_t i = 0; i < arraysize(kBrowserSupportedExtensions); i++) { | 64 for (size_t i = 0; i < arraysize(kBrowserSupportedExtensions); i++) { |
55 if (base::strcasecmp(ext, kBrowserSupportedExtensions[i]) == 0) { | 65 if (base::strcasecmp(ext, kBrowserSupportedExtensions[i]) == 0) { |
56 return true; | 66 return true; |
57 } | 67 } |
58 } | 68 } |
59 return false; | 69 return false; |
60 } | 70 } |
61 | 71 |
62 bool IsSupportedAVExtension(const char* ext) { | 72 bool IsSupportedAVExtension(const char* ext) { |
63 for (size_t i = 0; i < arraysize(kAVExtensions); i++) { | 73 for (size_t i = 0; i < arraysize(kAVExtensions); i++) { |
64 if (base::strcasecmp(ext, kAVExtensions[i]) == 0) { | 74 if (base::strcasecmp(ext, kAVExtensions[i]) == 0) { |
65 return true; | 75 return true; |
66 } | 76 } |
67 } | 77 } |
68 return false; | 78 return false; |
69 } | 79 } |
70 | 80 |
71 // static | 81 // static |
72 GURL FileManagerUtil::GetFileBrowserExtensionUrl() { | 82 GURL FileManagerUtil::GetFileBrowserExtensionUrl() { |
73 return GURL(kFileBrowserExtensionUrl); | 83 return GURL(kFileBrowserExtensionUrl); |
74 } | 84 } |
75 | 85 |
| 86 // Returns index |ext| has in the |array|. If there is no |ext| in |array|, last |
| 87 // element's index is return (last element should have irrelevant value). |
| 88 int UMAExtensionIndex(const char *ext, |
| 89 const char** array, |
| 90 size_t array_size) { |
| 91 for (size_t i = 0; i < array_size; i++) { |
| 92 if (base::strcasecmp(ext, array[i]) == 0) { |
| 93 return i; |
| 94 } |
| 95 } |
| 96 return 0; |
| 97 } |
| 98 |
76 // static | 99 // static |
77 GURL FileManagerUtil::GetFileBrowserUrl() { | 100 GURL FileManagerUtil::GetFileBrowserUrl() { |
78 return GURL(kBaseFileBrowserUrl); | 101 return GURL(kBaseFileBrowserUrl); |
79 } | 102 } |
80 | 103 |
81 // static | 104 // static |
82 GURL FileManagerUtil::GetMediaPlayerUrl() { | 105 GURL FileManagerUtil::GetMediaPlayerUrl() { |
83 return GURL(kMediaPlayerUrl); | 106 return GURL(kMediaPlayerUrl); |
84 } | 107 } |
85 | 108 |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
176 if (!browser) | 199 if (!browser) |
177 return; | 200 return; |
178 MediaPlayer* mediaplayer = MediaPlayer::GetInstance(); | 201 MediaPlayer* mediaplayer = MediaPlayer::GetInstance(); |
179 if (enqueue) | 202 if (enqueue) |
180 mediaplayer->EnqueueMediaFile(browser->profile(), full_path, NULL); | 203 mediaplayer->EnqueueMediaFile(browser->profile(), full_path, NULL); |
181 else | 204 else |
182 mediaplayer->ForcePlayMediaFile(browser->profile(), full_path, NULL); | 205 mediaplayer->ForcePlayMediaFile(browser->profile(), full_path, NULL); |
183 return; | 206 return; |
184 } | 207 } |
185 | 208 |
186 // Unknown file type. Show an error message. | 209 // Unknown file type. Record UMA and show an error message. |
| 210 size_t extension_index = UMAExtensionIndex(ext.data(), |
| 211 kUMATrackingExtensions, |
| 212 arraysize(kUMATrackingExtensions)); |
| 213 UMA_HISTOGRAM_ENUMERATION("FileBrowser.OpeningFileType", |
| 214 extension_index, |
| 215 arraysize(kUMATrackingExtensions) - 1); |
| 216 |
187 BrowserThread::PostTask( | 217 BrowserThread::PostTask( |
188 BrowserThread::UI, FROM_HERE, | 218 BrowserThread::UI, FROM_HERE, |
189 NewRunnableFunction( | 219 NewRunnableFunction( |
190 &platform_util::SimpleErrorBox, | 220 &platform_util::SimpleErrorBox, |
191 static_cast<gfx::NativeWindow>(NULL), | 221 static_cast<gfx::NativeWindow>(NULL), |
192 l10n_util::GetStringUTF16(IDS_FILEBROWSER_ERROR_TITLE), | 222 l10n_util::GetStringUTF16(IDS_FILEBROWSER_ERROR_TITLE), |
193 l10n_util::GetStringFUTF16(IDS_FILEBROWSER_ERROR_UNKNOWN_FILE_TYPE, | 223 l10n_util::GetStringFUTF16(IDS_FILEBROWSER_ERROR_UNKNOWN_FILE_TYPE, |
194 UTF8ToUTF16(full_path.BaseName().value())) | 224 UTF8ToUTF16(full_path.BaseName().value())) |
195 )); | 225 )); |
196 } | 226 } |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 case SelectFileDialog::SELECT_OPEN_MULTI_FILE: | 296 case SelectFileDialog::SELECT_OPEN_MULTI_FILE: |
267 type_str = "open-multi-file"; | 297 type_str = "open-multi-file"; |
268 break; | 298 break; |
269 | 299 |
270 default: | 300 default: |
271 NOTREACHED(); | 301 NOTREACHED(); |
272 } | 302 } |
273 | 303 |
274 return type_str; | 304 return type_str; |
275 } | 305 } |
OLD | NEW |