| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeBrowserProviderStaging.java
|
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeBrowserProviderStaging.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeBrowserProviderStaging.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b3f22f4f645aa863a0b9a06f9f8ee1f1664151ec
|
| --- /dev/null
|
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/ChromeBrowserProviderStaging.java
|
| @@ -0,0 +1,82 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.chrome.browser;
|
| +
|
| +import android.Manifest;
|
| +import android.content.pm.PackageManager;
|
| +
|
| +import org.chromium.base.annotations.SuppressFBWarnings;
|
| +import org.chromium.base.library_loader.LibraryProcessType;
|
| +import org.chromium.base.library_loader.ProcessInitException;
|
| +import org.chromium.chrome.browser.externalauth.ExternalAuthUtils;
|
| +import org.chromium.content.app.ContentApplication;
|
| +import org.chromium.content.browser.BrowserStartupController;
|
| +
|
| +/**
|
| + * App-specific version of ChromeBrowserProvider that deals with app-side initialization,
|
| + * notifications and operations depending on the sync status.
|
| + *
|
| + * TODO(newt): merge with ChromeBrowserProvider after upstreaming.
|
| + */
|
| +public class ChromeBrowserProviderStaging extends ChromeBrowserProvider {
|
| +
|
| + @Override
|
| + public boolean onCreate() {
|
| + ContentApplication.initCommandLine(getContext());
|
| +
|
| + BrowserStartupController.get(getContext(), LibraryProcessType.PROCESS_BROWSER)
|
| + .addStartupCompletedObserver(
|
| + new BrowserStartupController.StartupCallback() {
|
| + @Override
|
| + public void onSuccess(boolean alreadyStarted) {
|
| + ensureNativeChromeLoadedOnUIThread();
|
| + }
|
| +
|
| + @Override
|
| + public void onFailure() {
|
| + }
|
| + });
|
| +
|
| + return super.onCreate();
|
| + }
|
| +
|
| + @SuppressFBWarnings("DM_EXIT")
|
| + @Override
|
| + protected boolean ensureNativeChromeLoadedOnUIThread() {
|
| + if (isNativeSideInitialized()) return true;
|
| + // Only start the GoogleServicesManager if we were initialized via a call to the browser
|
| + // provider. If it wasn't, let the Chrome browser worry about sequencing the
|
| + // initialization.
|
| + boolean shouldStartGoogleServicesManager = mContentProviderApiCalled;
|
| + try {
|
| + ((ChromiumApplication) getContext().getApplicationContext())
|
| + .startChromeBrowserProcessesSync(shouldStartGoogleServicesManager);
|
| + } catch (ProcessInitException e) {
|
| + // Chrome browser runs in the background, so exit silently; but do exit, since
|
| + // otherwise the next attempt to use Chrome will find a broken JNI.
|
| + System.exit(-1);
|
| + }
|
| + return super.ensureNativeChromeLoadedOnUIThread();
|
| + }
|
| +
|
| + @Override
|
| + protected boolean hasReadAccess() {
|
| + return hasPermission(Manifest.permission.READ_HISTORY_BOOKMARKS);
|
| + }
|
| +
|
| + @Override
|
| + protected boolean hasWriteAccess() {
|
| + return hasPermission(Manifest.permission.WRITE_HISTORY_BOOKMARKS);
|
| + }
|
| +
|
| + private boolean hasPermission(String permission) {
|
| + boolean hasPermission = getContext().checkCallingOrSelfPermission(permission)
|
| + == PackageManager.PERMISSION_GRANTED;
|
| + boolean isSystemOrGoogleCaller = ExternalAuthUtils.getInstance().isCallerValid(
|
| + getContext(), ExternalAuthUtils.FLAG_SHOULD_BE_GOOGLE_SIGNED
|
| + | ExternalAuthUtils.FLAG_SHOULD_BE_SYSTEM);
|
| + return hasPermission || isSystemOrGoogleCaller;
|
| + }
|
| +}
|
|
|