summaryrefslogtreecommitdiffstats
path: root/chrome/browser/plugin_finder.cc
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-09 15:59:10 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-02-09 15:59:10 +0000
commit27c4838940aae23f852a95fa280d8106a083b3bb (patch)
tree2f36e0780abd1e40c92be7114b114c91e0124e29 /chrome/browser/plugin_finder.cc
parent97a4b0fd3ee439f584004a447712447bf9df011e (diff)
downloadchromium_src-27c4838940aae23f852a95fa280d8106a083b3bb.zip
chromium_src-27c4838940aae23f852a95fa280d8106a083b3bb.tar.gz
chromium_src-27c4838940aae23f852a95fa280d8106a083b3bb.tar.bz2
Reland 121057 - Use PluginInstaller to update outdated plug-ins.
Original review at http://codereview.chromium.org/9107038/. TBR=arv@chromium.org BUG=92796 Review URL: http://codereview.chromium.org/9372020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@121239 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/plugin_finder.cc')
-rw-r--r--chrome/browser/plugin_finder.cc138
1 files changed, 89 insertions, 49 deletions
diff --git a/chrome/browser/plugin_finder.cc b/chrome/browser/plugin_finder.cc
index f33253b..2e90b54 100644
--- a/chrome/browser/plugin_finder.cc
+++ b/chrome/browser/plugin_finder.cc
@@ -36,7 +36,7 @@ scoped_ptr<base::ListValue> PluginFinder::LoadPluginList() {
}
base::ListValue* PluginFinder::LoadPluginListInternal() {
-#if defined(OS_WIN) || defined(OS_MACOSX)
+#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
base::StringPiece json_resource(
ResourceBundle::GetSharedInstance().GetRawDataResource(
IDR_PLUGIN_DB_JSON));
@@ -70,60 +70,100 @@ PluginFinder::~PluginFinder() {
void PluginFinder::FindPlugin(
const std::string& mime_type,
const std::string& language,
- const FindPluginCallback& found_callback,
- const base::Closure& not_found_callback) {
- if (g_browser_process->local_state()->GetBoolean(
- prefs::kDisablePluginFinder)) {
- MessageLoop::current()->PostTask(FROM_HERE, not_found_callback);
- return;
- }
- for (ListValue::const_iterator plugin_it = plugin_list_->begin();
- plugin_it != plugin_list_->end(); ++plugin_it) {
- const base::DictionaryValue* plugin = NULL;
- if (!(*plugin_it)->GetAsDictionary(&plugin)) {
- NOTREACHED();
- continue;
+ const FindPluginCallback& callback) {
+ PluginInstaller* installer = FindPluginInternal(mime_type, language);
+ MessageLoop::current()->PostTask(FROM_HERE, base::Bind(callback, installer));
+}
+
+void PluginFinder::FindPluginWithIdentifier(
+ const std::string& identifier,
+ const FindPluginCallback& found_callback) {
+ PluginInstaller* installer = NULL;
+ std::map<std::string, PluginInstaller*>::const_iterator it =
+ installers_.find(identifier);
+ if (it != installers_.end()) {
+ installer = it->second;
+ } else {
+ for (ListValue::const_iterator plugin_it = plugin_list_->begin();
+ plugin_it != plugin_list_->end(); ++plugin_it) {
+ const base::DictionaryValue* plugin = NULL;
+ if (!(*plugin_it)->GetAsDictionary(&plugin)) {
+ NOTREACHED();
+ continue;
+ }
+ std::string id;
+ bool success = plugin->GetString("identifier", &id);
+ DCHECK(success);
+ if (id == identifier) {
+ installer = CreateInstaller(identifier, plugin);
+ break;
+ }
}
- std::string language_str;
- bool success = plugin->GetString("lang", &language_str);
- DCHECK(success);
- if (language_str != language)
- continue;
- ListValue* mime_types = NULL;
- success = plugin->GetList("mime_types", &mime_types);
- DCHECK(success);
- for (ListValue::const_iterator mime_type_it = mime_types->begin();
- mime_type_it != mime_types->end(); ++mime_type_it) {
- std::string mime_type_str;
- success = (*mime_type_it)->GetAsString(&mime_type_str);
+ }
+ MessageLoop::current()->PostTask(FROM_HERE,
+ base::Bind(found_callback, installer));
+}
+
+PluginInstaller* PluginFinder::CreateInstaller(
+ const std::string& identifier,
+ const base::DictionaryValue* plugin_dict) {
+ DCHECK(!installers_[identifier]);
+ std::string url;
+ bool success = plugin_dict->GetString("url", &url);
+ DCHECK(success);
+ std::string help_url;
+ plugin_dict->GetString("help_url", &help_url);
+ string16 name;
+ success = plugin_dict->GetString("name", &name);
+ DCHECK(success);
+ bool display_url = false;
+ plugin_dict->GetBoolean("displayurl", &display_url);
+ PluginInstaller*installer = new PluginInstaller(identifier,
+ GURL(url),
+ GURL(help_url),
+ name,
+ display_url);
+ installers_[identifier] = installer;
+ return installer;
+}
+
+PluginInstaller* PluginFinder::FindPluginInternal(
+ const std::string& mime_type,
+ const std::string& language) {
+ if (!g_browser_process->local_state()->GetBoolean(
+ prefs::kDisablePluginFinder)) {
+ for (ListValue::const_iterator plugin_it = plugin_list_->begin();
+ plugin_it != plugin_list_->end(); ++plugin_it) {
+ const base::DictionaryValue* plugin = NULL;
+ if (!(*plugin_it)->GetAsDictionary(&plugin)) {
+ NOTREACHED();
+ continue;
+ }
+ std::string language_str;
+ bool success = plugin->GetString("lang", &language_str);
DCHECK(success);
- if (mime_type_str == mime_type) {
- std::string identifier;
- success = plugin->GetString("identifier", &identifier);
+ if (language_str != language)
+ continue;
+ ListValue* mime_types = NULL;
+ success = plugin->GetList("mime_types", &mime_types);
+ DCHECK(success);
+ for (ListValue::const_iterator mime_type_it = mime_types->begin();
+ mime_type_it != mime_types->end(); ++mime_type_it) {
+ std::string mime_type_str;
+ success = (*mime_type_it)->GetAsString(&mime_type_str);
DCHECK(success);
- PluginInstaller* installer = installers_[identifier];
- if (!installer) {
- std::string url;
- success = plugin->GetString("url", &url);
- DCHECK(success);
- std::string help_url;
- plugin->GetString("help_url", &help_url);
- string16 name;
- success = plugin->GetString("name", &name);
+ if (mime_type_str == mime_type) {
+ std::string identifier;
+ bool success = plugin->GetString("identifier", &identifier);
DCHECK(success);
- bool display_url = false;
- plugin->GetBoolean("displayurl", &display_url);
- installer = new PluginInstaller(identifier,
- GURL(url), GURL(help_url), name,
- display_url);
- installers_[identifier] = installer;
+ std::map<std::string, PluginInstaller*>::const_iterator it =
+ installers_.find(identifier);
+ if (it != installers_.end())
+ return it->second;
+ return CreateInstaller(identifier, plugin);
}
- MessageLoop::current()->PostTask(
- FROM_HERE,
- base::Bind(found_callback, installer));
- return;
}
}
}
- MessageLoop::current()->PostTask(FROM_HERE, not_found_callback);
+ return NULL;
}