| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.webkit; |
| |
| import android.annotation.SystemApi; |
| |
| import java.util.Set; |
| |
| /** |
| * This class is used to manage permissions for the WebView's Geolocation |
| * JavaScript API. |
| * |
| * Geolocation permissions are applied to an origin, which consists of the |
| * host, scheme and port of a URI. In order for web content to use the |
| * Geolocation API, permission must be granted for that content's origin. |
| * |
| * This class stores Geolocation permissions. An origin's permission state can |
| * be either allowed or denied. This class uses Strings to represent |
| * an origin. |
| * |
| * When an origin attempts to use the Geolocation API, but no permission state |
| * is currently set for that origin, |
| * {@link WebChromeClient#onGeolocationPermissionsShowPrompt(String,GeolocationPermissions.Callback) WebChromeClient.onGeolocationPermissionsShowPrompt()} |
| * is called. This allows the permission state to be set for that origin. |
| * |
| * The methods of this class can be used to modify and interrogate the stored |
| * Geolocation permissions at any time. |
| */ |
| // Within WebKit, Geolocation permissions may be applied either temporarily |
| // (for the duration of the page) or permanently. This class deals only with |
| // permanent permissions. |
| public class GeolocationPermissions { |
| /** |
| * A callback interface used by the host application to set the Geolocation |
| * permission state for an origin. |
| */ |
| public interface Callback { |
| /** |
| * Sets the Geolocation permission state for the supplied origin. |
| * |
| * @param origin the origin for which permissions are set |
| * @param allow whether or not the origin should be allowed to use the |
| * Geolocation API |
| * @param retain whether the permission should be retained beyond the |
| * lifetime of a page currently being displayed by a |
| * WebView |
| */ |
| public void invoke(String origin, boolean allow, boolean retain); |
| }; |
| |
| /** |
| * Gets the singleton instance of this class. This method cannot be |
| * called before the application instantiates a {@link WebView} instance. |
| * |
| * @return the singleton {@link GeolocationPermissions} instance |
| */ |
| public static GeolocationPermissions getInstance() { |
| return WebViewFactory.getProvider().getGeolocationPermissions(); |
| } |
| |
| /** |
| * Gets the set of origins for which Geolocation permissions are stored. |
| * |
| * @param callback a {@link ValueCallback} to receive the result of this |
| * request. This object's |
| * {@link ValueCallback#onReceiveValue(T) onReceiveValue()} |
| * method will be invoked asynchronously with a set of |
| * Strings containing the origins for which Geolocation |
| * permissions are stored. |
| */ |
| // Note that we represent the origins as strings. These are created using |
| // WebCore::SecurityOrigin::toString(). As long as all 'HTML 5 modules' |
| // (Database, Geolocation etc) do so, it's safe to match up origins based |
| // on this string. |
| public void getOrigins(ValueCallback<Set<String> > callback) { |
| // Must be a no-op for backward compatibility: see the hidden constructor for reason. |
| } |
| |
| /** |
| * Gets the Geolocation permission state for the specified origin. |
| * |
| * @param origin the origin for which Geolocation permission is requested |
| * @param callback a {@link ValueCallback} to receive the result of this |
| * request. This object's |
| * {@link ValueCallback#onReceiveValue(T) onReceiveValue()} |
| * method will be invoked asynchronously with a boolean |
| * indicating whether or not the origin can use the |
| * Geolocation API. |
| */ |
| public void getAllowed(String origin, ValueCallback<Boolean> callback) { |
| // Must be a no-op for backward compatibility: see the hidden constructor for reason. |
| } |
| |
| /** |
| * Clears the Geolocation permission state for the specified origin. |
| * |
| * @param origin the origin for which Geolocation permissions are cleared |
| */ |
| public void clear(String origin) { |
| // Must be a no-op for backward compatibility: see the hidden constructor for reason. |
| } |
| |
| /** |
| * Allows the specified origin to use the Geolocation API. |
| * |
| * @param origin the origin for which Geolocation API use is allowed |
| */ |
| public void allow(String origin) { |
| // Must be a no-op for backward compatibility: see the hidden constructor for reason. |
| } |
| |
| /** |
| * Clears the Geolocation permission state for all origins. |
| */ |
| public void clearAll() { |
| // Must be a no-op for backward compatibility: see the hidden constructor for reason. |
| } |
| |
| /** |
| * This class should not be instantiated directly, applications must only use |
| * {@link #getInstance()} to obtain the instance. |
| * Note this constructor was erroneously public and published in SDK levels prior to 16, but |
| * applications using it would receive a non-functional instance of this class (there was no |
| * way to call createHandler() and createUIHandler(), so it would not work). |
| * @hide Only for use by WebViewProvider implementations |
| */ |
| @SystemApi |
| public GeolocationPermissions() {} |
| } |