]> git.saurik.com Git - wxWidgets.git/commitdiff
Rework IE virtual file system support to use new syntax. Remove now unused code for...
authorSteve Lamerton <steve.lamerton@gmail.com>
Wed, 3 Aug 2011 18:31:48 +0000 (18:31 +0000)
committerSteve Lamerton <steve.lamerton@gmail.com>
Wed, 3 Aug 2011 18:31:48 +0000 (18:31 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/SOC2011_WEBVIEW@68507 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/webview_ie.h
include/wx/webview.h
include/wx/webviewfilehandler.h
src/common/webviewfilehandler.cpp
src/msw/webview_ie.cpp

index f327502df4f0b6b944f4d3db5989b8c24236306b..aec06fc0d14df849c5bfc2e19865bceca5c76421 100644 (file)
@@ -160,7 +160,7 @@ private:
     wxDECLARE_DYNAMIC_CLASS(wxWebViewIE);
 };
 
-class VirtualProtocol : public IInternetProtocol, public IInternetProtocolInfo
+class VirtualProtocol : public IInternetProtocol
 {
 protected:
     ULONG m_refCount;
@@ -204,26 +204,6 @@ public:
                                    ULARGE_INTEGER* WXUNUSED(plibNewPosition)) 
                                    { return E_FAIL; }
     HRESULT STDMETHODCALLTYPE UnlockRequest() { return S_OK; }
-
-    //IInternetProtocolInfo
-    HRESULT STDMETHODCALLTYPE CombineUrl(LPCWSTR pwzBaseUrl, 
-                                         LPCWSTR pwzRelativeUrl, 
-                                         DWORD dwCombineFlags, 
-                                         LPWSTR pwzResult, DWORD cchResult,
-                                         DWORD *pcchResult, DWORD dwReserved);
-    HRESULT STDMETHODCALLTYPE CompareUrl(LPCWSTR WXUNUSED(pwzUrl1), 
-                                         LPCWSTR WXUNUSED(pwzUrl2),
-                                         DWORD WXUNUSED(dwCompareFlags))
-                                         { return INET_E_DEFAULT_ACTION; }
-    HRESULT STDMETHODCALLTYPE ParseUrl(LPCWSTR pwzUrl, PARSEACTION ParseAction,
-                                       DWORD dwParseFlags, LPWSTR pwzResult,
-                                       DWORD cchResult, DWORD *pcchResult,
-                                       DWORD dwReserved);
-    HRESULT STDMETHODCALLTYPE QueryInfo(LPCWSTR pwzUrl, 
-                                        QUERYOPTION OueryOption, 
-                                        DWORD dwQueryFlags, LPVOID pBuffer,
-                                        DWORD cbBuffer, DWORD *pcbBuf, 
-                                        DWORD dwReserved);
 };
 
 class ClassFactory : public IClassFactory
index 0bc9f8547e4992ac60ecf873c4ab0a784ba062c3..11958d379c4173ef9ce117a09f2b3929da0f6019 100644 (file)
@@ -106,7 +106,6 @@ class WXDLLIMPEXP_WEB wxWebHandler
 public:
     virtual wxString GetName() const = 0;
     virtual wxFSFile* GetFile(const wxString &uri) = 0;
-    virtual wxString CombineURIs(const wxString &baseuri, const wxString &newuri) = 0;
 };
 
 extern WXDLLIMPEXP_DATA_WEB(const char) wxWebViewNameStr[];
index a3ea4367e1849d33d1f3516c1c10ee08ef30d67c..787a0c42403f8ed43a3582ab5ac6827325eae63a 100644 (file)
@@ -20,7 +20,7 @@ class wxFileSystem;
 #include "wx/webview.h"
 
 //Loads from uris such as file:///C:/example/example.html or archives such as
-//file:///C:/example/example.zip?protocol=zip;path=example.html 
+//file:///C:/example/example.zip;protocol=zip/example.html 
 
 class WXDLLIMPEXP_WEB wxWebFileHandler : public wxWebHandler
 {
@@ -28,7 +28,6 @@ public:
     wxWebFileHandler();
     virtual wxString GetName() const { return m_name; }
     virtual wxFSFile* GetFile(const wxString &uri);
-    virtual wxString CombineURIs(const wxString &baseuri, const wxString &newuri);
 private:
     wxString m_name;
     wxFileSystem* m_fileSystem;
index 6b542ffc219ff54f561b7aee930e845ae8cf2baf..eab45afea0932e67a04d661637aab90bd7bc149c 100644 (file)
 
 #include "wx/webviewfilehandler.h"
 #include "wx/filesys.h"
-#include "wx/tokenzr.h"
-#include "wx/hashmap.h"
-
-typedef wxStringToStringHashMap QueryMap;
-
-QueryMap QueryStringToQueryMap(wxString query)
-{
-    QueryMap map;
-
-    if(query.substr(0, 1) == "?")
-        query = query.substr(1);
-
-    wxStringTokenizer tokenizer(query, ";");
-    while(tokenizer.HasMoreTokens())
-    {
-        wxString token = tokenizer.GetNextToken();
-        size_t pos = token.find('=');
-        map[token.substr(0, pos)] = token.substr(pos + 1);
-    }
-    return map;
-}
-
-wxString QueryMapToQueryString(QueryMap map)
-{
-    wxString query = "?";
-
-    QueryMap::iterator it;
-    for(it = map.begin(); it != map.end(); ++it)
-    {
-        query = query + it->first + "=" + it->second + ";";
-    }
-
-    //Chop the end ; off
-    return query.substr(0, query.length() - 1);
-}
 
 //Taken from wx/filesys.cpp
 static wxString EscapeFileNameCharsInURL(const char *in)
@@ -87,12 +52,22 @@ wxWebFileHandler::wxWebFileHandler()
 
 wxFSFile* wxWebFileHandler::GetFile(const wxString &uri)
 {
-    size_t pos = uri.find('?');
-    //There is no query string so we can load the file directly
-    if(pos == wxString::npos)
+    //We iterate through the string to see if there is a protocol description
+    int start = -1;
+    for(int i = 0; i < uri.length(); i++)
+    {
+        if(uri[i] == ';' && uri.substr(i, 10) == ";protocol=")
+        {
+            start = i;
+            break;
+        }
+    }
+
+    //We do not have a protocol string so we just pass the path withouth the 
+    if(start == -1)
     {
         size_t doubleslash = uri.find("//");
-        //The path is incorrectly formed without // after the first protocol
+        //The path is incorrectly formed without // after the scheme
         if(doubleslash == wxString::npos)
             return NULL;
 
@@ -100,97 +75,30 @@ wxFSFile* wxWebFileHandler::GetFile(const wxString &uri)
                           EscapeFileNameCharsInURL(uri.substr(doubleslash + 2));
         return m_fileSystem->OpenFile(fspath);
     }
-    //Otherwise we have a query string of some kind that we need to extract
-    else{
-        wxString lefturi = uri.substr(0, pos);
-
-        //We extract the query parts that we need
-        QueryMap map = QueryStringToQueryMap(uri.substr(pos));
-        wxString protocol = map["protocol"], path = map["path"];
-
-        //We now have the path and the protocol and so can format a correct uri
-        //to pass to wxFileSystem to get a wxFSFile
+    //Otherwise we need to extract the protocol
+    else
+    {
+        int end = uri.find('/', start);
+        //For the path to be valid there must to a path after the protocol
+        if(end == wxString::npos)
+        {
+            return NULL;
+        }
+        wxString mainpath = uri.substr(0, start);
+        wxString archivepath = uri.substr(end);
+        wxString protstring = uri.substr(start, end - start);
+        wxString protocol = protstring.substr(10);
+        //We can now construct the correct path
         size_t doubleslash = uri.find("//");
         //The path is incorrectly formed without // after the first protocol
         if(doubleslash == wxString::npos)
             return NULL;
 
         wxString fspath = "file:" + 
-                          EscapeFileNameCharsInURL(lefturi.substr(doubleslash + 2))
-                          + "#" + protocol +":" + path;
+                          EscapeFileNameCharsInURL(mainpath.substr(doubleslash + 2))
+                          + "#" + protocol +":" + archivepath;
         return m_fileSystem->OpenFile(fspath);
     }
 }
 
-wxString wxWebFileHandler::CombineURIs(const wxString &baseuri, 
-                                       const wxString &newuri)
-{
-    //If there is a colon in the path then we just return it
-    if(newuri.find(':') != wxString::npos)
-    {
-        return newuri;
-    }
-    //We have an absolute path and no query string
-    else if(newuri.substr(0, 1) == "/" && baseuri.find('?') == wxString::npos)
-    {
-        //By finding the next / after file:// we get to the end of the 
-        //(optional) hostname
-        size_t pos = baseuri.find('/', 7);
-        //So we return up to the end of the hostname, plus the newuri
-        return baseuri.substr(0, pos) + newuri;
-    }
-    //We have an absolute path and a query string
-    else if(newuri.substr(0, 1) == "/" && baseuri.find('?') != wxString::npos)
-    {
-        QueryMap map = QueryStringToQueryMap(baseuri.substr(baseuri.find('?')));
-        //As the path is absolue simply replace the old path with the new one
-        map["path"] = newuri;
-        wxString newquery = QueryMapToQueryString(map);
-        return baseuri.substr(0, baseuri.find('?')) + newquery;
-    }
-    //We have a relative path and no query string
-    else if(baseuri.find('?') == wxString::npos)
-    {
-        //By finding the next / after file:// we get to the end of the 
-        //(optional) hostname
-        size_t pos = baseuri.find('/', 7);
-        wxString path = baseuri.substr(pos);
-        //Then we remove the last filename
-        path = path.BeforeLast('/') + '/';
-
-        //If we have a colon in the path (i.e. we are on windows) we need to 
-        //handle it specially
-        if(path.find(':') != wxString::npos)
-        {
-            wxFileName fn(path.AfterFirst('/').AfterFirst('/') + newuri);
-            fn.Normalize(wxPATH_NORM_DOTS, "", wxPATH_UNIX);
-            return baseuri.substr(0, pos) + '/' + 
-                   path.AfterFirst('/').BeforeFirst('/') + '/' + 
-                   fn.GetFullPath(wxPATH_UNIX);
-        }
-        else
-        {
-            //We can now use wxFileName to perform the normalisation
-            wxFileName fn(path + newuri);
-            fn.Normalize(wxPATH_NORM_DOTS, "", wxPATH_UNIX);
-            return baseuri.substr(0, pos) + fn.GetFullPath(wxPATH_UNIX);
-        }
-    }
-    //We have a relative path and a query string
-    else
-    {
-        QueryMap map = QueryStringToQueryMap(baseuri.substr(baseuri.find('?')));
-        wxString path = map["path"];
-        //Then we remove the last filename
-        path = path.BeforeLast('/') + '/';
-
-        //We can now use wxFileName to perform the normalisation
-        wxFileName fn(path + newuri);
-        fn.Normalize(wxPATH_NORM_DOTS, "", wxPATH_UNIX);
-        map["path"] = fn.GetFullPath(wxPATH_UNIX);
-
-        wxString newquery = QueryMapToQueryString(map);
-        return baseuri.substr(0, baseuri.find('?')) + newquery;
-    }
-}
 #endif // wxUSE_WEB
index 276e35296482534da63660b96b7912540f76353b..bb3add6495d9758ae4d1d93190455bd4672a856a 100644 (file)
@@ -985,12 +985,6 @@ HRESULT VirtualProtocol::QueryInterface(REFIID riid, void **ppvObject)
         AddRef();
         return S_OK;
     }
-    else if(riid == IID_IInternetProtocolInfo)
-    {
-        *ppvObject = (IInternetProtocolInfo*)this;
-        AddRef();
-        return S_OK;
-    }
     else
     {
         *ppvObject = NULL;
@@ -1078,50 +1072,6 @@ HRESULT VirtualProtocol::Read(void *pv, ULONG cb, ULONG *pcbRead)
     }
 }
 
-HRESULT VirtualProtocol::CombineUrl(LPCWSTR pwzBaseUrl, LPCWSTR pwzRelativeUrl,
-                                    DWORD WXUNUSED(dwCombineFlags), 
-                                    LPWSTR pwzResult, 
-                                    DWORD cchResult, DWORD *pcchResult, 
-                                    DWORD WXUNUSED(dwReserved))
-{
-
-    wxString newuri = m_handler->CombineURIs(pwzBaseUrl, pwzRelativeUrl);
-    //Check the buffer we are given can hold the new url
-    if(wxStrlen(newuri) > cchResult)
-        return S_FALSE;
-
-    wxStrcpy(pwzResult, newuri.c_str());
-    *pcchResult = wxStrlen(newuri);
-    return S_OK;
-}
-
-HRESULT VirtualProtocol::ParseUrl(LPCWSTR pwzUrl, 
-                                  PARSEACTION WXUNUSED(ParseAction),
-                                  DWORD WXUNUSED(dwParseFlags), 
-                                  LPWSTR pwzResult,
-                                  DWORD cchResult, DWORD *pcchResult,
-                                  DWORD WXUNUSED(dwReserved))
-{
-    //Check the buffer we are given can hold the new url
-    if(wxStrlen(pwzUrl) > cchResult)
-        return S_FALSE;
-
-    wxStrcpy(pwzResult, pwzUrl);
-    *pcchResult = wxStrlen(pwzResult);
-    return S_OK;
-}
-    
-HRESULT VirtualProtocol::QueryInfo(LPCWSTR WXUNUSED(pwzUrl), 
-                                   QUERYOPTION WXUNUSED(OueryOption), 
-                                   DWORD WXUNUSED(dwQueryFlags), 
-                                   LPVOID WXUNUSED(pBuffer),
-                                   DWORD WXUNUSED(cbBuffer), 
-                                   DWORD* WXUNUSED(pcbBuf),  
-                                   DWORD WXUNUSED(dwReserved))
-{
-    return INET_E_DEFAULT_ACTION;
-}
-
 HRESULT ClassFactory::CreateInstance(IUnknown* pUnkOuter, REFIID riid,
                                      void ** ppvObject)
 {