• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2006 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.webkit;
18 
19 import android.graphics.Bitmap;
20 
21 /**
22  * A convenience class for accessing fields in an entry in the back/forward list
23  * of a WebView. Each WebHistoryItem is a snapshot of the requested history
24  * item. Each history item may be updated during the load of a page.
25  * @see WebBackForwardList
26  */
27 public class WebHistoryItem implements Cloneable {
28     // Global identifier count.
29     private static int sNextId = 0;
30     // Unique identifier.
31     private final int mId;
32     // The title of this item's document.
33     private String mTitle;
34     // The base url of this item.
35     private String mUrl;
36     // The original requested url of this item.
37     private String mOriginalUrl;
38     // The favicon for this item.
39     private Bitmap mFavicon;
40     // The pre-flattened data used for saving the state.
41     private byte[] mFlattenedData;
42     // The apple-touch-icon url for use when adding the site to the home screen
43     private String mTouchIconUrl;
44 
45     /**
46      * Basic constructor that assigns a unique id to the item. Called by JNI
47      * only.
48      */
WebHistoryItem()49     private WebHistoryItem() {
50         synchronized (WebHistoryItem.class) {
51             mId = sNextId++;
52         }
53     }
54 
55     /**
56      * Construct a new WebHistoryItem with initial flattened data.
57      * @param data The pre-flattened data coming from restoreState.
58      */
WebHistoryItem(byte[] data)59     /*package*/ WebHistoryItem(byte[] data) {
60         mUrl = null; // This will be updated natively
61         mFlattenedData = data;
62         synchronized (WebHistoryItem.class) {
63             mId = sNextId++;
64         }
65     }
66 
67     /**
68      * Construct a clone of a WebHistoryItem from the given item.
69      * @param item The history item to clone.
70      */
WebHistoryItem(WebHistoryItem item)71     private WebHistoryItem(WebHistoryItem item) {
72         mUrl = item.mUrl;
73         mTitle = item.mTitle;
74         mFlattenedData = item.mFlattenedData;
75         mFavicon = item.mFavicon;
76         mId = item.mId;
77 }
78 
79     /**
80      * Return an identifier for this history item. If an item is a copy of
81      * another item, the identifiers will be the same even if they are not the
82      * same object.
83      * @return The id for this item.
84      */
getId()85     public int getId() {
86         return mId;
87     }
88 
89     /**
90      * Return the url of this history item. The url is the base url of this
91      * history item. See getTargetUrl() for the url that is the actual target of
92      * this history item.
93      * @return The base url of this history item.
94      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
95      * to synchronize this method.
96      */
getUrl()97     public String getUrl() {
98         return mUrl;
99     }
100 
101     /**
102      * Return the original url of this history item. This was the requested
103      * url, the final url may be different as there might have been
104      * redirects while loading the site.
105      * @return The original url of this history item.
106      */
getOriginalUrl()107     public String getOriginalUrl() {
108         return mOriginalUrl;
109     }
110 
111     /**
112      * Return the document title of this history item.
113      * @return The document title of this history item.
114      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
115      * to synchronize this method.
116      */
getTitle()117     public String getTitle() {
118         return mTitle;
119     }
120 
121     /**
122      * Return the favicon of this history item or null if no favicon was found.
123      * @return A Bitmap containing the favicon for this history item or null.
124      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
125      * to synchronize this method.
126      */
getFavicon()127     public Bitmap getFavicon() {
128         return mFavicon;
129     }
130 
131     /**
132      * Return the touch icon url.
133      * @hide
134      */
getTouchIconUrl()135     public String getTouchIconUrl() {
136         return mTouchIconUrl;
137     }
138 
139     /**
140      * Set the favicon.
141      * @param icon A Bitmap containing the favicon for this history item.
142      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
143      * to synchronize this method.
144      */
setFavicon(Bitmap icon)145     /*package*/ void setFavicon(Bitmap icon) {
146         mFavicon = icon;
147     }
148 
149     /**
150      * Set the touch icon url.
151      * @hide
152      */
setTouchIconUrl(String url)153     /*package*/ void setTouchIconUrl(String url) {
154         mTouchIconUrl = url;
155     }
156 
157     /**
158      * Get the pre-flattened data.
159      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
160      * to synchronize this method.
161      */
getFlattenedData()162     /*package*/ byte[] getFlattenedData() {
163         return mFlattenedData;
164     }
165 
166     /**
167      * Inflate this item.
168      * Note: The VM ensures 32-bit atomic read/write operations so we don't have
169      * to synchronize this method.
170      */
inflate(int nativeFrame)171     /*package*/ void inflate(int nativeFrame) {
172         inflate(nativeFrame, mFlattenedData);
173     }
174 
175     /**
176      * Clone the history item for use by clients of WebView.
177      */
clone()178     protected synchronized WebHistoryItem clone() {
179         return new WebHistoryItem(this);
180     }
181 
182     /* Natively inflate this item, this method is called in the WebCore thread.
183      */
inflate(int nativeFrame, byte[] data)184     private native void inflate(int nativeFrame, byte[] data);
185 
186     /* Called by jni when the item is updated */
update(String url, String originalUrl, String title, Bitmap favicon, byte[] data)187     private void update(String url, String originalUrl, String title,
188             Bitmap favicon, byte[] data) {
189         mUrl = url;
190         mOriginalUrl = originalUrl;
191         mTitle = title;
192         mFavicon = favicon;
193         mFlattenedData = data;
194     }
195 }
196