1 // Copyright 2014 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.
5 package org.chromium.chrome.browser.sync;
7 import android.content.Context;
9 import org.chromium.base.ThreadUtils;
10 //import org.chromium.chrome.browser.sync.ProfileSyncService;
12 import java.util.concurrent.Callable;
15 * Assists in Java interaction the native Sync FakeServer.
17 public class FakeServerHelper {
18 // Lazily-instantiated singleton FakeServerHelper.
19 private static FakeServerHelper sFakeServerHelper;
21 // Pointer value for the FakeServer. This pointer is not owned by native
22 // code, so it must be stored here for future deletion.
23 private static long sNativeFakeServer = 0L;
25 // The pointer to the native object called here.
26 private final long mNativeFakeServerHelperAndroid;
28 // Accesses the singleton FakeServerHelper. There is at most one instance created per
29 // application lifetime, so no deletion mechanism is provided for the native object.
30 public static FakeServerHelper get() {
31 ThreadUtils.assertOnUiThread();
32 if (sFakeServerHelper == null) {
33 sFakeServerHelper = new FakeServerHelper();
35 return sFakeServerHelper;
38 private FakeServerHelper() {
39 mNativeFakeServerHelperAndroid = nativeInit();
43 * Creates and configures FakeServer.
45 * Each call to this method should be accompanied by a later call to deleteFakeServer to avoid
48 public static void useFakeServer(final Context context) {
49 if (sNativeFakeServer != 0L) {
50 throw new IllegalStateException(
51 "deleteFakeServer must be called before calling useFakeServer again.");
54 sNativeFakeServer = ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Long>() {
57 FakeServerHelper fakeServerHelper = FakeServerHelper.get();
58 long nativeFakeServer = fakeServerHelper.createFakeServer();
59 long resources = fakeServerHelper.createNetworkResources(nativeFakeServer);
60 ProfileSyncService.get(context).overrideNetworkResourcesForTest(resources);
62 return nativeFakeServer;
68 * Deletes the existing FakeServer.
70 public static void deleteFakeServer() {
71 if (sNativeFakeServer == 0L) {
72 throw new IllegalStateException(
73 "useFakeServer must be called before calling deleteFakeServer.");
76 ThreadUtils.runOnUiThreadBlockingNoException(new Callable<Void>() {
79 FakeServerHelper.get().deleteFakeServer(sNativeFakeServer);
80 sNativeFakeServer = 0L;
87 * Creates a native FakeServer object and returns its pointer. This pointer is owned by the
90 * @return the FakeServer pointer
92 public long createFakeServer() {
93 return nativeCreateFakeServer(mNativeFakeServerHelperAndroid);
97 * Creates a native NetworkResources object. This pointer is owned by the Java caller, but
98 * ownership is transferred as part of ProfileSyncService.overrideNetworkResourcesForTest.
100 * @param nativeFakeServer pointer to a native FakeServer object.
101 * @return the NetworkResources pointer
103 public long createNetworkResources(long nativeFakeServer) {
104 return nativeCreateNetworkResources(mNativeFakeServerHelperAndroid, nativeFakeServer);
108 * Deletes a native FakeServer.
110 * @param nativeFakeServer the pointer to be deleted
112 public void deleteFakeServer(long nativeFakeServer) {
113 nativeDeleteFakeServer(mNativeFakeServerHelperAndroid, nativeFakeServer);
117 private native long nativeInit();
118 private native long nativeCreateFakeServer(long nativeFakeServerHelperAndroid);
119 private native long nativeCreateNetworkResources(
120 long nativeFakeServerHelperAndroid, long nativeFakeServer);
121 private native void nativeDeleteFakeServer(
122 long nativeFakeServerHelperAndroid, long nativeFakeServer);