Home | History | Annotate | Download | only in activity_log_private
      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