18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 1999 Antti Koivisto (koivisto@kde.org) 48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2004, 2009 Apple Inc. All rights reserved. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ImageLoader_h 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ImageLoader_h 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceHandle.h" 28f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicString.h> 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Element; 338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass ImageLoadEventSender; 345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass RenderImageResource; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ImageLoader : public CachedResourceClient { 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ImageLoader(Element*); 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~ImageLoader(); 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This function should be called when the element is attached to a document; starts 428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // loading if a load hasn't already been started. 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateFromElement(); 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This function should be called whenever the 'src' attribute is set, even if its value 468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // doesn't change; starts new load unconditionally (matches Firefox and Opera behavior). 47635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void updateFromElementIgnoringPreviousError(); 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 49dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void elementWillMoveToNewOwnerDocument(); 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* element() const { return m_element; } 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool imageComplete() const { return m_imageComplete; } 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CachedImage* image() const { return m_image.get(); } 558a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block void setImage(CachedImage*); // Cancels pending beforeload and load events, and doesn't dispatch new ones. 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setLoadManually(bool loadManually) { m_loadManually = loadManually; } 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 59cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block bool haveFiredBeforeLoadEvent() const { return m_firedBeforeLoad; } 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool haveFiredLoadEvent() const { return m_firedLoad; } 618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 62d0825bca7fe65beaee391d30da42e937db621564Steve Block static void dispatchPendingBeforeLoadEvents(); 63d0825bca7fe65beaee391d30da42e937db621564Steve Block static void dispatchPendingLoadEvents(); 648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void notifyFinished(CachedResource*); 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void dispatchLoadEvent() = 0; 708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual String sourceURI(const AtomicString&) const = 0; 718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 72cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block friend class ImageEventSender; 73cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void dispatchPendingBeforeLoadEvent(); 748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void dispatchPendingLoadEvent(); 758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen RenderImageResource* renderImageResource(); 77cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block void updateRenderer(); 78cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Element* m_element; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CachedResourceHandle<CachedImage> m_image; 81635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project AtomicString m_failedLoadURL; 82cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block bool m_firedBeforeLoad : 1; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_firedLoad : 1; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_imageComplete : 1; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_loadManually : 1; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 91