diff --git a/core/java/android/webkit/CallbackProxy.java b/core/java/android/webkit/CallbackProxy.java index 37efdb0248b80..8d552479008c1 100644 --- a/core/java/android/webkit/CallbackProxy.java +++ b/core/java/android/webkit/CallbackProxy.java @@ -106,6 +106,7 @@ class CallbackProxy extends Handler { private static final int GEOLOCATION_PERMISSIONS_SHOW_PROMPT = 130; private static final int GEOLOCATION_PERMISSIONS_HIDE_PROMPT = 131; private static final int RECEIVED_TOUCH_ICON_URL = 132; + private static final int GET_VISITED_HISTORY = 133; // Message triggered by the client to resume execution private static final int NOTIFY = 200; @@ -655,6 +656,12 @@ class CallbackProxy extends Handler { int lineNumber = msg.getData().getInt("lineNumber"); mWebChromeClient.addMessageToConsole(message, lineNumber, sourceID); break; + + case GET_VISITED_HISTORY: + if (mWebChromeClient != null) { + mWebChromeClient.getVisitedHistory((ValueCallback)msg.obj); + } + break; } } @@ -1329,4 +1336,16 @@ class CallbackProxy extends Handler { } return result.getResult(); } + + /** + * @hide pending API council approval + */ + public void getVisitedHistory(ValueCallback callback) { + if (mWebChromeClient == null) { + return; + } + Message msg = obtainMessage(GET_VISITED_HISTORY); + msg.obj = callback; + sendMessage(msg); + } } diff --git a/core/java/android/webkit/WebChromeClient.java b/core/java/android/webkit/WebChromeClient.java index bbc567d71075e..7f5b8629f16f6 100644 --- a/core/java/android/webkit/WebChromeClient.java +++ b/core/java/android/webkit/WebChromeClient.java @@ -295,4 +295,11 @@ public class WebChromeClient { public View getVideoLoadingProgressView() { return null; } + + /** Obtains a list of all visited history items, used for link coloring + * @hide pending API Council approval + */ + public void getVisitedHistory(ValueCallback callback) { + } + } diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index e2aa1d011a226..86685fb41fd17 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -311,10 +311,13 @@ final class WebViewCore { }); } - protected String[] populateVisitedLinks() { - // FIXME: getVisitedHistory needs permission and host may not have. -// return Browser.getVisitedHistory(mContext.getContentResolver()); - return new String[0]; + protected void populateVisitedLinks() { + ValueCallback callback = new ValueCallback() { + public void onReceiveValue(String[] value) { + sendMessage(EventHub.POPULATE_VISITED_LINKS, (Object)value); + } + }; + mCallbackProxy.getVisitedHistory(callback); } /** @@ -531,6 +534,11 @@ final class WebViewCore { */ private native void nativeGeolocationPermissionsProvide(String origin, boolean allow, boolean remember); + /** + * Provide WebCore with the previously visted links from the history database + */ + private native void nativeProvideVisitedHistory(String[] history); + // EventHub for processing messages private final EventHub mEventHub; // WebCore thread handler @@ -811,6 +819,8 @@ final class WebViewCore { // Geolocation static final int GEOLOCATION_PERMISSIONS_PROVIDE = 180; + static final int POPULATE_VISITED_LINKS = 181; + // private message ids private static final int DESTROY = 200; @@ -1234,6 +1244,10 @@ final class WebViewCore { ((Message) msg.obj).sendToTarget(); } break; + + case POPULATE_VISITED_LINKS: + nativeProvideVisitedHistory((String[])msg.obj); + break; } } };