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

Side by Side Diff: chrome/common/extensions/api/file_browser_handlers/file_browser_handler.cc

Issue 2729503003: file_browser_handler/ -> remove linked_ptr usage. (Closed)
Patch Set: address comments Created 3 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
« no previous file with comments | « chrome/common/extensions/api/file_browser_handlers/file_browser_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/common/extensions/api/file_browser_handlers/file_browser_handle r.h" 5 #include "chrome/common/extensions/api/file_browser_handlers/file_browser_handle r.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 } 131 }
132 132
133 FileBrowserHandlerParser::FileBrowserHandlerParser() { 133 FileBrowserHandlerParser::FileBrowserHandlerParser() {
134 } 134 }
135 135
136 FileBrowserHandlerParser::~FileBrowserHandlerParser() { 136 FileBrowserHandlerParser::~FileBrowserHandlerParser() {
137 } 137 }
138 138
139 namespace { 139 namespace {
140 140
141 FileBrowserHandler* LoadFileBrowserHandler( 141 std::unique_ptr<FileBrowserHandler> LoadFileBrowserHandler(
142 const std::string& extension_id, 142 const std::string& extension_id,
143 const base::DictionaryValue* file_browser_handler, 143 const base::DictionaryValue* file_browser_handler,
144 base::string16* error) { 144 base::string16* error) {
145 std::unique_ptr<FileBrowserHandler> result(new FileBrowserHandler()); 145 std::unique_ptr<FileBrowserHandler> result(new FileBrowserHandler());
146 result->set_extension_id(extension_id); 146 result->set_extension_id(extension_id);
147 147
148 std::string handler_id; 148 std::string handler_id;
149 // Read the file action |id| (mandatory). 149 // Read the file action |id| (mandatory).
150 if (!file_browser_handler->HasKey(keys::kPageActionId) || 150 if (!file_browser_handler->HasKey(keys::kPageActionId) ||
151 !file_browser_handler->GetString(keys::kPageActionId, &handler_id)) { 151 !file_browser_handler->GetString(keys::kPageActionId, &handler_id)) {
152 *error = base::ASCIIToUTF16(errors::kInvalidPageActionId); 152 *error = base::ASCIIToUTF16(errors::kInvalidPageActionId);
153 return NULL; 153 return nullptr;
154 } 154 }
155 result->set_id(handler_id); 155 result->set_id(handler_id);
156 156
157 // Read the page action title from |default_title| (mandatory). 157 // Read the page action title from |default_title| (mandatory).
158 std::string title; 158 std::string title;
159 if (!file_browser_handler->HasKey(keys::kPageActionDefaultTitle) || 159 if (!file_browser_handler->HasKey(keys::kPageActionDefaultTitle) ||
160 !file_browser_handler->GetString(keys::kPageActionDefaultTitle, &title)) { 160 !file_browser_handler->GetString(keys::kPageActionDefaultTitle, &title)) {
161 *error = base::ASCIIToUTF16(errors::kInvalidPageActionDefaultTitle); 161 *error = base::ASCIIToUTF16(errors::kInvalidPageActionDefaultTitle);
162 return NULL; 162 return nullptr;
163 } 163 }
164 result->set_title(title); 164 result->set_title(title);
165 165
166 // Initialize access permissions (optional). 166 // Initialize access permissions (optional).
167 const base::ListValue* access_list_value = NULL; 167 const base::ListValue* access_list_value = nullptr;
168 if (file_browser_handler->HasKey(keys::kFileAccessList)) { 168 if (file_browser_handler->HasKey(keys::kFileAccessList)) {
169 if (!file_browser_handler->GetList(keys::kFileAccessList, 169 if (!file_browser_handler->GetList(keys::kFileAccessList,
170 &access_list_value) || 170 &access_list_value) ||
171 access_list_value->empty()) { 171 access_list_value->empty()) {
172 *error = base::ASCIIToUTF16(errors::kInvalidFileAccessList); 172 *error = base::ASCIIToUTF16(errors::kInvalidFileAccessList);
173 return NULL; 173 return nullptr;
174 } 174 }
175 for (size_t i = 0; i < access_list_value->GetSize(); ++i) { 175 for (size_t i = 0; i < access_list_value->GetSize(); ++i) {
176 std::string access; 176 std::string access;
177 if (!access_list_value->GetString(i, &access) || 177 if (!access_list_value->GetString(i, &access) ||
178 result->AddFileAccessPermission(access)) { 178 result->AddFileAccessPermission(access)) {
179 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 179 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
180 errors::kInvalidFileAccessValue, base::IntToString(i)); 180 errors::kInvalidFileAccessValue, base::IntToString(i));
181 return NULL; 181 return nullptr;
182 } 182 }
183 } 183 }
184 } 184 }
185 if (!result->ValidateFileAccessPermissions()) { 185 if (!result->ValidateFileAccessPermissions()) {
186 *error = base::ASCIIToUTF16(errors::kInvalidFileAccessList); 186 *error = base::ASCIIToUTF16(errors::kInvalidFileAccessList);
187 return NULL; 187 return nullptr;
188 } 188 }
189 189
190 // Initialize file filters (mandatory, unless "create" access is specified, 190 // Initialize file filters (mandatory, unless "create" access is specified,
191 // in which case is ignored). The list can be empty. 191 // in which case is ignored). The list can be empty.
192 if (!result->HasCreateAccessPermission()) { 192 if (!result->HasCreateAccessPermission()) {
193 const base::ListValue* file_filters = NULL; 193 const base::ListValue* file_filters = nullptr;
194 if (!file_browser_handler->HasKey(keys::kFileFilters) || 194 if (!file_browser_handler->HasKey(keys::kFileFilters) ||
195 !file_browser_handler->GetList(keys::kFileFilters, &file_filters)) { 195 !file_browser_handler->GetList(keys::kFileFilters, &file_filters)) {
196 *error = base::ASCIIToUTF16(errors::kInvalidFileFiltersList); 196 *error = base::ASCIIToUTF16(errors::kInvalidFileFiltersList);
197 return NULL; 197 return nullptr;
198 } 198 }
199 for (size_t i = 0; i < file_filters->GetSize(); ++i) { 199 for (size_t i = 0; i < file_filters->GetSize(); ++i) {
200 std::string filter; 200 std::string filter;
201 if (!file_filters->GetString(i, &filter)) { 201 if (!file_filters->GetString(i, &filter)) {
202 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 202 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
203 errors::kInvalidFileFilterValue, base::IntToString(i)); 203 errors::kInvalidFileFilterValue, base::IntToString(i));
204 return NULL; 204 return nullptr;
205 } 205 }
206 filter = base::ToLowerASCII(filter); 206 filter = base::ToLowerASCII(filter);
207 if (!base::StartsWith(filter, std::string(url::kFileSystemScheme) + ':', 207 if (!base::StartsWith(filter, std::string(url::kFileSystemScheme) + ':',
208 base::CompareCase::SENSITIVE)) { 208 base::CompareCase::SENSITIVE)) {
209 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 209 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
210 errors::kInvalidURLPatternError, filter); 210 errors::kInvalidURLPatternError, filter);
211 return NULL; 211 return nullptr;
212 } 212 }
213 // The user inputs filesystem:*; we don't actually implement scheme 213 // The user inputs filesystem:*; we don't actually implement scheme
214 // wildcards in URLPattern, so transform to what will match correctly. 214 // wildcards in URLPattern, so transform to what will match correctly.
215 filter.replace(0, 11, "chrome-extension://*/"); 215 filter.replace(0, 11, "chrome-extension://*/");
216 URLPattern pattern(URLPattern::SCHEME_EXTENSION); 216 URLPattern pattern(URLPattern::SCHEME_EXTENSION);
217 if (pattern.Parse(filter) != URLPattern::PARSE_SUCCESS) { 217 if (pattern.Parse(filter) != URLPattern::PARSE_SUCCESS) {
218 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 218 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
219 errors::kInvalidURLPatternError, filter); 219 errors::kInvalidURLPatternError, filter);
220 return NULL; 220 return nullptr;
221 } 221 }
222 std::string path = pattern.path(); 222 std::string path = pattern.path();
223 bool allowed = path == "/*" || path == "/*.*" || 223 bool allowed = path == "/*" || path == "/*.*" ||
224 (path.compare(0, 3, "/*.") == 0 && 224 (path.compare(0, 3, "/*.") == 0 &&
225 path.find_first_of('*', 3) == std::string::npos); 225 path.find_first_of('*', 3) == std::string::npos);
226 if (!allowed) { 226 if (!allowed) {
227 *error = extensions::ErrorUtils::FormatErrorMessageUTF16( 227 *error = extensions::ErrorUtils::FormatErrorMessageUTF16(
228 errors::kInvalidURLPatternError, filter); 228 errors::kInvalidURLPatternError, filter);
229 return NULL; 229 return nullptr;
230 } 230 }
231 result->AddPattern(pattern); 231 result->AddPattern(pattern);
232 } 232 }
233 } 233 }
234 234
235 std::string default_icon; 235 std::string default_icon;
236 // Read the file browser action |default_icon| (optional). 236 // Read the file browser action |default_icon| (optional).
237 if (file_browser_handler->HasKey(keys::kPageActionDefaultIcon)) { 237 if (file_browser_handler->HasKey(keys::kPageActionDefaultIcon)) {
238 if (!file_browser_handler->GetString( 238 if (!file_browser_handler->GetString(
239 keys::kPageActionDefaultIcon, &default_icon) || 239 keys::kPageActionDefaultIcon, &default_icon) ||
240 default_icon.empty()) { 240 default_icon.empty()) {
241 *error = base::ASCIIToUTF16(errors::kInvalidPageActionIconPath); 241 *error = base::ASCIIToUTF16(errors::kInvalidPageActionIconPath);
242 return NULL; 242 return nullptr;
243 } 243 }
244 result->set_icon_path(default_icon); 244 result->set_icon_path(default_icon);
245 } 245 }
246 246
247 return result.release(); 247 return result;
248 } 248 }
249 249
250 // Loads FileBrowserHandlers from |extension_actions| into a list in |result|. 250 // Loads FileBrowserHandlers from |extension_actions| into a list in |result|.
251 bool LoadFileBrowserHandlers( 251 bool LoadFileBrowserHandlers(
252 const std::string& extension_id, 252 const std::string& extension_id,
253 const base::ListValue* extension_actions, 253 const base::ListValue* extension_actions,
254 FileBrowserHandler::List* result, 254 FileBrowserHandler::List* result,
255 base::string16* error) { 255 base::string16* error) {
256 for (const auto& entry : *extension_actions) { 256 for (const auto& entry : *extension_actions) {
257 base::DictionaryValue* dict; 257 base::DictionaryValue* dict;
258 if (!entry->GetAsDictionary(&dict)) { 258 if (!entry->GetAsDictionary(&dict)) {
259 *error = base::ASCIIToUTF16(errors::kInvalidFileBrowserHandler); 259 *error = base::ASCIIToUTF16(errors::kInvalidFileBrowserHandler);
260 return false; 260 return false;
261 } 261 }
262 std::unique_ptr<FileBrowserHandler> action( 262 std::unique_ptr<FileBrowserHandler> action =
263 LoadFileBrowserHandler(extension_id, dict, error)); 263 LoadFileBrowserHandler(extension_id, dict, error);
264 if (!action.get()) 264 if (!action)
265 return false; // Failed to parse file browser action definition. 265 return false; // Failed to parse file browser action definition.
266 result->push_back(linked_ptr<FileBrowserHandler>(action.release())); 266 result->push_back(std::move(action));
267 } 267 }
268 return true; 268 return true;
269 } 269 }
270 270
271 } // namespace 271 } // namespace
272 272
273 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, 273 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension,
274 base::string16* error) { 274 base::string16* error) {
275 const base::Value* file_browser_handlers_value = nullptr; 275 const base::Value* file_browser_handlers_value = nullptr;
276 if (!extension->manifest()->Get(keys::kFileBrowserHandlers, 276 if (!extension->manifest()->Get(keys::kFileBrowserHandlers,
(...skipping 22 matching lines...) Expand all
299 return false; // Failed to parse file browser actions definition. 299 return false; // Failed to parse file browser actions definition.
300 } 300 }
301 301
302 extension->SetManifestData(keys::kFileBrowserHandlers, std::move(info)); 302 extension->SetManifestData(keys::kFileBrowserHandlers, std::move(info));
303 return true; 303 return true;
304 } 304 }
305 305
306 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { 306 const std::vector<std::string> FileBrowserHandlerParser::Keys() const {
307 return SingleKey(keys::kFileBrowserHandlers); 307 return SingleKey(keys::kFileBrowserHandlers);
308 } 308 }
OLDNEW
« no previous file with comments | « chrome/common/extensions/api/file_browser_handlers/file_browser_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698