chrome_notifier_service.cc revision 116680a4aac90f2aa7413d9095a592090648e557
12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The ChromeNotifierService works together with sync to maintain the state of
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// user notifications, which can then be presented in the notification center,
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// via the Notification UI Manager.
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/notifications/sync_notifier/chrome_notifier_service.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/extensions/api/synced_notifications_private/synced_notifications_shim.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "extensions/browser/event_router.h"
148bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace notifier {
16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)
17116680a4aac90f2aa7413d9095a592090648e557Ben MurdochChromeNotifierService::ChromeNotifierService(Profile* profile)
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    : profile_(profile),
19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      weak_ptr_factory_(this) {
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  synced_notifications_shim_.reset(new SyncedNotificationsShim(
21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      base::Bind(&ChromeNotifierService::FireSyncJSEvent,
22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                 weak_ptr_factory_.GetWeakPtr())));
23a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch}
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
25effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochChromeNotifierService::~ChromeNotifierService() {
26effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch}
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Methods from KeyedService.
29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)void ChromeNotifierService::Shutdown() {}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)SyncedNotificationsShim* ChromeNotifierService::GetSyncedNotificationsShim() {
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  return synced_notifications_shim_.get();
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void ChromeNotifierService::FireSyncJSEvent(
36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    scoped_ptr<extensions::Event> event) {
37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  event->restrict_to_browser_context = profile_;
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // TODO(synced notifications): consider broadcasting to a specific extension
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // id.
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  extensions::EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace notifier
44