// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. package org.chromium.sync.notifier; /** * An injectable singleton that provides an invalidation client with an appropriate unique name. * * This singleton will always provide a somewhat reasonable name. With proper support from outside * components, it will be able to provide a name that is consistent across restarts. */ public class InvalidationClientNameProvider { private static final Object LOCK = new Object(); private static InvalidationClientNameProvider sInstance; private final Object mLock; private InvalidationClientNameGenerator mGenerator; private byte[] mUniqueId; public static InvalidationClientNameProvider get() { synchronized (LOCK) { if (sInstance == null) { sInstance = new InvalidationClientNameProvider(); } return sInstance; } } InvalidationClientNameProvider() { mLock = new Object(); mGenerator = new RandomizedInvalidationClientNameGenerator(); } /** Returns a consistent unique string of bytes for use as an invalidator client ID. */ public byte[] getInvalidatorClientName() { synchronized (mLock) { if (mUniqueId == null) { mUniqueId = mGenerator.generateInvalidatorClientName(); } return mUniqueId; } } public void setPreferredClientNameGenerator(InvalidationClientNameGenerator generator) { mGenerator = generator; } }