automation_extension_tracker.cc revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
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 3// found in the LICENSE file. 4 5#include "chrome/browser/automation/automation_extension_tracker.h" 6#include "chrome/browser/extensions/extensions_service.h" 7#include "chrome/browser/profile.h" 8#include "chrome/common/extensions/extension.h" 9#include "chrome/common/notification_service.h" 10 11AutomationExtensionTracker::AutomationExtensionTracker( 12 IPC::Message::Sender* automation) 13 : AutomationResourceTracker<Extension*>(automation) { 14 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED, 15 NotificationService::AllSources()); 16 registrar_.Add(this, NotificationType::EXTENSION_UNLOADED_DISABLED, 17 NotificationService::AllSources()); 18} 19 20AutomationExtensionTracker::~AutomationExtensionTracker() { 21} 22 23void AutomationExtensionTracker::AddObserver(Extension* resource) {} 24 25void AutomationExtensionTracker::RemoveObserver(Extension* resource) {} 26 27void AutomationExtensionTracker::Observe(NotificationType type, 28 const NotificationSource& source, 29 const NotificationDetails& details) { 30 if (type != NotificationType::EXTENSION_UNLOADED && 31 type != NotificationType::EXTENSION_UNLOADED_DISABLED) 32 return; 33 34 Extension* extension = Details<Extension>(details).ptr(); 35 Profile* profile = Source<Profile>(source).ptr(); 36 if (profile) { 37 ExtensionsService* service = profile->GetExtensionsService(); 38 if (service) { 39 // Remove this extension only if it is uninstalled, not just disabled. 40 // If it is being uninstalled, the extension will not be in the regular 41 // or disabled list. 42 if (!service->GetExtensionById(extension->id(), true)) 43 CloseResource(extension); 44 } 45 } 46} 47