| OLD | NEW |
| 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 "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/strings/utf_string_conversions.h" | 10 #include "base/strings/utf_string_conversions.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 } | 126 } |
| 127 | 127 |
| 128 FileBrowserHandlerParser::~FileBrowserHandlerParser() { | 128 FileBrowserHandlerParser::~FileBrowserHandlerParser() { |
| 129 } | 129 } |
| 130 | 130 |
| 131 namespace { | 131 namespace { |
| 132 | 132 |
| 133 FileBrowserHandler* LoadFileBrowserHandler( | 133 FileBrowserHandler* LoadFileBrowserHandler( |
| 134 const std::string& extension_id, | 134 const std::string& extension_id, |
| 135 const DictionaryValue* file_browser_handler, | 135 const DictionaryValue* file_browser_handler, |
| 136 string16* error) { | 136 base::string16* error) { |
| 137 scoped_ptr<FileBrowserHandler> result(new FileBrowserHandler()); | 137 scoped_ptr<FileBrowserHandler> result(new FileBrowserHandler()); |
| 138 result->set_extension_id(extension_id); | 138 result->set_extension_id(extension_id); |
| 139 | 139 |
| 140 std::string handler_id; | 140 std::string handler_id; |
| 141 // Read the file action |id| (mandatory). | 141 // Read the file action |id| (mandatory). |
| 142 if (!file_browser_handler->HasKey(keys::kPageActionId) || | 142 if (!file_browser_handler->HasKey(keys::kPageActionId) || |
| 143 !file_browser_handler->GetString(keys::kPageActionId, &handler_id)) { | 143 !file_browser_handler->GetString(keys::kPageActionId, &handler_id)) { |
| 144 *error = ASCIIToUTF16(errors::kInvalidPageActionId); | 144 *error = ASCIIToUTF16(errors::kInvalidPageActionId); |
| 145 return NULL; | 145 return NULL; |
| 146 } | 146 } |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 } | 238 } |
| 239 | 239 |
| 240 return result.release(); | 240 return result.release(); |
| 241 } | 241 } |
| 242 | 242 |
| 243 // Loads FileBrowserHandlers from |extension_actions| into a list in |result|. | 243 // Loads FileBrowserHandlers from |extension_actions| into a list in |result|. |
| 244 bool LoadFileBrowserHandlers( | 244 bool LoadFileBrowserHandlers( |
| 245 const std::string& extension_id, | 245 const std::string& extension_id, |
| 246 const ListValue* extension_actions, | 246 const ListValue* extension_actions, |
| 247 FileBrowserHandler::List* result, | 247 FileBrowserHandler::List* result, |
| 248 string16* error) { | 248 base::string16* error) { |
| 249 for (ListValue::const_iterator iter = extension_actions->begin(); | 249 for (ListValue::const_iterator iter = extension_actions->begin(); |
| 250 iter != extension_actions->end(); | 250 iter != extension_actions->end(); |
| 251 ++iter) { | 251 ++iter) { |
| 252 if (!(*iter)->IsType(Value::TYPE_DICTIONARY)) { | 252 if (!(*iter)->IsType(Value::TYPE_DICTIONARY)) { |
| 253 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandler); | 253 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandler); |
| 254 return false; | 254 return false; |
| 255 } | 255 } |
| 256 scoped_ptr<FileBrowserHandler> action( | 256 scoped_ptr<FileBrowserHandler> action( |
| 257 LoadFileBrowserHandler( | 257 LoadFileBrowserHandler( |
| 258 extension_id, reinterpret_cast<DictionaryValue*>(*iter), error)); | 258 extension_id, reinterpret_cast<DictionaryValue*>(*iter), error)); |
| 259 if (!action.get()) | 259 if (!action.get()) |
| 260 return false; // Failed to parse file browser action definition. | 260 return false; // Failed to parse file browser action definition. |
| 261 result->push_back(linked_ptr<FileBrowserHandler>(action.release())); | 261 result->push_back(linked_ptr<FileBrowserHandler>(action.release())); |
| 262 } | 262 } |
| 263 return true; | 263 return true; |
| 264 } | 264 } |
| 265 | 265 |
| 266 } // namespace | 266 } // namespace |
| 267 | 267 |
| 268 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, | 268 bool FileBrowserHandlerParser::Parse(extensions::Extension* extension, |
| 269 string16* error) { | 269 base::string16* error) { |
| 270 const ListValue* file_browser_handlers_value = NULL; | 270 const ListValue* file_browser_handlers_value = NULL; |
| 271 if (!extension->manifest()->GetList(keys::kFileBrowserHandlers, | 271 if (!extension->manifest()->GetList(keys::kFileBrowserHandlers, |
| 272 &file_browser_handlers_value)) { | 272 &file_browser_handlers_value)) { |
| 273 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandler); | 273 *error = ASCIIToUTF16(errors::kInvalidFileBrowserHandler); |
| 274 return false; | 274 return false; |
| 275 } | 275 } |
| 276 scoped_ptr<FileBrowserHandlerInfo> info(new FileBrowserHandlerInfo); | 276 scoped_ptr<FileBrowserHandlerInfo> info(new FileBrowserHandlerInfo); |
| 277 if (!LoadFileBrowserHandlers(extension->id(), | 277 if (!LoadFileBrowserHandlers(extension->id(), |
| 278 file_browser_handlers_value, | 278 file_browser_handlers_value, |
| 279 &info->file_browser_handlers, | 279 &info->file_browser_handlers, |
| 280 error)) { | 280 error)) { |
| 281 return false; // Failed to parse file browser actions definition. | 281 return false; // Failed to parse file browser actions definition. |
| 282 } | 282 } |
| 283 | 283 |
| 284 extension->SetManifestData(keys::kFileBrowserHandlers, info.release()); | 284 extension->SetManifestData(keys::kFileBrowserHandlers, info.release()); |
| 285 return true; | 285 return true; |
| 286 } | 286 } |
| 287 | 287 |
| 288 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { | 288 const std::vector<std::string> FileBrowserHandlerParser::Keys() const { |
| 289 return SingleKey(keys::kFileBrowserHandlers); | 289 return SingleKey(keys::kFileBrowserHandlers); |
| 290 } | 290 } |
| OLD | NEW |