Commit f9c62f82 authored by Wei-Yin Chen (陳威尹)'s avatar Wei-Yin Chen (陳威尹) Committed by Commit Bot

Extract partner customization for overriding

Some of the partner customization logic is extracted to AppHooks,
so that it can be overriden in downstream.

Bug: 778805
Change-Id: I6dcd4b0a14ed76f7a9c447452ce313f59ca98a65
Reviewed-on: https://chromium-review.googlesource.com/741086Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Wei-Yin Chen (陳威尹) <wychen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#513033}
parent f0f0ecac
...@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.offlinepages.CCTRequestStatus; ...@@ -34,6 +34,7 @@ import org.chromium.chrome.browser.offlinepages.CCTRequestStatus;
import org.chromium.chrome.browser.omaha.RequestGenerator; import org.chromium.chrome.browser.omaha.RequestGenerator;
import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmark; import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmark;
import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksProviderIterator; import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksProviderIterator;
import org.chromium.chrome.browser.partnercustomizations.PartnerBrowserCustomizations;
import org.chromium.chrome.browser.physicalweb.PhysicalWebBleClient; import org.chromium.chrome.browser.physicalweb.PhysicalWebBleClient;
import org.chromium.chrome.browser.policy.PolicyAuditor; import org.chromium.chrome.browser.policy.PolicyAuditor;
import org.chromium.chrome.browser.preferences.LocationSettings; import org.chromium.chrome.browser.preferences.LocationSettings;
...@@ -322,4 +323,12 @@ public abstract class AppHooks { ...@@ -322,4 +323,12 @@ public abstract class AppHooks {
public PartnerBookmark.BookmarkIterator getPartnerBookmarkIterator() { public PartnerBookmark.BookmarkIterator getPartnerBookmarkIterator() {
return PartnerBookmarksProviderIterator.createIfAvailable(); return PartnerBookmarksProviderIterator.createIfAvailable();
} }
/**
* @return An instance of PartnerBrowserCustomizations.Provider that provides customizations
* specified by partners.
*/
public PartnerBrowserCustomizations.Provider getCustomizationProvider() {
return new PartnerBrowserCustomizations.ProviderPackage();
}
} }
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
package org.chromium.chrome.browser.partnercustomizations; package org.chromium.chrome.browser.partnercustomizations;
import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.ProviderInfo; import android.content.pm.ProviderInfo;
...@@ -14,10 +13,12 @@ import android.os.AsyncTask; ...@@ -14,10 +13,12 @@ import android.os.AsyncTask;
import android.text.TextUtils; import android.text.TextUtils;
import org.chromium.base.CommandLine; import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log; import org.chromium.base.Log;
import org.chromium.base.ThreadUtils; import org.chromium.base.ThreadUtils;
import org.chromium.base.VisibleForTesting; import org.chromium.base.VisibleForTesting;
import org.chromium.base.annotations.CalledByNative; import org.chromium.base.annotations.CalledByNative;
import org.chromium.chrome.browser.AppHooks;
import org.chromium.chrome.browser.ChromeSwitches; import org.chromium.chrome.browser.ChromeSwitches;
import org.chromium.chrome.browser.ChromeVersionInfo; import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.UrlConstants; import org.chromium.chrome.browser.UrlConstants;
...@@ -26,6 +27,8 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksReader; ...@@ -26,6 +27,8 @@ import org.chromium.chrome.browser.partnerbookmarks.PartnerBookmarksReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import javax.annotation.Nullable;
/** /**
* Reads and caches partner browser customizations information if it exists. * Reads and caches partner browser customizations information if it exists.
*/ */
...@@ -45,7 +48,55 @@ public class PartnerBrowserCustomizations { ...@@ -45,7 +48,55 @@ public class PartnerBrowserCustomizations {
private static volatile boolean sIncognitoModeDisabled; private static volatile boolean sIncognitoModeDisabled;
private static volatile boolean sBookmarksEditingDisabled; private static volatile boolean sBookmarksEditingDisabled;
private static boolean sIsInitialized; private static boolean sIsInitialized;
private static List<Runnable> sInitializeAsyncCallbacks = new ArrayList<Runnable>(); private static List<Runnable> sInitializeAsyncCallbacks = new ArrayList<>();
/** Provider of partner customizations. */
public interface Provider {
@Nullable
String getHomepage();
boolean isIncognitoModeDisabled();
boolean isBookmarksEditingDisabled();
}
/** Partner customizations provided by ContentProvider package. */
public static class ProviderPackage implements Provider {
@Override
public String getHomepage() {
String homepage = null;
Cursor cursor = ContextUtils.getApplicationContext().getContentResolver().query(
buildQueryUri(PARTNER_HOMEPAGE_PATH), null, null, null, null);
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1) {
homepage = cursor.getString(0);
}
if (cursor != null) cursor.close();
return homepage;
}
@Override
public boolean isIncognitoModeDisabled() {
boolean disabled = false;
Cursor cursor = ContextUtils.getApplicationContext().getContentResolver().query(
buildQueryUri(PARTNER_DISABLE_INCOGNITO_MODE_PATH), null, null, null, null);
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1) {
disabled = cursor.getInt(0) == 1;
}
if (cursor != null) cursor.close();
return disabled;
}
@Override
public boolean isBookmarksEditingDisabled() {
boolean disabled = false;
Cursor cursor = ContextUtils.getApplicationContext().getContentResolver().query(
buildQueryUri(PARTNER_DISABLE_BOOKMARKS_EDITING_PATH), null, null, null, null);
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1) {
disabled = cursor.getInt(0) == 1;
}
if (cursor != null) cursor.close();
return disabled;
}
}
/** /**
* @return True if the partner homepage content provider exists and enabled. Note that The data * @return True if the partner homepage content provider exists and enabled. Note that The data
...@@ -115,6 +166,7 @@ public class PartnerBrowserCustomizations { ...@@ -115,6 +166,7 @@ public class PartnerBrowserCustomizations {
*/ */
public static void initializeAsync(final Context context, long timeoutMs) { public static void initializeAsync(final Context context, long timeoutMs) {
sIsInitialized = false; sIsInitialized = false;
Provider provider = AppHooks.get().getCustomizationProvider();
// Setup an initializing async task. // Setup an initializing async task.
final AsyncTask<Void, Void, Void> initializeAsyncTask = final AsyncTask<Void, Void, Void> initializeAsyncTask =
new AsyncTask<Void, Void, Void>() { new AsyncTask<Void, Void, Void>() {
...@@ -123,18 +175,11 @@ public class PartnerBrowserCustomizations { ...@@ -123,18 +175,11 @@ public class PartnerBrowserCustomizations {
private void refreshHomepage() { private void refreshHomepage() {
try { try {
ContentResolver contentResolver = context.getContentResolver(); String homepage = provider.getHomepage();
Cursor cursor = contentResolver.query( if (TextUtils.isEmpty(sHomepage) || !sHomepage.equals(homepage)) {
buildQueryUri(PARTNER_HOMEPAGE_PATH), null, null, null, null); mHomepageUriChanged = true;
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1
&& !isCancelled()) {
if (TextUtils.isEmpty(sHomepage)
|| !sHomepage.equals(cursor.getString(0))) {
mHomepageUriChanged = true;
}
sHomepage = cursor.getString(0);
} }
if (cursor != null) cursor.close(); sHomepage = homepage;
} catch (Exception e) { } catch (Exception e) {
Log.w(TAG, "Partner homepage provider URL read failed : ", e); Log.w(TAG, "Partner homepage provider URL read failed : ", e);
} }
...@@ -142,15 +187,7 @@ public class PartnerBrowserCustomizations { ...@@ -142,15 +187,7 @@ public class PartnerBrowserCustomizations {
private void refreshIncognitoModeDisabled() { private void refreshIncognitoModeDisabled() {
try { try {
ContentResolver contentResolver = context.getContentResolver(); sIncognitoModeDisabled = provider.isIncognitoModeDisabled();
Cursor cursor = contentResolver.query(
buildQueryUri(PARTNER_DISABLE_INCOGNITO_MODE_PATH),
null, null, null, null);
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1
&& !isCancelled()) {
sIncognitoModeDisabled = cursor.getInt(0) == 1;
}
if (cursor != null) cursor.close();
} catch (Exception e) { } catch (Exception e) {
Log.w(TAG, "Partner disable incognito mode read failed : ", e); Log.w(TAG, "Partner disable incognito mode read failed : ", e);
} }
...@@ -158,19 +195,13 @@ public class PartnerBrowserCustomizations { ...@@ -158,19 +195,13 @@ public class PartnerBrowserCustomizations {
private void refreshBookmarksEditingDisabled() { private void refreshBookmarksEditingDisabled() {
try { try {
ContentResolver contentResolver = context.getContentResolver(); boolean disabled = provider.isBookmarksEditingDisabled();
Cursor cursor = contentResolver.query( // Only need to disable it once.
buildQueryUri(PARTNER_DISABLE_BOOKMARKS_EDITING_PATH), if (disabled != sBookmarksEditingDisabled) {
null, null, null, null); assert disabled;
if (cursor != null && cursor.moveToFirst() && cursor.getColumnCount() == 1 mDisablePartnerBookmarksShim = true;
&& !isCancelled()) {
boolean bookmarksEditingDisabled = cursor.getInt(0) == 1;
if (bookmarksEditingDisabled != sBookmarksEditingDisabled) {
mDisablePartnerBookmarksShim = true;
}
sBookmarksEditingDisabled = bookmarksEditingDisabled;
} }
if (cursor != null) cursor.close(); sBookmarksEditingDisabled = disabled;
} catch (Exception e) { } catch (Exception e) {
Log.w(TAG, "Partner disable bookmarks editing read failed : ", e); Log.w(TAG, "Partner disable bookmarks editing read failed : ", e);
} }
...@@ -184,7 +215,7 @@ public class PartnerBrowserCustomizations { ...@@ -184,7 +215,7 @@ public class PartnerBrowserCustomizations {
|| !ChromeVersionInfo.isStableBuild(); || !ChromeVersionInfo.isStableBuild();
if (!systemOrPreStable) { if (!systemOrPreStable) {
// Only allow partner customization if this browser is a system package, or // Only allow partner customization if this browser is a system package, or
// forced for testing purposes. // is in pre-stable channels.
return null; return null;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment