18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright 2006, The Android Open Source Project
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *  * Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
163298a7d84b96ade73c6b170671711a8f2792ae59Steve Block * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
263d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#ifndef WebHistory_h
273d1195ca6a380e5af16e3a505a007369cf18a4dbSteve Block#define WebHistory_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
29be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch#include "AndroidWebHistoryBridge.h"
30be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch
31e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck#include "PlatformString.h"
32e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck#include "SkBitmap.h"
33e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <jni.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefCounted.h>
36e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck#include <wtf/Threading.h>
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h>
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace android {
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass AutoJObject;
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass WebHistory {
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
45e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    static void Flatten(JNIEnv*, WTF::Vector<char>&, WebCore::HistoryItem*);
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void AddItem(const AutoJObject&, WebCore::HistoryItem*);
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void RemoveItem(const AutoJObject&, int);
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    static void UpdateHistoryIndex(const AutoJObject&, int);
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
51c05b3a990126a5a1de357c025e25e6acd4e4e185Grace Kloba// there are two scale factors saved with each history item. m_scale reflects the
52c05b3a990126a5a1de357c025e25e6acd4e4e185Grace Kloba// viewport scale factor, default to 100 means 100%. m_textWrapScale records
53c05b3a990126a5a1de357c025e25e6acd4e4e185Grace Kloba// the scale factor for wrapping the text paragraph.
54be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdochclass WebHistoryItem : public WebCore::AndroidWebHistoryBridge {
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    WebHistoryItem(WebHistoryItem* parent)
570b9d36d96db8c9f0462409ac20b6c25a31dcb4bbGrace Kloba        : WebCore::AndroidWebHistoryBridge(0)
584d31493c3fa47a28b2753bc5b99e2074b6a7a4dfJohn Reck        , m_favicon(0)
59e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        , m_faviconCached(0)
60e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        , m_dataCached(0)
61be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch        , m_parent(parent)
62e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    {}
63e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    WebHistoryItem(WebCore::HistoryItem* item)
64e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        : WebCore::AndroidWebHistoryBridge(item)
654d31493c3fa47a28b2753bc5b99e2074b6a7a4dfJohn Reck        , m_favicon(0)
66e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        , m_faviconCached(0)
67e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        , m_dataCached(0)
68e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck        , m_parent(0)
69e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    {}
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ~WebHistoryItem();
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void updateHistoryItem(WebCore::HistoryItem* item);
72be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch    void setParent(WebHistoryItem* parent) { m_parent = parent; }
73be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch    WebHistoryItem* parent() const { return m_parent.get(); }
74e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck
75e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    // TODO: This is ugly. Really the whole bindings of WebHistoryItem needs to be
76e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    // cleaned up, but this will do for now
77e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    WTF::Mutex m_lock;
78e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    String m_url;
79e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    String m_originalUrl;
80e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    String m_title;
814d31493c3fa47a28b2753bc5b99e2074b6a7a4dfJohn Reck    SkBitmap* m_favicon;
82e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    WTF::Vector<char> m_data;
83e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    jobject m_faviconCached;
84e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck    jobject m_dataCached;
85e38a6c283211dcfd3b1fb390e4c108a86481dd8aJohn Reck
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
87be33b78f63b17f1b6f5a36a503d797d5f9b941eeBen Murdoch    RefPtr<WebHistoryItem> m_parent;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
93