Index: components/web_restrictions/browser/java/src/org/chromium/components/webrestrictions/WebRestrictionsContentProvider.java |
diff --git a/components/web_restrictions/browser/java/src/org/chromium/components/webrestrictions/WebRestrictionsContentProvider.java b/components/web_restrictions/browser/java/src/org/chromium/components/webrestrictions/WebRestrictionsContentProvider.java |
deleted file mode 100644 |
index 869ff7220d53cae90cc139e8fc3f8009d915b94c..0000000000000000000000000000000000000000 |
--- a/components/web_restrictions/browser/java/src/org/chromium/components/webrestrictions/WebRestrictionsContentProvider.java |
+++ /dev/null |
@@ -1,267 +0,0 @@ |
-// 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.components.webrestrictions; |
- |
-import android.content.ContentProvider; |
-import android.content.ContentValues; |
-import android.content.Context; |
-import android.content.UriMatcher; |
-import android.content.pm.ProviderInfo; |
-import android.database.AbstractCursor; |
-import android.database.Cursor; |
-import android.net.Uri; |
- |
-import java.util.regex.Matcher; |
-import java.util.regex.Pattern; |
- |
-/** |
- * Abstract content provider for providing web restrictions, i.e. for providing a filter for URLs so |
- * that they can be blocked or permitted, and a means of requesting permission for new URLs. It |
- * provides two (virtual) tables; an 'authorized' table listing the the status of every URL, and a |
- * 'requested' table containing the requests for access to new URLs. The 'authorized' table is read |
- * only and the 'requested' table is write only. |
- */ |
-public abstract class WebRestrictionsContentProvider extends ContentProvider { |
- public static final int BLOCKED = 0; |
- public static final int PROCEED = 1; |
- private static final int WEB_RESTRICTIONS = 1; |
- private static final int AUTHORIZED = 2; |
- private static final int REQUESTED = 3; |
- |
- private final Pattern mSelectionPattern; |
- private UriMatcher mContentUriMatcher; |
- private Uri mContentUri; |
- |
- /** |
- * Structure for returning result including the custom error data. |
- */ |
- public static class WebRestrictionsResult { |
- private final boolean mShouldProceed; |
- private final int mErrorInts[]; |
- private final String mErrorStrings[]; |
- |
- public WebRestrictionsResult(boolean shouldProceed, final int[] errorInts, |
- final String[] errorStrings) { |
- assert !shouldProceed || errorInts == null; |
- assert !shouldProceed || errorStrings == null; |
- mShouldProceed = shouldProceed; |
- mErrorInts = errorInts == null ? null : errorInts.clone(); |
- mErrorStrings = errorStrings == null ? null : errorStrings.clone(); |
- } |
- |
- public int getErrorInt(int i) { |
- if (mErrorInts == null || i >= mErrorInts.length) return 0; |
- return mErrorInts[i]; |
- } |
- |
- public String getErrorString(int i) { |
- if (mErrorStrings == null || i >= mErrorStrings.length) return null; |
- return mErrorStrings[i]; |
- } |
- |
- public boolean shouldProceed() { |
- return mShouldProceed; |
- } |
- |
- public int errorIntCount() { |
- if (mErrorInts == null) return 0; |
- return mErrorInts.length; |
- } |
- |
- public int errorStringCount() { |
- if (mErrorStrings == null) return 0; |
- return mErrorStrings.length; |
- } |
- } |
- |
- protected WebRestrictionsContentProvider() { |
- // Pattern to extract the URL from the selection. |
- // Matches patterns of the form "url = '<url>'" with arbitrary spacing |
- // around the "=" etc. |
- mSelectionPattern = Pattern.compile("\\s*url\\s*=\\s*'([^']*)'"); |
- } |
- |
- @Override |
- public boolean onCreate() { |
- return true; |
- } |
- |
- @Override |
- public void attachInfo(Context context, ProviderInfo info) { |
- super.attachInfo(context, info); |
- mContentUri = new Uri.Builder().scheme("content").authority(info.authority).build(); |
- mContentUriMatcher = new UriMatcher(WEB_RESTRICTIONS); |
- mContentUriMatcher.addURI(info.authority, "authorized", AUTHORIZED); |
- mContentUriMatcher.addURI(info.authority, "requested", REQUESTED); |
- } |
- |
- @Override |
- public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, |
- String sortOrder) { |
- if (!contentProviderEnabled()) return null; |
- // Check that this is the a query on the 'authorized' table |
- // TODO(aberent): Provide useful queries on the 'requested' table. |
- if (mContentUriMatcher.match(uri) != AUTHORIZED) return null; |
- // If the selection is of the right form get the url we are querying. |
- Matcher matcher = mSelectionPattern.matcher(selection); |
- if (!matcher.find()) return null; |
- final String url = matcher.group(1); |
- final WebRestrictionsResult result = shouldProceed(url); |
- if (result == null) return null; |
- |
- return new AbstractCursor() { |
- |
- @Override |
- public int getCount() { |
- return 1; |
- } |
- |
- @Override |
- public String[] getColumnNames() { |
- String errorNames[] = getErrorColumnNames(); |
- String names[] = new String[errorNames.length + 1]; |
- names[0] = "Should Proceed"; |
- for (int i = 0; i < errorNames.length; i++) { |
- names[i + 1] = errorNames[i]; |
- } |
- return names; |
- } |
- |
- @Override |
- public String getString(int column) { |
- // The column order is: |
- // result, |
- // integer error parameters, |
- // string error parameters |
- // so offset the string error parameters by the number of integer parameters + 1 |
- int errorStringNumber = column - result.errorIntCount() - 1; |
- if (errorStringNumber >= 0 && errorStringNumber < result.errorStringCount()) { |
- return result.getErrorString(errorStringNumber); |
- } |
- return null; |
- } |
- |
- @Override |
- public short getShort(int column) { |
- return 0; |
- } |
- |
- @Override |
- public int getInt(int column) { |
- if (column == 0) return result.shouldProceed() ? PROCEED : BLOCKED; |
- // The column order is: |
- // result, |
- // integer error parameters, |
- // string error parameters |
- // so offset the integer error parameters by 1 |
- int errorIntNumber = column - 1; |
- if (errorIntNumber < result.errorIntCount()) { |
- return result.getErrorInt(errorIntNumber); |
- } |
- return 0; |
- } |
- |
- @Override |
- public long getLong(int column) { |
- return 0; |
- } |
- |
- @Override |
- public float getFloat(int column) { |
- return 0; |
- } |
- |
- @Override |
- public double getDouble(int column) { |
- return 0; |
- } |
- |
- @Override |
- public boolean isNull(int column) { |
- return false; |
- } |
- |
- @Override |
- public int getType(int column) { |
- if (column < result.errorIntCount() + 1) return FIELD_TYPE_INTEGER; |
- if (column < result.errorIntCount() + result.errorStringCount() + 1) { |
- return FIELD_TYPE_STRING; |
- } |
- return FIELD_TYPE_NULL; |
- } |
- }; |
- } |
- |
- @Override |
- public String getType(Uri uri) { |
- // Abused to return whether we can insert |
- if (!contentProviderEnabled()) return null; |
- if (mContentUriMatcher.match(uri) != REQUESTED) return null; |
- return canInsert() ? "text/plain" : null; |
- } |
- |
- @Override |
- public Uri insert(Uri uri, ContentValues values) { |
- if (!contentProviderEnabled()) return null; |
- if (mContentUriMatcher.match(uri) != REQUESTED) return null; |
- String url = values.getAsString("url"); |
- if (requestInsert(url)) { |
- // TODO(aberent): If we ever make the 'requested' table readable then we might want to |
- // change this to a more conventional content URI (with a row number). |
- return uri.buildUpon().appendPath(url).build(); |
- } else { |
- return null; |
- } |
- } |
- |
- @Override |
- public int delete(Uri uri, String selection, String[] selectionArgs) { |
- return 0; |
- } |
- |
- @Override |
- public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { |
- return 0; |
- } |
- |
- /** |
- * @param url the URL that is wanted. |
- * @return a pair containing the Result and the HTML Error Message. result is true if safe to |
- * proceed, false otherwise. error message is only meaningful if result is false, a null |
- * error message means use application default. |
- */ |
- protected abstract WebRestrictionsResult shouldProceed(final String url); |
- |
- /** |
- * @return whether the content provider allows insertions. |
- */ |
- protected abstract boolean canInsert(); |
- |
- /** |
- * @return the names of the custom error columns, integer valued columns must proceed string |
- * valued columns. |
- */ |
- protected abstract String[] getErrorColumnNames(); |
- |
- /** |
- * Start a request that a URL should be permitted |
- * |
- * @param url the URL that is wanted. |
- */ |
- protected abstract boolean requestInsert(final String url); |
- |
- /** |
- * @return true if the content provider is enabled, false if not |
- */ |
- protected abstract boolean contentProviderEnabled(); |
- |
- /** |
- * Call to tell observers that the filter has changed. |
- */ |
- protected void onFilterChanged() { |
- getContext().getContentResolver().notifyChange( |
- mContentUri.buildUpon().appendPath("authorized").build(), null); |
- } |
-} |