Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Side by Side Diff: chrome/browser/chromeos/extensions/file_browser_handler.cc

Issue 12381035: Move Mime type handling to streamsPrivate API, so that it works on Desktop Chrome. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Initialize test variable Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 #include "chrome/browser/chromeos/extensions/file_browser_handler.h" 5 #include "chrome/browser/chromeos/extensions/file_browser_handler.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 25 matching lines...) Expand all
36 unsigned int GetAccessPermissionFlagFromString(const std::string& access_str) { 36 unsigned int GetAccessPermissionFlagFromString(const std::string& access_str) {
37 if (access_str == kReadAccessString) 37 if (access_str == kReadAccessString)
38 return kReadPermission; 38 return kReadPermission;
39 if (access_str == kReadWriteAccessString) 39 if (access_str == kReadWriteAccessString)
40 return kReadPermission | kWritePermission; 40 return kReadPermission | kWritePermission;
41 if (access_str == kCreateAccessString) 41 if (access_str == kCreateAccessString)
42 return kCreatePermission; 42 return kCreatePermission;
43 return kInvalidPermission; 43 return kInvalidPermission;
44 } 44 }
45 45
46 const char* const kMIMETypeHandlersWhitelist[] = {
47 extension_misc::kQuickOfficeExtensionId,
48 extension_misc::kQuickOfficeDevExtensionId
49 };
50
51 // Stored on the Extension. 46 // Stored on the Extension.
52 struct FileBrowserHandlerInfo : public extensions::Extension::ManifestData { 47 struct FileBrowserHandlerInfo : public extensions::Extension::ManifestData {
53 FileBrowserHandler::List file_browser_handlers; 48 FileBrowserHandler::List file_browser_handlers;
54 49
55 FileBrowserHandlerInfo(); 50 FileBrowserHandlerInfo();
56 virtual ~FileBrowserHandlerInfo(); 51 virtual ~FileBrowserHandlerInfo();
57 }; 52 };
58 53
59 FileBrowserHandlerInfo::FileBrowserHandlerInfo() { 54 FileBrowserHandlerInfo::FileBrowserHandlerInfo() {
60 } 55 }
61 56
62 FileBrowserHandlerInfo::~FileBrowserHandlerInfo() { 57 FileBrowserHandlerInfo::~FileBrowserHandlerInfo() {
63 } 58 }
64 59
65 } // namespace 60 } // namespace
66 61
67 // static
68 bool FileBrowserHandler::ExtensionWhitelistedForMIMETypes(
69 const std::string& extension_id) {
70 if (g_test_extension_id_ && extension_id == *g_test_extension_id_)
71 return true;
72 for (size_t i = 0; i < arraysize(kMIMETypeHandlersWhitelist); ++i) {
73 if (extension_id == kMIMETypeHandlersWhitelist[i])
74 return true;
75 }
76 return false;
77 }
78
79 // static
80 std::vector<std::string> FileBrowserHandler::GetMIMETypeWhitelist() {
81 std::vector<std::string> whitelist;
82 if (g_test_extension_id_)
83 whitelist.push_back(*g_test_extension_id_);
84 for (size_t i = 0; i < arraysize(kMIMETypeHandlersWhitelist); ++i)
85 whitelist.push_back(kMIMETypeHandlersWhitelist[i]);
86 return whitelist;
87 }
88
89 FileBrowserHandler::FileBrowserHandler() 62 FileBrowserHandler::FileBrowserHandler()
90 : file_access_permission_flags_(kPermissionsNotDefined) { 63 : file_access_permission_flags_(kPermissionsNotDefined) {
91 } 64 }
92 65
93 FileBrowserHandler::~FileBrowserHandler() { 66 FileBrowserHandler::~FileBrowserHandler() {
94 } 67 }
95 68
96 void FileBrowserHandler::AddPattern(const URLPattern& pattern) { 69 void FileBrowserHandler::AddPattern(const URLPattern& pattern) {
97 url_set_.AddPattern(pattern); 70 url_set_.AddPattern(pattern);
98 } 71 }
99 72
100 void FileBrowserHandler::ClearPatterns() { 73 void FileBrowserHandler::ClearPatterns() {
101 url_set_.ClearPatterns(); 74 url_set_.ClearPatterns();
102 } 75 }
103 76
104 bool FileBrowserHandler::MatchesURL(const GURL& url) const { 77 bool FileBrowserHandler::MatchesURL(const GURL& url) const {
105 return url_set_.MatchesURL(url); 78 return url_set_.MatchesURL(url);
106 } 79 }
107 80
108 void FileBrowserHandler::AddMIMEType(const std::string& mime_type) {
109 DCHECK(ExtensionWhitelistedForMIMETypes(extension_id()));
110 mime_type_set_.insert(mime_type);
111 }
112
113 bool FileBrowserHandler::CanHandleMIMEType(const std::string& mime_type) const {
114 return mime_type_set_.find(mime_type) != mime_type_set_.end();
115 }
116
117 bool FileBrowserHandler::AddFileAccessPermission( 81 bool FileBrowserHandler::AddFileAccessPermission(
118 const std::string& access) { 82 const std::string& access) {
119 file_access_permission_flags_ |= GetAccessPermissionFlagFromString(access); 83 file_access_permission_flags_ |= GetAccessPermissionFlagFromString(access);
120 return (file_access_permission_flags_ & kInvalidPermission) != 0U; 84 return (file_access_permission_flags_ & kInvalidPermission) != 0U;
121 } 85 }
122 86
123 bool FileBrowserHandler::ValidateFileAccessPermissions() { 87 bool FileBrowserHandler::ValidateFileAccessPermissions() {
124 bool is_invalid = (file_access_permission_flags_ & kInvalidPermission) != 0U; 88 bool is_invalid = (file_access_permission_flags_ & kInvalidPermission) != 0U;
125 bool can_create = (file_access_permission_flags_ & kCreatePermission) != 0U; 89 bool can_create = (file_access_permission_flags_ & kCreatePermission) != 0U;
126 bool can_read_or_write = (file_access_permission_flags_ & 90 bool can_read_or_write = (file_access_permission_flags_ &
(...skipping 26 matching lines...) Expand all
153 // static 117 // static
154 FileBrowserHandler::List* 118 FileBrowserHandler::List*
155 FileBrowserHandler::GetHandlers(const extensions::Extension* extension) { 119 FileBrowserHandler::GetHandlers(const extensions::Extension* extension) {
156 FileBrowserHandlerInfo* info = static_cast<FileBrowserHandlerInfo*>( 120 FileBrowserHandlerInfo* info = static_cast<FileBrowserHandlerInfo*>(
157 extension->GetManifestData(keys::kFileBrowserHandlers)); 121 extension->GetManifestData(keys::kFileBrowserHandlers));
158 if (info) 122 if (info)
159 return &info->file_browser_handlers; 123 return &info->file_browser_handlers;
160 return NULL; 124 return NULL;
161 } 125 }
162 126
163 std::string* FileBrowserHandler::g_test_extension_id_ = NULL;
164
165 FileBrowserHandlerParser::FileBrowserHandlerParser() { 127 FileBrowserHandlerParser::FileBrowserHandlerParser() {
166 } 128 }
167 129
168 FileBrowserHandlerParser::~FileBrowserHandlerParser() { 130 FileBrowserHandlerParser::~FileBrowserHandlerParser() {
169 } 131 }
170 132
171 namespace { 133 namespace {
172 134
173 FileBrowserHandler* LoadFileBrowserHandler( 135 FileBrowserHandler* LoadFileBrowserHandler(
174 const std::string& extension_id, 136 const std::string& extension_id,
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 bool allowed = path == "/*" || path == "/*.*" || 219 bool allowed = path == "/*" || path == "/*.*" ||
258 (path.compare(0, 3, "/*.") == 0 && 220 (path.compare(0, 3, "/*.") == 0 &&
259 path.find_first_of('*', 3) == std::string::npos); 221 path.find_first_of('*', 3) == std::string::npos);
260 if (!allowed) { 222 if (!allowed) {
261 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 223 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
262 errors::kInvalidURLPatternError, filter); 224 errors::kInvalidURLPatternError, filter);
263 return NULL; 225 return NULL;
264 } 226 }
265 result->AddPattern(pattern); 227 result->AddPattern(pattern);
266 } 228 }
267
268 // Initialize MIME type filters (optional).
269 // NOTE: This is only used by QuickOffice extension to register MIME types
270 // it can handle by directly downloading them. It will *not* be used in File
271 // Manager UI. This is why file filters are mandatory even when MIME type
272 // filters are specified.
273 const ListValue* mime_type_filters = NULL;
274 if (file_browser_handler->HasKey(keys::kMIMETypes)) {
275 if (!FileBrowserHandler::ExtensionWhitelistedForMIMETypes(extension_id)) {
276 *error = ASCIIToUTF16(
277 errors::kNoPermissionForFileBrowserHandlerMIMETypes);
278 return NULL;
279 }
280
281 if (!file_browser_handler->GetList(keys::kMIMETypes,
282 &mime_type_filters)) {
283 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandlerMIMETypes);
284 return NULL;
285 }
286
287 for (size_t i = 0; i < mime_type_filters->GetSize(); ++i) {
288 std::string filter;
289 if (!mime_type_filters->GetString(i, &filter)) {
290 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandlerMIMETypes);
291 return NULL;
292 }
293 result->AddMIMEType(filter);
294 }
295 }
296 } 229 }
297 230
298 std::string default_icon; 231 std::string default_icon;
299 // Read the file browser action |default_icon| (optional). 232 // Read the file browser action |default_icon| (optional).
300 if (file_browser_handler->HasKey(keys::kPageActionDefaultIcon)) { 233 if (file_browser_handler->HasKey(keys::kPageActionDefaultIcon)) {
301 if (!file_browser_handler->GetString( 234 if (!file_browser_handler->GetString(
302 keys::kPageActionDefaultIcon, &default_icon) || 235 keys::kPageActionDefaultIcon, &default_icon) ||
303 default_icon.empty()) { 236 default_icon.empty()) {
304 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath); 237 *error = ASCIIToUTF16(errors::kInvalidPageActionIconPath);
305 return NULL; 238 return NULL;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 return false; // Failed to parse file browser actions definition. 284 return false; // Failed to parse file browser actions definition.
352 } 285 }
353 286
354 extension->SetManifestData(keys::kFileBrowserHandlers, info.release()); 287 extension->SetManifestData(keys::kFileBrowserHandlers, info.release());
355 return true; 288 return true;
356 } 289 }
357 290
358 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { 291 const std::vector<std::string> FileBrowserHandlerParser::Keys() const {
359 return SingleKey(keys::kFileBrowserHandlers); 292 return SingleKey(keys::kFileBrowserHandlers);
360 } 293 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698