| // 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 "base/logging.h" | 
 | #include "chrome/browser/extensions/pending_extension_info.h" | 
 | #include "extensions/common/extension.h" | 
 |  | 
 | namespace extensions { | 
 |  | 
 | PendingExtensionInfo::PendingExtensionInfo( | 
 |     const std::string& id, | 
 |     const std::string& install_parameter, | 
 |     const GURL& update_url, | 
 |     const base::Version& version, | 
 |     ShouldAllowInstallPredicate should_allow_install, | 
 |     bool is_from_sync, | 
 |     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_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_source_(Manifest::INVALID_LOCATION), | 
 |       creation_flags_(Extension::NO_FLAGS), | 
 |       mark_acknowledged_(false), | 
 |       remote_install_(false) { | 
 | } | 
 |  | 
 | PendingExtensionInfo::PendingExtensionInfo(const PendingExtensionInfo& other) = | 
 |     default; | 
 |  | 
 | 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 |