1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync/test/integration/p2p_invalidation_forwarder.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service.h"
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/invalidation/p2p_invalidation_service.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "sync/internal_api/public/sessions/sync_session_snapshot.h"
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)P2PInvalidationForwarder::P2PInvalidationForwarder(
12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    ProfileSyncService* sync_service,
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    invalidation::P2PInvalidationService* invalidation_service)
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  : sync_service_(sync_service),
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    invalidation_service_(invalidation_service) {
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  sync_service_->AddObserver(this);
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)P2PInvalidationForwarder::~P2PInvalidationForwarder() {
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  sync_service_->RemoveObserver(this);
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void P2PInvalidationForwarder::OnStateChanged() {}
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void P2PInvalidationForwarder::OnSyncCycleCompleted() {
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  const syncer::sessions::SyncSessionSnapshot& snap =
27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      sync_service_->GetLastSessionSnapshot();
28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  bool is_notifiable_commit =
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      (snap.model_neutral_state().num_successful_commits > 0);
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  if (is_notifiable_commit && invalidation_service_) {
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    syncer::ModelTypeSet model_types =
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        snap.model_neutral_state().commit_request_types;
33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    syncer::ObjectIdSet ids = ModelTypeSetToObjectIdSet(model_types);
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    invalidation_service_->SendInvalidation(ids);
35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
37