1fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald/*
2fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * Copyright (C) 2012 The Android Open Source Project
3fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald *
4fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * Licensed under the Apache License, Version 2.0 (the "License");
5fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * you may not use this file except in compliance with the License.
6fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * You may obtain a copy of the License at
7fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald *
8fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald *      http://www.apache.org/licenses/LICENSE-2.0
9fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald *
10fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * Unless required by applicable law or agreed to in writing, software
11fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * distributed under the License is distributed on an "AS IS" BASIS,
12fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * See the License for the specific language governing permissions and
14fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald * limitations under the License.
15fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald */
16fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
17fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwaldpackage android.webkit;
18fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
19fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwaldimport android.graphics.Bitmap;
20fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
21fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwaldimport java.net.MalformedURLException;
22fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwaldimport java.net.URL;
23fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
24fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald/* package */ class WebHistoryItemClassic extends WebHistoryItem implements Cloneable {
25fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // Global identifier count.
26fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private static int sNextId = 0;
27fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // Unique identifier.
28fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private final int mId;
29fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // A point to a native WebHistoryItem instance which contains the actual data
30fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private int mNativeBridge;
31fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // The favicon for this item.
32fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private Bitmap mFavicon;
33fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // The pre-flattened data used for saving the state.
34fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private byte[] mFlattenedData;
35fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // The apple-touch-icon url for use when adding the site to the home screen,
36fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // as obtained from a <link> element in the page.
37fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private String mTouchIconUrlFromLink;
38fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // If no <link> is specified, this holds the default location of the
39fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // apple-touch-icon.
40fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private String mTouchIconUrlServerDefault;
41fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    // Custom client data that is not flattened or read by native code.
42fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private Object mCustomData;
43fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
44fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
45fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Basic constructor that assigns a unique id to the item. Called by JNI
46fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * only.
47fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
48fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private WebHistoryItemClassic(int nativeBridge) {
49fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        synchronized (WebHistoryItemClassic.class) {
50fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mId = sNextId++;
51fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
52fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mNativeBridge = nativeBridge;
53fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        nativeRef(mNativeBridge);
54fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
55fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
56fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    protected void finalize() throws Throwable {
57fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge != 0) {
58fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            nativeUnref(mNativeBridge);
59fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mNativeBridge = 0;
60fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
61fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
62fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
63fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
64fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Construct a new WebHistoryItem with initial flattened data.
65fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @param data The pre-flattened data coming from restoreState.
66fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
67fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /*package*/ WebHistoryItemClassic(byte[] data) {
68fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mFlattenedData = data;
69fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        synchronized (WebHistoryItemClassic.class) {
70fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mId = sNextId++;
71fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
72fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
73fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
74fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
75fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Construct a clone of a WebHistoryItem from the given item.
76fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @param item The history item to clone.
77fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
78fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private WebHistoryItemClassic(WebHistoryItemClassic item) {
79fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mFlattenedData = item.mFlattenedData;
80fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mId = item.mId;
81fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mFavicon = item.mFavicon;
82fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mNativeBridge = item.mNativeBridge;
83fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge != 0) {
84fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            nativeRef(mNativeBridge);
85fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
86fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
87fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
88fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    @Deprecated
89fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public int getId() {
90fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return mId;
91fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
92fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
93fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public String getUrl() {
94fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge == 0) return null;
95fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return nativeGetUrl(mNativeBridge);
96fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
97fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
98fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public String getOriginalUrl() {
99fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge == 0) return null;
100fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return nativeGetOriginalUrl(mNativeBridge);
101fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
102fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
103fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public String getTitle() {
104fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge == 0) return null;
105fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return nativeGetTitle(mNativeBridge);
106fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
107fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
108fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public Bitmap getFavicon() {
109fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mFavicon == null && mNativeBridge != 0) {
110fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mFavicon = nativeGetFavicon(mNativeBridge);
111fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
112fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return mFavicon;
113fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
114fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
115fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
116fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Return the touch icon url.
117fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * If no touch icon <link> tag was specified, returns
118fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * <host>/apple-touch-icon.png. The DownloadTouchIcon class that
119fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * attempts to retrieve the touch icon will handle the case where
120fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * that file does not exist. An icon set by a <link> tag is always
121fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * used in preference to an icon saved on the server.
122fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @hide
123fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
124fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public String getTouchIconUrl() {
125fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mTouchIconUrlFromLink != null) {
126fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            return mTouchIconUrlFromLink;
127fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        } else if (mTouchIconUrlServerDefault != null) {
128fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            return mTouchIconUrlServerDefault;
129fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
130fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
131fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        try {
132fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            URL url = new URL(getOriginalUrl());
133fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mTouchIconUrlServerDefault = new URL(url.getProtocol(), url.getHost(), url.getPort(),
134fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald                    "/apple-touch-icon.png").toString();
135fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        } catch (MalformedURLException e) {
136fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            return null;
137fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
138fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return mTouchIconUrlServerDefault;
139fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
140fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
141fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
142fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Return the custom data provided by the client.
143fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @hide
144fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
145fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public Object getCustomData() {
146fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return mCustomData;
147fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
148fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
149fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
150fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Set the custom data field.
151fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @param data An Object containing any data the client wishes to associate
152fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     *             with the item.
153fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @hide
154fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
155fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public void setCustomData(Object data) {
156fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        // NOTE: WebHistoryItems are used in multiple threads. However, the
157fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        // public facing apis are all getters with the exception of this one
158fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        // api. Since this api is exclusive to clients, we don't make any
159fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        // promises about thread safety.
160fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mCustomData = data;
161fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
162fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
163fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
164fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Set the favicon.
165fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @param icon A Bitmap containing the favicon for this history item.
166fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Note: The VM ensures 32-bit atomic read/write operations so we don't have
167fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * to synchronize this method.
168fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
169fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /*package*/ void setFavicon(Bitmap icon) {
170fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mFavicon = icon;
171fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
172fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
173fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
174fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Set the touch icon url. Will not overwrite an icon that has been
175fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * set already from a <link> tag, unless the new icon is precomposed.
176fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * @hide
177fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
178fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /*package*/ void setTouchIconUrl(String url, boolean precomposed) {
179fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (precomposed || mTouchIconUrlFromLink == null) {
180fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            mTouchIconUrlFromLink = url;
181fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
182fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
183fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
184fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
185fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Get the pre-flattened data.
186fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Note: The VM ensures 32-bit atomic read/write operations so we don't have
187fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * to synchronize this method.
188fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
189fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /*package*/ byte[] getFlattenedData() {
190fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        if (mNativeBridge != 0) {
191fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald            return nativeGetFlattenedData(mNativeBridge);
192fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        }
193fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return mFlattenedData;
194fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
195fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
196fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /**
197fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Inflate this item.
198fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * Note: The VM ensures 32-bit atomic read/write operations so we don't have
199fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     * to synchronize this method.
200fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
201fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /*package*/ void inflate(int nativeFrame) {
202fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mNativeBridge = inflate(nativeFrame, mFlattenedData);
203fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        mFlattenedData = null;
204fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
205fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
206fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    public synchronized WebHistoryItemClassic clone() {
207fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald        return new WebHistoryItemClassic(this);
208fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    }
209fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
210fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    /* Natively inflate this item, this method is called in the WebCore thread.
211fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald     */
212fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native int inflate(int nativeFrame, byte[] data);
213fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native void nativeRef(int nptr);
214fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native void nativeUnref(int nptr);
215fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native String nativeGetTitle(int nptr);
216fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native String nativeGetUrl(int nptr);
217fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native String nativeGetOriginalUrl(int nptr);
218fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native byte[] nativeGetFlattenedData(int nptr);
219fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald    private native Bitmap nativeGetFavicon(int nptr);
220fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald
221fcc1f75bdf21a89f0a40c323efae4d6a817cced5Jesse Greenwald}
222