| // 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; |
| } |
| } |