wxFileSystem* GetFS() const { return m_FS; }
+ // Returns TRUE if the parser is allowed to open given URL (may be forbidden
+ // for security reasons)
+ virtual bool CanOpenURL(const wxString& url) const { return TRUE; }
+
// You can simply call this method when you need parsed output.
// This method does these things:
// 1. call InitParser(source);
// Called when user clicked on hypertext link. Default behavior is to
// call LoadPage(loc)
virtual void OnLinkClicked(const wxHtmlLinkInfo& link);
+
+ // Called when wxHtmlWindow wants to fetch data from an URL (e.g. when loading
+ // a page or loading an image). The data are downloaded if and only if
+ // OnOpeningURL returns TRUE.
+ virtual bool OnOpeningURL(const wxString& url) const { return TRUE; }
// Returns a pointer to the parser.
wxHtmlWinParser *GetParser() const { return m_Parser; }
#include "wx/html/htmlcell.h"
#include "wx/encconv.h"
+class WXDLLEXPORT wxHtmlWindow;
class WXDLLEXPORT wxHtmlWinParser;
class WXDLLEXPORT wxHtmlWinTagHandler;
class WXDLLEXPORT wxHtmlTagsModule;
friend class wxHtmlWindow;
public:
- wxHtmlWinParser(wxWindow *wnd = NULL);
+ wxHtmlWinParser(wxHtmlWindow *wnd = NULL);
~wxHtmlWinParser();
virtual void InitParser(const wxString& source);
virtual void DoneParser();
virtual wxObject* GetProduct();
+ virtual bool CanOpenURL(const wxString& url) const;
+
// Set's the DC used for parsing. If SetDC() is not called,
// parsing won't proceed
virtual void SetDC(wxDC *dc, double pixel_scale = 1.0)
// GetDC()->GetChar...()
// returns associated wxWindow
- wxWindow *GetWindow() {return m_Window;}
+ wxHtmlWindow *GetWindow() {return m_Window;}
// sets fonts to be used when displaying HTML page.
void SetFonts(wxString normal_face, wxString fixed_face, const int *sizes);
wxChar *m_tmpStrBuf;
size_t m_tmpStrBufSize;
// temporary variables used by AddText
- wxWindow *m_Window;
+ wxHtmlWindow *m_Window;
// window we're parsing for
double m_PixelScale;
wxDC *m_DC;
m_RelatedFrame->SetStatusText(_("Connecting..."), m_RelatedStatusBar);
Refresh(FALSE);
}
+
+ if ( !m_Parser->CanOpenURL(location) )
+ {
+ wxLogError(_("Access denied to document '%s'!"), location.c_str());
+ return FALSE;
+ }
f = m_FS->OpenFile(location);
#include "wx/html/forcelnk.h"
#include "wx/html/m_templ.h"
+#include "wx/html/htmlwin.h"
#include "wx/image.h"
#include "wx/gifdecod.h"
wxFSFile *str;
wxString tmp = tag.GetParam(wxT("SRC"));
wxString mn = wxEmptyString;
+
+ if ( !m_WParser->CanOpenURL(tmp) )
+ return FALSE;
str = m_WParser->GetFS()->OpenFile(tmp);
if (tag.HasParam(wxT("WIDTH")))
wxList wxHtmlWinParser::m_Modules;
-wxHtmlWinParser::wxHtmlWinParser(wxWindow *wnd) : wxHtmlParser()
+wxHtmlWinParser::wxHtmlWinParser(wxHtmlWindow *wnd) : wxHtmlParser()
{
m_tmpStrBuf = NULL;
m_tmpStrBufSize = 0;
}
}
-
wxHtmlWinParser::~wxHtmlWinParser()
{
int i, j, k, l, m;
delete[] m_tmpStrBuf;
}
-
void wxHtmlWinParser::AddModule(wxHtmlTagsModule *module)
{
m_Modules.Append(module);
}
-
-
void wxHtmlWinParser::RemoveModule(wxHtmlTagsModule *module)
{
m_Modules.DeleteObject(module);
}
-
-
void wxHtmlWinParser::SetFonts(wxString normal_face, wxString fixed_face, const int *sizes)
{
int i, j, k, l, m;
}
}
-
-
void wxHtmlWinParser::InitParser(const wxString& source)
{
wxHtmlParser::InitParser(source);
m_Container->InsertCell(new wxHtmlFontCell(CreateCurrentFont()));
}
-
-
void wxHtmlWinParser::DoneParser()
{
m_Container = NULL;
wxHtmlParser::DoneParser();
}
-
-
wxObject* wxHtmlWinParser::GetProduct()
{
wxHtmlContainerCell *top;
return top;
}
+bool wxHtmlWinParser::CanOpenURL(const wxString& url) const
+{
+ // FIXME - normalize the URL to full path before passing to
+ // OnOpeningURL!!
+ if ( m_Window )
+ return m_Window->OnOpeningURL(url);
+ else
+ return TRUE;
+}
void wxHtmlWinParser::AddText(const wxChar* txt)
{