1a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/sync/glue/extensions_activity_monitor.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 87dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/api/bookmarks/bookmarks_api.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 13a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "sync/util/extensions_activity.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace browser_sync { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 19a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ExtensionsActivityMonitor::ExtensionsActivityMonitor() 20a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) : extensions_activity_(new syncer::ExtensionsActivity()) { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It would be nice if we could specify a Source for each specific function 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // we wanted to observe, but the actual function objects are allocated on 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the fly so there is no reliable object to point to (same problem if we 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // wanted to use the string name). Thus, we use all sources and filter in 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Observe. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::NOTIFICATION_EXTENSION_BOOKMARKS_API_INVOKED, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 32a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ExtensionsActivityMonitor::~ExtensionsActivityMonitor() { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 36a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)void ExtensionsActivityMonitor::Observe( 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const extensions::Extension* extension = 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<const extensions::Extension>(source).ptr(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const extensions::BookmarksFunction* f = 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::Details<const extensions::BookmarksFunction>(details).ptr(); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (f->name() == "bookmarks.update" || 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f->name() == "bookmarks.move" || 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f->name() == "bookmarks.create" || 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f->name() == "bookmarks.removeTree" || 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) f->name() == "bookmarks.remove") { 50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) extensions_activity_->UpdateRecord(extension->id()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 54a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)const scoped_refptr<syncer::ExtensionsActivity>& 55a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)ExtensionsActivityMonitor::GetExtensionsActivity() { 56a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) return extensions_activity_; 57a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)} 58a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace browser_sync 60