|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #include "chrome/browser/extensions/pending_extension_info.h" | 
|  |  | 
|  | #include "base/logging.h" | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | PendingExtensionInfo::PendingExtensionInfo( | 
|  | const std::string& id, | 
|  | const std::string& install_parameter, | 
|  | const GURL& update_url, | 
|  | const Version& version, | 
|  | ShouldAllowInstallPredicate should_allow_install, | 
|  | bool is_from_sync, | 
|  | bool install_silently, | 
|  | Manifest::Location install_source, | 
|  | int creation_flags, | 
|  | bool mark_acknowledged, | 
|  | bool remote_install) | 
|  | : id_(id), | 
|  | update_url_(update_url), | 
|  | version_(version), | 
|  | install_parameter_(install_parameter), | 
|  | should_allow_install_(should_allow_install), | 
|  | is_from_sync_(is_from_sync), | 
|  | install_silently_(install_silently), | 
|  | install_source_(install_source), | 
|  | creation_flags_(creation_flags), | 
|  | mark_acknowledged_(mark_acknowledged), | 
|  | remote_install_(remote_install) { | 
|  | } | 
|  |  | 
|  | PendingExtensionInfo::PendingExtensionInfo() | 
|  | : update_url_(), | 
|  | should_allow_install_(NULL), | 
|  | is_from_sync_(true), | 
|  | install_silently_(false), | 
|  | install_source_(Manifest::INVALID_LOCATION), | 
|  | creation_flags_(0), | 
|  | mark_acknowledged_(false), | 
|  | remote_install_(false) { | 
|  | } | 
|  |  | 
|  | PendingExtensionInfo::~PendingExtensionInfo() {} | 
|  |  | 
|  | bool PendingExtensionInfo::operator==(const PendingExtensionInfo& rhs) const { | 
|  | return id_ == rhs.id_; | 
|  | } | 
|  |  | 
|  | int PendingExtensionInfo::CompareTo(const PendingExtensionInfo& other) const { | 
|  | DCHECK_EQ(id_, other.id_); | 
|  | if (version_.IsValid() && other.version_.IsValid()) { | 
|  | int comparison = version_.CompareTo(other.version_); | 
|  |  | 
|  | // If the versions differ then return the version comparison result. | 
|  | if (comparison != 0) | 
|  | return comparison; | 
|  | } | 
|  |  | 
|  | // The versions aren't specified, or they are the same version. Check | 
|  | // the install source. | 
|  | if (install_source_ == other.install_source_) { | 
|  | // Same install source, so |this| has the same precedence as |other|. | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | // Different install sources; |this| has higher precedence if | 
|  | // |install_source_| is the higher priority source. | 
|  | Manifest::Location higher_priority_source = | 
|  | Manifest::GetHigherPriorityLocation( | 
|  | install_source_, other.install_source_); | 
|  |  | 
|  | return higher_priority_source == install_source_ ? 1 : -1; | 
|  | } | 
|  |  | 
|  | }  // namespace extensions |