| Index: chrome/browser/extensions/extension_service.cc | 
| diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc | 
| index b5b7ae9f2abba597de3beb72a565ba886c4efee7..a8973f6ee595538c265252072264ae98867c28f8 100644 | 
| --- a/chrome/browser/extensions/extension_service.cc | 
| +++ b/chrome/browser/extensions/extension_service.cc | 
| @@ -747,6 +747,8 @@ bool ExtensionService::UpdateExtension( | 
| installer->set_install_source(pending_extension_info.install_source()); | 
| else if (extension) | 
| installer->set_install_source(extension->location()); | 
| +  if (pending_extension_info.install_silently()) | 
| +    installer->set_allow_silent_install(true); | 
| installer->set_delete_source(true); | 
| installer->set_original_url(download_url); | 
| installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); | 
| @@ -965,11 +967,8 @@ void ExtensionService::GrantPermissions(const Extension* extension) { | 
| // We only maintain the granted permissions prefs for INTERNAL extensions. | 
| CHECK_EQ(Extension::INTERNAL, extension->location()); | 
|  | 
| -  URLPatternSet effective_hosts = extension->GetEffectiveHostPermissions(); | 
| extension_prefs_->AddGrantedPermissions(extension->id(), | 
| -                                          extension->HasFullPermissions(), | 
| -                                          extension->api_permissions(), | 
| -                                          effective_hosts); | 
| +                                          extension->permission_set()); | 
| } | 
|  | 
| void ExtensionService::GrantPermissionsAndEnableExtension( | 
| @@ -1208,18 +1207,17 @@ void ExtensionService::RecordPermissionMessagesHistogram( | 
| base::Histogram* counter = base::LinearHistogram::FactoryGet( | 
| histogram, | 
| 1, | 
| -      Extension::PermissionMessage::ID_ENUM_BOUNDARY, | 
| -      Extension::PermissionMessage::ID_ENUM_BOUNDARY + 1, | 
| +      ExtensionPermissionMessage::kEnumBoundary, | 
| +      ExtensionPermissionMessage::kEnumBoundary + 1, | 
| base::Histogram::kUmaTargetedHistogramFlag); | 
|  | 
| -  std::vector<Extension::PermissionMessage> permissions = | 
| -      e->GetPermissionMessages(); | 
| +  ExtensionPermissionMessages permissions = e->GetPermissionMessages(); | 
| if (permissions.empty()) { | 
| -    counter->Add(Extension::PermissionMessage::ID_NONE); | 
| +    counter->Add(ExtensionPermissionMessage::kNone); | 
| } else { | 
| -    std::vector<Extension::PermissionMessage>::iterator it; | 
| -    for (it = permissions.begin(); it != permissions.end(); ++it) | 
| -      counter->Add(it->message_id()); | 
| +    for (ExtensionPermissionMessages::iterator it = permissions.begin(); | 
| +         it != permissions.end(); ++it) | 
| +      counter->Add(it->id()); | 
| } | 
| } | 
|  | 
| @@ -1938,10 +1936,6 @@ void ExtensionService::DisableIfPrivilegeIncrease(const Extension* extension) { | 
| // can upgrade without requiring this user's approval. | 
| const Extension* old = GetExtensionByIdInternal(extension->id(), | 
| true, true, false); | 
| -  bool granted_full_access; | 
| -  std::set<std::string> granted_apis; | 
| -  URLPatternSet granted_extent; | 
| - | 
| bool is_extension_upgrade = old != NULL; | 
| bool is_privilege_increase = false; | 
|  | 
| @@ -1950,23 +1944,16 @@ void ExtensionService::DisableIfPrivilegeIncrease(const Extension* extension) { | 
| if (extension->location() == Extension::INTERNAL) { | 
| // Add all the recognized permissions if the granted permissions list | 
| // hasn't been initialized yet. | 
| -    if (!extension_prefs_->GetGrantedPermissions(extension->id(), | 
| -                                                 &granted_full_access, | 
| -                                                 &granted_apis, | 
| -                                                 &granted_extent)) { | 
| -      GrantPermissions(extension); | 
| -      CHECK(extension_prefs_->GetGrantedPermissions(extension->id(), | 
| -                                                    &granted_full_access, | 
| -                                                    &granted_apis, | 
| -                                                    &granted_extent)); | 
| -    } | 
| +    scoped_ptr<ExtensionPermissionSet> granted_permissions( | 
| +        extension_prefs_->GetGrantedPermissions(extension->id())); | 
| +    CHECK(granted_permissions.get()); | 
|  | 
| // Here, we check if an extension's privileges have increased in a manner | 
| // that requires the user's approval. This could occur because the browser | 
| // upgraded and recognized additional privileges, or an extension upgrades | 
| // to a version that requires additional privileges. | 
| -    is_privilege_increase = Extension::IsPrivilegeIncrease( | 
| -        granted_full_access, granted_apis, granted_extent, extension); | 
| +    is_privilege_increase = | 
| +        granted_permissions->HasLessPrivilegesThan(extension->permission_set()); | 
| } | 
|  | 
| if (is_extension_upgrade) { | 
| @@ -2023,7 +2010,6 @@ void ExtensionService::OnLoadSingleExtension(const Extension* extension) { | 
| prompt->ShowPrompt(); | 
| return;  // continues in SimpleExtensionLoadPrompt::InstallUI* | 
| } | 
| - | 
| OnExtensionInstalled(extension); | 
| } | 
|  | 
|  |