Index: chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java |
index 4a1c67d7d38aea60bad3bbcc11eb9eb46097b19c..938e6446ebcd58a6bb8aa8b8862497201556d162 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/offlinepages/OfflineBackgroundTask.java |
@@ -7,6 +7,10 @@ package org.chromium.chrome.browser.offlinepages; |
import android.content.Context; |
import org.chromium.base.Callback; |
+import org.chromium.base.Log; |
+import org.chromium.base.library_loader.LibraryLoader; |
+import org.chromium.base.library_loader.ProcessInitException; |
+import org.chromium.chrome.browser.init.ChromeBrowserInitializer; |
import org.chromium.chrome.browser.offlinepages.interfaces.BackgroundSchedulerProcessor; |
import org.chromium.components.background_task_scheduler.BackgroundTask; |
import org.chromium.components.background_task_scheduler.BackgroundTask.TaskFinishedCallback; |
@@ -17,6 +21,8 @@ import org.chromium.components.background_task_scheduler.TaskParameters; |
* Handles servicing background offlining requests coming via background_task_scheduler component. |
*/ |
public class OfflineBackgroundTask implements BackgroundTask { |
+ private static final String TAG = "OPBackgroundTask"; |
+ |
BackgroundSchedulerProcessor mBackgroundProcessor; |
public OfflineBackgroundTask() { |
@@ -27,6 +33,10 @@ public class OfflineBackgroundTask implements BackgroundTask { |
public boolean onStartTask( |
Context context, TaskParameters taskParameters, TaskFinishedCallback callback) { |
assert taskParameters.getTaskId() == TaskIds.OFFLINE_PAGES_BACKGROUND_JOB_ID; |
+ |
+ // Ensuring that native potion of the browser is launched. |
+ launchBrowserIfNecessary(context); |
+ |
return BackgroundOfflinerTask.startBackgroundRequestsImpl( |
mBackgroundProcessor, context, taskParameters.getExtras(), wrapCallback(callback)); |
} |
@@ -45,4 +55,19 @@ public class OfflineBackgroundTask implements BackgroundTask { |
} |
}; |
} |
+ |
+ private static void launchBrowserIfNecessary(Context context) { |
+ if (LibraryLoader.isInitialized()) return; |
+ |
+ // TODO(fgorski): This method is taken from ChromeBackgroundService as a local fix and will |
+ // be removed with BackgroundTaskScheduler supporting GcmNetworkManager scheduling. |
+ try { |
+ ChromeBrowserInitializer.getInstance(context).handleSynchronousStartup(); |
+ } catch (ProcessInitException e) { |
+ Log.e(TAG, "ProcessInitException while starting the browser process."); |
+ // Since the library failed to initialize nothing in the application can work, so kill |
+ // the whole application not just the activity. |
+ System.exit(-1); |
+ } |
+ } |
} |