| Index: chrome/browser/sync/notifier/p2p_notifier.h
|
| diff --git a/chrome/browser/sync/notifier/p2p_notifier.h b/chrome/browser/sync/notifier/p2p_notifier.h
|
| index 0aa415da55a59226995d060e5733a7b3a049ccea..90ff99a59838414544f82d859d992098f6bc79a4 100644
|
| --- a/chrome/browser/sync/notifier/p2p_notifier.h
|
| +++ b/chrome/browser/sync/notifier/p2p_notifier.h
|
| @@ -23,17 +23,66 @@ class MessageLoopProxy;
|
| }
|
|
|
|
|
| -namespace notifier {
|
| -struct NotifierOptions;
|
| -} // namespace
|
| -
|
| namespace sync_notifier {
|
|
|
| +// The intended recipient(s) of a P2P notification.
|
| +enum P2PNotificationTarget {
|
| + NOTIFY_SELF,
|
| + FIRST_NOTIFICATION_TARGET = NOTIFY_SELF,
|
| + NOTIFY_OTHERS,
|
| + NOTIFY_ALL,
|
| + LAST_NOTIFICATION_TARGET = NOTIFY_ALL
|
| +};
|
| +
|
| +std::string P2PNotificationTargetToString(
|
| + P2PNotificationTarget target);
|
| +
|
| +// If |target_str| can't be parsed, assumes NOTIFY_SELF.
|
| +P2PNotificationTarget P2PNotificationTargetFromString(
|
| + const std::string& target_str);
|
| +
|
| +// Helper notification data class that can be serialized to and
|
| +// deserialized from a string.
|
| +class P2PNotificationData {
|
| + public:
|
| + // Initializes with an empty sender ID, target set to NOTIFY_SELF,
|
| + // and empty changed types.
|
| + P2PNotificationData();
|
| + P2PNotificationData(const std::string& sender_id,
|
| + P2PNotificationTarget target,
|
| + const syncable::ModelTypeSet& changed_types);
|
| +
|
| + ~P2PNotificationData();
|
| +
|
| + // Returns true if the given ID is targeted by this notification.
|
| + bool IsTargeted(const std::string& id) const;
|
| +
|
| + const syncable::ModelTypeSet& GetChangedTypes() const;
|
| +
|
| + bool Equals(const P2PNotificationData& other) const;
|
| +
|
| + std::string ToString() const;
|
| +
|
| + // Returns whether parsing |str| was successful. If parsing was
|
| + // unsuccessful, the state of the notification is undefined.
|
| + bool ResetFromString(const std::string& str);
|
| +
|
| + private:
|
| + // The unique ID of the client that sent the notification.
|
| + std::string sender_id_;
|
| + // The intendent recipient(s) of the notification.
|
| + P2PNotificationTarget target_;
|
| + // The types the notification is for.
|
| + syncable::ModelTypeSet changed_types_;
|
| +};
|
| +
|
| class P2PNotifier
|
| : public SyncNotifier,
|
| public notifier::TalkMediator::Delegate {
|
| public:
|
| - explicit P2PNotifier(const notifier::NotifierOptions& notifier_options);
|
| + // Takes ownership of |talk_mediator|, but it is guaranteed that
|
| + // |talk_mediator| is destroyed only when this object is destroyed.
|
| + explicit P2PNotifier(notifier::TalkMediator* talk_mediator);
|
|
|
| virtual ~P2PNotifier();
|
|
|
| @@ -45,8 +94,9 @@ class P2PNotifier
|
| virtual void UpdateCredentials(
|
| const std::string& email, const std::string& token) OVERRIDE;
|
| virtual void UpdateEnabledTypes(
|
| - const syncable::ModelTypeSet& types) OVERRIDE;
|
| - virtual void SendNotification() OVERRIDE;
|
| + const syncable::ModelTypeSet& enabled_types) OVERRIDE;
|
| + virtual void SendNotification(
|
| + const syncable::ModelTypeSet& changed_types) OVERRIDE;
|
|
|
| // TalkMediator::Delegate implementation.
|
| virtual void OnNotificationStateChange(bool notifications_enabled);
|
| @@ -54,15 +104,19 @@ class P2PNotifier
|
| const notifier::Notification& notification);
|
| virtual void OnOutgoingNotification();
|
|
|
| + // For testing.
|
| + void SendNotificationDataForTest(
|
| + const P2PNotificationData& notification_data);
|
| +
|
| private:
|
| - // Call OnIncomingNotification() on observers if we have a non-empty
|
| - // set of enabled types.
|
| - void MaybeEmitNotification();
|
| + void SendNotificationData(const P2PNotificationData& notification_data);
|
|
|
| ObserverList<SyncNotifierObserver> observer_list_;
|
|
|
| // The actual notification listener.
|
| scoped_ptr<notifier::TalkMediator> talk_mediator_;
|
| + // Our unique ID.
|
| + std::string unique_id_;
|
| // Whether we called Login() on |talk_mediator_| yet.
|
| bool logged_in_;
|
| // Whether |talk_mediator_| has notified us that notifications are
|
|
|