1 // Copyright 2013 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/extensions/api/activity_log_private/activity_log_private_api.h" 6 7 #include "base/lazy_instance.h" 8 #include "base/prefs/pref_service.h" 9 #include "base/strings/string_number_conversions.h" 10 #include "base/values.h" 11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/extensions/event_router_forwarder.h" 13 #include "chrome/browser/extensions/extension_service.h" 14 #include "chrome/browser/extensions/extension_system.h" 15 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/common/extensions/api/activity_log_private.h" 17 #include "chrome/common/pref_names.h" 18 19 namespace extensions { 20 21 using api::activity_log_private::ExtensionActivity; 22 23 const char kActivityLogExtensionId[] = "acldcpdepobcjbdanifkmfndkjoilgba"; 24 const char kActivityLogTestExtensionId[] = "ajabfgledjhbabeoojlabelaifmakodf"; 25 const char kNewActivityEventName[] = "activityLogPrivate.onExtensionActivity"; 26 27 static base::LazyInstance<ProfileKeyedAPIFactory<ActivityLogAPI> > 28 g_factory = LAZY_INSTANCE_INITIALIZER; 29 30 // static 31 ProfileKeyedAPIFactory<ActivityLogAPI>* ActivityLogAPI::GetFactoryInstance() { 32 return &g_factory.Get(); 33 } 34 35 template<> 36 void ProfileKeyedAPIFactory<ActivityLogAPI>::DeclareFactoryDependencies() { 37 DependsOn(ExtensionSystemFactory::GetInstance()); 38 DependsOn(ActivityLogFactory::GetInstance()); 39 } 40 41 ActivityLogAPI::ActivityLogAPI(Profile* profile) 42 : profile_(profile), 43 initialized_(false) { 44 if (!ExtensionSystem::Get(profile_)->event_router()) { // Check for testing. 45 DVLOG(1) << "ExtensionSystem event_router does not exist."; 46 return; 47 } 48 activity_log_ = extensions::ActivityLog::GetInstance(profile_); 49 DCHECK(activity_log_); 50 ExtensionSystem::Get(profile_)->event_router()->RegisterObserver( 51 this, kNewActivityEventName); 52 activity_log_->AddObserver(this); 53 initialized_ = true; 54 } 55 56 ActivityLogAPI::~ActivityLogAPI() { 57 } 58 59 void ActivityLogAPI::Shutdown() { 60 if (!initialized_) { // Check for testing. 61 DVLOG(1) << "ExtensionSystem event_router does not exist."; 62 return; 63 } 64 ExtensionSystem::Get(profile_)->event_router()->UnregisterObserver(this); 65 activity_log_->RemoveObserver(this); 66 } 67 68 // static 69 bool ActivityLogAPI::IsExtensionWhitelisted(const std::string& extension_id) { 70 return (extension_id == kActivityLogExtensionId || 71 extension_id == kActivityLogTestExtensionId); 72 } 73 74 void ActivityLogAPI::OnListenerAdded(const EventListenerInfo& details) { 75 // TODO(felt): Only observe activity_log_ events when we have a customer. 76 } 77 78 void ActivityLogAPI::OnListenerRemoved(const EventListenerInfo& details) { 79 // TODO(felt): Only observe activity_log_ events when we have a customer. 80 } 81 82 void ActivityLogAPI::OnExtensionActivity(scoped_refptr<Action> activity) { 83 scoped_ptr<base::ListValue> value(new base::ListValue()); 84 scoped_ptr<ExtensionActivity> activity_arg = 85 activity->ConvertToExtensionActivity(); 86 value->Append(activity_arg->ToValue().release()); 87 scoped_ptr<Event> event(new Event(kNewActivityEventName, value.Pass())); 88 event->restrict_to_profile = profile_; 89 ExtensionSystem::Get(profile_)->event_router()->BroadcastEvent(event.Pass()); 90 } 91 92 bool ActivityLogPrivateGetExtensionActivitiesFunction::RunImpl() { 93 return true; 94 } 95 96 } // namespace extensions 97