Index: chrome/browser/plugins/plugin_prefs.cc |
diff --git a/chrome/browser/plugins/plugin_prefs.cc b/chrome/browser/plugins/plugin_prefs.cc |
index 66ae98016bb07de481bbd4f8e6a97dd4195974bb..85862139b88122b5dc6937ba9bc975cfb8d69c6a 100644 |
--- a/chrome/browser/plugins/plugin_prefs.cc |
+++ b/chrome/browser/plugins/plugin_prefs.cc |
@@ -28,6 +28,7 @@ |
#include "chrome/browser/plugins/plugin_prefs_factory.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/common/chrome_constants.h" |
+#include "chrome/common/chrome_content_client.h" |
#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/common/pref_names.h" |
@@ -60,6 +61,10 @@ bool IsComponentUpdatedPepperFlash(const base::FilePath& plugin) { |
return false; |
} |
+bool IsPDFViewerPlugin(const base::string16& plugin_name) { |
+ return plugin_name == base::ASCIIToUTF16(ChromeContentClient::kPDFPluginName); |
+} |
+ |
} // namespace |
PluginPrefs::PluginState::PluginState() { |
@@ -225,15 +230,21 @@ void PluginPrefs::EnablePluginInternal( |
PluginPrefs::PolicyStatus PluginPrefs::PolicyStatusForPlugin( |
const base::string16& name) const { |
base::AutoLock auto_lock(lock_); |
- if (IsStringMatchedInSet(name, policy_enabled_plugin_patterns_)) { |
+ |
+ // Special handling for PDF based on its specific policy. |
+ if (IsPDFViewerPlugin(name) && always_open_pdf_externally_) |
+ return POLICY_DISABLED; |
+ |
+ if (IsStringMatchedInSet(name, policy_enabled_plugin_patterns_)) |
return POLICY_ENABLED; |
- } else if (IsStringMatchedInSet(name, policy_disabled_plugin_patterns_) && |
- !IsStringMatchedInSet( |
- name, policy_disabled_plugin_exception_patterns_)) { |
+ |
+ if (IsStringMatchedInSet(name, policy_disabled_plugin_patterns_) && |
+ !IsStringMatchedInSet( |
+ name, policy_disabled_plugin_exception_patterns_)) { |
return POLICY_DISABLED; |
- } else { |
- return NO_POLICY; |
} |
+ |
+ return NO_POLICY; |
} |
bool PluginPrefs::IsPluginEnabled(const content::WebPluginInfo& plugin) const { |
@@ -287,6 +298,14 @@ void PluginPrefs::UpdatePatternsAndNotify(std::set<base::string16>* patterns, |
NotifyPluginStatusChanged(); |
} |
+void PluginPrefs::UpdatePdfPolicy(const std::string& pref_name) { |
+ base::AutoLock auto_lock(lock_); |
+ always_open_pdf_externally_ = |
+ prefs_->GetBoolean(prefs::kPluginsAlwaysOpenPdfExternally); |
+ |
+ NotifyPluginStatusChanged(); |
+} |
+ |
/*static*/ |
bool PluginPrefs::IsStringMatchedInSet( |
const base::string16& name, |
@@ -419,6 +438,8 @@ void PluginPrefs::SetPrefs(PrefService* prefs) { |
&policy_disabled_plugin_exception_patterns_); |
ListValueToStringSet(prefs_->GetList(prefs::kPluginsEnabledPlugins), |
&policy_enabled_plugin_patterns_); |
+ always_open_pdf_externally_ = |
+ prefs_->GetBoolean(prefs::kPluginsAlwaysOpenPdfExternally); |
registrar_.Init(prefs_); |
@@ -438,6 +459,9 @@ void PluginPrefs::SetPrefs(PrefService* prefs) { |
base::Bind(&PluginPrefs::UpdatePatternsAndNotify, |
base::Unretained(this), |
&policy_enabled_plugin_patterns_)); |
+ registrar_.Add(prefs::kPluginsAlwaysOpenPdfExternally, |
+ base::Bind(&PluginPrefs::UpdatePdfPolicy, |
+ base::Unretained(this))); |
NotifyPluginStatusChanged(); |
} |
@@ -447,14 +471,15 @@ void PluginPrefs::ShutdownOnUIThread() { |
registrar_.RemoveAll(); |
} |
-PluginPrefs::PluginPrefs() : profile_(NULL), |
+PluginPrefs::PluginPrefs() : always_open_pdf_externally_(false), |
+ profile_(NULL), |
prefs_(NULL) { |
} |
PluginPrefs::~PluginPrefs() { |
} |
-void PluginPrefs::SetPolicyEnforcedPluginPatterns( |
+void PluginPrefs::SetPolicyEnforcedPluginPatternsForTests( |
const std::set<base::string16>& disabled_patterns, |
const std::set<base::string16>& disabled_exception_patterns, |
const std::set<base::string16>& enabled_patterns) { |
@@ -463,6 +488,12 @@ void PluginPrefs::SetPolicyEnforcedPluginPatterns( |
policy_enabled_plugin_patterns_ = enabled_patterns; |
} |
+void PluginPrefs::SetAlwaysOpenPdfExternallyForTests( |
+ bool always_open_pdf_externally) { |
+ always_open_pdf_externally_ = always_open_pdf_externally; |
+} |
+ |
+ |
void PluginPrefs::OnUpdatePreferences( |
const std::vector<content::WebPluginInfo>& plugins) { |
if (!prefs_) |