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