static QueryItems make(QString key1, QString value1, QString key2, QString value2) { QueryItems q; q.append(qMakePair(key1, value1)); q.append(qMakePair(key2, value2)); return q; }
void AutoFillModel::completePage(WebPage* page) { if (!page) { return; } QUrl pageUrl = page->url(); if (!isStored(pageUrl)) { return; } QWebElementCollection inputs; QList<QWebFrame*> frames; frames.append(page->mainFrame()); while (!frames.isEmpty()) { QWebFrame* frame = frames.takeFirst(); inputs.append(frame->findAllElements("input")); frames += frame->childFrames(); } QString server = pageUrl.host(); if (server.isEmpty()) { server = pageUrl.toString(); } QSqlQuery query; query.prepare("SELECT data FROM autofill WHERE server=?"); query.addBindValue(server); query.exec(); query.next(); QByteArray data = query.value(0).toByteArray(); if (data.isEmpty()) { return; } // Why not to use encodedQueryItems = QByteArrays ? // Because we need to filter "+" characters that must be spaces // (not real "+" characters "%2B") QueryItems arguments = QUrl::fromEncoded("http://bla.com/?" + data).queryItems(); for (int i = 0; i < arguments.count(); i++) { QString key = arguments.at(i).first; QString value = arguments.at(i).second; key.replace("+", " "); value.replace("+", " "); key = QUrl::fromEncoded(key.toUtf8()).toString(); value = QUrl::fromEncoded(value.toUtf8()).toString(); for (int i = 0; i < inputs.count(); i++) { QWebElement element = inputs.at(i); if (element.attribute("type") != "text" && element.attribute("type") != "password" && element.attribute("type") != "") { continue; } if (key == element.attribute("name")) { element.setAttribute("value", value); } } } }
inline QueryItems operator+(const QPair<QString, QString> &pair, QueryItems items) { // items is already a copy items.prepend(pair); return items; }
static QueryItems make(QString key, QString value) { QueryItems q; q.append(qMakePair(key, value)); return q; }