OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 package org.chromium.chrome.browser.sync; | 5 package org.chromium.chrome.browser.sync; |
6 | 6 |
7 import android.accounts.Account; | 7 import android.accounts.Account; |
8 import android.app.Application; | 8 import android.app.Application; |
9 import android.content.AbstractThreadedSyncAdapter; | 9 import android.content.AbstractThreadedSyncAdapter; |
10 import android.content.ContentProviderClient; | 10 import android.content.ContentProviderClient; |
11 import android.content.ContentResolver; | 11 import android.content.ContentResolver; |
12 import android.content.Context; | 12 import android.content.Context; |
13 import android.content.SyncResult; | 13 import android.content.SyncResult; |
14 import android.os.Bundle; | 14 import android.os.Bundle; |
15 import android.os.Handler; | 15 import android.os.Handler; |
16 import android.util.Log; | 16 import android.util.Log; |
17 | 17 |
18 import com.google.protos.ipc.invalidation.Types; | 18 import com.google.protos.ipc.invalidation.Types; |
19 | 19 |
20 import org.chromium.base.ThreadUtils; | 20 import org.chromium.base.ThreadUtils; |
21 import org.chromium.base.VisibleForTesting; | 21 import org.chromium.base.VisibleForTesting; |
22 import org.chromium.base.annotations.SuppressFBWarnings; | |
23 import org.chromium.base.library_loader.ProcessInitException; | 22 import org.chromium.base.library_loader.ProcessInitException; |
24 import org.chromium.chrome.browser.invalidation.InvalidationServiceFactory; | 23 import org.chromium.chrome.browser.invalidation.InvalidationServiceFactory; |
25 import org.chromium.chrome.browser.profiles.Profile; | 24 import org.chromium.chrome.browser.profiles.Profile; |
26 import org.chromium.content.app.ContentApplication; | 25 import org.chromium.content.app.ContentApplication; |
27 import org.chromium.content.browser.BrowserStartupController; | 26 import org.chromium.content.browser.BrowserStartupController; |
28 import org.chromium.sync.signin.ChromeSigninController; | 27 import org.chromium.sync.signin.ChromeSigninController; |
29 | 28 |
30 import java.util.concurrent.Semaphore; | 29 import java.util.concurrent.Semaphore; |
31 import java.util.concurrent.TimeUnit; | 30 import java.util.concurrent.TimeUnit; |
32 | 31 |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 syncResult.stats.numIoExceptions++; | 95 syncResult.stats.numIoExceptions++; |
97 } | 96 } |
98 } | 97 } |
99 | 98 |
100 private void startBrowserProcess( | 99 private void startBrowserProcess( |
101 final BrowserStartupController.StartupCallback callback, | 100 final BrowserStartupController.StartupCallback callback, |
102 final SyncResult syncResult, Semaphore semaphore) { | 101 final SyncResult syncResult, Semaphore semaphore) { |
103 try { | 102 try { |
104 ThreadUtils.runOnUiThreadBlocking(new Runnable() { | 103 ThreadUtils.runOnUiThreadBlocking(new Runnable() { |
105 @Override | 104 @Override |
106 @SuppressFBWarnings("DM_EXIT") | |
107 public void run() { | 105 public void run() { |
108 ContentApplication.initCommandLine(getContext()); | 106 ContentApplication.initCommandLine(getContext()); |
109 if (mAsyncStartup) { | 107 if (mAsyncStartup) { |
110 try { | 108 try { |
111 BrowserStartupController.get(mApplication) | 109 BrowserStartupController.get(mApplication) |
112 .startBrowserProcessesAsync(callback); | 110 .startBrowserProcessesAsync(callback); |
113 } catch (ProcessInitException e) { | 111 } catch (ProcessInitException e) { |
114 Log.e(TAG, "Unable to load native library.", e); | 112 Log.e(TAG, "Unable to load native library.", e); |
115 System.exit(-1); | 113 System.exit(-1); |
116 } | 114 } |
117 } else { | 115 } else { |
118 startBrowserProcessesSync(callback); | 116 startBrowserProcessesSync(callback); |
119 } | 117 } |
120 } | 118 } |
121 }); | 119 }); |
122 } catch (RuntimeException e) { | 120 } catch (RuntimeException e) { |
123 // It is still unknown why we ever experience this. See http://crbug
.com/180044. | 121 // It is still unknown why we ever experience this. See http://crbug
.com/180044. |
124 Log.w(TAG, "Got exception when trying to request a sync. Informing A
ndroid system.", e); | 122 Log.w(TAG, "Got exception when trying to request a sync. Informing A
ndroid system.", e); |
125 // Using numIoExceptions so Android will treat this as a soft error. | 123 // Using numIoExceptions so Android will treat this as a soft error. |
126 syncResult.stats.numIoExceptions++; | 124 syncResult.stats.numIoExceptions++; |
127 semaphore.release(); | 125 semaphore.release(); |
128 } | 126 } |
129 } | 127 } |
130 | 128 |
131 @SuppressFBWarnings("DM_EXIT") | |
132 private void startBrowserProcessesSync( | 129 private void startBrowserProcessesSync( |
133 final BrowserStartupController.StartupCallback callback) { | 130 final BrowserStartupController.StartupCallback callback) { |
134 try { | 131 try { |
135 BrowserStartupController.get(mApplication).startBrowserProcessesSync
(false); | 132 BrowserStartupController.get(mApplication).startBrowserProcessesSync
(false); |
136 } catch (ProcessInitException e) { | 133 } catch (ProcessInitException e) { |
137 Log.e(TAG, "Unable to load native library.", e); | 134 Log.e(TAG, "Unable to load native library.", e); |
138 System.exit(-1); | 135 System.exit(-1); |
139 } | 136 } |
140 new Handler().post(new Runnable() { | 137 new Handler().post(new Runnable() { |
141 @Override | 138 @Override |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile()) | 188 InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile()) |
192 .requestSyncFromNativeChrome(objectSource, objectId, version, pa
yload); | 189 .requestSyncFromNativeChrome(objectSource, objectId, version, pa
yload); |
193 } | 190 } |
194 | 191 |
195 @VisibleForTesting | 192 @VisibleForTesting |
196 public void requestSyncForAllTypes() { | 193 public void requestSyncForAllTypes() { |
197 InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile()) | 194 InvalidationServiceFactory.getForProfile(Profile.getLastUsedProfile()) |
198 .requestSyncFromNativeChromeForAllTypes(); | 195 .requestSyncFromNativeChromeForAllTypes(); |
199 } | 196 } |
200 } | 197 } |
OLD | NEW |