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

Unified Diff: webkit/glue/plugins/plugin_lib_linux.cc

Issue 193046: linux: write a unit test for plugin mime parsing (Closed)
Patch Set: japanese Created 11 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/glue/plugins/plugin_lib.h ('k') | webkit/glue/plugins/plugin_lib_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webkit/glue/plugins/plugin_lib_linux.cc
diff --git a/webkit/glue/plugins/plugin_lib_linux.cc b/webkit/glue/plugins/plugin_lib_linux.cc
index 559495a54861a28fafb665c8c785aadd48de89ed..9223d5640f1abe29d7e318d215ac8f1ebb410d6f 100644
--- a/webkit/glue/plugins/plugin_lib_linux.cc
+++ b/webkit/glue/plugins/plugin_lib_linux.cc
@@ -82,28 +82,9 @@ bool PluginLib::ReadWebPluginInfo(const FilePath& filename,
mime_description = NP_GetMIMEDescription();
if (mime_description) {
- // We parse the description here into WebPluginMimeType structures.
- // Description for Flash 10 looks like (all as one string):
- // "application/x-shockwave-flash:swf:Shockwave Flash;"
- // "application/futuresplash:spl:FutureSplash Player"
- std::vector<std::string> descriptions;
- SplitString(mime_description, ';', &descriptions);
- for (size_t i = 0; i < descriptions.size(); ++i) {
- if (descriptions[i].empty())
- continue; // Don't warn if they have trailing semis.
-
- std::vector<std::string> fields;
- SplitString(descriptions[i], ':', &fields);
- if (fields.size() != 3) {
- LOG(WARNING) << "Couldn't parse plugin info: " << descriptions[i];
- continue;
- }
-
- WebPluginMimeType mime_type;
- mime_type.mime_type = fields[0];
- SplitString(fields[1], ',', &mime_type.file_extensions);
- mime_type.description = UTF8ToWide(fields[2]);
- info->mime_types.push_back(mime_type);
+ if (!ParseMIMEDescription(mime_description, &info->mime_types)) {
+ base::UnloadNativeLibrary(dl);
+ return false;
}
}
@@ -130,4 +111,40 @@ bool PluginLib::ReadWebPluginInfo(const FilePath& filename,
return true;
}
+// static
+bool PluginLib::ParseMIMEDescription(
+ const char* description,
+ std::vector<WebPluginMimeType>* mime_types) {
+ // TODO(evanm): rewrite this to better match Firefox; see
+ // ParsePluginMimeDescription near
+ // http://mxr.mozilla.org/firefox/source/modules/plugin/base/src/nsPluginsDirUtils.h#53
+
+ // We parse the description here into WebPluginMimeType structures.
+ // Description for Flash 10 looks like (all as one string):
+ // "application/x-shockwave-flash:swf:Shockwave Flash;"
+ // "application/futuresplash:spl:FutureSplash Player"
+ std::vector<std::string> descriptions;
+ SplitString(description, ';', &descriptions);
+ for (size_t i = 0; i < descriptions.size(); ++i) {
+ if (descriptions[i].empty())
+ continue; // Don't warn if they have trailing semis.
+
+ std::vector<std::string> fields;
+ SplitString(descriptions[i], ':', &fields);
+ if (fields.size() != 3) {
+ LOG(WARNING) << "Couldn't parse plugin info: " << description;
+ // This plugin's got something weird going on; abort.
+ return false;
+ }
+
+ WebPluginMimeType mime_type;
+ mime_type.mime_type = fields[0];
+ SplitString(fields[1], ',', &mime_type.file_extensions);
+ mime_type.description = UTF8ToWide(fields[2]);
+ mime_types->push_back(mime_type);
+ }
+
+ return true;
+}
+
} // namespace NPAPI
« no previous file with comments | « webkit/glue/plugins/plugin_lib.h ('k') | webkit/glue/plugins/plugin_lib_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698