Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 "webkit/glue/plugins/plugin_group.h" | 5 #include "webkit/glue/plugins/plugin_group.h" |
| 6 | 6 |
| 7 #include "base/linked_ptr.h" | 7 #include "base/linked_ptr.h" |
| 8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
| 9 #include "base/sys_string_conversions.h" | 9 #include "base/sys_string_conversions.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 92 | 92 |
| 93 PluginGroup::PluginGroup(const string16& group_name, | 93 PluginGroup::PluginGroup(const string16& group_name, |
| 94 const string16& name_matcher, | 94 const string16& name_matcher, |
| 95 const std::string& update_url, | 95 const std::string& update_url, |
| 96 const std::string& identifier) | 96 const std::string& identifier) |
| 97 : identifier_(identifier), | 97 : identifier_(identifier), |
| 98 group_name_(group_name), | 98 group_name_(group_name), |
| 99 name_matcher_(name_matcher), | 99 name_matcher_(name_matcher), |
| 100 update_url_(update_url), | 100 update_url_(update_url), |
| 101 enabled_(false), | 101 enabled_(false), |
| 102 version_(Version::GetVersionFromString("0")) { | 102 version_(Version::GetVersionFromString("0")), |
| 103 plugin_list_(NULL) { | |
| 103 } | 104 } |
| 104 | 105 |
| 105 void PluginGroup::InitFrom(const PluginGroup& other) { | 106 void PluginGroup::InitFrom(const PluginGroup& other) { |
| 107 enabled_ = false; | |
|
danno
2010/12/15 10:42:12
Please comment why there enabled_ flag is set twic
Jakob Kummerow
2010/12/15 18:03:27
Done. Cleaned up this whole method, it now perform
| |
| 106 identifier_ = other.identifier_; | 108 identifier_ = other.identifier_; |
| 107 group_name_ = other.group_name_; | 109 group_name_ = other.group_name_; |
| 108 name_matcher_ = other.name_matcher_; | 110 name_matcher_ = other.name_matcher_; |
| 109 description_ = other.description_; | |
| 110 update_url_ = other.update_url_; | 111 update_url_ = other.update_url_; |
| 111 enabled_ = other.enabled_; | |
| 112 for (size_t i = 0; i < other.version_ranges_.size(); ++i) | 112 for (size_t i = 0; i < other.version_ranges_.size(); ++i) |
| 113 version_ranges_.push_back(other.version_ranges_[i]); | 113 version_ranges_.push_back(other.version_ranges_[i]); |
| 114 DCHECK_EQ(other.web_plugin_infos_.size(), other.web_plugin_positions_.size()); | 114 DCHECK_EQ(other.web_plugin_infos_.size(), other.web_plugin_positions_.size()); |
| 115 std::list<WebPluginInfo>::const_iterator it = other.web_plugin_infos_.begin(); | 115 std::list<WebPluginInfo>::const_iterator it = other.web_plugin_infos_.begin(); |
| 116 std::vector<int>::const_iterator itprio = other.web_plugin_positions_.begin(); | 116 std::vector<int>::const_iterator itprio = other.web_plugin_positions_.begin(); |
| 117 for (; it != other.web_plugin_infos_.end(); ++it, ++itprio) | 117 for (; it != other.web_plugin_infos_.end(); ++it, ++itprio) |
| 118 AddPlugin(*it, *itprio); | 118 AddPlugin(*it, *itprio); |
| 119 if (!version_.get()) | 119 if (!version_.get()) |
| 120 version_.reset(Version::GetVersionFromString("0")); | 120 version_.reset(Version::GetVersionFromString("0")); |
| 121 DCHECK_EQ(0, version_->CompareTo(*other.version_)); | |
| 122 plugin_list_ = other.plugin_list_; | |
| 123 enabled_ = other.enabled_; | |
| 121 } | 124 } |
| 122 | 125 |
| 123 PluginGroup::PluginGroup(const PluginGroup& other) { | 126 PluginGroup::PluginGroup(const PluginGroup& other) { |
| 124 InitFrom(other); | 127 InitFrom(other); |
| 125 } | 128 } |
| 126 | 129 |
| 127 PluginGroup& PluginGroup::operator=(const PluginGroup& other) { | 130 PluginGroup& PluginGroup::operator=(const PluginGroup& other) { |
|
danno
2010/12/15 10:42:12
use the copy/swap idiom?
Jakob Kummerow
2010/12/15 18:03:27
As discussed offline: would be nice to have, but i
| |
| 128 version_ranges_.clear(); | 131 version_ranges_.clear(); |
| 129 InitFrom(other); | 132 InitFrom(other); |
| 130 return *this; | 133 return *this; |
| 131 } | 134 } |
| 132 | 135 |
| 133 /*static*/ | 136 /*static*/ |
| 134 PluginGroup* PluginGroup::FromPluginGroupDefinition( | 137 PluginGroup* PluginGroup::FromPluginGroupDefinition( |
| 135 const PluginGroupDefinition& definition) { | 138 const PluginGroupDefinition& definition) { |
| 136 PluginGroup* group = new PluginGroup(ASCIIToUTF16(definition.name), | 139 PluginGroup* group = new PluginGroup(ASCIIToUTF16(definition.name), |
| 137 ASCIIToUTF16(definition.name_matcher), | 140 ASCIIToUTF16(definition.name_matcher), |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 257 } | 260 } |
| 258 | 261 |
| 259 std::list<WebPluginInfo>& PluginGroup::GetPlugins() { | 262 std::list<WebPluginInfo>& PluginGroup::GetPlugins() { |
| 260 return web_plugin_infos_; | 263 return web_plugin_infos_; |
| 261 } | 264 } |
| 262 | 265 |
| 263 std::vector<int>& PluginGroup::GetPluginPositions() { | 266 std::vector<int>& PluginGroup::GetPluginPositions() { |
| 264 return web_plugin_positions_; | 267 return web_plugin_positions_; |
| 265 } | 268 } |
| 266 | 269 |
| 270 bool PluginGroup::IsEmpty() { | |
| 271 return web_plugin_infos_.empty(); | |
| 272 } | |
| 273 | |
| 267 string16 PluginGroup::GetGroupName() const { | 274 string16 PluginGroup::GetGroupName() const { |
| 268 if (!group_name_.empty()) | 275 if (!group_name_.empty()) |
| 269 return group_name_; | 276 return group_name_; |
| 270 DCHECK_EQ(1u, web_plugin_infos_.size()); | 277 DCHECK_EQ(1u, web_plugin_infos_.size()); |
| 271 FilePath::StringType path = | 278 FilePath::StringType path = |
| 272 web_plugin_infos_.front().path.BaseName().RemoveExtension().value(); | 279 web_plugin_infos_.front().path.BaseName().RemoveExtension().value(); |
| 273 #if defined(OS_POSIX) | 280 #if defined(OS_POSIX) |
| 274 return UTF8ToUTF16(path); | 281 return UTF8ToUTF16(path); |
| 275 #elif defined(OS_WIN) | 282 #elif defined(OS_WIN) |
| 276 return WideToUTF16(path); | 283 return WideToUTF16(path); |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 386 void PluginGroup::DisableOutdatedPlugins() { | 393 void PluginGroup::DisableOutdatedPlugins() { |
| 387 bool first_enabled = true; | 394 bool first_enabled = true; |
| 388 | 395 |
| 389 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); | 396 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); |
| 390 it != web_plugin_infos_.end(); ++it) { | 397 it != web_plugin_infos_.end(); ++it) { |
| 391 scoped_ptr<Version> version(CreateVersionFromString(it->version)); | 398 scoped_ptr<Version> version(CreateVersionFromString(it->version)); |
| 392 if (version.get()) { | 399 if (version.get()) { |
| 393 bool plugin_is_outdated = false; | 400 bool plugin_is_outdated = false; |
| 394 for (size_t i = 0; i < version_ranges_.size(); ++i) { | 401 for (size_t i = 0; i < version_ranges_.size(); ++i) { |
| 395 if (IsPluginOutdated(*version, version_ranges_[i])) { | 402 if (IsPluginOutdated(*version, version_ranges_[i])) { |
| 396 NPAPI::PluginList::Singleton()->DisablePlugin(it->path, false); | 403 GetPluginList()->DisablePlugin(it->path, false); |
| 397 plugin_is_outdated = true; | 404 plugin_is_outdated = true; |
| 398 break; | 405 break; |
| 399 } | 406 } |
| 400 } | 407 } |
| 401 if (!plugin_is_outdated && first_enabled) { | 408 if (!plugin_is_outdated && first_enabled) { |
| 402 first_enabled = false; | 409 first_enabled = false; |
| 403 UpdateDescriptionAndVersion(*it); | 410 UpdateDescriptionAndVersion(*it); |
| 404 } | 411 } |
| 405 } | 412 } |
| 406 } | 413 } |
| 407 } | 414 } |
| 408 | 415 |
| 409 void PluginGroup::Enable(bool enable) { | 416 void PluginGroup::Enable(bool enable) { |
| 410 bool enabled_plugin_exists = false; | 417 bool enabled_plugin_exists = false; |
| 411 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); | 418 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); |
| 412 it != web_plugin_infos_.end(); ++it) { | 419 it != web_plugin_infos_.end(); ++it) { |
| 413 bool policy_disabled = IsPluginNameDisabledByPolicy(it->name); | 420 bool policy_disabled = IsPluginNameDisabledByPolicy(it->name); |
| 414 if (enable && !policy_disabled) { | 421 if (enable && !policy_disabled) { |
| 415 NPAPI::PluginList::Singleton()->EnablePlugin(it->path); | 422 GetPluginList()->EnablePlugin(it->path); |
| 416 enabled_plugin_exists = true; | 423 enabled_plugin_exists = true; |
| 417 } else { | 424 } else { |
| 418 NPAPI::PluginList::Singleton()->DisablePlugin(it->path, policy_disabled); | 425 GetPluginList()->DisablePlugin(it->path, policy_disabled); |
| 419 } | 426 } |
| 420 } | 427 } |
| 421 enabled_ = enabled_plugin_exists; | 428 enabled_ = enabled_plugin_exists; |
| 422 } | 429 } |
| 423 | 430 |
| 424 void PluginGroup::RefreshEnabledState() { | 431 void PluginGroup::RefreshEnabledState() { |
| 425 bool enabled_plugin_exists = false; | 432 bool enabled_plugin_exists = false; |
| 426 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); | 433 for (std::list<WebPluginInfo>::iterator it = web_plugin_infos_.begin(); |
| 427 it != web_plugin_infos_.end(); ++it) { | 434 it != web_plugin_infos_.end(); ++it) { |
| 428 if (it->enabled) { | 435 if (it->enabled) { |
| 429 enabled_plugin_exists = true; | 436 enabled_plugin_exists = true; |
| 430 break; | 437 break; |
| 431 } | 438 } |
| 432 } | 439 } |
| 433 enabled_ = enabled_plugin_exists; | 440 enabled_ = enabled_plugin_exists; |
| 434 } | 441 } |
| 442 | |
| 443 NPAPI::PluginList* PluginGroup::GetPluginList() { | |
|
danno
2010/12/15 10:42:12
I think you might be better served by making this
Jakob Kummerow
2010/12/15 18:03:27
As discussed offline: Good plan, but would require
| |
| 444 if (plugin_list_) | |
| 445 return plugin_list_; | |
| 446 return NPAPI::PluginList::Singleton(); | |
| 447 } | |
| OLD | NEW |