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
5package org.chromium.chrome.browser.invalidation;
6
7import android.content.Context;
8
9import org.chromium.chrome.browser.identity.UniqueIdentificationGenerator;
10import org.chromium.chrome.browser.identity.UuidBasedUniqueIdentificationGenerator;
11import org.chromium.sync.notifier.InvalidationClientNameGenerator;
12import org.chromium.sync.notifier.InvalidationClientNameProvider;
13
14/**
15 * An InvalidationClientNameGenerator that wraps an UniqueIdentificationGenerator.
16 *
17 * If the right kind of UniqueIdentificationGenerator is provided, then this will produce IDs that
18 * are unique and consistent across restarts.
19 */
20public class UniqueIdInvalidationClientNameGenerator implements InvalidationClientNameGenerator {
21    // Pref key to use for UUID-based generator.
22    private static final String INVALIDATIONS_UUID_PREF_KEY = "chromium.invalidations.uuid";
23
24    /**
25     * Called during early init to make this InvalidationClientNameGenerator the default.
26     *
27     * This should be called very early during initialization to setup the invalidaiton client name.
28     */
29    public static void doInitializeAndInstallGenerator(Context context) {
30        UniqueIdentificationGenerator idGenerator =
31            new UuidBasedUniqueIdentificationGenerator(
32                context, INVALIDATIONS_UUID_PREF_KEY);
33        InvalidationClientNameGenerator clientNameGenerator =
34            new UniqueIdInvalidationClientNameGenerator(idGenerator);
35        InvalidationClientNameProvider.get().setPreferredClientNameGenerator(clientNameGenerator);
36    }
37
38    private final UniqueIdentificationGenerator mGenerator;
39
40    UniqueIdInvalidationClientNameGenerator(UniqueIdentificationGenerator generator) {
41        mGenerator = generator;
42    }
43
44    @Override
45    public byte[] generateInvalidatorClientName() {
46        return mGenerator.getUniqueId(null).getBytes();
47    }
48}
49