summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-28 16:21:11 +0000
committerbauerb@chromium.org <bauerb@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-28 16:21:11 +0000
commit79fa3363afd7282bcde23b532b95e93e46eb55f3 (patch)
tree7127a544eb1c4b8152c777491c397577952bfbee
parentf10e3c034464f49566faee354e6bcf64647d536b (diff)
downloadchromium_src-79fa3363afd7282bcde23b532b95e93e46eb55f3.zip
chromium_src-79fa3363afd7282bcde23b532b95e93e46eb55f3.tar.gz
chromium_src-79fa3363afd7282bcde23b532b95e93e46eb55f3.tar.bz2
Revert 129322 - revert 128949 (and dependent 129252)
Original review URL: http://codereview.chromium.org/9874001 BUG=120273 TEST=none TBR=thakis@chromium.org Review URL: https://chromiumcodereview.appspot.com/9844016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@129423 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/extensions/extension_content_settings_apitest.cc3
-rw-r--r--chrome/browser/plugin_finder.cc159
-rw-r--r--chrome/browser/plugin_finder.h30
-rw-r--r--chrome/browser/plugin_finder_unittest.cc17
-rw-r--r--chrome/browser/plugin_installer.cc6
-rw-r--r--chrome/browser/plugin_installer.h7
-rw-r--r--chrome/browser/plugin_observer.cc33
-rw-r--r--chrome/browser/plugin_observer.h13
-rw-r--r--chrome/browser/renderer_host/plugin_info_message_filter.cc68
-rw-r--r--chrome/browser/renderer_host/plugin_info_message_filter.h21
-rw-r--r--chrome/browser/renderer_host/plugin_info_message_filter_unittest.cc8
-rw-r--r--chrome/browser/resources/plugins_linux.json124
-rw-r--r--chrome/browser/resources/plugins_mac.json384
-rw-r--r--chrome/browser/resources/plugins_win.json374
-rw-r--r--chrome/browser/ui/webui/plugins_ui.cc52
-rw-r--r--content/utility/utility_thread_impl.cc19
-rw-r--r--webkit/plugins/npapi/plugin_group.cc27
-rw-r--r--webkit/plugins/npapi/plugin_group.h33
-rw-r--r--webkit/plugins/npapi/plugin_group_unittest.cc38
-rw-r--r--webkit/plugins/npapi/plugin_list.cc146
-rw-r--r--webkit/plugins/npapi/plugin_list.h9
-rw-r--r--webkit/plugins/npapi/plugin_list_unittest.cc3
22 files changed, 772 insertions, 802 deletions
diff --git a/chrome/browser/extensions/extension_content_settings_apitest.cc b/chrome/browser/extensions/extension_content_settings_apitest.cc
index 6938c12..a593fa7 100644
--- a/chrome/browser/extensions/extension_content_settings_apitest.cc
+++ b/chrome/browser/extensions/extension_content_settings_apitest.cc
@@ -103,8 +103,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionApiTest,
const char* kFooName = "Foo Plugin";
const char* kBarName = "Bar Plugin";
const webkit::npapi::PluginGroupDefinition kPluginDefinitions[] = {
- { "foo", "Foo", kFooName, NULL, 0,
- "http://example.com/foo" },
+ { "foo", "Foo", kFooName, NULL, 0 },
};
webkit::npapi::MockPluginList plugin_list(kPluginDefinitions,
diff --git a/chrome/browser/plugin_finder.cc b/chrome/browser/plugin_finder.cc
index 2e90b54..2b66754 100644
--- a/chrome/browser/plugin_finder.cc
+++ b/chrome/browser/plugin_finder.cc
@@ -18,24 +18,35 @@
#include "grit/browser_resources.h"
#include "ui/base/resource/resource_bundle.h"
+using base::DictionaryValue;
+
+// static
+void PluginFinder::Get(const base::Callback<void(PluginFinder*)>& cb) {
+ // At a later point we might want to do intialization here that needs to be
+ // done asynchronously, like loading the plug-in list from disk or from a URL.
+ MessageLoop::current()->PostTask(FROM_HERE, base::Bind(cb, GetInstance()));
+}
+
// static
PluginFinder* PluginFinder::GetInstance() {
+ // PluginFinder::GetInstance() is the only method that's allowed to call
+ // Singleton<PluginFinder>::get().
return Singleton<PluginFinder>::get();
}
PluginFinder::PluginFinder() : plugin_list_(LoadPluginList()) {
if (!plugin_list_.get()) {
NOTREACHED();
- plugin_list_.reset(new base::ListValue());
+ plugin_list_.reset(new DictionaryValue());
}
}
// static
-scoped_ptr<base::ListValue> PluginFinder::LoadPluginList() {
- return scoped_ptr<base::ListValue>(LoadPluginListInternal()).Pass();
+scoped_ptr<DictionaryValue> PluginFinder::LoadPluginList() {
+ return scoped_ptr<DictionaryValue>(LoadPluginListInternal());
}
-base::ListValue* PluginFinder::LoadPluginListInternal() {
+DictionaryValue* PluginFinder::LoadPluginListInternal() {
#if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
base::StringPiece json_resource(
ResourceBundle::GetSharedInstance().GetRawDataResource(
@@ -51,15 +62,11 @@ base::ListValue* PluginFinder::LoadPluginListInternal() {
DLOG(ERROR) << error_str;
return NULL;
}
- base::DictionaryValue* dict = NULL;
- if (!value->GetAsDictionary(&dict))
+ if (value->GetType() != base::Value::TYPE_DICTIONARY)
return NULL;
- base::ListValue* list = NULL;
- if (!dict->GetList("plugins", &list))
- return NULL;
- return list->DeepCopy();
+ return static_cast<base::DictionaryValue*>(value.release());
#else
- return new base::ListValue();
+ return new DictionaryValue();
#endif
}
@@ -67,46 +74,58 @@ PluginFinder::~PluginFinder() {
STLDeleteValues(&installers_);
}
-void PluginFinder::FindPlugin(
- const std::string& mime_type,
- const std::string& language,
- 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);
+PluginInstaller* PluginFinder::FindPlugin(const std::string& mime_type,
+ const std::string& language) {
+ if (g_browser_process->local_state()->GetBoolean(prefs::kDisablePluginFinder))
+ return NULL;
+ for (DictionaryValue::Iterator plugin_it(*plugin_list_);
+ plugin_it.HasNext(); plugin_it.Advance()) {
+ const DictionaryValue* plugin = NULL;
+ if (!plugin_it.value().GetAsDictionary(&plugin)) {
+ NOTREACHED();
+ continue;
+ }
+ std::string language_str;
+ bool success = plugin->GetString("lang", &language_str);
+ DCHECK(success);
+ if (language_str != language)
+ continue;
+ ListValue* mime_types = NULL;
+ 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);
- if (id == identifier) {
- installer = CreateInstaller(identifier, plugin);
- break;
+ if (mime_type_str == mime_type) {
+ std::string identifier = plugin_it.key();
+ std::map<std::string, PluginInstaller*>::const_iterator installer =
+ installers_.find(identifier);
+ if (installer != installers_.end())
+ return installer->second;
+ return CreateInstaller(identifier, plugin);
}
}
}
- MessageLoop::current()->PostTask(FROM_HERE,
- base::Bind(found_callback, installer));
+ return NULL;
+}
+
+PluginInstaller* PluginFinder::FindPluginWithIdentifier(
+ const std::string& identifier) {
+ std::map<std::string, PluginInstaller*>::const_iterator it =
+ installers_.find(identifier);
+ if (it != installers_.end())
+ return it->second;
+ DictionaryValue* plugin = NULL;
+ if (plugin_list_->GetDictionaryWithoutPathExpansion(identifier, &plugin))
+ return CreateInstaller(identifier, plugin);
+ return NULL;
}
PluginInstaller* PluginFinder::CreateInstaller(
const std::string& identifier,
- const base::DictionaryValue* plugin_dict) {
+ const DictionaryValue* plugin_dict) {
DCHECK(!installers_[identifier]);
std::string url;
bool success = plugin_dict->GetString("url", &url);
@@ -118,52 +137,14 @@ PluginInstaller* PluginFinder::CreateInstaller(
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);
+ bool requires_authorization = true;
+ plugin_dict->GetBoolean("requires_authorization", &requires_authorization);
+ PluginInstaller* installer = new PluginInstaller(identifier,
+ GURL(url),
+ GURL(help_url),
+ name,
+ display_url,
+ requires_authorization);
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 (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);
- if (mime_type_str == mime_type) {
- std::string identifier;
- bool success = plugin->GetString("identifier", &identifier);
- DCHECK(success);
- std::map<std::string, PluginInstaller*>::const_iterator it =
- installers_.find(identifier);
- if (it != installers_.end())
- return it->second;
- return CreateInstaller(identifier, plugin);
- }
- }
- }
- }
- return NULL;
-}
diff --git a/chrome/browser/plugin_finder.h b/chrome/browser/plugin_finder.h
index 2b1bd49..1667411e 100644
--- a/chrome/browser/plugin_finder.h
+++ b/chrome/browser/plugin_finder.h
@@ -16,7 +16,6 @@
namespace base {
class DictionaryValue;
-class ListValue;
}
class GURL;
@@ -24,39 +23,36 @@ class PluginInstaller;
class PluginFinder {
public:
- typedef base::Callback<void(PluginInstaller*)> FindPluginCallback;
-
- static PluginFinder* GetInstance();
+ static void Get(const base::Callback<void(PluginFinder*)>& cb);
// Loads the plug-in information from the browser resources and parses it.
// Returns NULL if the plug-in list couldn't be parsed.
- static scoped_ptr<base::ListValue> LoadPluginList();
+ static scoped_ptr<base::DictionaryValue> LoadPluginList();
// Finds a plug-in for the given MIME type and language (specified as an IETF
- // language tag, i.e. en-US) and calls the callback with the PluginInstaller
- // for the plug-in, or NULL if no plug-in is found.
- void FindPlugin(const std::string& mime_type,
- const std::string& language,
- const FindPluginCallback& callback);
+ // language tag, i.e. en-US) and returns the PluginInstaller for the plug-in,
+ // or NULL if no plug-in is found.
+ PluginInstaller* FindPlugin(const std::string& mime_type,
+ const std::string& language);
- // Finds the plug-in with the given identifier and calls the callback.
- void FindPluginWithIdentifier(const std::string& identifier,
- const FindPluginCallback& callback);
+ // Returns the plug-in with the given identifier.
+ PluginInstaller* FindPluginWithIdentifier(const std::string& identifier);
private:
friend struct DefaultSingletonTraits<PluginFinder>;
+ friend class Singleton<PluginFinder>;
+
+ static PluginFinder* GetInstance();
PluginFinder();
~PluginFinder();
- static base::ListValue* LoadPluginListInternal();
+ static base::DictionaryValue* LoadPluginListInternal();
PluginInstaller* CreateInstaller(const std::string& identifier,
const base::DictionaryValue* plugin_dict);
- PluginInstaller* FindPluginInternal(const std::string& mime_type,
- const std::string& language);
- scoped_ptr<base::ListValue> plugin_list_;
+ scoped_ptr<base::DictionaryValue> plugin_list_;
std::map<std::string, PluginInstaller*> installers_;
DISALLOW_COPY_AND_ASSIGN(PluginFinder);
diff --git a/chrome/browser/plugin_finder_unittest.cc b/chrome/browser/plugin_finder_unittest.cc
index e69036d..8a07769 100644
--- a/chrome/browser/plugin_finder_unittest.cc
+++ b/chrome/browser/plugin_finder_unittest.cc
@@ -8,20 +8,25 @@
#include "testing/gtest/include/gtest/gtest.h"
using base::DictionaryValue;
-using base::ListValue;
TEST(PluginFinderTest, JsonSyntax) {
- scoped_ptr<ListValue> plugin_list(PluginFinder::LoadPluginList());
+ scoped_ptr<DictionaryValue> plugin_list(PluginFinder::LoadPluginList());
ASSERT_TRUE(plugin_list.get());
- for (ListValue::const_iterator plugin_it = plugin_list->begin();
- plugin_it != plugin_list->end(); ++plugin_it) {
+ for (DictionaryValue::Iterator plugin_it(*plugin_list);
+ plugin_it.HasNext(); plugin_it.Advance()) {
const DictionaryValue* plugin = NULL;
- ASSERT_TRUE((*plugin_it)->GetAsDictionary(&plugin));
+ ASSERT_TRUE(plugin_it.value().GetAsDictionary(&plugin));
std::string dummy_str;
+ bool dummy_bool;
EXPECT_TRUE(plugin->GetString("lang", &dummy_str));
- EXPECT_TRUE(plugin->GetString("identifier", &dummy_str));
EXPECT_TRUE(plugin->GetString("url", &dummy_str));
EXPECT_TRUE(plugin->GetString("name", &dummy_str));
+ if (plugin->HasKey("help_url"))
+ EXPECT_TRUE(plugin->GetString("help_url", &dummy_str));
+ if (plugin->HasKey("displayurl"))
+ EXPECT_TRUE(plugin->GetBoolean("displayurl", &dummy_bool));
+ if (plugin->HasKey("requires_authorization"))
+ EXPECT_TRUE(plugin->GetBoolean("requires_authorization", &dummy_bool));
ListValue* mime_types = NULL;
ASSERT_TRUE(plugin->GetList("mime_types", &mime_types));
for (ListValue::const_iterator mime_type_it = mime_types->begin();
diff --git a/chrome/browser/plugin_installer.cc b/chrome/browser/plugin_installer.cc
index 80c45c9..7f2f66a 100644
--- a/chrome/browser/plugin_installer.cc
+++ b/chrome/browser/plugin_installer.cc
@@ -64,13 +64,15 @@ PluginInstaller::PluginInstaller(const std::string& identifier,
const GURL& plugin_url,
const GURL& help_url,
const string16& name,
- bool url_for_display)
+ bool url_for_display,
+ bool requires_authorization)
: state_(kStateIdle),
identifier_(identifier),
plugin_url_(plugin_url),
help_url_(help_url),
name_(name),
- url_for_display_(url_for_display) {
+ url_for_display_(url_for_display),
+ requires_authorization_(requires_authorization) {
}
PluginInstaller::~PluginInstaller() {
diff --git a/chrome/browser/plugin_installer.h b/chrome/browser/plugin_installer.h
index 0b43113..b3a9f53 100644
--- a/chrome/browser/plugin_installer.h
+++ b/chrome/browser/plugin_installer.h
@@ -33,7 +33,8 @@ class PluginInstaller : public content::DownloadItem::Observer {
const GURL& plugin_url,
const GURL& help_url,
const string16& name,
- bool url_for_display);
+ bool url_for_display,
+ bool requires_authorization);
virtual ~PluginInstaller();
virtual void OnDownloadUpdated(content::DownloadItem* download) OVERRIDE;
@@ -55,6 +56,9 @@ class PluginInstaller : public content::DownloadItem::Observer {
// Human-readable name of the plug-in.
const string16& name() const { return name_; }
+ // Whether the plug-in requires user authorization to run.
+ bool requires_authorization() const { return requires_authorization_; }
+
// If |url_for_display| is false, |plugin_url| is the URL of the download page
// for the plug-in, which should be opened in a new tab. If it is true,
// |plugin_url| is the URL of the plug-in installer binary, which can be
@@ -90,6 +94,7 @@ class PluginInstaller : public content::DownloadItem::Observer {
GURL help_url_;
string16 name_;
bool url_for_display_;
+ bool requires_authorization_;
DISALLOW_COPY_AND_ASSIGN(PluginInstaller);
};
diff --git a/chrome/browser/plugin_observer.cc b/chrome/browser/plugin_observer.cc
index 3660d2f..25fd4af 100644
--- a/chrome/browser/plugin_observer.cc
+++ b/chrome/browser/plugin_observer.cc
@@ -118,6 +118,7 @@ class PluginObserver::PluginPlaceholderHost : public PluginInstallerObserver {
: PluginInstallerObserver(installer),
observer_(observer),
routing_id_(routing_id) {
+ DCHECK(installer);
switch (installer->state()) {
case PluginInstaller::kStateIdle: {
observer->Send(new ChromeViewMsg_FoundMissingPlugin(routing_id_,
@@ -201,11 +202,9 @@ void PluginObserver::OnBlockedUnauthorizedPlugin(const string16& name) {
void PluginObserver::OnBlockedOutdatedPlugin(int placeholder_id,
const std::string& identifier) {
#if defined(ENABLE_PLUGIN_INSTALLATION)
- PluginFinder* plugin_finder = PluginFinder::GetInstance();
- plugin_finder->FindPluginWithIdentifier(
- identifier,
- base::Bind(&PluginObserver::FoundPluginToUpdate,
- weak_ptr_factory_.GetWeakPtr(), placeholder_id));
+ PluginFinder::Get(base::Bind(&PluginObserver::FindPluginToUpdate,
+ weak_ptr_factory_.GetWeakPtr(),
+ placeholder_id, identifier));
#else
// If we don't support third-party plug-in installation, we shouldn't have
// outdated plug-ins.
@@ -214,8 +213,11 @@ void PluginObserver::OnBlockedOutdatedPlugin(int placeholder_id,
}
#if defined(ENABLE_PLUGIN_INSTALLATION)
-void PluginObserver::FoundPluginToUpdate(int placeholder_id,
- PluginInstaller* installer) {
+void PluginObserver::FindPluginToUpdate(int placeholder_id,
+ const std::string& identifier,
+ PluginFinder* plugin_finder) {
+ PluginInstaller* installer =
+ plugin_finder->FindPluginWithIdentifier(identifier);
plugin_placeholders_[placeholder_id] =
new PluginPlaceholderHost(this, placeholder_id, installer);
InfoBarTabHelper* infobar_helper = tab_contents_->infobar_tab_helper();
@@ -225,17 +227,16 @@ void PluginObserver::FoundPluginToUpdate(int placeholder_id,
void PluginObserver::OnFindMissingPlugin(int placeholder_id,
const std::string& mime_type) {
- PluginFinder* plugin_finder = PluginFinder::GetInstance();
- std::string lang = "en-US"; // Oh yes.
- plugin_finder->FindPlugin(
- mime_type, lang,
- base::Bind(&PluginObserver::FoundMissingPlugin,
- weak_ptr_factory_.GetWeakPtr(), placeholder_id, mime_type));
+PluginFinder::Get(base::Bind(&PluginObserver::FindMissingPlugin,
+ weak_ptr_factory_.GetWeakPtr(),
+ placeholder_id, mime_type));
}
-void PluginObserver::FoundMissingPlugin(int placeholder_id,
- const std::string& mime_type,
- PluginInstaller* installer) {
+void PluginObserver::FindMissingPlugin(int placeholder_id,
+ const std::string& mime_type,
+ PluginFinder* plugin_finder) {
+ std::string lang = "en-US"; // Oh yes.
+ PluginInstaller* installer = plugin_finder->FindPlugin(mime_type, lang);
if (!installer) {
Send(new ChromeViewMsg_DidNotFindMissingPlugin(placeholder_id));
return;
diff --git a/chrome/browser/plugin_observer.h b/chrome/browser/plugin_observer.h
index 44f7b03..4cce117 100644
--- a/chrome/browser/plugin_observer.h
+++ b/chrome/browser/plugin_observer.h
@@ -15,7 +15,7 @@
class GURL;
class InfoBarDelegate;
-class PluginInstaller;
+class PluginFinder;
class TabContentsWrapper;
#if defined(ENABLE_PLUGIN_INSTALLATION)
@@ -46,11 +46,12 @@ class PluginObserver : public content::WebContentsObserver {
#if defined(ENABLE_PLUGIN_INSTALLATION)
void OnFindMissingPlugin(int placeholder_id, const std::string& mime_type);
- void FoundMissingPlugin(int placeholder_id,
- const std::string& mime_type,
- PluginInstaller* installer);
- void FoundPluginToUpdate(int placeholder_id,
- PluginInstaller* installer);
+ void FindMissingPlugin(int placeholder_id,
+ const std::string& mime_type,
+ PluginFinder* plugin_finder);
+ void FindPluginToUpdate(int placeholder_id,
+ const std::string& identifier,
+ PluginFinder* plugin_finder);
void OnRemovePluginPlaceholderHost(int placeholder_id);
#endif
void OnOpenAboutPlugins();
diff --git a/chrome/browser/renderer_host/plugin_info_message_filter.cc b/chrome/browser/renderer_host/plugin_info_message_filter.cc
index cc13c86..11864a7 100644
--- a/chrome/browser/renderer_host/plugin_info_message_filter.cc
+++ b/chrome/browser/renderer_host/plugin_info_message_filter.cc
@@ -21,6 +21,11 @@
#include "webkit/plugins/npapi/plugin_group.h"
#include "webkit/plugins/npapi/plugin_list.h"
+#if defined(ENABLE_PLUGIN_INSTALLATION)
+#include "chrome/browser/plugin_finder.h"
+#include "chrome/browser/plugin_installer.h"
+#endif
+
#if defined(OS_WIN)
// These includes are only necessary for the PluginInfobarExperiment.
#include "chrome/common/attrition_experiments.h"
@@ -143,7 +148,31 @@ void PluginInfoMessageFilter::PluginsLoaded(
ChromeViewHostMsg_GetPluginInfo_Status status;
webkit::WebPluginInfo plugin;
std::string actual_mime_type;
- context_.DecidePluginStatus(params, &status, &plugin, &actual_mime_type);
+ // This also fills in |actual_mime_type|.
+ if (!context_.FindEnabledPlugin(params.render_view_id, params.url,
+ params.top_origin_url, params.mime_type,
+ &status, &plugin, &actual_mime_type)) {
+ ChromeViewHostMsg_GetPluginInfo::WriteReplyParams(
+ reply_msg, status, plugin, actual_mime_type);
+ Send(reply_msg);
+ return;
+ }
+#if defined(ENABLE_PLUGIN_INSTALLATION)
+ PluginFinder::Get(base::Bind(&PluginInfoMessageFilter::GotPluginFinder, this,
+ params, reply_msg, plugin, actual_mime_type));
+#else
+ GotPluginFinder(params, reply_msg, plugin, actual_mime_type, NULL);
+#endif
+}
+
+void PluginInfoMessageFilter::GotPluginFinder(
+ const GetPluginInfo_Params& params,
+ IPC::Message* reply_msg,
+ const webkit::WebPluginInfo& plugin,
+ const std::string& actual_mime_type,
+ PluginFinder* plugin_finder) {
+ ChromeViewHostMsg_GetPluginInfo_Status status;
+ context_.DecidePluginStatus(params, plugin, plugin_finder, &status);
ChromeViewHostMsg_GetPluginInfo::WriteReplyParams(
reply_msg, status, plugin, actual_mime_type);
Send(reply_msg);
@@ -151,24 +180,16 @@ void PluginInfoMessageFilter::PluginsLoaded(
void PluginInfoMessageFilter::Context::DecidePluginStatus(
const GetPluginInfo_Params& params,
- ChromeViewHostMsg_GetPluginInfo_Status* status,
- webkit::WebPluginInfo* plugin,
- std::string* actual_mime_type) const {
- status->value = ChromeViewHostMsg_GetPluginInfo_Status::kAllowed;
- // This also fills in |actual_mime_type|.
- if (FindEnabledPlugin(params.render_view_id, params.url,
- params.top_origin_url, params.mime_type,
- status, plugin, actual_mime_type)) {
- return;
- }
+ const webkit::WebPluginInfo& plugin,
+ PluginFinder* plugin_finder,
+ ChromeViewHostMsg_GetPluginInfo_Status* status) const {
+ scoped_ptr<webkit::npapi::PluginGroup> group(
+ webkit::npapi::PluginList::Singleton()->GetPluginGroup(plugin));
ContentSetting plugin_setting = CONTENT_SETTING_DEFAULT;
bool uses_default_content_setting = true;
// Check plug-in content settings. The primary URL is the top origin URL and
// the secondary URL is the plug-in URL.
- scoped_ptr<webkit::npapi::PluginGroup> group(
- webkit::npapi::PluginList::Singleton()->GetPluginGroup(*plugin));
-
GetPluginContentSetting(plugin, params.top_origin_url, params.url,
group->identifier(), &plugin_setting,
&uses_default_content_setting);
@@ -180,7 +201,7 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
PluginInfobarExperiment(&allow_outdated, &always_authorize);
// Check if the plug-in is outdated.
- if (group->IsVulnerable(*plugin) && !allow_outdated) {
+ if (group->IsVulnerable(plugin) && !allow_outdated) {
if (allow_outdated_plugins_.IsManaged()) {
status->value =
ChromeViewHostMsg_GetPluginInfo_Status::kOutdatedDisallowed;
@@ -191,9 +212,13 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
return;
}
+#if defined(ENABLE_PLUGIN_INSTALLATION)
// Check if the plug-in requires authorization.
- if ((group->RequiresAuthorization(*plugin) ||
- PluginService::GetInstance()->IsPluginUnstable(plugin->path)) &&
+ // TODO(bauerb): This should be a plain struct with the plug-in information.
+ PluginInstaller* installer =
+ plugin_finder->FindPluginWithIdentifier(group->identifier());
+ if (((installer && installer->requires_authorization()) ||
+ PluginService::GetInstance()->IsPluginUnstable(plugin.path)) &&
!always_authorize &&
plugin_setting != CONTENT_SETTING_BLOCK &&
uses_default_content_setting) {
@@ -201,6 +226,7 @@ void PluginInfoMessageFilter::Context::DecidePluginStatus(
ChromeViewHostMsg_GetPluginInfo_Status::kUnauthorized;
return;
}
+#endif
if (plugin_setting == CONTENT_SETTING_ASK)
status->value = ChromeViewHostMsg_GetPluginInfo_Status::kClickToPlay;
@@ -236,7 +262,7 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin(
*actual_mime_type = mime_types[i];
if (enabled) {
// We have found an enabled plug-in. Return immediately.
- return false;
+ return true;
}
// We have found a plug-in, but it's disabled. Keep looking for an
// enabled one.
@@ -250,18 +276,18 @@ bool PluginInfoMessageFilter::Context::FindEnabledPlugin(
status->value = ChromeViewHostMsg_GetPluginInfo_Status::kDisabled;
else
status->value = ChromeViewHostMsg_GetPluginInfo_Status::kNotFound;
- return true;
+ return false;
}
void PluginInfoMessageFilter::Context::GetPluginContentSetting(
- const webkit::WebPluginInfo* plugin,
+ const webkit::WebPluginInfo& plugin,
const GURL& policy_url,
const GURL& plugin_url,
const std::string& resource,
ContentSetting* setting,
bool* uses_default_content_setting) const {
// Treat Native Client invocations like Javascript.
- bool is_nacl_plugin = (plugin->name == ASCIIToUTF16(
+ bool is_nacl_plugin = (plugin.name == ASCIIToUTF16(
chrome::ChromeContentClient::kNaClPluginName));
scoped_ptr<base::Value> value;
diff --git a/chrome/browser/renderer_host/plugin_info_message_filter.h b/chrome/browser/renderer_host/plugin_info_message_filter.h
index 8cade72..f0f6e35 100644
--- a/chrome/browser/renderer_host/plugin_info_message_filter.h
+++ b/chrome/browser/renderer_host/plugin_info_message_filter.h
@@ -18,6 +18,7 @@
struct ChromeViewHostMsg_GetPluginInfo_Status;
class GURL;
class HostContentSettingsMap;
+class PluginFinder;
class Profile;
namespace content {
@@ -26,6 +27,9 @@ class ResourceContext;
namespace webkit {
struct WebPluginInfo;
+namespace npapi {
+class PluginGroup;
+}
}
// This class filters out incoming IPC messages requesting plug-in information.
@@ -41,10 +45,11 @@ class PluginInfoMessageFilter : public content::BrowserMessageFilter {
Context();
~Context();
- void DecidePluginStatus(const GetPluginInfo_Params& params,
- ChromeViewHostMsg_GetPluginInfo_Status* status,
- webkit::WebPluginInfo* plugin,
- std::string* actual_mime_type) const;
+ void DecidePluginStatus(
+ const GetPluginInfo_Params& params,
+ const webkit::WebPluginInfo& plugin,
+ PluginFinder* plugin_finder,
+ ChromeViewHostMsg_GetPluginInfo_Status* status) const;
bool FindEnabledPlugin(int render_view_id,
const GURL& url,
const GURL& top_origin_url,
@@ -52,7 +57,7 @@ class PluginInfoMessageFilter : public content::BrowserMessageFilter {
ChromeViewHostMsg_GetPluginInfo_Status* status,
webkit::WebPluginInfo* plugin,
std::string* actual_mime_type) const;
- void GetPluginContentSetting(const webkit::WebPluginInfo* plugin,
+ void GetPluginContentSetting(const webkit::WebPluginInfo& plugin,
const GURL& policy_url,
const GURL& plugin_url,
const std::string& resource,
@@ -89,6 +94,12 @@ class PluginInfoMessageFilter : public content::BrowserMessageFilter {
IPC::Message* reply_msg,
const std::vector<webkit::WebPluginInfo>& plugins);
+ void GotPluginFinder(const GetPluginInfo_Params& params,
+ IPC::Message* reply_msg,
+ const webkit::WebPluginInfo& plugin,
+ const std::string& actual_mime_type,
+ PluginFinder* plugin_finder);
+
Context context_;
base::WeakPtrFactory<PluginInfoMessageFilter> weak_ptr_factory_;
diff --git a/chrome/browser/renderer_host/plugin_info_message_filter_unittest.cc b/chrome/browser/renderer_host/plugin_info_message_filter_unittest.cc
index 9950e4f..b822dd1 100644
--- a/chrome/browser/renderer_host/plugin_info_message_filter_unittest.cc
+++ b/chrome/browser/renderer_host/plugin_info_message_filter_unittest.cc
@@ -120,7 +120,7 @@ TEST_F(PluginInfoMessageFilterTest, FindEnabledPlugin) {
ChromeViewHostMsg_GetPluginInfo_Status status;
webkit::WebPluginInfo plugin;
std::string actual_mime_type;
- EXPECT_FALSE(context_.FindEnabledPlugin(
+ EXPECT_TRUE(context_.FindEnabledPlugin(
0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type));
EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed, status.value);
EXPECT_EQ(foo_plugin_path_.value(), plugin.path.value());
@@ -131,7 +131,7 @@ TEST_F(PluginInfoMessageFilterTest, FindEnabledPlugin) {
ChromeViewHostMsg_GetPluginInfo_Status status;
webkit::WebPluginInfo plugin;
std::string actual_mime_type;
- EXPECT_FALSE(context_.FindEnabledPlugin(
+ EXPECT_TRUE(context_.FindEnabledPlugin(
0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type));
EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kAllowed, status.value);
EXPECT_EQ(bar_plugin_path_.value(), plugin.path.value());
@@ -142,7 +142,7 @@ TEST_F(PluginInfoMessageFilterTest, FindEnabledPlugin) {
ChromeViewHostMsg_GetPluginInfo_Status status;
webkit::WebPluginInfo plugin;
std::string actual_mime_type;
- EXPECT_TRUE(context_.FindEnabledPlugin(
+ EXPECT_FALSE(context_.FindEnabledPlugin(
0, GURL(), GURL(), "foo/bar", &status, &plugin, &actual_mime_type));
EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kDisabled, status.value);
EXPECT_EQ(foo_plugin_path_.value(), plugin.path.value());
@@ -151,7 +151,7 @@ TEST_F(PluginInfoMessageFilterTest, FindEnabledPlugin) {
ChromeViewHostMsg_GetPluginInfo_Status status;
webkit::WebPluginInfo plugin;
std::string actual_mime_type;
- EXPECT_TRUE(context_.FindEnabledPlugin(
+ EXPECT_FALSE(context_.FindEnabledPlugin(
0, GURL(), GURL(), "baz/blurp", &status, &plugin, &actual_mime_type));
EXPECT_EQ(ChromeViewHostMsg_GetPluginInfo_Status::kNotFound, status.value);
EXPECT_EQ(FILE_PATH_LITERAL(""), plugin.path.value());
diff --git a/chrome/browser/resources/plugins_linux.json b/chrome/browser/resources/plugins_linux.json
index d410de0..e56f226 100644
--- a/chrome/browser/resources/plugins_linux.json
+++ b/chrome/browser/resources/plugins_linux.json
@@ -1,66 +1,62 @@
{
- "plugins": [
- {
- "mime_types": [
- "application/x-java-applet",
- "application/x-java-applet,version=1.1",
- "application/x-java-applet,version=1.1.1",
- "application/x-java-applet,version=1.1.2",
- "application/x-java-applet,version=1.1.3",
- "application/x-java-applet,version=1.2",
- "application/x-java-applet,version=1.2.1",
- "application/x-java-applet,version=1.2.2",
- "application/x-java-applet,version=1.3",
- "application/x-java-applet,version=1.3.1",
- "application/x-java-applet,version=1.4",
- "application/x-java-applet,version=1.4.1",
- "application/x-java-applet,version=1.4.2",
- "application/x-java-applet,version=1.5",
- "application/x-java-applet,version=1.6",
- "application/x-java-bean",
- "application/x-java-bean,version=1.1",
- "application/x-java-bean,version=1.1.1",
- "application/x-java-bean,version=1.1.2",
- "application/x-java-bean,version=1.1.3",
- "application/x-java-bean,version=1.2",
- "application/x-java-bean,version=1.2.1",
- "application/x-java-bean,version=1.2.2",
- "application/x-java-bean,version=1.3",
- "application/x-java-bean,version=1.3.1",
- "application/x-java-bean,version=1.4",
- "application/x-java-bean,version=1.4.1",
- "application/x-java-bean,version=1.4.2",
- "application/x-java-bean,version=1.5",
- "application/x-java-bean,version=1.6",
- "application/x-java-vm"
- ],
- "lang": "en-US",
- "name": "Java(TM)",
- "identifier": "java-runtime-environment",
- "help_url": "https://support.google.com/chrome/?p=plugin_java",
- "url": "http://java.com/download",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/futuresplash",
- "application/x-shockwave-flash"
- ],
- "lang": "en-US",
- "name": "Adobe Flash Player",
- "identifier": "adobe-flash-player",
- "help_url": "https://support.google.com/chrome/?p=plugin_flash",
- "url": "http://get.adobe.com/flashplayer/",
- "displayurl": true
- },
- {
- "mime_types": [
- ],
- "lang": "en-US",
- "name": "IcedTea",
- "identifier": "redhat-icetea-java",
- "url": "http://icedtea.classpath.org/",
- "displayurl": true
- }
- ]
+ "java-runtime-environment": {
+ "mime_types": [
+ "application/x-java-applet",
+ "application/x-java-applet,version=1.1",
+ "application/x-java-applet,version=1.1.1",
+ "application/x-java-applet,version=1.1.2",
+ "application/x-java-applet,version=1.1.3",
+ "application/x-java-applet,version=1.2",
+ "application/x-java-applet,version=1.2.1",
+ "application/x-java-applet,version=1.2.2",
+ "application/x-java-applet,version=1.3",
+ "application/x-java-applet,version=1.3.1",
+ "application/x-java-applet,version=1.4",
+ "application/x-java-applet,version=1.4.1",
+ "application/x-java-applet,version=1.4.2",
+ "application/x-java-applet,version=1.5",
+ "application/x-java-applet,version=1.6",
+ "application/x-java-bean",
+ "application/x-java-bean,version=1.1",
+ "application/x-java-bean,version=1.1.1",
+ "application/x-java-bean,version=1.1.2",
+ "application/x-java-bean,version=1.1.3",
+ "application/x-java-bean,version=1.2",
+ "application/x-java-bean,version=1.2.1",
+ "application/x-java-bean,version=1.2.2",
+ "application/x-java-bean,version=1.3",
+ "application/x-java-bean,version=1.3.1",
+ "application/x-java-bean,version=1.4",
+ "application/x-java-bean,version=1.4.1",
+ "application/x-java-bean,version=1.4.2",
+ "application/x-java-bean,version=1.5",
+ "application/x-java-bean,version=1.6",
+ "application/x-java-vm"
+ ],
+ "lang": "en-US",
+ "name": "Java(TM)",
+ "help_url": "https://support.google.com/chrome/?p=plugin_java",
+ "url": "http://java.com/download",
+ "displayurl": true
+ },
+ "adobe-flash-player": {
+ "mime_types": [
+ "application/futuresplash",
+ "application/x-shockwave-flash"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Flash Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_flash",
+ "url": "http://get.adobe.com/flashplayer/",
+ "requires_authorization": false,
+ "displayurl": true
+ },
+ "redhat-icetea-java": {
+ "mime_types": [
+ ],
+ "lang": "en-US",
+ "name": "IcedTea",
+ "url": "http://icedtea.classpath.org/",
+ "displayurl": true
+ }
}
diff --git a/chrome/browser/resources/plugins_mac.json b/chrome/browser/resources/plugins_mac.json
index ad1f70d..2465ece 100644
--- a/chrome/browser/resources/plugins_mac.json
+++ b/chrome/browser/resources/plugins_mac.json
@@ -1,198 +1,190 @@
{
- "plugins": [
- {
- "mime_types": [
- "application/x-java-applet",
- "application/x-java-applet,version=1.1",
- "application/x-java-applet,version=1.1.1",
- "application/x-java-applet,version=1.1.2",
- "application/x-java-applet,version=1.1.3",
- "application/x-java-applet,version=1.2",
- "application/x-java-applet,version=1.2.1",
- "application/x-java-applet,version=1.2.2",
- "application/x-java-applet,version=1.3",
- "application/x-java-applet,version=1.3.1",
- "application/x-java-applet,version=1.4",
- "application/x-java-applet,version=1.4.1",
- "application/x-java-applet,version=1.4.2",
- "application/x-java-applet,version=1.5",
- "application/x-java-applet,version=1.6",
- "application/x-java-bean",
- "application/x-java-bean,version=1.1",
- "application/x-java-bean,version=1.1.1",
- "application/x-java-bean,version=1.1.2",
- "application/x-java-bean,version=1.1.3",
- "application/x-java-bean,version=1.2",
- "application/x-java-bean,version=1.2.1",
- "application/x-java-bean,version=1.2.2",
- "application/x-java-bean,version=1.3",
- "application/x-java-bean,version=1.3.1",
- "application/x-java-bean,version=1.4",
- "application/x-java-bean,version=1.4.1",
- "application/x-java-bean,version=1.4.2",
- "application/x-java-bean,version=1.5",
- "application/x-java-bean,version=1.6",
- "application/x-java-vm"
- ],
- "lang": "en-US",
- "name": "Java(TM)",
- "identifier": "java-runtime-environment",
- "url": "http://java.com/en/download/apple_manual.jsp",
- "help_url": "https://support.google.com/chrome/?p=plugin_java",
- "displayurl": true
- },
- {
- "mime_types": [
- "audio/vnd.rn-realaudio",
- "video/vnd.rn-realvideo",
- "audio/x-pn-realaudio-plugin",
- "audio/x-pn-realaudio"
- ],
- "lang": "en-US",
- "name": "RealPlayer",
- "identifier": "realplayer",
- "url": "http://director.real.com/realplayer?type=rpsp_mac",
- "help_url": "https://support.google.com/chrome/?p=plugin_real"
- },
- {
- "mime_types": [
- "application/futuresplash",
- "application/x-shockwave-flash"
- ],
- "lang": "en-US",
- "name": "Adobe Flash Player",
- "identifier": "adobe-flash-player",
- "url": "http://get.adobe.com/flashplayer/",
- "help_url": "https://support.google.com/chrome/?p=plugin_flash",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/x-director"
- ],
- "lang": "en-US",
- "name": "Adobe Shockwave Player",
- "identifier": "shockwave",
- "url": "http://www.adobe.com/shockwave/download/",
- "help_url": "https://support.google.com/chrome/?p=plugin_shockwave",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/pdf",
- "application/vnd.adobe.x-mars",
- "application/vnd.adobe.xdp+xml",
- "application/vnd.adobe.xfd+xml",
- "application/vnd.adobe.xfdf",
- "application/vnd.fdf"
- ],
- "lang": "en-US",
- "name": "Adobe Reader",
- "identifier": "adobe-reader",
- "url": "http://get.adobe.com/reader/",
- "help_url": "https://support.google.com/chrome/?p=plugin_pdf",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/sdp",
- "application/x-mpeg",
- "application/x-rtsp",
- "application/x-sdp",
- "audio/3ggp",
- "audio/3ggp2",
- "audio/aac",
- "audio/ac3",
- "audio/aiff",
- "audio/amr",
- "audio/basic",
- "audio/mid",
- "audio/midi",
- "audio/mp4",
- "audio/mpeg",
- "audio/vnd.qcelp",
- "audio/wav",
- "audio/x-aac",
- "audio/x-ac3",
- "audio/x-aiff",
- "audio/x-caf",
- "audio/x-gsm",
- "audio/x-m4a",
- "audio/x-m4b",
- "audio/x-m4p",
- "audio/x-midi",
- "audio/x-mpeg",
- "audio/x-wav",
- "image/jp2",
- "image/jpeg2000",
- "image/jpeg2000-image",
- "image/pict",
- "image/png",
- "image/x-jpeg2000-image",
- "image/x-macpaint",
- "image/x-pict",
- "image/x-png",
- "image/x-quicktime",
- "image/x-sgi",
- "image/x-targa",
- "video/3ggp",
- "video/3ggp2",
- "video/flc",
- "video/mp4",
- "video/mpeg",
- "video/quicktime",
- "video/sd-video",
- "video/x-m4v",
- "video/x-mpeg"
- ],
- "lang": "en-US",
- "name": "QuickTime Player",
- "identifier": "apple-quicktime",
- "url": "http://www.apple.com/quicktime/download/",
- "help_url": "https://support.google.com/chrome/?p=plugin_quicktime",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/asx",
- "application/x-mplayer2",
- "application/x-ms-wmp",
- "audio/x-ms-wax",
- "audio/x-ms-wma",
- "video/x-ms-asf",
- "video/x-ms-asf-plugin",
- "video/x-ms-wm",
- "video/x-ms-wmv",
- "video/x-ms-wvx"
- ],
- "lang": "en-US",
- "name": "Flip4Mac",
- "identifier": "flip4mac",
- "url": "http://www.microsoft.com/download/en/confirmation.aspx?id=9442",
- "help_url": "https://support.google.com/chrome/?p=plugin_wmp",
- "displayurl": true
- },
- {
- "mime_types": [
- "video/divx",
- "video/x-matroska"
- ],
- "lang": "en-US",
- "name": "DivX Web Player",
- "identifier": "divx-player",
- "url": "http://www.divx.com/en/downloads/divx/mac",
- "help_url": "https://support.google.com/chrome/?p=plugin_divx"
- },
- {
- "mime_types": [
- "application/x-silverlight",
- "application/x-silverlight-2"
- ],
- "lang": "en-US",
- "name": "Silverlight",
- "identifier": "silverlight",
- "url": "http://go.microsoft.com/fwlink/?LinkID=149156",
- "displayurl": true
- }
- ]
+ "java-runtime-environment": {
+ "mime_types": [
+ "application/x-java-applet",
+ "application/x-java-applet,version=1.1",
+ "application/x-java-applet,version=1.1.1",
+ "application/x-java-applet,version=1.1.2",
+ "application/x-java-applet,version=1.1.3",
+ "application/x-java-applet,version=1.2",
+ "application/x-java-applet,version=1.2.1",
+ "application/x-java-applet,version=1.2.2",
+ "application/x-java-applet,version=1.3",
+ "application/x-java-applet,version=1.3.1",
+ "application/x-java-applet,version=1.4",
+ "application/x-java-applet,version=1.4.1",
+ "application/x-java-applet,version=1.4.2",
+ "application/x-java-applet,version=1.5",
+ "application/x-java-applet,version=1.6",
+ "application/x-java-bean",
+ "application/x-java-bean,version=1.1",
+ "application/x-java-bean,version=1.1.1",
+ "application/x-java-bean,version=1.1.2",
+ "application/x-java-bean,version=1.1.3",
+ "application/x-java-bean,version=1.2",
+ "application/x-java-bean,version=1.2.1",
+ "application/x-java-bean,version=1.2.2",
+ "application/x-java-bean,version=1.3",
+ "application/x-java-bean,version=1.3.1",
+ "application/x-java-bean,version=1.4",
+ "application/x-java-bean,version=1.4.1",
+ "application/x-java-bean,version=1.4.2",
+ "application/x-java-bean,version=1.5",
+ "application/x-java-bean,version=1.6",
+ "application/x-java-vm"
+ ],
+ "lang": "en-US",
+ "name": "Java(TM)",
+ "url": "http://java.com/en/download/apple_manual.jsp",
+ "help_url": "https://support.google.com/chrome/?p=plugin_java",
+ "displayurl": true
+ },
+ "realplayer": {
+ "mime_types": [
+ "audio/vnd.rn-realaudio",
+ "video/vnd.rn-realvideo",
+ "audio/x-pn-realaudio-plugin",
+ "audio/x-pn-realaudio"
+ ],
+ "lang": "en-US",
+ "name": "RealPlayer",
+ "url": "http://director.real.com/realplayer?type=rpsp_mac",
+ "help_url": "https://support.google.com/chrome/?p=plugin_real"
+ },
+ "adobe-flash-player": {
+ "mime_types": [
+ "application/futuresplash",
+ "application/x-shockwave-flash"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Flash Player",
+ "url": "http://get.adobe.com/flashplayer/",
+ "help_url": "https://support.google.com/chrome/?p=plugin_flash",
+ "requires_authorization": false,
+ "displayurl": true
+ },
+ "adobe-shockwave": {
+ "mime_types": [
+ "application/x-director"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Shockwave Player",
+ "url": "http://www.adobe.com/shockwave/download/",
+ "help_url": "https://support.google.com/chrome/?p=plugin_shockwave",
+ "displayurl": true
+ },
+ "adobe-reader": {
+ "mime_types": [
+ "application/pdf",
+ "application/vnd.adobe.x-mars",
+ "application/vnd.adobe.xdp+xml",
+ "application/vnd.adobe.xfd+xml",
+ "application/vnd.adobe.xfdf",
+ "application/vnd.fdf"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Reader",
+ "url": "http://get.adobe.com/reader/",
+ "help_url": "https://support.google.com/chrome/?p=plugin_pdf",
+ "requires_authorization": false,
+ "displayurl": true
+ },
+ "apple-quicktime": {
+ "mime_types": [
+ "application/sdp",
+ "application/x-mpeg",
+ "application/x-rtsp",
+ "application/x-sdp",
+ "audio/3ggp",
+ "audio/3ggp2",
+ "audio/aac",
+ "audio/ac3",
+ "audio/aiff",
+ "audio/amr",
+ "audio/basic",
+ "audio/mid",
+ "audio/midi",
+ "audio/mp4",
+ "audio/mpeg",
+ "audio/vnd.qcelp",
+ "audio/wav",
+ "audio/x-aac",
+ "audio/x-ac3",
+ "audio/x-aiff",
+ "audio/x-caf",
+ "audio/x-gsm",
+ "audio/x-m4a",
+ "audio/x-m4b",
+ "audio/x-m4p",
+ "audio/x-midi",
+ "audio/x-mpeg",
+ "audio/x-wav",
+ "image/jp2",
+ "image/jpeg2000",
+ "image/jpeg2000-image",
+ "image/pict",
+ "image/png",
+ "image/x-jpeg2000-image",
+ "image/x-macpaint",
+ "image/x-pict",
+ "image/x-png",
+ "image/x-quicktime",
+ "image/x-sgi",
+ "image/x-targa",
+ "video/3ggp",
+ "video/3ggp2",
+ "video/flc",
+ "video/mp4",
+ "video/mpeg",
+ "video/quicktime",
+ "video/sd-video",
+ "video/x-m4v",
+ "video/x-mpeg"
+ ],
+ "lang": "en-US",
+ "name": "QuickTime Player",
+ "url": "http://www.apple.com/quicktime/download/",
+ "help_url": "https://support.google.com/chrome/?p=plugin_quicktime",
+ "displayurl": true
+ },
+ "flip4mac": {
+ "mime_types": [
+ "application/asx",
+ "application/x-mplayer2",
+ "application/x-ms-wmp",
+ "audio/x-ms-wax",
+ "audio/x-ms-wma",
+ "video/x-ms-asf",
+ "video/x-ms-asf-plugin",
+ "video/x-ms-wm",
+ "video/x-ms-wmv",
+ "video/x-ms-wvx"
+ ],
+ "lang": "en-US",
+ "name": "Flip4Mac",
+ "url": "http://www.microsoft.com/download/en/confirmation.aspx?id=9442",
+ "help_url": "https://support.google.com/chrome/?p=plugin_wmp",
+ "displayurl": true
+ },
+ "divx-player": {
+ "mime_types": [
+ "video/divx",
+ "video/x-matroska"
+ ],
+ "lang": "en-US",
+ "name": "DivX Web Player",
+ "url": "http://www.divx.com/en/downloads/divx/mac",
+ "help_url": "https://support.google.com/chrome/?p=plugin_divx"
+ },
+ "silverlight": {
+ "mime_types": [
+ "application/x-silverlight",
+ "application/x-silverlight-2"
+ ],
+ "lang": "en-US",
+ "name": "Silverlight",
+ "url": "http://go.microsoft.com/fwlink/?LinkID=149156",
+ "requires_authorization": false,
+ "displayurl": true
+ }
}
diff --git a/chrome/browser/resources/plugins_win.json b/chrome/browser/resources/plugins_win.json
index 7820ae3..a0ad3dd 100644
--- a/chrome/browser/resources/plugins_win.json
+++ b/chrome/browser/resources/plugins_win.json
@@ -1,193 +1,185 @@
{
- "plugins": [
- {
- "mime_types": [
- "application/x-java-applet",
- "application/x-java-applet,version=1.1",
- "application/x-java-applet,version=1.1.1",
- "application/x-java-applet,version=1.1.2",
- "application/x-java-applet,version=1.1.3",
- "application/x-java-applet,version=1.2",
- "application/x-java-applet,version=1.2.1",
- "application/x-java-applet,version=1.2.2",
- "application/x-java-applet,version=1.3",
- "application/x-java-applet,version=1.3.1",
- "application/x-java-applet,version=1.4",
- "application/x-java-applet,version=1.4.1",
- "application/x-java-applet,version=1.4.2",
- "application/x-java-applet,version=1.5",
- "application/x-java-applet,version=1.6",
- "application/x-java-bean",
- "application/x-java-bean,version=1.1",
- "application/x-java-bean,version=1.1.1",
- "application/x-java-bean,version=1.1.2",
- "application/x-java-bean,version=1.1.3",
- "application/x-java-bean,version=1.2",
- "application/x-java-bean,version=1.2.1",
- "application/x-java-bean,version=1.2.2",
- "application/x-java-bean,version=1.3",
- "application/x-java-bean,version=1.3.1",
- "application/x-java-bean,version=1.4",
- "application/x-java-bean,version=1.4.1",
- "application/x-java-bean,version=1.4.2",
- "application/x-java-bean,version=1.5",
- "application/x-java-bean,version=1.6",
- "application/x-java-vm"
- ],
- "lang": "en-US",
- "name": "Java(TM)",
- "identifier": "java-runtime-environment",
- "help_url": "https://support.google.com/chrome/?p=plugin_java",
- "url": "http://java.com/download",
- "displayurl": true
- },
- {
- "mime_types": [
- "audio/vnd.rn-realaudio",
- "video/vnd.rn-realvideo",
- "audio/x-pn-realaudio-plugin",
- "audio/x-pn-realaudio"
- ],
- "lang": "en-US",
- "name": "RealPlayer",
- "identifier": "realplayer",
- "help_url": "https://support.google.com/chrome/?p=plugin_real",
- "url": "http://forms.real.com/real/realone/download.html?type=rpsp_us"
- },
- {
- "mime_types": [
- "application/futuresplash",
- "application/x-shockwave-flash"
- ],
- "lang": "en-US",
- "name": "Adobe Flash Player",
- "identifier": "adobe-flash-player",
- "help_url": "https://support.google.com/chrome/?p=plugin_flash",
- "url": "http://get.adobe.com/flashplayer/",
- "displayurl": true
- },
- {
- "mime_types": [
- "application/x-director"
- ],
- "lang": "en-US",
- "name": "Adobe Shockwave Player",
- "identifier": "shockwave",
- "help_url": "https://support.google.com/chrome/?p=plugin_shockwave",
- "url": "http://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/Shockwave_Installer_Slim.exe"
- },
- {
- "mime_types": [
- "application/pdf",
- "application/vnd.adobe.x-mars",
- "application/vnd.adobe.xdp+xml",
- "application/vnd.adobe.xfd+xml",
- "application/vnd.adobe.xfdf",
- "application/vnd.fdf"
- ],
- "lang": "en-US",
- "name": "Adobe Reader",
- "identifier": "adobe-reader",
- "help_url": "https://support.google.com/chrome/?p=plugin_pdf",
- "url": "http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.1.2/en_US/AdbeRdr1012_en_US.exe"
- },
- {
- "mime_types": [
- "application/sdp",
- "application/x-mpeg",
- "application/x-rtsp",
- "application/x-sdp",
- "audio/3ggp",
- "audio/3ggp2",
- "audio/aac",
- "audio/ac3",
- "audio/aiff",
- "audio/amr",
- "audio/basic",
- "audio/mid",
- "audio/midi",
- "audio/mp4",
- "audio/mpeg",
- "audio/vnd.qcelp",
- "audio/wav",
- "audio/x-aac",
- "audio/x-ac3",
- "audio/x-aiff",
- "audio/x-caf",
- "audio/x-gsm",
- "audio/x-m4a",
- "audio/x-m4b",
- "audio/x-m4p",
- "audio/x-midi",
- "audio/x-mpeg",
- "audio/x-wav",
- "image/jp2",
- "image/jpeg2000",
- "image/jpeg2000-image",
- "image/pict",
- "image/png",
- "image/x-jpeg2000-image",
- "image/x-macpaint",
- "image/x-pict",
- "image/x-png",
- "image/x-quicktime",
- "image/x-sgi",
- "image/x-targa",
- "video/3ggp",
- "video/3ggp2",
- "video/flc",
- "video/mp4",
- "video/mpeg",
- "video/quicktime",
- "video/sd-video",
- "video/x-m4v",
- "video/x-mpeg"
- ],
- "lang": "en-US",
- "name": "QuickTime Player",
- "identifier": "apple-quicktime",
- "help_url": "https://support.google.com/chrome/?p=plugin_quicktime",
- "url": "http://appldnld.apple.com/QuickTime/041-3089.20111026.Sxpr4/QuickTimeInstaller.exe"
- },
- {
- "mime_types": [
- "application/asx",
- "application/x-mplayer2",
- "application/x-ms-wmp",
- "audio/x-ms-wax",
- "audio/x-ms-wma",
- "video/x-ms-asf",
- "video/x-ms-asf-plugin",
- "video/x-ms-wm",
- "video/x-ms-wmv",
- "video/x-ms-wvx"
- ],
- "lang": "en-US",
- "name": "Windows Media Player",
- "identifier": "windows-media-player",
- "help_url": "https://support.google.com/chrome/?p=plugin_wmp",
- "url": "http://interoplabs.blob.core.windows.net/wmpff/wmpfirefoxplugin.exe"
- },
- {
- "mime_types": [
- "video/divx",
- "video/x-matroska"
- ],
- "lang": "en-US",
- "name": "DivX Web Player",
- "identifier": "divx-player",
- "help_url": "https://support.google.com/chrome/?p=plugin_divx",
- "url": "http://download.divx.com/player/divxdotcom/DivXWebPlayerInstaller.exe"
- },
- {
- "mime_types": [
- "application/x-silverlight",
- "application/x-silverlight-2"
- ],
- "lang": "en-US",
- "name": "Silverlight",
- "identifier": "silverlight",
- "url": "http://go.microsoft.com/fwlink/?LinkID=149156"
- }
- ]
+ "java-runtime-environment": {
+ "mime_types": [
+ "application/x-java-applet",
+ "application/x-java-applet,version=1.1",
+ "application/x-java-applet,version=1.1.1",
+ "application/x-java-applet,version=1.1.2",
+ "application/x-java-applet,version=1.1.3",
+ "application/x-java-applet,version=1.2",
+ "application/x-java-applet,version=1.2.1",
+ "application/x-java-applet,version=1.2.2",
+ "application/x-java-applet,version=1.3",
+ "application/x-java-applet,version=1.3.1",
+ "application/x-java-applet,version=1.4",
+ "application/x-java-applet,version=1.4.1",
+ "application/x-java-applet,version=1.4.2",
+ "application/x-java-applet,version=1.5",
+ "application/x-java-applet,version=1.6",
+ "application/x-java-bean",
+ "application/x-java-bean,version=1.1",
+ "application/x-java-bean,version=1.1.1",
+ "application/x-java-bean,version=1.1.2",
+ "application/x-java-bean,version=1.1.3",
+ "application/x-java-bean,version=1.2",
+ "application/x-java-bean,version=1.2.1",
+ "application/x-java-bean,version=1.2.2",
+ "application/x-java-bean,version=1.3",
+ "application/x-java-bean,version=1.3.1",
+ "application/x-java-bean,version=1.4",
+ "application/x-java-bean,version=1.4.1",
+ "application/x-java-bean,version=1.4.2",
+ "application/x-java-bean,version=1.5",
+ "application/x-java-bean,version=1.6",
+ "application/x-java-vm"
+ ],
+ "lang": "en-US",
+ "name": "Java(TM)",
+ "help_url": "https://support.google.com/chrome/?p=plugin_java",
+ "url": "http://java.com/download",
+ "displayurl": true
+ },
+ "realplayer": {
+ "mime_types": [
+ "audio/vnd.rn-realaudio",
+ "video/vnd.rn-realvideo",
+ "audio/x-pn-realaudio-plugin",
+ "audio/x-pn-realaudio"
+ ],
+ "lang": "en-US",
+ "name": "RealPlayer",
+ "help_url": "https://support.google.com/chrome/?p=plugin_real",
+ "url": "http://forms.real.com/real/realone/download.html?type=rpsp_us"
+ },
+ "adobe-flash-player": {
+ "mime_types": [
+ "application/futuresplash",
+ "application/x-shockwave-flash"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Flash Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_flash",
+ "url": "http://get.adobe.com/flashplayer/",
+ "requires_authorization": false,
+ "displayurl": true
+ },
+ "shockwave": {
+ "mime_types": [
+ "application/x-director"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Shockwave Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_shockwave",
+ "url": "http://fpdownload.macromedia.com/get/shockwave/default/english/win95nt/latest/Shockwave_Installer_Slim.exe"
+ },
+ "adobe-reader": {
+ "mime_types": [
+ "application/pdf",
+ "application/vnd.adobe.x-mars",
+ "application/vnd.adobe.xdp+xml",
+ "application/vnd.adobe.xfd+xml",
+ "application/vnd.adobe.xfdf",
+ "application/vnd.fdf"
+ ],
+ "lang": "en-US",
+ "name": "Adobe Reader",
+ "help_url": "https://support.google.com/chrome/?p=plugin_pdf",
+ "url": "http://ardownload.adobe.com/pub/adobe/reader/win/10.x/10.1.2/en_US/AdbeRdr1012_en_US.exe",
+ "requires_authorization": false
+ },
+ "apple-quicktime": {
+ "mime_types": [
+ "application/sdp",
+ "application/x-mpeg",
+ "application/x-rtsp",
+ "application/x-sdp",
+ "audio/3ggp",
+ "audio/3ggp2",
+ "audio/aac",
+ "audio/ac3",
+ "audio/aiff",
+ "audio/amr",
+ "audio/basic",
+ "audio/mid",
+ "audio/midi",
+ "audio/mp4",
+ "audio/mpeg",
+ "audio/vnd.qcelp",
+ "audio/wav",
+ "audio/x-aac",
+ "audio/x-ac3",
+ "audio/x-aiff",
+ "audio/x-caf",
+ "audio/x-gsm",
+ "audio/x-m4a",
+ "audio/x-m4b",
+ "audio/x-m4p",
+ "audio/x-midi",
+ "audio/x-mpeg",
+ "audio/x-wav",
+ "image/jp2",
+ "image/jpeg2000",
+ "image/jpeg2000-image",
+ "image/pict",
+ "image/png",
+ "image/x-jpeg2000-image",
+ "image/x-macpaint",
+ "image/x-pict",
+ "image/x-png",
+ "image/x-quicktime",
+ "image/x-sgi",
+ "image/x-targa",
+ "video/3ggp",
+ "video/3ggp2",
+ "video/flc",
+ "video/mp4",
+ "video/mpeg",
+ "video/quicktime",
+ "video/sd-video",
+ "video/x-m4v",
+ "video/x-mpeg"
+ ],
+ "lang": "en-US",
+ "name": "QuickTime Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_quicktime",
+ "url": "http://appldnld.apple.com/QuickTime/041-3089.20111026.Sxpr4/QuickTimeInstaller.exe"
+ },
+ "windows-media-player": {
+ "mime_types": [
+ "application/asx",
+ "application/x-mplayer2",
+ "application/x-ms-wmp",
+ "audio/x-ms-wax",
+ "audio/x-ms-wma",
+ "video/x-ms-asf",
+ "video/x-ms-asf-plugin",
+ "video/x-ms-wm",
+ "video/x-ms-wmv",
+ "video/x-ms-wvx"
+ ],
+ "lang": "en-US",
+ "name": "Windows Media Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_wmp",
+ "url": "http://interoplabs.blob.core.windows.net/wmpff/wmpfirefoxplugin.exe"
+ },
+ "divx-player": {
+ "mime_types": [
+ "video/divx",
+ "video/x-matroska"
+ ],
+ "lang": "en-US",
+ "name": "DivX Web Player",
+ "help_url": "https://support.google.com/chrome/?p=plugin_divx",
+ "url": "http://download.divx.com/player/divxdotcom/DivXWebPlayerInstaller.exe"
+ },
+ "silverlight": {
+ "mime_types": [
+ "application/x-silverlight",
+ "application/x-silverlight-2"
+ ],
+ "lang": "en-US",
+ "name": "Silverlight",
+ "url": "http://go.microsoft.com/fwlink/?LinkID=149156",
+ "requires_authorization": false
+ }
}
diff --git a/chrome/browser/ui/webui/plugins_ui.cc b/chrome/browser/ui/webui/plugins_ui.cc
index a2f46aa..c1340a0 100644
--- a/chrome/browser/ui/webui/plugins_ui.cc
+++ b/chrome/browser/ui/webui/plugins_ui.cc
@@ -44,6 +44,15 @@
#include "ui/base/resource/resource_bundle.h"
#include "webkit/plugins/npapi/plugin_group.h"
+#if defined(ENABLE_PLUGIN_INSTALLATION)
+#include "chrome/browser/plugin_finder.h"
+#include "chrome/browser/plugin_installer.h"
+#else
+// Forward-declare PluginFinder. It's never actually used, but we pass a NULL
+// pointer instead.
+class PluginFinder;
+#endif
+
using content::PluginService;
using content::WebContents;
using content::WebUIMessageHandler;
@@ -149,10 +158,14 @@ class PluginsDOMHandler : public WebUIMessageHandler,
private:
// Call this to start getting the plugins on the UI thread.
- void LoadPlugins();
+ void GetPluginFinder();
+
+ // Called when we have a PluginFinder and need to load the list of plug-ins.
+ void LoadPlugins(PluginFinder* plugin_finder);
// Called on the UI thread when the plugin information is ready.
- void PluginsLoaded(const std::vector<PluginGroup>& groups);
+ void PluginsLoaded(PluginFinder* plugin_finder,
+ const std::vector<PluginGroup>& groups);
content::NotificationRegistrar registrar_;
@@ -197,7 +210,7 @@ void PluginsDOMHandler::RegisterMessages() {
}
void PluginsDOMHandler::HandleRequestPluginsData(const ListValue* args) {
- LoadPlugins();
+ GetPluginFinder();
}
void PluginsDOMHandler::HandleEnablePluginMessage(const ListValue* args) {
@@ -295,22 +308,31 @@ void PluginsDOMHandler::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK_EQ(chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, type);
- LoadPlugins();
+ GetPluginFinder();
}
-void PluginsDOMHandler::LoadPlugins() {
+void PluginsDOMHandler::GetPluginFinder() {
if (weak_ptr_factory_.HasWeakPtrs())
return;
+#if defined(ENABLE_PLUGIN_INSTALLATION)
+ PluginFinder::Get(base::Bind(&PluginsDOMHandler::LoadPlugins,
+ weak_ptr_factory_.GetWeakPtr()));
+#else
+ LoadPlugins(NULL);
+#endif
+}
+
+void PluginsDOMHandler::LoadPlugins(PluginFinder* plugin_finder) {
PluginService::GetInstance()->GetPluginGroups(
base::Bind(&PluginsDOMHandler::PluginsLoaded,
- weak_ptr_factory_.GetWeakPtr()));
+ weak_ptr_factory_.GetWeakPtr(), plugin_finder));
}
-void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
+void PluginsDOMHandler::PluginsLoaded(PluginFinder* plugin_finder,
+ const std::vector<PluginGroup>& groups) {
Profile* profile = Profile::FromWebUI(web_ui());
- PluginPrefs* plugin_prefs =
- PluginPrefs::GetForProfile(profile);
+ PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(profile);
HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
ContentSettingsPattern wildcard = ContentSettingsPattern::Wildcard();
@@ -396,7 +418,15 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
group_data->SetString("description", active_plugin->desc);
group_data->SetString("version", active_plugin->version);
group_data->SetBoolean("critical", group.IsVulnerable(*active_plugin));
- group_data->SetString("update_url", group.GetUpdateURL());
+
+ std::string update_url;
+#if defined(ENABLE_PLUGIN_INSTALLATION)
+ PluginInstaller* installer =
+ plugin_finder->FindPluginWithIdentifier(group.identifier());
+ if (installer)
+ update_url = installer->plugin_url().spec();
+#endif
+ group_data->SetString("update_url", update_url);
std::string enabled_mode;
if (all_plugins_enabled_by_policy) {
@@ -410,7 +440,7 @@ void PluginsDOMHandler::PluginsLoaded(const std::vector<PluginGroup>& groups) {
}
group_data->SetString("enabledMode", enabled_mode);
- // TODO(bauerb): We should have a method on HostContentSettinsMap for this.
+ // TODO(bauerb): We should have a method on HostContentSettingsMap for this.
bool always_allowed = false;
ContentSettingsForOneType settings;
map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS,
diff --git a/content/utility/utility_thread_impl.cc b/content/utility/utility_thread_impl.cc
index 4887b57..cf85fbd 100644
--- a/content/utility/utility_thread_impl.cc
+++ b/content/utility/utility_thread_impl.cc
@@ -147,19 +147,16 @@ void UtilityThreadImpl::OnLoadPlugins(
gfx::GtkInitFromCommandLine(*CommandLine::ForCurrentProcess());
#endif
+ ScopedVector<webkit::npapi::PluginGroup> plugin_groups;
+ // TODO(bauerb): If we restart loading plug-ins, we might mess up the logic in
+ // PluginList::ShouldLoadPlugin due to missing the previously loaded plug-ins
+ // in |plugin_groups|.
for (size_t i = 0; i < plugin_paths.size(); ++i) {
- ScopedVector<webkit::npapi::PluginGroup> plugin_groups;
- plugin_list->LoadPlugin(plugin_paths[i], &plugin_groups);
-
- if (plugin_groups.empty()) {
+ webkit::WebPluginInfo plugin;
+ if (!plugin_list->LoadPlugin(plugin_paths[i], &plugin_groups, &plugin))
Send(new UtilityHostMsg_LoadPluginFailed(i, plugin_paths[i]));
- continue;
- }
-
- const webkit::npapi::PluginGroup* group = plugin_groups[0];
- DCHECK_EQ(group->web_plugin_infos().size(), 1u);
-
- Send(new UtilityHostMsg_LoadedPlugin(i, group->web_plugin_infos().front()));
+ else
+ Send(new UtilityHostMsg_LoadedPlugin(i, plugin));
}
ReleaseProcessIfNeeded();
diff --git a/webkit/plugins/npapi/plugin_group.cc b/webkit/plugins/npapi/plugin_group.cc
index 0309dd7..aa8be2f 100644
--- a/webkit/plugins/npapi/plugin_group.cc
+++ b/webkit/plugins/npapi/plugin_group.cc
@@ -20,8 +20,6 @@ namespace npapi {
// static
const char PluginGroup::kAdobeReaderGroupName[] = "Adobe Acrobat";
-const char PluginGroup::kAdobeReaderUpdateURL[] =
- "http://get.adobe.com/reader/";
const char PluginGroup::kJavaGroupName[] = "Java";
const char PluginGroup::kQuickTimeGroupName[] = "QuickTime";
const char PluginGroup::kShockwaveGroupName[] = "Shockwave";
@@ -32,8 +30,7 @@ const char PluginGroup::kWindowsMediaPlayerGroupName[] = "Windows Media Player";
VersionRange::VersionRange(const VersionRangeDefinition& definition)
: low_str(definition.version_matcher_low),
high_str(definition.version_matcher_high),
- min_str(definition.min_version),
- requires_authorization(definition.requires_authorization) {
+ min_str(definition.min_version) {
if (!low_str.empty())
low.reset(Version::GetVersionFromString(low_str));
if (!high_str.empty())
@@ -60,24 +57,20 @@ void VersionRange::InitFrom(const VersionRange& other) {
low.reset(Version::GetVersionFromString(other.low_str));
high.reset(Version::GetVersionFromString(other.high_str));
min.reset(Version::GetVersionFromString(other.min_str));
- requires_authorization = other.requires_authorization;
}
PluginGroup::PluginGroup(const string16& group_name,
const string16& name_matcher,
- const std::string& update_url,
const std::string& identifier)
: identifier_(identifier),
group_name_(group_name),
- name_matcher_(name_matcher),
- update_url_(update_url) {
+ name_matcher_(name_matcher) {
}
void PluginGroup::InitFrom(const PluginGroup& other) {
identifier_ = other.identifier_;
group_name_ = other.group_name_;
name_matcher_ = other.name_matcher_;
- update_url_ = other.update_url_;
version_ranges_ = other.version_ranges_;
web_plugin_infos_ = other.web_plugin_infos_;
}
@@ -96,7 +89,6 @@ PluginGroup* PluginGroup::FromPluginGroupDefinition(
const PluginGroupDefinition& definition) {
PluginGroup* group = new PluginGroup(ASCIIToUTF16(definition.name),
ASCIIToUTF16(definition.name_matcher),
- definition.update_url,
definition.identifier);
for (size_t i = 0; i < definition.num_versions; ++i)
group->version_ranges_.push_back(VersionRange(definition.versions[i]));
@@ -126,7 +118,7 @@ std::string PluginGroup::GetLongIdentifier(const WebPluginInfo& wpi) {
/*static*/
PluginGroup* PluginGroup::FromWebPluginInfo(const WebPluginInfo& wpi) {
// Create a matcher from the name of this plugin.
- return new PluginGroup(wpi.name, wpi.name, std::string(),
+ return new PluginGroup(wpi.name, wpi.name,
GetIdentifier(wpi));
}
@@ -256,19 +248,6 @@ bool PluginGroup::IsVulnerable(const WebPluginInfo& plugin) const {
return false;
}
-bool PluginGroup::RequiresAuthorization(const WebPluginInfo& plugin) const {
- scoped_ptr<Version> version(CreateVersionFromString(plugin.version));
- if (!version.get())
- return false;
-
- for (size_t i = 0; i < version_ranges_.size(); ++i) {
- if (IsVersionInRange(*version, version_ranges_[i]) &&
- version_ranges_[i].requires_authorization)
- return true;
- }
- return false;
-}
-
bool PluginGroup::IsEmpty() const {
return web_plugin_infos_.empty();
}
diff --git a/webkit/plugins/npapi/plugin_group.h b/webkit/plugins/npapi/plugin_group.h
index 91ce596..8cb0815 100644
--- a/webkit/plugins/npapi/plugin_group.h
+++ b/webkit/plugins/npapi/plugin_group.h
@@ -34,17 +34,20 @@ struct VersionRangeDefinition {
// to match anything higher than |version_matcher_low|.
const char* version_matcher_high;
const char* min_version; // Minimum secure version.
- bool requires_authorization; // If this range needs user permission to run.
};
// Hard-coded definitions of plugin groups.
struct PluginGroupDefinition {
- const char* identifier; // Unique identifier for this group.
- const char* name; // Name of this group.
- const char* name_matcher; // Substring matcher for the plugin name.
- const VersionRangeDefinition* versions; // List of version ranges.
- size_t num_versions; // Size of the array |versions| points to.
- const char* update_url; // Location of latest secure version.
+ // Unique identifier for this group.
+ const char* identifier;
+ // Name of this group.
+ const char* name;
+ // Substring matcher for the plugin name.
+ const char* name_matcher;
+ // List of version ranges.
+ const VersionRangeDefinition* versions;
+ // Size of the array |versions| points to.
+ size_t num_versions;
};
// Run-time structure to hold version range information.
@@ -61,7 +64,6 @@ struct VersionRange {
scoped_ptr<Version> low;
scoped_ptr<Version> high;
scoped_ptr<Version> min;
- bool requires_authorization;
private:
void InitFrom(const VersionRange& other);
};
@@ -78,7 +80,6 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
// Used by about:plugins to disable Reader plugin when internal PDF viewer is
// enabled.
static const char kAdobeReaderGroupName[];
- static const char kAdobeReaderUpdateURL[];
static const char kJavaGroupName[];
static const char kQuickTimeGroupName[];
static const char kShockwaveGroupName[];
@@ -117,19 +118,9 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
// Checks whether a plugin exists in the group with the given path.
bool ContainsPlugin(const FilePath& path) const;
- // Returns the update URL.
- std::string GetUpdateURL() const { return update_url_; }
-
- // Returns true if this plugin group is whitelisted.
- bool IsWhitelisted() const;
-
// Returns true if |plugin| in this group has known security problems.
bool IsVulnerable(const WebPluginInfo& plugin) const;
- // Returns true if |plugin| in this plug-in group always requires user
- // authorization to run.
- bool RequiresAuthorization(const WebPluginInfo& plugin) const;
-
// Check if the group has no plugins. Could happen after a reload if the plug-
// in has disappeared from the pc (or in the process of updating).
bool IsEmpty() const;
@@ -143,9 +134,9 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
}
private:
- friend class PluginList;
friend class MockPluginList;
friend class PluginGroupTest;
+ friend class PluginList;
friend class ::PluginExceptionsTableModelTest;
FRIEND_TEST_ALL_PREFIXES(PluginListTest, DisableOutdated);
@@ -176,7 +167,6 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
PluginGroup(const string16& group_name,
const string16& name_matcher,
- const std::string& update_url,
const std::string& identifier);
void InitFrom(const PluginGroup& other);
@@ -190,7 +180,6 @@ class WEBKIT_PLUGINS_EXPORT PluginGroup {
std::string identifier_;
string16 group_name_;
string16 name_matcher_;
- std::string update_url_;
std::vector<VersionRange> version_ranges_;
std::vector<webkit::WebPluginInfo> web_plugin_infos_;
};
diff --git a/webkit/plugins/npapi/plugin_group_unittest.cc b/webkit/plugins/npapi/plugin_group_unittest.cc
index 4a0a991..2033296 100644
--- a/webkit/plugins/npapi/plugin_group_unittest.cc
+++ b/webkit/plugins/npapi/plugin_group_unittest.cc
@@ -20,33 +20,33 @@ namespace webkit {
namespace npapi {
static const VersionRangeDefinition kPluginVersionRange[] = {
- { "", "", "3.0.44", false }
+ { "", "", "3.0.44" }
};
static const VersionRangeDefinition kPlugin3VersionRange[] = {
- { "0", "4", "3.0.44", false }
+ { "0", "4", "3.0.44" }
};
static const VersionRangeDefinition kPlugin4VersionRange[] = {
- { "4", "5", "4.0.44", false }
+ { "4", "5", "4.0.44" }
};
static const VersionRangeDefinition kPlugin34VersionRange[] = {
- { "0", "4", "3.0.44", false },
- { "4", "5", "", false }
+ { "0", "4", "3.0.44" },
+ { "4", "5", "" }
};
static const PluginGroupDefinition kPluginDef = {
"myplugin", "MyPlugin", "MyPlugin", kPluginVersionRange,
- arraysize(kPluginVersionRange), "http://latest/" };
+ arraysize(kPluginVersionRange) };
static const PluginGroupDefinition kPluginDef3 = {
"myplugin-3", "MyPlugin 3", "MyPlugin", kPlugin3VersionRange,
- arraysize(kPlugin3VersionRange), "http://latest" };
+ arraysize(kPlugin3VersionRange) };
static const PluginGroupDefinition kPluginDef4 = {
"myplugin-4", "MyPlugin 4", "MyPlugin", kPlugin4VersionRange,
- arraysize(kPlugin4VersionRange), "http://latest" };
+ arraysize(kPlugin4VersionRange) };
static const PluginGroupDefinition kPluginDef34 = {
"myplugin-34", "MyPlugin 3/4", "MyPlugin", kPlugin34VersionRange,
- arraysize(kPlugin34VersionRange), "http://latest" };
+ arraysize(kPlugin34VersionRange) };
static const PluginGroupDefinition kPluginDefNotVulnerable = {
- "myplugin-latest", "MyPlugin", "MyPlugin", NULL, 0, "http://latest" };
+ "myplugin-latest", "MyPlugin", "MyPlugin", NULL, 0 };
const PluginGroupDefinition kPluginDefinitions[] = {
kPluginDef,
@@ -153,14 +153,13 @@ TEST_F(PluginGroupTest, VersionExtraction) {
TEST_F(PluginGroupTest, IsVulnerable) {
// Adobe Reader 10
VersionRangeDefinition adobe_reader_version_range[] = {
- { "10", "11", "", false },
- { "9", "10", "9.4.1", false },
- { "0", "9", "8.2.5", false }
+ { "10", "11", "" },
+ { "9", "10", "9.4.1" },
+ { "0", "9", "8.2.5" }
};
PluginGroupDefinition adobe_reader_plugin_def = {
"adobe-reader", "Adobe Reader", "Adobe Acrobat",
- adobe_reader_version_range, arraysize(adobe_reader_version_range),
- "http://get.adobe.com/reader/" };
+ adobe_reader_version_range, arraysize(adobe_reader_version_range) };
WebPluginInfo adobe_reader_plugin(ASCIIToUTF16("Adobe Reader"),
FilePath(FILE_PATH_LITERAL("/reader.so")),
ASCIIToUTF16("10.0.0.396"),
@@ -170,17 +169,15 @@ TEST_F(PluginGroupTest, IsVulnerable) {
group->AddPlugin(adobe_reader_plugin);
PluginGroup group_copy(*group); // Exercise the copy constructor.
EXPECT_FALSE(group_copy.IsVulnerable(adobe_reader_plugin));
- EXPECT_FALSE(group_copy.RequiresAuthorization(adobe_reader_plugin));
// Silverlight 4
VersionRangeDefinition silverlight_version_range[] = {
- { "0", "4", "3.0.50106.0", false },
- { "4", "5", "", true }
+ { "0", "4", "3.0.50106.0" },
+ { "4", "5", "" }
};
PluginGroupDefinition silverlight_plugin_def = {
"silverlight", "Silverlight", "Silverlight", silverlight_version_range,
- arraysize(silverlight_version_range),
- "http://www.microsoft.com/getsilverlight/" };
+ arraysize(silverlight_version_range) };
WebPluginInfo silverlight_plugin(ASCIIToUTF16("Silverlight"),
FilePath(FILE_PATH_LITERAL("/silver.so")),
ASCIIToUTF16("4.0.50917.0"),
@@ -188,7 +185,6 @@ TEST_F(PluginGroupTest, IsVulnerable) {
group.reset(PluginGroupTest::CreatePluginGroup(silverlight_plugin_def));
group->AddPlugin(silverlight_plugin);
EXPECT_FALSE(PluginGroup(*group).IsVulnerable(silverlight_plugin));
- EXPECT_TRUE(PluginGroup(*group).RequiresAuthorization(silverlight_plugin));
}
} // namespace npapi
diff --git a/webkit/plugins/npapi/plugin_list.cc b/webkit/plugins/npapi/plugin_list.cc
index 2d70c01..260fadf 100644
--- a/webkit/plugins/npapi/plugin_list.cc
+++ b/webkit/plugins/npapi/plugin_list.cc
@@ -53,99 +53,81 @@ bool AllowMimeTypeMismatch(const std::string& orig_mime_type,
namespace webkit {
namespace npapi {
+// Note: If you change the plug-in definitions here, also update
+// chrome/browser/resources/plugins_*.json correspondingly!
+// In particular, the identifier and the update URLs need to be kept in sync.
+
// Some version ranges can be shared across operating systems. This should be
// done where possible to avoid duplication.
-// TODO(bauerb): The |requires_authorization| flag should be part of
-// PluginGroupDefinition, not VersionRangeDefinition.
-static const VersionRangeDefinition kAllVersionsInfobarVersionRange[] = {
- { "", "", "", true }
-};
-
-static const VersionRangeDefinition kAllVersionsNoInfobarVersionRange[] = {
- { "", "", "", false }
-};
// This is up to date with
// http://www.adobe.com/support/security/bulletins/apsb12-03.html
// NOTE: We would like to go to the 4th component value but we cannot because
// on some platforms, such as Linux, it is not available.
static const VersionRangeDefinition kFlashVersionRange[] = {
- { "", "", "11.1.102", false }
+ { "", "", "11.1.102" }
};
// This is up to date with
// http://www.adobe.com/support/security/bulletins/apsb12-02.html
static const VersionRangeDefinition kShockwaveVersionRange[] = {
- { "", "", "11.6.4.634", true }
+ { "", "", "11.6.4.634" }
};
// This is up to date with
// http://support.microsoft.com/kb/2668562
// http://technet.microsoft.com/en-us/security/Bulletin/MS12-016
static const VersionRangeDefinition kSilverlightVersionRange[] = {
- { "0", "5", "4.1.10111.0", false },
- { "5", "6", "", false },
+ { "0", "5", "4.1.10111.0" },
+ { "5", "6", "" },
};
// Similarly, try and share the group definition for plug-ins that are
// very consistent across OS'es.
#define kFlashDefinition { \
"adobe-flash-player", "Flash", "Shockwave Flash", kFlashVersionRange,\
- arraysize(kFlashVersionRange), "http://get.adobe.com/flashplayer/" }
+ arraysize(kFlashVersionRange) }
#define kShockwaveDefinition { \
"shockwave", PluginGroup::kShockwaveGroupName, "Shockwave for Director", \
- kShockwaveVersionRange, arraysize(kShockwaveVersionRange), \
- "http://www.adobe.com/shockwave/download/" }
+ kShockwaveVersionRange, arraysize(kShockwaveVersionRange) }
#define kSilverlightDefinition { \
"silverlight", PluginGroup::kSilverlightGroupName, "Silverlight", \
- kSilverlightVersionRange, arraysize(kSilverlightVersionRange), \
- "http://www.microsoft.com/getsilverlight/" }
+ kSilverlightVersionRange, arraysize(kSilverlightVersionRange) }
#define kChromePdfDefinition { \
- "google-chrome-pdf", "Chrome PDF Viewer", "Chrome PDF Viewer", \
- kAllVersionsNoInfobarVersionRange, \
- arraysize(kAllVersionsNoInfobarVersionRange), "" }
+ "google-chrome-pdf", "Chrome PDF Viewer", "Chrome PDF Viewer", NULL, 0 }
#define kGoogleTalkDefinition { \
- "google-talk", "Google Talk", "Google Talk", \
- kAllVersionsNoInfobarVersionRange, \
- arraysize(kAllVersionsNoInfobarVersionRange), ""}
+ "google-talk", "Google Talk", "Google Talk", NULL, 0 }
#if defined(OS_MACOSX)
// Plugin Groups for Mac.
// Plugins are listed here as soon as vulnerabilities and solutions
// (new versions) are published.
static const VersionRangeDefinition kQuicktimeVersionRange[] = {
- { "", "", "7.6.6", true }
+ { "", "", "7.6.6" }
};
static const VersionRangeDefinition kJavaVersionRange[] = {
- { "0", "13.0", "12.8.0", true }, // Leopard
- { "13.0", "14.0", "13.5.0", true }, // Snow Leopard
- { "14.0", "", "14.0.3", true } // Lion
+ { "0", "13.0", "12.8.0" }, // Leopard
+ { "13.0", "14.0", "13.5.0" }, // Snow Leopard
+ { "14.0", "", "14.0.3" } // Lion
};
static const VersionRangeDefinition kFlip4MacVersionRange[] = {
- { "", "", "2.2.1", true }
-};
-static const VersionRangeDefinition kDivXVersionRange[] = {
- { "", "", "", true }
+ { "", "", "2.2.1" }
};
// Note: The Adobe Reader browser plug-in is not supported in Chrome.
// Note: The Real Player plugin for mac doesn't expose a version at all.
static const PluginGroupDefinition kGroupDefinitions[] = {
kFlashDefinition,
{ "apple-quicktime", PluginGroup::kQuickTimeGroupName, "QuickTime Plug-in",
- kQuicktimeVersionRange, arraysize(kQuicktimeVersionRange),
- "http://www.apple.com/quicktime/download/" },
+ kQuicktimeVersionRange, arraysize(kQuicktimeVersionRange) },
{ "java-runtime-environment", PluginGroup::kJavaGroupName, "Java",
- kJavaVersionRange, arraysize(kJavaVersionRange),
- "http://support.apple.com/kb/HT1338" },
+ kJavaVersionRange, arraysize(kJavaVersionRange) },
kSilverlightDefinition,
{ "flip4mac", "Flip4Mac", "Flip4Mac", kFlip4MacVersionRange,
- arraysize(kFlip4MacVersionRange),
- "http://www.telestream.net/flip4mac-wmv/overview.htm" },
+ arraysize(kFlip4MacVersionRange) },
{ "divx-player", "DivX Plus Web Player", "DivX Plus Web Player",
- kDivXVersionRange, arraysize(kDivXVersionRange),
- "http://www.divx.com/en/software/divx-plus/web-player" },
+ NULL, 0 },
kShockwaveDefinition,
kChromePdfDefinition,
kGoogleTalkDefinition,
@@ -155,54 +137,46 @@ static const PluginGroupDefinition kGroupDefinitions[] = {
// TODO(panayiotis): We should group "RealJukebox NS Plugin" with the rest of
// the RealPlayer files.
static const VersionRangeDefinition kQuicktimeVersionRange[] = {
- { "", "", "7.6.9", true }
+ { "", "", "7.6.9" }
};
static const VersionRangeDefinition kJavaVersionRange[] = {
- { "0", "7", "6.0.310", true }, // "310" is not a typo.
- { "7", "", "10.3", true } // JDK7u3 identifies itself as 10.3
+ { "0", "7", "6.0.310" }, // "310" is not a typo.
+ { "7", "", "10.3" } // JDK7u3 identifies itself as 10.3
};
// This is up to date with
// http://www.adobe.com/support/security/bulletins/apsb12-01.html
static const VersionRangeDefinition kAdobeReaderVersionRange[] = {
- { "10", "11", "10.1.2", false },
- { "0", "10", "9.5", false }
+ { "10", "11", "10.1.2" },
+ { "0", "10", "9.5" }
};
static const VersionRangeDefinition kDivXVersionRange[] = {
- { "", "", "1.4.3.4", true }
+ { "", "", "1.4.3.4" }
};
// This is up to date with
// http://service.real.com/realplayer/security/02062012_player/en/
static const VersionRangeDefinition kRealPlayerVersionRange[] = {
- { "", "", "15.0.2.71", true }
+ { "", "", "15.0.2.71" }
};
static const PluginGroupDefinition kGroupDefinitions[] = {
kFlashDefinition,
{ "apple-quicktime", PluginGroup::kQuickTimeGroupName, "QuickTime Plug-in",
- kQuicktimeVersionRange, arraysize(kQuicktimeVersionRange),
- "http://www.apple.com/quicktime/download/" },
+ kQuicktimeVersionRange, arraysize(kQuicktimeVersionRange) },
{ "java-runtime-environment", PluginGroup::kJavaGroupName, "Java",
- kJavaVersionRange, arraysize(kJavaVersionRange),
- "http://www.java.com/download" },
+ kJavaVersionRange, arraysize(kJavaVersionRange) },
{ "adobe-reader", PluginGroup::kAdobeReaderGroupName, "Adobe Acrobat",
- kAdobeReaderVersionRange, arraysize(kAdobeReaderVersionRange),
- "http://get.adobe.com/reader/" },
+ kAdobeReaderVersionRange, arraysize(kAdobeReaderVersionRange) },
kSilverlightDefinition,
kShockwaveDefinition,
{ "divx-player", "DivX Player", "DivX Web Player", kDivXVersionRange,
- arraysize(kDivXVersionRange),
- "http://download.divx.com/divx/autoupdate/player/"
- "DivXWebPlayerInstaller.exe" },
+ arraysize(kDivXVersionRange) },
{ "realplayer", PluginGroup::kRealPlayerGroupName, "RealPlayer",
- kRealPlayerVersionRange, arraysize(kRealPlayerVersionRange),
- "http://www.real.com/realplayer/download" },
+ kRealPlayerVersionRange, arraysize(kRealPlayerVersionRange) },
// These are here for grouping, no vulnerabilities known.
{ "windows-media-player", PluginGroup::kWindowsMediaPlayerGroupName,
- "Windows Media Player", kAllVersionsInfobarVersionRange,
- arraysize(kAllVersionsInfobarVersionRange), "" },
+ "Windows Media Player", NULL, 0 },
{ "microsoft-office", "Microsoft Office", "Microsoft Office",
- NULL, 0, "" },
- { "nvidia-3d", "NVIDIA 3D", "NVIDIA 3D", kAllVersionsInfobarVersionRange,
- arraysize(kAllVersionsInfobarVersionRange), "" },
+ NULL, 0 },
+ { "nvidia-3d", "NVIDIA 3D", "NVIDIA 3D", NULL, 0 },
kChromePdfDefinition,
kGoogleTalkDefinition,
};
@@ -217,18 +191,18 @@ static const PluginGroupDefinition kGroupDefinitions[] = {
#else // Most importantly, covers desktop Linux.
static const VersionRangeDefinition kJavaVersionRange[] = {
- { "0", "1.7", "1.6.0.31", true },
- { "1.7", "", "1.7.0.3", true }
+ { "0", "1.7", "1.6.0.31" },
+ { "1.7", "", "1.7.0.3" }
};
// Up to date with:
// http://blog.fuseyism.com/index.php/2012/02/15/
// security-icedtea6-1-8-13-1-9-13-1-10-6-and-icedtea-2-0-1-released/
static const VersionRangeDefinition kRedhatIcedTeaVersionRange[] = {
- { "0", "1.9", "1.8.13", true },
- { "1.9", "1.10", "1.9.13", true },
- { "1.10", "2", "1.10.6", true },
- { "2", "", "2.0.1", true }
+ { "0", "1.9", "1.8.13" },
+ { "1.9", "1.10", "1.9.13" },
+ { "1.10", "2", "1.10.6" },
+ { "2", "", "2.0.1" }
};
static const PluginGroupDefinition kGroupDefinitions[] = {
@@ -236,11 +210,9 @@ static const PluginGroupDefinition kGroupDefinitions[] = {
// plug-in on the Linux 64-bit version of Chrome.
kFlashDefinition,
{ "java-runtime-environment", PluginGroup::kJavaGroupName, "Java",
- kJavaVersionRange, arraysize(kJavaVersionRange),
- "http://www.java.com/en/download/manual.jsp" },
+ kJavaVersionRange, arraysize(kJavaVersionRange) },
{ "redhat-icetea-java", "IcedTea", "IcedTea",
- kRedhatIcedTeaVersionRange, arraysize(kRedhatIcedTeaVersionRange),
- "http://www.linuxsecurity.com/content/section/3/170/" },
+ kRedhatIcedTeaVersionRange, arraysize(kRedhatIcedTeaVersionRange) },
kChromePdfDefinition,
kGoogleTalkDefinition,
};
@@ -440,7 +412,8 @@ void PluginList::LoadPluginsInternal(ScopedVector<PluginGroup>* plugin_groups) {
for (std::vector<FilePath>::const_iterator it = plugin_paths.begin();
it != plugin_paths.end();
++it) {
- LoadPlugin(*it, plugin_groups);
+ WebPluginInfo plugin_info;
+ LoadPlugin(*it, plugin_groups, &plugin_info);
}
}
@@ -459,35 +432,34 @@ void PluginList::LoadPlugins() {
plugin_groups_.swap(new_plugin_groups);
}
-void PluginList::LoadPlugin(const FilePath& path,
- ScopedVector<PluginGroup>* plugin_groups) {
+bool PluginList::LoadPlugin(const FilePath& path,
+ ScopedVector<PluginGroup>* plugin_groups,
+ WebPluginInfo* plugin_info) {
LOG_IF(ERROR, PluginList::DebugPluginLoading())
<< "Loading plugin " << path.value();
- WebPluginInfo plugin_info;
const PluginEntryPoints* entry_points;
- if (!ReadPluginInfo(path, &plugin_info, &entry_points))
- return;
+ if (!ReadPluginInfo(path, plugin_info, &entry_points))
+ return false;
- if (!ShouldLoadPlugin(plugin_info, plugin_groups))
- return;
+ if (!ShouldLoadPlugin(*plugin_info, plugin_groups))
+ return false;
#if defined(OS_WIN) && !defined(NDEBUG)
if (path.BaseName().value() != L"npspy.dll") // Make an exception for NPSPY
#endif
{
- for (size_t i = 0; i < plugin_info.mime_types.size(); ++i) {
+ for (size_t i = 0; i < plugin_info->mime_types.size(); ++i) {
// TODO: don't load global handlers for now.
// WebKit hands to the Plugin before it tries
// to handle mimeTypes on its own.
- const std::string &mime_type = plugin_info.mime_types[i].mime_type;
+ const std::string &mime_type = plugin_info->mime_types[i].mime_type;
if (mime_type == "*")
- return;
+ return false;
}
}
-
- base::AutoLock lock(lock_);
- AddToPluginGroups(plugin_info, plugin_groups);
+ AddToPluginGroups(*plugin_info, plugin_groups);
+ return true;
}
void PluginList::GetPluginPathsToLoad(std::vector<FilePath>* plugin_paths) {
diff --git a/webkit/plugins/npapi/plugin_list.h b/webkit/plugins/npapi/plugin_list.h
index bff39c4..87ea02d 100644
--- a/webkit/plugins/npapi/plugin_list.h
+++ b/webkit/plugins/npapi/plugin_list.h
@@ -162,9 +162,11 @@ class WEBKIT_PLUGINS_EXPORT PluginList {
// If no such group exists, an empty string is returned.
string16 GetPluginGroupName(const std::string& identifier);
- // Load a specific plugin with full path.
- void LoadPlugin(const FilePath& filename,
- ScopedVector<PluginGroup>* plugin_groups);
+ // Load a specific plugin with full path. Return true iff loading the plug-in
+ // was successful.
+ bool LoadPlugin(const FilePath& filename,
+ ScopedVector<PluginGroup>* plugin_groups,
+ webkit::WebPluginInfo* plugin_info);
// The following functions are used to support probing for WebPluginInfo
// using a different instance of this class.
@@ -186,7 +188,6 @@ class WEBKIT_PLUGINS_EXPORT PluginList {
// Adds the given WebPluginInfo to its corresponding group, creating it if
// necessary, and returns the group.
- // Callers need to protect calls to this method by a lock themselves.
PluginGroup* AddToPluginGroups(const webkit::WebPluginInfo& web_plugin_info,
ScopedVector<PluginGroup>* plugin_groups);
diff --git a/webkit/plugins/npapi/plugin_list_unittest.cc b/webkit/plugins/npapi/plugin_list_unittest.cc
index 3aa75b5..a58d06b 100644
--- a/webkit/plugins/npapi/plugin_list_unittest.cc
+++ b/webkit/plugins/npapi/plugin_list_unittest.cc
@@ -37,8 +37,7 @@ const char* kFooIdentifier = "foo";
const char* kFooGroupName = "Foo";
const char* kFooName = "Foo Plugin";
const PluginGroupDefinition kPluginDefinitions[] = {
- { kFooIdentifier, kFooGroupName, kFooName, NULL, 0,
- "http://example.com/foo" },
+ { kFooIdentifier, kFooGroupName, kFooName, NULL, 0 },
};
} // namespace