1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.sync.notifier; 6 7 /** 8 * An injectable singleton that provides an invalidation client with an appropriate unique name. 9 * 10 * This singleton will always provide a somewhat reasonable name. With proper support from outside 11 * components, it will be able to provide a name that is consistent across restarts. 12 */ 13 public class InvalidationClientNameProvider { 14 private static final Object LOCK = new Object(); 15 16 private static InvalidationClientNameProvider sInstance; 17 18 private final Object mLock; 19 20 private InvalidationClientNameGenerator mGenerator; 21 22 private byte[] mUniqueId; 23 get()24 public static InvalidationClientNameProvider get() { 25 synchronized (LOCK) { 26 if (sInstance == null) { 27 sInstance = new InvalidationClientNameProvider(); 28 } 29 return sInstance; 30 } 31 } 32 InvalidationClientNameProvider()33 InvalidationClientNameProvider() { 34 mLock = new Object(); 35 mGenerator = new RandomizedInvalidationClientNameGenerator(); 36 } 37 38 /** Returns a consistent unique string of bytes for use as an invalidator client ID. */ getInvalidatorClientName()39 public byte[] getInvalidatorClientName() { 40 synchronized (mLock) { 41 if (mUniqueId == null) { 42 mUniqueId = mGenerator.generateInvalidatorClientName(); 43 } 44 return mUniqueId; 45 } 46 } 47 setPreferredClientNameGenerator(InvalidationClientNameGenerator generator)48 public void setPreferredClientNameGenerator(InvalidationClientNameGenerator generator) { 49 mGenerator = generator; 50 } 51 } 52