diff options
author | Elliott Slaughter <eds@google.com> | 2010-06-30 11:39:52 -0700 |
---|---|---|
committer | Elliott Slaughter <eds@google.com> | 2010-07-12 09:06:10 -0700 |
commit | b48fdbe79260b1603cfef5e304e068c29d4bc257 (patch) | |
tree | 63c97c34209598767662ca088ab364101d0f6c04 /core/java/android/webkit | |
parent | 2707d6026240bcca6f0e35e2e1138958882e90ce (diff) | |
download | frameworks_base-b48fdbe79260b1603cfef5e304e068c29d4bc257.zip frameworks_base-b48fdbe79260b1603cfef5e304e068c29d4bc257.tar.gz frameworks_base-b48fdbe79260b1603cfef5e304e068c29d4bc257.tar.bz2 |
Browser save page as web archive.
Change-Id: Id34a93b2e9bb6c185338989d1eeb6929d0bd06c5
Diffstat (limited to 'core/java/android/webkit')
-rw-r--r-- | core/java/android/webkit/BrowserFrame.java | 14 | ||||
-rw-r--r-- | core/java/android/webkit/MimeTypeMap.java | 1 | ||||
-rw-r--r-- | core/java/android/webkit/WebView.java | 50 | ||||
-rw-r--r-- | core/java/android/webkit/WebViewCore.java | 20 |
4 files changed, 84 insertions, 1 deletions
diff --git a/core/java/android/webkit/BrowserFrame.java b/core/java/android/webkit/BrowserFrame.java index 7b1aab2..b021ded 100644 --- a/core/java/android/webkit/BrowserFrame.java +++ b/core/java/android/webkit/BrowserFrame.java @@ -301,6 +301,18 @@ class BrowserFrame extends Handler { } /** + * Saves the contents of the frame as a web archive. + * + * @param basename The filename where the archive should be placed. + * @param autoname If false, takes filename to be a file. If true, filename + * is assumed to be a directory in which a filename will be + * chosen according to the url of the current page. + */ + /* package */ String saveWebArchive(String basename, boolean autoname) { + return nativeSaveWebArchive(basename, autoname); + } + + /** * Go back or forward the number of steps given. * @param steps A negative or positive number indicating the direction * and number of steps to move. @@ -1040,5 +1052,7 @@ class BrowserFrame extends Handler { */ private native HashMap getFormTextData(); + private native String nativeSaveWebArchive(String basename, boolean autoname); + private native void nativeOrientationChanged(int orientation); } diff --git a/core/java/android/webkit/MimeTypeMap.java b/core/java/android/webkit/MimeTypeMap.java index c1ac180..6e9c70a 100644 --- a/core/java/android/webkit/MimeTypeMap.java +++ b/core/java/android/webkit/MimeTypeMap.java @@ -363,6 +363,7 @@ public class MimeTypeMap { sMimeTypeMap.loadEntry("application/x-wais-source", "src"); sMimeTypeMap.loadEntry("application/x-wingz", "wz"); sMimeTypeMap.loadEntry("application/x-webarchive", "webarchive"); + sMimeTypeMap.loadEntry("application/x-webarchive-xml", "webarchivexml"); sMimeTypeMap.loadEntry("application/x-x509-ca-cert", "crt"); sMimeTypeMap.loadEntry("application/x-x509-user-cert", "crt"); sMimeTypeMap.loadEntry("application/x-xcf", "xcf"); diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 140dd55..0c8fc79 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -590,6 +590,7 @@ public class WebView extends AbsoluteLayout static final int SET_SCROLLBAR_MODES = 129; static final int SELECTION_STRING_CHANGED = 130; static final int SET_TOUCH_HIGHLIGHT_RECTS = 131; + static final int SAVE_WEBARCHIVE_FINISHED = 132; private static final int FIRST_PACKAGE_MSG_ID = SCROLL_TO_MSG_ID; private static final int LAST_PACKAGE_MSG_ID = SET_TOUCH_HIGHLIGHT_RECTS; @@ -638,7 +639,8 @@ public class WebView extends AbsoluteLayout "REQUEST_KEYBOARD_WITH_SELECTION_MSG_ID", // = 128; "SET_SCROLLBAR_MODES", // = 129; "SELECTION_STRING_CHANGED", // = 130; - "SET_TOUCH_HIGHLIGHT_RECTS" // = 131; + "SET_TOUCH_HIGHLIGHT_RECTS", // = 131; + "SAVE_WEBARCHIVE_FINISHED" // = 132; }; // If the site doesn't use the viewport meta tag to specify the viewport, @@ -1520,6 +1522,45 @@ public class WebView extends AbsoluteLayout } /** + * Saves the current view as a web archive. + * + * @param filename The filename where the archive should be placed. + */ + public void saveWebArchive(String filename) { + saveWebArchive(filename, false, null); + } + + /* package */ static class SaveWebArchiveMessage { + SaveWebArchiveMessage (String basename, boolean autoname, ValueCallback<String> callback) { + mBasename = basename; + mAutoname = autoname; + mCallback = callback; + } + + /* package */ final String mBasename; + /* package */ final boolean mAutoname; + /* package */ final ValueCallback<String> mCallback; + /* package */ String mResultFile; + } + + /** + * Saves the current view as a web archive. + * + * @param basename The filename where the archive should be placed. + * @param autoname If false, takes basename to be a file. If true, basename + * is assumed to be a directory in which a filename will be + * chosen according to the url of the current page. + * @param callback Called after the web archive has been saved. The + * parameter for onReceiveValue will either be the filename + * under which the file was saved, or null if saving the + * file failed. + */ + public void saveWebArchive(String basename, boolean autoname, ValueCallback<String> callback) { + mWebViewCore.sendMessage(EventHub.SAVE_WEBARCHIVE, + new SaveWebArchiveMessage(basename, autoname, callback)); + } + + /** * Stop the current load. */ public void stopLoading() { @@ -6435,6 +6476,13 @@ public class WebView extends AbsoluteLayout } break; + case SAVE_WEBARCHIVE_FINISHED: + SaveWebArchiveMessage saveMessage = (SaveWebArchiveMessage)msg.obj; + if (saveMessage.mCallback != null) { + saveMessage.mCallback.onReceiveValue(saveMessage.mResultFile); + } + break; + default: super.handleMessage(msg); break; diff --git a/core/java/android/webkit/WebViewCore.java b/core/java/android/webkit/WebViewCore.java index db86a0b..21af570 100644 --- a/core/java/android/webkit/WebViewCore.java +++ b/core/java/android/webkit/WebViewCore.java @@ -774,6 +774,7 @@ final class WebViewCore { "ON_RESUME", // = 144 "FREE_MEMORY", // = 145 "VALID_NODE_BOUNDS", // = 146 + "SAVE_WEBARCHIVE", // = 147 }; class EventHub { @@ -840,6 +841,9 @@ final class WebViewCore { static final int FREE_MEMORY = 145; static final int VALID_NODE_BOUNDS = 146; + // Load and save web archives + static final int SAVE_WEBARCHIVE = 147; + // Network-based messaging static final int CLEAR_SSL_PREF_TABLE = 150; @@ -1300,6 +1304,15 @@ final class WebViewCore { nativeSetJsFlags((String)msg.obj); break; + case SAVE_WEBARCHIVE: + WebView.SaveWebArchiveMessage saveMessage = + (WebView.SaveWebArchiveMessage)msg.obj; + saveMessage.mResultFile = + saveWebArchive(saveMessage.mBasename, saveMessage.mAutoname); + mWebView.mPrivateHandler.obtainMessage( + WebView.SAVE_WEBARCHIVE_FINISHED, saveMessage).sendToTarget(); + break; + case GEOLOCATION_PERMISSIONS_PROVIDE: GeolocationPermissionsData data = (GeolocationPermissionsData) msg.obj; @@ -1601,6 +1614,13 @@ final class WebViewCore { mBrowserFrame.loadUrl(url, extraHeaders); } + private String saveWebArchive(String filename, boolean autoname) { + if (DebugFlags.WEB_VIEW_CORE) { + Log.v(LOGTAG, " CORE saveWebArchive " + filename + " " + autoname); + } + return mBrowserFrame.saveWebArchive(filename, autoname); + } + private void key(KeyEvent evt, boolean isDown) { if (DebugFlags.WEB_VIEW_CORE) { Log.v(LOGTAG, "CORE key at " + System.currentTimeMillis() + ", " |