diff -r cb62a4f66ebe -r 6297cdf66332 webengine/osswebengine/WebCore/loader/icon/IconRecord.h --- a/webengine/osswebengine/WebCore/loader/icon/IconRecord.h Thu Jan 07 13:31:38 2010 +0200 +++ b/webengine/osswebengine/WebCore/loader/icon/IconRecord.h Mon Jan 18 21:20:18 2010 +0200 @@ -63,7 +63,43 @@ int timestamp; RefPtr data; }; - + +/* To avoid deletion of icon bitmaps in Symbian */ +#if PLATFORM(SYMBIAN) +class IconImagePtr : Noncopyable { + typedef Image* PtrType; +public: + explicit IconImagePtr(PtrType ptr = 0) : m_ptr(ptr) { } + ~IconImagePtr() { /*deleteOwnedPtr(m_ptr);*/ } + + PtrType get() const { return m_ptr; } + PtrType release() { PtrType ptr = m_ptr; m_ptr = 0; return ptr; } + + void set(PtrType ptr) { ASSERT(!ptr || m_ptr != ptr); /*deleteOwnedPtr(m_ptr);*/ m_ptr = ptr; } + void clear() { /*deleteOwnedPtr(m_ptr);*/ m_ptr = 0; } + + Image& operator*() const { ASSERT(m_ptr); return *m_ptr; } + PtrType operator->() const { ASSERT(m_ptr); return m_ptr; } + + bool operator!() const { return !m_ptr; } + + // This conversion operator allows implicit conversion to bool but not to other integer types. + typedef PtrType (IconImagePtr::*UnspecifiedBoolType)() const; + operator UnspecifiedBoolType() const { return m_ptr ? &IconImagePtr::get : 0; } + + void swap(IconImagePtr& o) { std::swap(m_ptr, o.m_ptr); } + + private: + PtrType m_ptr; + }; + + inline void swap(IconImagePtr& a, IconImagePtr& b) { a.swap(b); } + inline Image* getPtr(const IconImagePtr& p) + { + return p.get(); + } +#endif + class IconRecord : public Shared { friend class PageURLRecord; public: @@ -88,7 +124,11 @@ private: String m_iconURL; time_t m_stamp; +#if PLATFORM(SYMBIAN) + IconImagePtr m_image; +#else OwnPtr m_image; +#endif HashSet m_retainingPageURLs;