static void testWebContextSecurityFileXHR(WebViewTest* test, gconstpointer) { GUniquePtr<char> fileURL(g_strdup_printf("file://%s/simple.html", Test::getResourcesDir(Test::WebKit2Resources).data())); test->loadURI(fileURL.get()); test->waitUntilLoadFinished(); GUniquePtr<char> jsonURL(g_strdup_printf("file://%s/simple.json", Test::getResourcesDir().data())); GUniquePtr<char> xhr(g_strdup_printf("var xhr = new XMLHttpRequest; xhr.open(\"GET\", \"%s\"); xhr.send();", jsonURL.get())); // By default file access is not allowed, this will fail with a cross-origin error. GUniqueOutPtr<GError> error; WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(!javascriptResult); g_assert_error(error.get(), WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED); // Allow file access from file URLs. webkit_settings_set_allow_file_access_from_file_urls(webkit_web_view_get_settings(test->m_webView), TRUE); test->loadURI(fileURL.get()); test->waitUntilLoadFinished(); javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(javascriptResult); g_assert(!error); // It isn't still possible to load file from an HTTP URL. test->loadURI(kServer->getURIForPath("/").data()); test->waitUntilLoadFinished(); javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(!javascriptResult); g_assert_error(error.get(), WEBKIT_JAVASCRIPT_ERROR, WEBKIT_JAVASCRIPT_ERROR_SCRIPT_FAILED); webkit_settings_set_allow_file_access_from_file_urls(webkit_web_view_get_settings(test->m_webView), FALSE); }
void ModelIO::writeModel(const QUrl & url, const QString & cloudName) { QString fileURL(url.toLocalFile()); addStatus(QObject::tr("Writing file: ") + fileURL); if (url.isValid()) { auto clouds = cloudsMap[cloudName]; writePCD(fileURL, clouds); } }
void UpgradeChecker::fetch() { QString filename("scribusversions.xml"); m_tempFile=ScPaths::getTempFileDir()+filename; m_fin=false; m_file=new QFile(m_tempFile); m_networkManager=new QNetworkAccessManager(this); if (m_networkManager!=0 && m_file!=0) { outputText( tr("No data on your computer will be sent to an external location")); qApp->processEvents(); if(m_file->open(QIODevice::ReadWrite)) { QString hostname("services.scribus.net"); QString filepath("/"+filename); QUrl fileURL(QString("http://%1%2").arg(hostname).arg(filepath)); outputText("<b>"+ tr("Attempting to get the Scribus version update file:")+"</b>"); outputText(fileURL.toString()); QNetworkRequest networkRequest(fileURL); m_networkReply = m_networkManager->get(networkRequest); connect(m_networkReply, SIGNAL(finished()), SLOT(downloadFinished())); connect(m_networkReply, SIGNAL(readyRead()), SLOT(downloadReadyRead())); int waitCount=0; while (!m_fin && waitCount<20) { sleep(1); ++waitCount; if (m_writeToConsole) std::cout << ". " << std::flush; outputText( ".", true ); qApp->processEvents(); } if (m_writeToConsole) std::cout << std::endl; if (waitCount>=20) { outputText("<b>"+ tr("Timed out when attempting to get update file.")+"</b>"); } m_file->close(); } m_file->remove(); } delete m_file; m_file=0; outputText( tr("Finished") ); m_networkReply->deleteLater(); m_networkManager->deleteLater(); }
void ZipArch::addFile( const QStringList &urls ) { KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program; if ( !m_password.isEmpty() ) *kp << "-P" << m_password; if ( ArkSettings::rarRecurseSubdirs() ) *kp << "-r"; if ( ArkSettings::rarStoreSymlinks() ) *kp << "-y"; if ( ArkSettings::forceMSDOS() ) *kp << "-k"; if ( ArkSettings::convertLF2CRLF() ) *kp << "-l"; if ( ArkSettings::replaceOnlyWithNewer() ) *kp << "-u"; *kp << m_filename; QStringList::ConstIterator iter; KURL url( urls.first() ); QDir::setCurrent( url.directory() ); for ( iter = urls.begin(); iter != urls.end(); ++iter ) { KURL fileURL( *iter ); *kp << fileURL.fileName(); } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotAddExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigAdd( false ); } }
//------------------------------------------------------------------------- NS_IMETHODIMP nsFilePicker::GetFileURL(nsIFileURL **aFileURL) { nsCOMPtr<nsILocalFile> file(do_CreateInstance("@mozilla.org/file/local;1")); NS_ENSURE_TRUE(file, NS_ERROR_FAILURE); file->InitWithNativePath(mFile); nsCOMPtr<nsIURI> uri; NS_NewFileURI(getter_AddRefs(uri), file); nsCOMPtr<nsIFileURL> fileURL(do_QueryInterface(uri)); NS_ENSURE_TRUE(fileURL, NS_ERROR_FAILURE); NS_ADDREF(*aFileURL = fileURL); return NS_OK; }
NS_IMETHODIMP nsFilePicker::GetFile(nsILocalFile **aFile) { NS_ENSURE_ARG_POINTER(aFile); *aFile = nsnull; nsCOMPtr<nsIURI> uri; nsresult rv = GetFileURL(getter_AddRefs(uri)); if (!uri) return rv; nsCOMPtr<nsIFileURL> fileURL(do_QueryInterface(uri, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCOMPtr<nsIFile> file; rv = fileURL->GetFile(getter_AddRefs(file)); NS_ENSURE_SUCCESS(rv, rv); return CallQueryInterface(file, aFile); }
nsresult nsNetscapeProfileMigratorBase::SetFile(PrefTransform* aTransform, nsIPrefBranch* aBranch) { // In this case targetPrefName is just an additional preference // that needs to be modified and not what the sourcePrefName is // going to be saved to once it is modified. nsresult rv = NS_OK; if (aTransform->prefHasValue) { nsCString fileURL(aTransform->stringValue); nsCOMPtr<nsIFile> aFile; // Start off by assuming fileURL is a URL spec and // try and get a File from it. rv = NS_GetFileFromURLSpec(fileURL, getter_AddRefs(aFile)); if (NS_FAILED(rv)) { // Okay it wasn't a URL spec so assume it is a localfile, // if this fails then just don't set anything. nsCOMPtr<nsIFile> localFile; rv = NS_NewNativeLocalFile(fileURL, false, getter_AddRefs(localFile)); if (NS_FAILED(rv)) return NS_OK; aFile = localFile; } // Now test to see if File exists and is an actual file. bool exists = false; rv = aFile->Exists(&exists); if (NS_SUCCEEDED(rv) && exists) rv = aFile->IsFile(&exists); if (NS_SUCCEEDED(rv) && exists) { // After all that let's just get the URL spec and set the pref to it. rv = NS_GetURLSpecFromFile(aFile, fileURL); if (NS_FAILED(rv)) return NS_OK; rv = aBranch->SetCharPref(aTransform->sourcePrefName, fileURL.get()); if (NS_SUCCEEDED(rv) && aTransform->targetPrefName) rv = aBranch->SetIntPref(aTransform->targetPrefName, 1); } } return rv; }
TEST(WebKit2, LoadAlternateHTMLStringWithNonDirectoryURL) { WKRetainPtr<WKContextRef> context(AdoptWK, WKContextCreate()); PlatformWebView webView(context.get()); WKPageLoaderClientV0 loaderClient; memset(&loaderClient, 0, sizeof(loaderClient)); loaderClient.base.version = 0; loaderClient.didFinishLoadForFrame = didFinishLoadForFrame; WKPageSetPageLoaderClient(webView.page(), &loaderClient.base); WKRetainPtr<WKURLRef> fileURL(AdoptWK, Util::createURLForResource("simple", "html")); WKRetainPtr<WKStringRef> alternateHTMLString(AdoptWK, WKStringCreateWithUTF8CString("<html><body><img src='icon.png'></body></html>")); // Call WKPageLoadAlternateHTMLString() with fileURL which does not point to a directory WKPageLoadAlternateHTMLString(webView.page(), alternateHTMLString.get(), fileURL.get(), fileURL.get()); // If we can finish loading the html without resulting in an invalid message being sent from the WebProcess, this test passes. Util::run(&didFinishLoad); }
bool ModelIO::readModel(const QUrl & url) { QString fileURL(url.toLocalFile()); addStatus(QObject::tr("Reading file: ") + fileURL); if (url.isValid()) { resetClouds(); pcl::PointCloud<PointType>::Ptr cloud (new pcl::PointCloud<PointType>); QString fileType = QFileInfo(fileURL).suffix(); if (fileType == QStringLiteral("pcd")) { readPCD(fileURL, cloud); } else if (fileType == QStringLiteral("csv")) { readCSV(fileURL, cloud); } if (cloud->empty()) { addStatus(QObject::tr("Couldn't read file: ") + fileURL); } else { QList<pcl::PointCloud<PointType>::Ptr> cloudsList; cloudsList.append(cloud); addClouds(INPUT_CLOUD, cloudsList); addStatus(QObject::tr("File read: ") + fileURL); return true; } } else { addStatus(QObject::tr("Invalid file url: ") + fileURL); } return false; }
void ZooArch::addFile( const QStringList &urls ) { KProcess *kp = m_currentProcess = new KProcess; kp->clearArguments(); *kp << m_archiver_program; if ( ArkSettings::replaceOnlyWithNewer() ) *kp << "-update"; else *kp << "-add"; *kp << m_filename; KURL url( urls.first() ); QDir::setCurrent( url.directory() ); QStringList::ConstIterator iter; for ( iter = urls.begin(); iter != urls.end(); ++iter ) { KURL fileURL( *iter ); *kp << fileURL.fileName(); } connect( kp, SIGNAL( receivedStdout(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( receivedStderr(KProcess*, char*, int) ), SLOT( slotReceivedOutput(KProcess*, char*, int) ) ); connect( kp, SIGNAL( processExited(KProcess*) ), SLOT( slotAddExited(KProcess*) ) ); if ( !kp->start( KProcess::NotifyOnExit, KProcess::AllOutput ) ) { KMessageBox::error( 0, i18n( "Could not start a subprocess." ) ); emit sigAdd( false ); } }
nsresult nsIndexedToHTML::DoOnStartRequest(nsIRequest* request, nsISupports *aContext, nsCString& aBuffer) { nsresult rv; nsCOMPtr<nsIChannel> channel = do_QueryInterface(request); nsCOMPtr<nsIURI> uri; rv = channel->GetURI(getter_AddRefs(uri)); if (NS_FAILED(rv)) return rv; channel->SetContentType(NS_LITERAL_CSTRING("text/html")); mParser = do_CreateInstance("@mozilla.org/dirIndexParser;1",&rv); if (NS_FAILED(rv)) return rv; rv = mParser->SetListener(this); if (NS_FAILED(rv)) return rv; rv = mParser->OnStartRequest(request, aContext); if (NS_FAILED(rv)) return rv; nsAutoCString baseUri, titleUri; rv = uri->GetAsciiSpec(baseUri); if (NS_FAILED(rv)) return rv; titleUri = baseUri; nsCString parentStr; nsCString buffer; buffer.AppendLiteral("<!DOCTYPE html>\n<html>\n<head>\n"); // XXX - should be using the 300: line from the parser. // We can't guarantee that that comes before any entry, so we'd have to // buffer, and do other painful stuff. // I'll deal with this when I make the changes to handle welcome messages // The .. stuff should also come from the lower level protocols, but that // would muck up the XUL display // - bbaetz bool isScheme = false; bool isSchemeFile = false; if (NS_SUCCEEDED(uri->SchemeIs("ftp", &isScheme)) && isScheme) { // strip out the password here, so it doesn't show in the page title // This is done by the 300: line generation in ftp, but we don't use // that - see above nsAutoCString pw; rv = uri->GetPassword(pw); if (NS_FAILED(rv)) return rv; if (!pw.IsEmpty()) { nsCOMPtr<nsIURI> newUri; rv = uri->Clone(getter_AddRefs(newUri)); if (NS_FAILED(rv)) return rv; rv = newUri->SetPassword(EmptyCString()); if (NS_FAILED(rv)) return rv; rv = newUri->GetAsciiSpec(titleUri); if (NS_FAILED(rv)) return rv; } nsAutoCString path; rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; if (!path.EqualsLiteral("//") && !path.LowerCaseEqualsLiteral("/%2f")) { rv = uri->Resolve(NS_LITERAL_CSTRING(".."),parentStr); if (NS_FAILED(rv)) return rv; } } else if (NS_SUCCEEDED(uri->SchemeIs("file", &isSchemeFile)) && isSchemeFile) { nsCOMPtr<nsIFileURL> fileUrl = do_QueryInterface(uri); nsCOMPtr<nsIFile> file; rv = fileUrl->GetFile(getter_AddRefs(file)); if (NS_FAILED(rv)) return rv; file->SetFollowLinks(true); nsAutoCString url; rv = net_GetURLSpecFromFile(file, url); if (NS_FAILED(rv)) return rv; baseUri.Assign(url); nsCOMPtr<nsIFile> parent; rv = file->GetParent(getter_AddRefs(parent)); if (parent && NS_SUCCEEDED(rv)) { net_GetURLSpecFromDir(parent, url); if (NS_FAILED(rv)) return rv; parentStr.Assign(url); } // Directory index will be always encoded in UTF-8 if this is file url buffer.AppendLiteral("<meta charset=\"UTF-8\">\n"); } else if (NS_SUCCEEDED(uri->SchemeIs("jar", &isScheme)) && isScheme) { nsAutoCString path; rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; // a top-level jar directory URL is of the form jar:foo.zip!/ // path will be of the form foo.zip!/, and its last two characters // will be "!/" //XXX this won't work correctly when the name of the directory being //XXX displayed ends with "!", but then again, jar: URIs don't deal //XXX particularly well with such directories anyway if (!StringEndsWith(path, NS_LITERAL_CSTRING("!/"))) { rv = uri->Resolve(NS_LITERAL_CSTRING(".."), parentStr); if (NS_FAILED(rv)) return rv; } } else { // default behavior for other protocols is to assume the channel's // URL references a directory ending in '/' -- fixup if necessary. nsAutoCString path; rv = uri->GetPath(path); if (NS_FAILED(rv)) return rv; if (baseUri.Last() != '/') { baseUri.Append('/'); path.Append('/'); uri->SetPath(path); } if (!path.EqualsLiteral("/")) { rv = uri->Resolve(NS_LITERAL_CSTRING(".."), parentStr); if (NS_FAILED(rv)) return rv; } } buffer.AppendLiteral("<style type=\"text/css\">\n" ":root {\n" " font-family: sans-serif;\n" "}\n" "img {\n" " border: 0;\n" "}\n" "th {\n" " text-align: start;\n" " white-space: nowrap;\n" "}\n" "th > a {\n" " color: inherit;\n" "}\n" "table[order] > thead > tr > th {\n" " cursor: pointer;\n" "}\n" "table[order] > thead > tr > th::after {\n" " display: none;\n" " width: .8em;\n" " margin-inline-end: -.8em;\n" " text-align: end;\n" "}\n" "table[order=\"asc\"] > thead > tr > th::after {\n" " content: \"\\2193\"; /* DOWNWARDS ARROW (U+2193) */\n" "}\n" "table[order=\"desc\"] > thead > tr > th::after {\n" " content: \"\\2191\"; /* UPWARDS ARROW (U+2191) */\n" "}\n" "table[order][order-by=\"0\"] > thead > tr > th:first-child > a ,\n" "table[order][order-by=\"1\"] > thead > tr > th:first-child + th > a ,\n" "table[order][order-by=\"2\"] > thead > tr > th:first-child + th + th > a {\n" " text-decoration: underline;\n" "}\n" "table[order][order-by=\"0\"] > thead > tr > th:first-child::after ,\n" "table[order][order-by=\"1\"] > thead > tr > th:first-child + th::after ,\n" "table[order][order-by=\"2\"] > thead > tr > th:first-child + th + th::after {\n" " display: inline-block;\n" "}\n" "table.remove-hidden > tbody > tr.hidden-object {\n" " display: none;\n" "}\n" "td {\n" " white-space: nowrap;\n" "}\n" "table.ellipsis {\n" " width: 100%;\n" " table-layout: fixed;\n" " border-spacing: 0;\n" "}\n" "table.ellipsis > tbody > tr > td {\n" " padding: 0;\n" " overflow: hidden;\n" " text-overflow: ellipsis;\n" "}\n" "/* name */\n" "/* name */\n" "th:first-child {\n" " padding-inline-end: 2em;\n" "}\n" "/* size */\n" "th:first-child + th {\n" " padding-inline-end: 1em;\n" "}\n" "td:first-child + td {\n" " text-align: end;\n" " padding-inline-end: 1em;\n" "}\n" "/* date */\n" "td:first-child + td + td {\n" " padding-inline-start: 1em;\n" " padding-inline-end: .5em;\n" "}\n" "/* time */\n" "td:first-child + td + td + td {\n" " padding-inline-start: .5em;\n" "}\n" ".symlink {\n" " font-style: italic;\n" "}\n" ".dir ,\n" ".symlink ,\n" ".file {\n" " margin-inline-start: 20px;\n" "}\n" ".dir::before ,\n" ".file > img {\n" " margin-inline-end: 4px;\n" " margin-inline-start: -20px;\n" " max-width: 16px;\n" " max-height: 16px;\n" " vertical-align: middle;\n" "}\n" ".dir::before {\n" " content: url(resource://gre/res/html/folder.png);\n" "}\n" "</style>\n" "<link rel=\"stylesheet\" media=\"screen, projection\" type=\"text/css\"" " href=\"chrome://global/skin/dirListing/dirListing.css\">\n" "<script type=\"application/javascript\">\n" "'use strict';\n" "var gTable, gOrderBy, gTBody, gRows, gUI_showHidden;\n" "document.addEventListener(\"DOMContentLoaded\", function() {\n" " gTable = document.getElementsByTagName(\"table\")[0];\n" " gTBody = gTable.tBodies[0];\n" " if (gTBody.rows.length < 2)\n" " return;\n" " gUI_showHidden = document.getElementById(\"UI_showHidden\");\n" " var headCells = gTable.tHead.rows[0].cells,\n" " hiddenObjects = false;\n" " function rowAction(i) {\n" " return function(event) {\n" " event.preventDefault();\n" " orderBy(i);\n" " }\n" " }\n" " for (var i = headCells.length - 1; i >= 0; i--) {\n" " var anchor = document.createElement(\"a\");\n" " anchor.href = \"\";\n" " anchor.appendChild(headCells[i].firstChild);\n" " headCells[i].appendChild(anchor);\n" " headCells[i].addEventListener(\"click\", rowAction(i), true);\n" " }\n" " if (gUI_showHidden) {\n" " gRows = Array.slice(gTBody.rows);\n" " hiddenObjects = gRows.some(row => row.className == \"hidden-object\");\n" " }\n" " gTable.setAttribute(\"order\", \"\");\n" " if (hiddenObjects) {\n" " gUI_showHidden.style.display = \"block\";\n" " updateHidden();\n" " }\n" "}, \"false\");\n" "function compareRows(rowA, rowB) {\n" " var a = rowA.cells[gOrderBy].getAttribute(\"sortable-data\") || \"\";\n" " var b = rowB.cells[gOrderBy].getAttribute(\"sortable-data\") || \"\";\n" " var intA = +a;\n" " var intB = +b;\n" " if (a == intA && b == intB) {\n" " a = intA;\n" " b = intB;\n" " } else {\n" " a = a.toLowerCase();\n" " b = b.toLowerCase();\n" " }\n" " if (a < b)\n" " return -1;\n" " if (a > b)\n" " return 1;\n" " return 0;\n" "}\n" "function orderBy(column) {\n" " if (!gRows)\n" " gRows = Array.slice(gTBody.rows);\n" " var order;\n" " if (gOrderBy == column) {\n" " order = gTable.getAttribute(\"order\") == \"asc\" ? \"desc\" : \"asc\";\n" " } else {\n" " order = \"asc\";\n" " gOrderBy = column;\n" " gTable.setAttribute(\"order-by\", column);\n" " gRows.sort(compareRows);\n" " }\n" " gTable.removeChild(gTBody);\n" " gTable.setAttribute(\"order\", order);\n" " if (order == \"asc\")\n" " for (var i = 0; i < gRows.length; i++)\n" " gTBody.appendChild(gRows[i]);\n" " else\n" " for (var i = gRows.length - 1; i >= 0; i--)\n" " gTBody.appendChild(gRows[i]);\n" " gTable.appendChild(gTBody);\n" "}\n" "function updateHidden() {\n" " gTable.className = gUI_showHidden.getElementsByTagName(\"input\")[0].checked ?\n" " \"\" :\n" " \"remove-hidden\";\n" "}\n" "</script>\n"); buffer.AppendLiteral("<link rel=\"icon\" type=\"image/png\" href=\""); nsCOMPtr<nsIURI> innerUri = NS_GetInnermostURI(uri); if (!innerUri) return NS_ERROR_UNEXPECTED; nsCOMPtr<nsIFileURL> fileURL(do_QueryInterface(innerUri)); //XXX bug 388553: can't use skinnable icons here due to security restrictions if (fileURL) { //buffer.AppendLiteral("chrome://global/skin/dirListing/local.png"); buffer.AppendLiteral("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB" "AAAAAQCAYAAAAf8%2F9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9i" "ZSBJbWFnZVJlYWR5ccllPAAAAjFJREFUeNqsU8uOElEQPffR" "3XQ3ONASdBJCSBxHos5%2B3Bg3rvkCv8PElS78gPkO%2FATj" "QoUdO2ftrJiRh6aneTb9sOpC4weMN6lcuFV16pxDIfI8x12O" "YIDhcPiu2Wx%2B%2FHF5CW1Z6Jyegt%2FTNEWSJIjjGFEUIQ" "xDrFYrWFSzXC4%2FdLvd95pRKpXKy%2BpRFZ7nwaWo1%2BsG" "nQG2260BKJfLKJVKGI1GEEJw7ateryd0v993W63WEwjgxfn5" "obGYzgCbzcaEbdsIggDj8Riu6z6iUk9SYZMSx8W0LMsM%2FS" "KK75xnJlIq80anQXdbEp0OhcPJ0eiaJnGRMEyyPDsAKKUM9c" "lkYoDo3SZJzzSdp0VSKYmfV1co%2Bz580kw5KDIM8RbRfEnU" "f1HzxtQyMAGcaGruTKczMzEIaqhKifV6jd%2BzGQQB5llunF" "%2FM52BizC2K5sYPYvZcu653tjOM9O93wnYc08gmkgg4VAxi" "xfqFUJT36AYBZGd6PJkFCZnnlBxMp38gqIgLpZB0y4Nph18l" "yWh5FFbrOSxbl3V4G%2BVB7T4ajYYxTyuLtO%2BCvWGgJE1M" "c7JNsJEhvgw%2FQV4fo%2F24nbEsX2u1d5sVyn8sJO0ZAQiI" "YnFh%2BxrfLz%2Fj29cBS%2FO14zg3i8XigW3ZkErDtmKoeM" "%2BAJGRMnXeEPGKf0nCD1ydvkDzU9Jbc6OpR7WIw6L8lQ%2B" "4pQ1%2FlPF0RGM9Ns91Wmptk0GfB4EJkt77vXYj%2F8m%2B8" "y%2FkrwABHbz2H9V68DQAAAABJRU5ErkJggg%3D%3D"); } else { //buffer.AppendLiteral("chrome://global/skin/dirListing/remote.png"); buffer.AppendLiteral("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB" "AAAAAQCAYAAAAf8%2F9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9i" "ZSBJbWFnZVJlYWR5ccllPAAAAeBJREFUeNqcU81O20AQ%2Ft" "Z2AgQSYQRqL1UPVG2hAUQkxLEStz4DrXpLpD5Drz31Cajax%" "2Bghhx6qHIJURBTxIwQRwopCBbZjHMcOTrzermPipsSt1Iw0" "3p3ZmW%2B%2B2R0TxhgOD34wjCHZlQ0iDYz9yvEfhxMTCYhE" "QDIZhkxKd2sqzX2TOD2vBQCQhpPefng1ZP2dVPlLLdpL8SEM" "cxng%2Fbs0RIHhtgs4twxOh%2BHjZxvzDx%2F3GQQiDFISiR" "BLFMPKTRMollzcWECrDVhtxtdRVsL9youPxGj%2FbdfFlUZh" "tDyYbYqWRUdai1oQRZ5oHeHl2gNM%2B01Uqio8RlH%2Bnsaz" "JzNwXcq1B%2BiXPHprlEEymeBfXs1w8XxxihfyuXqoHqpoGj" "ZM04bddgG%2F9%2B8WGj87qDdsrK9m%2BoA%2BpbhQTDh2l1" "%2Bi2weNbSHMZyjvNXmVbqh9Fj5Oz27uEoP%2BSTxANruJs9" "L%2FT6P0ewqPx5nmiAG5f6AoCtN1PbJzuRyJAyDBzzSQYvEr" "f06yYxhGXlEa8H2KVGoasjwLx3Ewk858opQWXm%2B%2Fib9E" "QrBzclLLLy89xYvlpchvtixcX6uo1y%2FzsiwHrkIsgKbp%2" "BYWFOWicuqppoNTnStHzPFCPQhBEBOyGAX4JMADFetubi4BS" "YAAAAABJRU5ErkJggg%3D%3D"); } buffer.AppendLiteral("\">\n<title>"); // Everything needs to end in a /, // otherwise we end up linking to file:///foo/dirfile if (!mTextToSubURI) { mTextToSubURI = do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; } nsXPIDLCString encoding; rv = uri->GetOriginCharset(encoding); if (NS_FAILED(rv)) return rv; if (encoding.IsEmpty()) { encoding.AssignLiteral("UTF-8"); } nsXPIDLString unEscapeSpec; rv = mTextToSubURI->UnEscapeAndConvert(encoding, titleUri.get(), getter_Copies(unEscapeSpec)); // unescape may fail because // 1. file URL may be encoded in platform charset for backward compatibility // 2. query part may not be encoded in UTF-8 (see bug 261929) // so try the platform's default if this is file url if (NS_FAILED(rv) && isSchemeFile) { nsCOMPtr<nsIPlatformCharset> platformCharset(do_GetService(NS_PLATFORMCHARSET_CONTRACTID, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsAutoCString charset; rv = platformCharset->GetCharset(kPlatformCharsetSel_FileName, charset); NS_ENSURE_SUCCESS(rv, rv); rv = mTextToSubURI->UnEscapeAndConvert(charset.get(), titleUri.get(), getter_Copies(unEscapeSpec)); } if (NS_FAILED(rv)) return rv; nsXPIDLString htmlEscSpec; htmlEscSpec.Adopt(nsEscapeHTML2(unEscapeSpec.get(), unEscapeSpec.Length())); nsXPIDLString title; const char16_t* formatTitle[] = { htmlEscSpec.get() }; rv = mBundle->FormatStringFromName(MOZ_UTF16("DirTitle"), formatTitle, sizeof(formatTitle)/sizeof(char16_t*), getter_Copies(title)); if (NS_FAILED(rv)) return rv; // we want to convert string bundle to NCR // to ensure they're shown in any charsets AppendNonAsciiToNCR(title, buffer); buffer.AppendLiteral("</title>\n"); // If there is a quote character in the baseUri, then // lets not add a base URL. The reason for this is that // if we stick baseUri containing a quote into a quoted // string, the quote character will prematurely close // the base href string. This is a fall-back check; // that's why it is OK to not use a base rather than // trying to play nice and escaping the quotes. See bug // 358128. if (!baseUri.Contains('"')) { // Great, the baseUri does not contain a char that // will prematurely close the string. Go ahead an // add a base href, but only do so if we're not // dealing with a resource URI. nsCOMPtr<nsIURI> originalUri; rv = channel->GetOriginalURI(getter_AddRefs(originalUri)); bool wasResource = false; if (NS_FAILED(rv) || NS_FAILED(originalUri->SchemeIs("resource", &wasResource)) || !wasResource) { buffer.AppendLiteral("<base href=\""); nsAdoptingCString htmlEscapedUri(nsEscapeHTML(baseUri.get())); buffer.Append(htmlEscapedUri); buffer.AppendLiteral("\" />\n"); } } else { NS_ERROR("broken protocol handler didn't escape double-quote."); } nsCString direction(NS_LITERAL_CSTRING("ltr")); nsCOMPtr<nsIXULChromeRegistry> reg = mozilla::services::GetXULChromeRegistryService(); if (reg) { bool isRTL = false; reg->IsLocaleRTL(NS_LITERAL_CSTRING("global"), &isRTL); if (isRTL) { direction.AssignLiteral("rtl"); } } buffer.AppendLiteral("</head>\n<body dir=\""); buffer.Append(direction); buffer.AppendLiteral("\">\n<h1>"); const char16_t* formatHeading[] = { htmlEscSpec.get() }; rv = mBundle->FormatStringFromName(MOZ_UTF16("DirTitle"), formatHeading, sizeof(formatHeading)/sizeof(char16_t*), getter_Copies(title)); if (NS_FAILED(rv)) return rv; AppendNonAsciiToNCR(title, buffer); buffer.AppendLiteral("</h1>\n"); if (!parentStr.IsEmpty()) { nsXPIDLString parentText; rv = mBundle->GetStringFromName(MOZ_UTF16("DirGoUp"), getter_Copies(parentText)); if (NS_FAILED(rv)) return rv; buffer.AppendLiteral("<p id=\"UI_goUp\"><a class=\"up\" href=\""); nsAdoptingCString htmlParentStr(nsEscapeHTML(parentStr.get())); buffer.Append(htmlParentStr); buffer.AppendLiteral("\">"); AppendNonAsciiToNCR(parentText, buffer); buffer.AppendLiteral("</a></p>\n"); } if (isSchemeFile) { nsXPIDLString showHiddenText; rv = mBundle->GetStringFromName(MOZ_UTF16("ShowHidden"), getter_Copies(showHiddenText)); if (NS_FAILED(rv)) return rv; buffer.AppendLiteral("<p id=\"UI_showHidden\" style=\"display:none\"><label><input type=\"checkbox\" checked onchange=\"updateHidden()\">"); AppendNonAsciiToNCR(showHiddenText, buffer); buffer.AppendLiteral("</label></p>\n"); } buffer.AppendLiteral("<table>\n"); nsXPIDLString columnText; buffer.AppendLiteral(" <thead>\n" " <tr>\n" " <th>"); rv = mBundle->GetStringFromName(MOZ_UTF16("DirColName"), getter_Copies(columnText)); if (NS_FAILED(rv)) return rv; AppendNonAsciiToNCR(columnText, buffer); buffer.AppendLiteral("</th>\n" " <th>"); rv = mBundle->GetStringFromName(MOZ_UTF16("DirColSize"), getter_Copies(columnText)); if (NS_FAILED(rv)) return rv; AppendNonAsciiToNCR(columnText, buffer); buffer.AppendLiteral("</th>\n" " <th colspan=\"2\">"); rv = mBundle->GetStringFromName(MOZ_UTF16("DirColMTime"), getter_Copies(columnText)); if (NS_FAILED(rv)) return rv; AppendNonAsciiToNCR(columnText, buffer); buffer.AppendLiteral("</th>\n" " </tr>\n" " </thead>\n"); buffer.AppendLiteral(" <tbody>\n"); aBuffer = buffer; return rv; }
static void testWebContextSecurityFileXHR(WebViewTest* test, gconstpointer) { GUniquePtr<char> fileURL(g_strdup_printf("file://%s/simple.html", Test::getResourcesDir(Test::WebKit2Resources).data())); test->loadURI(fileURL.get()); test->waitUntilLoadFinished(); GUniquePtr<char> jsonURL(g_strdup_printf("file://%s/simple.json", Test::getResourcesDir().data())); GUniquePtr<char> xhr(g_strdup_printf("var xhr = new XMLHttpRequest; xhr.open(\"GET\", \"%s\"); xhr.send();", jsonURL.get())); WebKitJavascriptResult* consoleMessage = nullptr; webkit_user_content_manager_register_script_message_handler(test->m_userContentManager.get(), "console"); g_signal_connect(test->m_userContentManager.get(), "script-message-received::console", G_CALLBACK(consoleMessageReceivedCallback), &consoleMessage); // By default file access is not allowed, this will show a console message with a cross-origin error. GUniqueOutPtr<GError> error; WebKitJavascriptResult* javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(javascriptResult); g_assert(!error); g_assert(consoleMessage); GUniquePtr<char> messageString(WebViewTest::javascriptResultToCString(consoleMessage)); GRefPtr<GVariant> variant = g_variant_parse(G_VARIANT_TYPE("(uusus)"), messageString.get(), nullptr, nullptr, nullptr); g_assert(variant.get()); unsigned level; const char* messageText; g_variant_get(variant.get(), "(uu&su&s)", nullptr, &level, &messageText, nullptr, nullptr); g_assert_cmpuint(level, ==, 3); // Console error message. GUniquePtr<char> expectedErrorMessage(g_strdup_printf("XMLHttpRequest cannot load %s. Cross origin requests are only supported for HTTP.", jsonURL.get())); g_assert_cmpstr(messageText, ==, expectedErrorMessage.get()); webkit_javascript_result_unref(consoleMessage); consoleMessage = nullptr; level = 0; messageText = nullptr; variant = nullptr; // Allow file access from file URLs. webkit_settings_set_allow_file_access_from_file_urls(webkit_web_view_get_settings(test->m_webView), TRUE); test->loadURI(fileURL.get()); test->waitUntilLoadFinished(); javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(javascriptResult); g_assert(!error); // It isn't still possible to load file from an HTTP URL. test->loadURI(kServer->getURIForPath("/").data()); test->waitUntilLoadFinished(); javascriptResult = test->runJavaScriptAndWaitUntilFinished(xhr.get(), &error.outPtr()); g_assert(javascriptResult); g_assert(!error); g_assert(consoleMessage); variant = g_variant_parse(G_VARIANT_TYPE("(uusus)"), messageString.get(), nullptr, nullptr, nullptr); g_assert(variant.get()); g_variant_get(variant.get(), "(uu&su&s)", nullptr, &level, &messageText, nullptr, nullptr); g_assert_cmpuint(level, ==, 3); // Console error message. g_assert_cmpstr(messageText, ==, expectedErrorMessage.get()); webkit_javascript_result_unref(consoleMessage); g_signal_handlers_disconnect_matched(test->m_userContentManager.get(), G_SIGNAL_MATCH_DATA, 0, 0, nullptr, nullptr, &consoleMessage); webkit_user_content_manager_unregister_script_message_handler(test->m_userContentManager.get(), "console"); webkit_settings_set_allow_file_access_from_file_urls(webkit_web_view_get_settings(test->m_webView), FALSE); }
void DownloadFileDialog::OnOK(wxCommandEvent& event){ wxString filename = urlArray[lbPhysicsChoices->GetSelection()]; wxURL fileURL(_("http://www.fallingsandgame.com") + filename); //fileURL.SetProxy("207.32.43.252:8080"); wxInputStream* is = fileURL.GetInputStream(); if (is == NULL){ wxString str = _("Error loading from the file from the internet. "); str += _("http://www.fallingsandgame.com") + filename; wxMessageDialog* msg = new wxMessageDialog(this, str); msg->ShowModal(); return; } wxTextInputStream* tis = new wxTextInputStream(*(is)); wxTextFile of(_("downloadedPhysics.txt")); if (of.Exists()){ of.Open(); while(of.GetLineCount() > 0) of.RemoveLine(0); } else{ of.Create(); } int state = 0; int count = 0; while(!is->Eof() && state < 2 && count < 10000){ wxString line = tis->ReadLine(); if (line.Contains(_("<pre>"))){ state = 1; continue; } if (line.Contains(_("</pre>"))) state = 2; if (state == 1){ line.Replace(_("&"), _("&")); line.Replace(_("""), _("\"")); of.AddLine(line); } ++count; } if (state != 2){ wxMessageDialog* msg = new wxMessageDialog(this, _("Couldn't find the physics file on the Wiki page.")); msg->ShowModal(); of.Write(); of.Close(); this->Destroy(); return; } of.Write(); of.Close(); this->physFilename = _("downloadedPhysics.txt"); physicsFilename = this->physFilename; g_mainFrame->loadPhysics(this->physFilename); this->Destroy(); }