| OLD | NEW | 
|    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |    1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
|    2 // Use of this source code is governed by a BSD-style license that can be |    2 // Use of this source code is governed by a BSD-style license that can be | 
|    3 // found in the LICENSE file. |    3 // found in the LICENSE file. | 
|    4  |    4  | 
|    5 #include "chrome/browser/plugin_prefs.h" |    5 #include "chrome/browser/plugin_prefs.h" | 
|    6  |    6  | 
|    7 #include <string> |    7 #include <string> | 
|    8  |    8  | 
|    9 #include "base/bind.h" |    9 #include "base/bind.h" | 
|   10 #include "base/command_line.h" |   10 #include "base/command_line.h" | 
|   11 #include "base/lazy_instance.h" |   11 #include "base/lazy_instance.h" | 
|   12 #include "base/memory/scoped_ptr.h" |   12 #include "base/memory/scoped_ptr.h" | 
|   13 #include "base/memory/singleton.h" |   13 #include "base/memory/singleton.h" | 
|   14 #include "base/message_loop.h" |   14 #include "base/message_loop.h" | 
|   15 #include "base/path_service.h" |   15 #include "base/path_service.h" | 
|   16 #include "base/string_util.h" |   16 #include "base/string_util.h" | 
|   17 #include "base/utf_string_conversions.h" |   17 #include "base/utf_string_conversions.h" | 
|   18 #include "base/values.h" |   18 #include "base/values.h" | 
|   19 #include "base/version.h" |   19 #include "base/version.h" | 
|   20 #include "build/build_config.h" |   20 #include "build/build_config.h" | 
|   21 #include "chrome/browser/browser_process.h" |   21 #include "chrome/browser/browser_process.h" | 
|   22 #include "chrome/browser/plugin_installer.h" |   22 #include "chrome/browser/plugin_metadata.h" | 
|   23 #include "chrome/browser/plugin_prefs_factory.h" |   23 #include "chrome/browser/plugin_prefs_factory.h" | 
|   24 #include "chrome/browser/prefs/scoped_user_pref_update.h" |   24 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 
|   25 #include "chrome/browser/profiles/profile.h" |   25 #include "chrome/browser/profiles/profile.h" | 
|   26 #include "chrome/browser/profiles/profile_keyed_service.h" |   26 #include "chrome/browser/profiles/profile_keyed_service.h" | 
|   27 #include "chrome/browser/profiles/profile_manager.h" |   27 #include "chrome/browser/profiles/profile_manager.h" | 
|   28 #include "chrome/common/chrome_content_client.h" |   28 #include "chrome/common/chrome_content_client.h" | 
|   29 #include "chrome/common/chrome_notification_types.h" |   29 #include "chrome/common/chrome_notification_types.h" | 
|   30 #include "chrome/common/chrome_paths.h" |   30 #include "chrome/common/chrome_paths.h" | 
|   31 #include "chrome/common/chrome_switches.h" |   31 #include "chrome/common/chrome_switches.h" | 
|   32 #include "chrome/common/pref_names.h" |   32 #include "chrome/common/pref_names.h" | 
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  100       PluginPrefsFactory::GetInstance()->SetTestingFactoryAndUse( |  100       PluginPrefsFactory::GetInstance()->SetTestingFactoryAndUse( | 
|  101           profile, &PluginPrefsFactory::CreateForTestingProfile).get()); |  101           profile, &PluginPrefsFactory::CreateForTestingProfile).get()); | 
|  102 } |  102 } | 
|  103  |  103  | 
|  104 void PluginPrefs::SetPluginListForTesting( |  104 void PluginPrefs::SetPluginListForTesting( | 
|  105     webkit::npapi::PluginList* plugin_list) { |  105     webkit::npapi::PluginList* plugin_list) { | 
|  106   plugin_list_ = plugin_list; |  106   plugin_list_ = plugin_list; | 
|  107 } |  107 } | 
|  108  |  108  | 
|  109 void PluginPrefs::EnablePluginGroup(bool enabled, const string16& group_name) { |  109 void PluginPrefs::EnablePluginGroup(bool enabled, const string16& group_name) { | 
|  110   PluginFinder::Get( |  | 
|  111       base::Bind(&PluginPrefs::GetPluginFinderForEnablePluginGroup, |  | 
|  112                  this, enabled, group_name)); |  | 
|  113 } |  | 
|  114  |  | 
|  115 void PluginPrefs::GetPluginFinderForEnablePluginGroup( |  | 
|  116     bool enabled, |  | 
|  117     const string16& group_name, |  | 
|  118     PluginFinder* finder) { |  | 
|  119   PluginService::GetInstance()->GetPlugins( |  110   PluginService::GetInstance()->GetPlugins( | 
|  120       base::Bind(&PluginPrefs::EnablePluginGroupInternal, |  111       base::Bind(&PluginPrefs::EnablePluginGroupInternal, | 
|  121                  this, enabled, group_name, finder)); |  112                  this, enabled, group_name)); | 
|  122 } |  113 } | 
|  123  |  114  | 
|  124 void PluginPrefs::EnablePluginGroupInternal( |  115 void PluginPrefs::EnablePluginGroupInternal( | 
|  125     bool enabled, |  116     bool enabled, | 
|  126     const string16& group_name, |  117     const string16& group_name, | 
|  127     PluginFinder* finder, |  | 
|  128     const std::vector<webkit::WebPluginInfo>& plugins) { |  118     const std::vector<webkit::WebPluginInfo>& plugins) { | 
|  129   base::AutoLock auto_lock(lock_); |  119   base::AutoLock auto_lock(lock_); | 
 |  120   PluginFinder* finder = PluginFinder::GetInstance(); | 
|  130  |  121  | 
|  131   // Set the desired state for the group. |  122   // Set the desired state for the group. | 
|  132   plugin_group_state_[group_name] = enabled; |  123   plugin_group_state_[group_name] = enabled; | 
|  133  |  124  | 
|  134   // Update the state for all plug-ins in the group. |  125   // Update the state for all plug-ins in the group. | 
|  135   for (size_t i = 0; i < plugins.size(); ++i) { |  126   for (size_t i = 0; i < plugins.size(); ++i) { | 
|  136     PluginInstaller* installer = finder->GetPluginInstaller(plugins[i]); |  127     PluginMetadata* plugin = finder->GetPluginMetadata(plugins[i]); | 
|  137     if (group_name != installer->name()) |  128     if (group_name != plugin->name()) | 
|  138       continue; |  129       continue; | 
|  139     plugin_state_[plugins[i].path] = enabled; |  130     plugin_state_[plugins[i].path] = enabled; | 
|  140   } |  131   } | 
|  141  |  132  | 
|  142   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |  133   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 
|  143       base::Bind(&PluginPrefs::OnUpdatePreferences, this, plugins, finder)); |  134       base::Bind(&PluginPrefs::OnUpdatePreferences, this, plugins)); | 
|  144   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |  135   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 
|  145       base::Bind(&PluginPrefs::NotifyPluginStatusChanged, this)); |  136       base::Bind(&PluginPrefs::NotifyPluginStatusChanged, this)); | 
|  146 } |  137 } | 
|  147  |  138  | 
|  148 void PluginPrefs::EnablePluginIfPossibleCallback( |  139 void PluginPrefs::EnablePlugin( | 
|  149     bool enabled, const FilePath& path, |  140     bool enabled, const FilePath& path, | 
|  150     const base::Callback<void(bool)>& callback, |  141     const base::Callback<void(bool)>& callback) { | 
|  151     PluginFinder* finder) { |  142   PluginFinder* finder = PluginFinder::GetInstance(); | 
|  152   webkit::WebPluginInfo plugin; |  143   webkit::WebPluginInfo plugin; | 
|  153   bool can_enable = true; |  144   bool can_enable = true; | 
|  154   if (PluginService::GetInstance()->GetPluginInfoByPath(path, &plugin)) { |  145   if (PluginService::GetInstance()->GetPluginInfoByPath(path, &plugin)) { | 
|  155     PluginInstaller* installer = finder->GetPluginInstaller(plugin); |  146     PluginMetadata* plugin_metadata = finder->GetPluginMetadata(plugin); | 
|  156     PolicyStatus plugin_status = PolicyStatusForPlugin(plugin.name); |  147     PolicyStatus plugin_status = PolicyStatusForPlugin(plugin.name); | 
|  157     PolicyStatus group_status = PolicyStatusForPlugin(installer->name()); |  148     PolicyStatus group_status = PolicyStatusForPlugin(plugin_metadata->name()); | 
|  158     if (enabled) { |  149     if (enabled) { | 
|  159       if (plugin_status == POLICY_DISABLED || group_status == POLICY_DISABLED) |  150       if (plugin_status == POLICY_DISABLED || group_status == POLICY_DISABLED) | 
|  160         can_enable = false; |  151         can_enable = false; | 
|  161     } else { |  152     } else { | 
|  162       if (plugin_status == POLICY_ENABLED || group_status == POLICY_ENABLED) |  153       if (plugin_status == POLICY_ENABLED || group_status == POLICY_ENABLED) | 
|  163         can_enable = false; |  154         can_enable = false; | 
|  164     } |  155     } | 
|  165   } else { |  156   } else { | 
|  166     NOTREACHED(); |  157     NOTREACHED(); | 
|  167   } |  158   } | 
|  168  |  159  | 
|  169   if (!can_enable) { |  160   if (!can_enable) { | 
|  170     callback.Run(false); |  161     callback.Run(false); | 
|  171     return; |  162     return; | 
|  172   } |  163   } | 
|  173  |  164  | 
|  174   PluginService::GetInstance()->GetPlugins( |  165   PluginService::GetInstance()->GetPlugins( | 
|  175       base::Bind(&PluginPrefs::EnablePluginInternal, this, |  166       base::Bind(&PluginPrefs::EnablePluginInternal, this, | 
|  176                  enabled, path, finder, callback)); |  167                  enabled, path, finder, callback)); | 
|  177 } |  168 } | 
|  178  |  169  | 
|  179 void PluginPrefs::EnablePlugin( |  | 
|  180     bool enabled, const FilePath& path, |  | 
|  181     const base::Callback<void(bool)>& callback) { |  | 
|  182   PluginFinder::Get(base::Bind(&PluginPrefs::EnablePluginIfPossibleCallback, |  | 
|  183                                this, enabled, path, callback)); |  | 
|  184 } |  | 
|  185  |  | 
|  186 void PluginPrefs::EnablePluginInternal( |  170 void PluginPrefs::EnablePluginInternal( | 
|  187     bool enabled, |  171     bool enabled, | 
|  188     const FilePath& path, |  172     const FilePath& path, | 
|  189     PluginFinder* plugin_finder, |  173     PluginFinder* plugin_finder, | 
|  190     const base::Callback<void(bool)>& callback, |  174     const base::Callback<void(bool)>& callback, | 
|  191     const std::vector<webkit::WebPluginInfo>& plugins) { |  175     const std::vector<webkit::WebPluginInfo>& plugins) { | 
|  192   { |  176   { | 
|  193     // Set the desired state for the plug-in. |  177     // Set the desired state for the plug-in. | 
|  194     base::AutoLock auto_lock(lock_); |  178     base::AutoLock auto_lock(lock_); | 
|  195     plugin_state_[path] = enabled; |  179     plugin_state_[path] = enabled; | 
|  196   } |  180   } | 
|  197  |  181  | 
|  198   string16 group_name; |  182   string16 group_name; | 
|  199   for (size_t i = 0; i < plugins.size(); ++i) { |  183   for (size_t i = 0; i < plugins.size(); ++i) { | 
|  200     if (plugins[i].path == path) { |  184     if (plugins[i].path == path) { | 
|  201       PluginInstaller* installer = |  185       PluginMetadata* plugin_metadata = | 
|  202           plugin_finder->GetPluginInstaller(plugins[i]); |  186           plugin_finder->GetPluginMetadata(plugins[i]); | 
|  203       // set the group name for this plug-in. |  187       // set the group name for this plug-in. | 
|  204       group_name = installer->name(); |  188       group_name = plugin_metadata->name(); | 
|  205       DCHECK_EQ(enabled, IsPluginEnabled(plugins[i])); |  189       DCHECK_EQ(enabled, IsPluginEnabled(plugins[i])); | 
|  206       break; |  190       break; | 
|  207     } |  191     } | 
|  208   } |  192   } | 
|  209  |  193  | 
|  210   bool all_disabled = true; |  194   bool all_disabled = true; | 
|  211   for (size_t i = 0; i < plugins.size(); ++i) { |  195   for (size_t i = 0; i < plugins.size(); ++i) { | 
|  212     PluginInstaller* installer = plugin_finder->GetPluginInstaller(plugins[i]); |  196     PluginMetadata* plugin_metadata = | 
|  213     DCHECK(!installer->name().empty()); |  197         plugin_finder->GetPluginMetadata(plugins[i]); | 
|  214     if (group_name == installer->name()) { |  198     DCHECK(!plugin_metadata->name().empty()); | 
 |  199     if (group_name == plugin_metadata->name()) { | 
|  215       all_disabled = all_disabled && !IsPluginEnabled(plugins[i]); |  200       all_disabled = all_disabled && !IsPluginEnabled(plugins[i]); | 
|  216     } |  201     } | 
|  217   } |  202   } | 
|  218  |  203  | 
|  219   if (!group_name.empty()) { |  204   if (!group_name.empty()) { | 
|  220     // Update the state for the corresponding plug-in group. |  205     // Update the state for the corresponding plug-in group. | 
|  221     base::AutoLock auto_lock(lock_); |  206     base::AutoLock auto_lock(lock_); | 
|  222     plugin_group_state_[group_name] = !all_disabled; |  207     plugin_group_state_[group_name] = !all_disabled; | 
|  223   } |  208   } | 
|  224  |  209  | 
|  225   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |  210   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 
|  226       base::Bind(&PluginPrefs::OnUpdatePreferences, this, |  211       base::Bind(&PluginPrefs::OnUpdatePreferences, this, plugins)); | 
|  227                  plugins, plugin_finder)); |  | 
|  228   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |  212   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 
|  229       base::Bind(&PluginPrefs::NotifyPluginStatusChanged, this)); |  213       base::Bind(&PluginPrefs::NotifyPluginStatusChanged, this)); | 
|  230   callback.Run(true); |  214   callback.Run(true); | 
|  231 } |  215 } | 
|  232  |  216  | 
|  233 // static |  217 // static | 
|  234 void PluginPrefs::EnablePluginGlobally( |  218 void PluginPrefs::EnablePluginGlobally( | 
|  235     bool enable, |  219     bool enable, | 
|  236     const FilePath& file_path, |  220     const FilePath& file_path, | 
|  237     const base::Callback<void(bool)>& callback) { |  221     const base::Callback<void(bool)>& callback) { | 
| (...skipping 18 matching lines...) Expand all  Loading... | 
|  256   } else if (IsStringMatchedInSet(name, policy_disabled_plugin_patterns_) && |  240   } else if (IsStringMatchedInSet(name, policy_disabled_plugin_patterns_) && | 
|  257              !IsStringMatchedInSet( |  241              !IsStringMatchedInSet( | 
|  258                  name, policy_disabled_plugin_exception_patterns_)) { |  242                  name, policy_disabled_plugin_exception_patterns_)) { | 
|  259     return POLICY_DISABLED; |  243     return POLICY_DISABLED; | 
|  260   } else { |  244   } else { | 
|  261     return NO_POLICY; |  245     return NO_POLICY; | 
|  262   } |  246   } | 
|  263 } |  247 } | 
|  264  |  248  | 
|  265 bool PluginPrefs::IsPluginEnabled(const webkit::WebPluginInfo& plugin) const { |  249 bool PluginPrefs::IsPluginEnabled(const webkit::WebPluginInfo& plugin) const { | 
|  266   scoped_ptr<webkit::npapi::PluginGroup> group( |  250   PluginFinder* finder = PluginFinder::GetInstance(); | 
|  267       GetPluginList()->GetPluginGroup(plugin)); |  251   string16 group_name = finder->GetPluginMetadata(plugin)->name(); | 
|  268   string16 group_name = group->GetGroupName(); |  | 
|  269  |  252  | 
|  270   // Check if the plug-in or its group is enabled by policy. |  253   // Check if the plug-in or its group is enabled by policy. | 
|  271   PolicyStatus plugin_status = PolicyStatusForPlugin(plugin.name); |  254   PolicyStatus plugin_status = PolicyStatusForPlugin(plugin.name); | 
|  272   PolicyStatus group_status = PolicyStatusForPlugin(group_name); |  255   PolicyStatus group_status = PolicyStatusForPlugin(group_name); | 
|  273   if (plugin_status == POLICY_ENABLED || group_status == POLICY_ENABLED) |  256   if (plugin_status == POLICY_ENABLED || group_status == POLICY_ENABLED) | 
|  274     return true; |  257     return true; | 
|  275  |  258  | 
|  276   // Check if the plug-in or its group is disabled by policy. |  259   // Check if the plug-in or its group is disabled by policy. | 
|  277   if (plugin_status == POLICY_DISABLED || group_status == POLICY_DISABLED) |  260   if (plugin_status == POLICY_DISABLED || group_status == POLICY_DISABLED) | 
|  278     return false; |  261     return false; | 
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  573   policy_enabled_plugin_patterns_ = enabled_patterns; |  556   policy_enabled_plugin_patterns_ = enabled_patterns; | 
|  574 } |  557 } | 
|  575  |  558  | 
|  576 webkit::npapi::PluginList* PluginPrefs::GetPluginList() const { |  559 webkit::npapi::PluginList* PluginPrefs::GetPluginList() const { | 
|  577   if (plugin_list_) |  560   if (plugin_list_) | 
|  578     return plugin_list_; |  561     return plugin_list_; | 
|  579   return PluginService::GetInstance()->GetPluginList(); |  562   return PluginService::GetInstance()->GetPluginList(); | 
|  580 } |  563 } | 
|  581  |  564  | 
|  582 void PluginPrefs::GetPreferencesDataOnFileThread() { |  565 void PluginPrefs::GetPreferencesDataOnFileThread() { | 
|  583   PluginFinder::Get( |  | 
|  584       base::Bind(&PluginPrefs::GetPluginFinderForGetPreferencesDataOnFileThread, |  | 
|  585                  this)); |  | 
|  586 } |  | 
|  587  |  | 
|  588 void PluginPrefs::GetPluginFinderForGetPreferencesDataOnFileThread( |  | 
|  589     PluginFinder* finder) { |  | 
|  590   std::vector<webkit::WebPluginInfo> plugins; |  566   std::vector<webkit::WebPluginInfo> plugins; | 
|  591   webkit::npapi::PluginList* plugin_list = GetPluginList(); |  567   webkit::npapi::PluginList* plugin_list = GetPluginList(); | 
|  592   plugin_list->GetPluginsNoRefresh(&plugins); |  568   plugin_list->GetPluginsNoRefresh(&plugins); | 
|  593  |  569  | 
|  594   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, |  570   BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, | 
|  595       base::Bind(&PluginPrefs::OnUpdatePreferences, this, plugins, finder)); |  571       base::Bind(&PluginPrefs::OnUpdatePreferences, this, plugins)); | 
|  596 } |  572 } | 
|  597  |  573  | 
|  598 void PluginPrefs::OnUpdatePreferences( |  574 void PluginPrefs::OnUpdatePreferences( | 
|  599     const std::vector<webkit::WebPluginInfo>& plugins, |  575     const std::vector<webkit::WebPluginInfo>& plugins) { | 
|  600     PluginFinder* finder) { |  | 
|  601   if (!prefs_) |  576   if (!prefs_) | 
|  602     return; |  577     return; | 
|  603  |  578  | 
 |  579   PluginFinder* finder = PluginFinder::GetInstance(); | 
|  604   ListPrefUpdate update(prefs_, prefs::kPluginsPluginsList); |  580   ListPrefUpdate update(prefs_, prefs::kPluginsPluginsList); | 
|  605   ListValue* plugins_list = update.Get(); |  581   ListValue* plugins_list = update.Get(); | 
|  606   plugins_list->Clear(); |  582   plugins_list->Clear(); | 
|  607  |  583  | 
|  608   FilePath internal_dir; |  584   FilePath internal_dir; | 
|  609   if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir)) |  585   if (PathService::Get(chrome::DIR_INTERNAL_PLUGINS, &internal_dir)) | 
|  610     prefs_->SetFilePath(prefs::kPluginsLastInternalDirectory, internal_dir); |  586     prefs_->SetFilePath(prefs::kPluginsLastInternalDirectory, internal_dir); | 
|  611  |  587  | 
|  612   base::AutoLock auto_lock(lock_); |  588   base::AutoLock auto_lock(lock_); | 
|  613  |  589  | 
|  614   // Add the plugin files. |  590   // Add the plugin files. | 
|  615   std::set<string16> group_names; |  591   std::set<string16> group_names; | 
|  616   for (size_t i = 0; i < plugins.size(); ++i) { |  592   for (size_t i = 0; i < plugins.size(); ++i) { | 
|  617     DictionaryValue* summary = new DictionaryValue(); |  593     DictionaryValue* summary = new DictionaryValue(); | 
|  618     summary->SetString("path", plugins[i].path.value()); |  594     summary->SetString("path", plugins[i].path.value()); | 
|  619     summary->SetString("name", plugins[i].name); |  595     summary->SetString("name", plugins[i].name); | 
|  620     summary->SetString("version", plugins[i].version); |  596     summary->SetString("version", plugins[i].version); | 
|  621     bool enabled = true; |  597     bool enabled = true; | 
|  622     std::map<FilePath, bool>::iterator it = plugin_state_.find(plugins[i].path); |  598     std::map<FilePath, bool>::iterator it = plugin_state_.find(plugins[i].path); | 
|  623     if (it != plugin_state_.end()) |  599     if (it != plugin_state_.end()) | 
|  624       enabled = it->second; |  600       enabled = it->second; | 
|  625     summary->SetBoolean("enabled", enabled); |  601     summary->SetBoolean("enabled", enabled); | 
|  626     plugins_list->Append(summary); |  602     plugins_list->Append(summary); | 
|  627  |  603  | 
|  628     PluginInstaller* installer = finder->GetPluginInstaller(plugins[i]); |  604     PluginMetadata* plugin_metadata = finder->GetPluginMetadata(plugins[i]); | 
|  629     // Insert into a set of all group names. |  605     // Insert into a set of all group names. | 
|  630     group_names.insert(installer->name()); |  606     group_names.insert(plugin_metadata->name()); | 
|  631   } |  607   } | 
|  632  |  608  | 
|  633   // Add the plug-in groups. |  609   // Add the plug-in groups. | 
|  634   for (std::set<string16>::const_iterator it = group_names.begin(); |  610   for (std::set<string16>::const_iterator it = group_names.begin(); | 
|  635       it != group_names.end(); ++it) { |  611       it != group_names.end(); ++it) { | 
|  636     DictionaryValue* summary = new DictionaryValue(); |  612     DictionaryValue* summary = new DictionaryValue(); | 
|  637     summary->SetString("name", *it); |  613     summary->SetString("name", *it); | 
|  638     bool enabled = true; |  614     bool enabled = true; | 
|  639     std::map<string16, bool>::iterator gstate_it = |  615     std::map<string16, bool>::iterator gstate_it = | 
|  640         plugin_group_state_.find(*it); |  616         plugin_group_state_.find(*it); | 
|  641     if (gstate_it != plugin_group_state_.end()) |  617     if (gstate_it != plugin_group_state_.end()) | 
|  642       enabled = gstate_it->second; |  618       enabled = gstate_it->second; | 
|  643     summary->SetBoolean("enabled", enabled); |  619     summary->SetBoolean("enabled", enabled); | 
|  644     plugins_list->Append(summary); |  620     plugins_list->Append(summary); | 
|  645   } |  621   } | 
|  646 } |  622 } | 
|  647  |  623  | 
|  648 void PluginPrefs::NotifyPluginStatusChanged() { |  624 void PluginPrefs::NotifyPluginStatusChanged() { | 
|  649   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |  625   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 
|  650   content::NotificationService::current()->Notify( |  626   content::NotificationService::current()->Notify( | 
|  651       chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, |  627       chrome::NOTIFICATION_PLUGIN_ENABLE_STATUS_CHANGED, | 
|  652       content::Source<Profile>(profile_), |  628       content::Source<Profile>(profile_), | 
|  653       content::NotificationService::NoDetails()); |  629       content::NotificationService::NoDetails()); | 
|  654 } |  630 } | 
| OLD | NEW |