Index: third_party/WebKit/Source/platform/plugins/PluginData.cpp |
diff --git a/third_party/WebKit/Source/platform/plugins/PluginData.cpp b/third_party/WebKit/Source/platform/plugins/PluginData.cpp |
index 03618f6a3d96275a59c9644759ac3afacf588068..2511cddc67fd1eb1713bc9653d80a6e3accc0191 100644 |
--- a/third_party/WebKit/Source/platform/plugins/PluginData.cpp |
+++ b/third_party/WebKit/Source/platform/plugins/PluginData.cpp |
@@ -30,51 +30,84 @@ |
namespace blink { |
-PluginData::PluginData(SecurityOrigin* main_frame_origin) |
- : main_frame_origin_(main_frame_origin) { |
- PluginListBuilder builder(&plugins_); |
- Platform::Current()->GetPluginList( |
- false, WebSecurityOrigin(main_frame_origin_), &builder); |
+DEFINE_TRACE(MimeClassInfo) { |
+ visitor->Trace(plugin_); |
+} |
- for (unsigned i = 0; i < plugins_.size(); ++i) { |
- const PluginInfo& plugin = plugins_[i]; |
- for (unsigned j = 0; j < plugin.mimes.size(); ++j) { |
- mimes_.push_back(plugin.mimes[j]); |
- mime_plugin_indices_.push_back(i); |
- } |
- } |
+MimeClassInfo::MimeClassInfo(const String& type, |
+ const String& description, |
+ PluginInfo& plugin) |
+ : type_(type), description_(description), plugin_(&plugin) {} |
+ |
+DEFINE_TRACE(PluginInfo) { |
+ visitor->Trace(mimes_); |
} |
-bool PluginData::SupportsMimeType(const String& mime_type) const { |
- for (unsigned i = 0; i < mimes_.size(); ++i) |
- if (mimes_[i].type == mime_type) |
- return true; |
- return false; |
+PluginInfo::PluginInfo(const String& name, |
+ const String& filename, |
+ const String& description) |
+ : name_(name), filename_(filename), description_(description) {} |
+ |
+void PluginInfo::AddMimeType(MimeClassInfo* info) { |
+ mimes_.push_back(info); |
} |
-const PluginInfo* PluginData::PluginInfoForMimeType( |
- const String& mime_type) const { |
- for (unsigned i = 0; i < mimes_.size(); ++i) { |
- const MimeClassInfo& info = mimes_[i]; |
+const MimeClassInfo* PluginInfo::GetMimeClassInfo(size_t index) const { |
+ if (index > mimes_.size()) |
+ return nullptr; |
+ return mimes_[index]; |
+} |
- if (info.type == mime_type) |
- return &plugins_[mime_plugin_indices_[i]]; |
+const MimeClassInfo* PluginInfo::GetMimeClassInfo(const String& type) const { |
+ for (MimeClassInfo* mime : mimes_) { |
+ if (mime->Type() == type) |
+ return mime; |
} |
- return 0; |
+ return nullptr; |
} |
-String PluginData::PluginNameForMimeType(const String& mime_type) const { |
- if (const PluginInfo* info = PluginInfoForMimeType(mime_type)) |
- return info->name; |
- return String(); |
+size_t PluginInfo::GetMimeClassInfoSize() const { |
+ return mimes_.size(); |
} |
+DEFINE_TRACE(PluginData) { |
+ visitor->Trace(plugins_); |
+ visitor->Trace(mimes_); |
+} |
+ |
+// static |
void PluginData::RefreshBrowserSidePluginCache() { |
- Vector<PluginInfo> plugins; |
- PluginListBuilder builder(&plugins); |
+ PluginListBuilder builder(nullptr); |
Platform::Current()->GetPluginList(true, WebSecurityOrigin::CreateUnique(), |
&builder); |
} |
+void PluginData::UpdatePluginList(SecurityOrigin* main_frame_origin) { |
+ main_frame_origin_ = main_frame_origin; |
+ PluginListBuilder builder(&plugins_); |
+ Platform::Current()->GetPluginList( |
+ false, WebSecurityOrigin(main_frame_origin_), &builder); |
+ |
+ for (PluginInfo* plugin_info : plugins_) { |
+ for (MimeClassInfo* mime_class_info : plugin_info->mimes_) |
+ mimes_.push_back(mime_class_info); |
+ } |
+} |
+ |
+void PluginData::ResetPluginData() { |
+ plugins_.clear(); |
+ mimes_.clear(); |
+ main_frame_origin_ = nullptr; |
+} |
+ |
+bool PluginData::SupportsMimeType(const String& mime_type) const { |
+ for (const MimeClassInfo* info : mimes_) { |
+ if (info->type_ == mime_type) |
+ return true; |
+ } |
+ |
+ return false; |
+} |
+ |
} // namespace blink |