12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 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)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Interface to the invalidator, which is an object that receives 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// invalidations for registered object IDs. The corresponding 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// InvalidationHandler is notifier when such an event occurs. 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef SYNC_NOTIFIER_INVALIDATOR_H_ 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define SYNC_NOTIFIER_INVALIDATOR_H_ 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/base/sync_export.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/base/model_type.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/notifier/invalidation_util.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/notifier/invalidator_state.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InvalidationHandler; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class SYNC_EXPORT Invalidator { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Invalidator() {} 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Invalidator() {} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clients should follow the pattern below: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When starting the client: 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidator->RegisterHandler(client_handler); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the set of IDs to register changes for the client during its lifetime 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // (i.e., between calls to RegisterHandler(client_handler) and 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UnregisterHandler(client_handler): 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidator->UpdateRegisteredIds(client_handler, client_ids); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When shutting down the client for profile shutdown: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidator->UnregisterHandler(client_handler); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note that there's no call to UpdateRegisteredIds() -- this is because the 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidation API persists registrations across browser restarts. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When permanently shutting down the client, e.g. when disabling the related 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // feature: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidator->UpdateRegisteredIds(client_handler, ObjectIdSet()); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalidator->UnregisterHandler(client_handler); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // It is an error to have registered handlers when an invalidator is 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // destroyed; clients must ensure that they unregister themselves 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // before then. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Starts sending notifications to |handler|. |handler| must not be NULL, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and it must not already be registered. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterHandler(InvalidationHandler* handler) = 0; 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Updates the set of ObjectIds associated with |handler|. |handler| must 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not be NULL, and must already be registered. An ID must be registered for 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // at most one handler. 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateRegisteredIds(InvalidationHandler* handler, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ObjectIdSet& ids) = 0; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Stops sending notifications to |handler|. |handler| must not be NULL, and 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // it must already be registered. Note that this doesn't unregister the IDs 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // associated with |handler|. 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UnregisterHandler(InvalidationHandler* handler) = 0; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the current invalidator state. When called from within 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // InvalidationHandler::OnInvalidatorStateChange(), this must return 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the updated state. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual InvalidatorState GetInvalidatorState() const = 0; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The observers won't be notified of any notifications until 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UpdateCredentials is called at least once. It can be called more than 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // once. 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void UpdateCredentials( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& email, const std::string& token) = 0; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // SYNC_NOTIFIER_INVALIDATOR_H_ 85