#include "base/memory/scoped_ptr.h"
#include "base/strings/string_number_conversions.h"
+#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
#include "extensions/common/error_utils.h"
namespace {
const int kMaxTypeAndExtensionHandlers = 200;
+const char kNotRecognized[] = "'%s' is not a recognized file handler property.";
}
FileHandlerInfo::FileHandlerInfo() {}
bool LoadFileHandler(const std::string& handler_id,
const base::DictionaryValue& handler_info,
FileHandlersInfo* file_handlers,
- base::string16* error) {
+ base::string16* error,
+ std::vector<InstallWarning>* install_warnings) {
DCHECK(error);
FileHandlerInfo handler;
return false;
}
- if (handler_info.HasKey(keys::kFileHandlerTitle) &&
- !handler_info.GetString(keys::kFileHandlerTitle, &handler.title)) {
- *error = base::ASCIIToUTF16(errors::kInvalidFileHandlerTitle);
- return false;
- }
-
if (mime_types) {
std::string type;
for (size_t i = 0; i < mime_types->GetSize(); ++i) {
}
file_handlers->push_back(handler);
+
+ // Check for unknown keys.
+ for (base::DictionaryValue::Iterator it(handler_info); !it.IsAtEnd();
+ it.Advance()) {
+ if (it.key() != keys::kFileHandlerExtensions &&
+ it.key() != keys::kFileHandlerTypes) {
+ install_warnings->push_back(
+ InstallWarning(base::StringPrintf(kNotRecognized, it.key().c_str()),
+ keys::kFileHandlers,
+ it.key()));
+ }
+ }
+
return true;
}
return false;
}
+ std::vector<InstallWarning> install_warnings;
for (base::DictionaryValue::Iterator iter(*all_handlers);
!iter.IsAtEnd();
iter.Advance()) {
- // A file handler entry is a title and a list of MIME types to handle.
const base::DictionaryValue* handler = NULL;
if (iter.value().GetAsDictionary(&handler)) {
- if (!LoadFileHandler(iter.key(), *handler, &info->file_handlers, error))
+ if (!LoadFileHandler(iter.key(),
+ *handler,
+ &info->file_handlers,
+ error,
+ &install_warnings))
return false;
} else {
*error = base::ASCIIToUTF16(errors::kInvalidFileHandlers);
}
extension->SetManifestData(keys::kFileHandlers, info.release());
+ extension->AddInstallWarnings(install_warnings);
return true;
}