241028 - should be able to create smart keywords to forms that use the http POST method.

This commit is contained in:
ben%bengoodger.com 2004-04-20 09:45:12 +00:00
Родитель f15e12c3c4
Коммит 2dc711d567
12 изменённых файлов: 305 добавлений и 66 удалений

Просмотреть файл

@ -244,7 +244,7 @@ function Startup()
if (uriToLoad && !gIsLoadingBlank) {
if ("arguments" in window && window.arguments.length >= 3)
loadURI(uriToLoad, window.arguments[2]);
loadURI(uriToLoad, window.arguments[2], null);
else
loadOneOrMoreURIs(uriToLoad);
}
@ -775,12 +775,12 @@ function loadOneOrMoreURIs(aURIString)
{
if (aURIString.indexOf("|") != -1) {
var urls = aURIString.split("|");
loadURI(urls[0]);
loadURI(urls[0], null, null);
for (var i = 1; i < urls.length; ++i)
gBrowser.addTab(urls[i]);
}
else
loadURI(aURIString);
loadURI(aURIString, null, null);
}
function constructGoMenuItem(goMenu, beforeItem, url, title)
@ -1023,15 +1023,17 @@ function BrowserCloseWindow()
closeWindow(true);
}
function loadURI(uri, referrer)
function loadURI(uri, referrer, postData)
{
try {
getWebNavigation().loadURI(uri, nsIWebNavigation.LOAD_FLAGS_NONE, referrer, null, null);
if (postData === undefined)
postData = null;
getWebNavigation().loadURI(uri, nsIWebNavigation.LOAD_FLAGS_NONE, referrer, postData, null);
} catch (e) {
}
}
function BrowserLoadURL(aTriggeringEvent)
function BrowserLoadURL(aTriggeringEvent, aPostData)
{
var url = gURLBar.value;
if (url.match(/^view-source:/)) {
@ -1041,7 +1043,7 @@ function BrowserLoadURL(aTriggeringEvent)
aTriggeringEvent && 'altKey' in aTriggeringEvent &&
aTriggeringEvent.altKey) {
_content.focus();
var t = gBrowser.addTab(url); // open link in new tab
var t = gBrowser.addTab(url, aPostData); // open link in new tab
gBrowser.selectedTab = t;
gURLBar.value = url;
event.preventDefault();
@ -1050,42 +1052,82 @@ function BrowserLoadURL(aTriggeringEvent)
event.stopPropagation();
}
else
loadURI(url);
loadURI(url, null, aPostData);
_content.focus();
}
}
function getShortcutOrURI(url)
function getShortcutOrURI(aURL, aPostDataRef)
{
// rjc: added support for URL shortcuts (3/30/1999)
try {
var shortcutURL = BMSVC.resolveKeyword(url);
var shortcutURL = BMSVC.resolveKeyword(aURL, aPostDataRef);
if (!shortcutURL) {
// rjc: add support for string substitution with shortcuts (4/4/2000)
// (see bug # 29871 for details)
var aOffset = url.indexOf(" ");
var aOffset = aURL.indexOf(" ");
if (aOffset > 0) {
var cmd = url.substr(0, aOffset);
var text = url.substr(aOffset+1);
shortcutURL = BMSVC.resolveKeyword(cmd);
var cmd = aURL.substr(0, aOffset);
var text = aURL.substr(aOffset+1);
shortcutURL = BMSVC.resolveKeyword(cmd, aPostDataRef);
if (shortcutURL && text) {
aOffset = shortcutURL.indexOf("%s");
if (aOffset >= 0)
shortcutURL = shortcutURL.substr(0, aOffset) + text + shortcutURL.substr(aOffset+2);
if (aPostDataRef && aPostDataRef.value) {
// XXXben - currently we only support "application/x-www-form-urlencoded"
// enctypes.
aPostDataRef.value = unescape(aPostDataRef.value);
if (aPostDataRef.value.match(/%s/))
aPostDataRef.value = getPostDataStream(aPostDataRef.value, text,
"application/x-www-form-urlencoded");
else {
shortcutURL = null;
aPostDataRef.value = null;
}
}
else
shortcutURL = null;
shortcutURL = shortcutURL.match(/%s/) ? shortcutURL.replace(/%s/, text) : null;
}
}
}
if (shortcutURL)
url = shortcutURL;
aURL = shortcutURL;
} catch (ex) {
}
return url;
return aURL;
}
#if 0
// XXXben - this is only useful if we ever support text/plain encoded forms in
// smart keywords.
function normalizePostData(aStringData)
{
var parts = aStringData.split("&");
var result = "";
for (var i = 0; i < parts.length; ++i) {
var part = unescape(parts[i]);
if (part != "")
result += part + "\r\n";
}
return result;
}
#endif
function getPostDataStream(aStringData, aKeyword, aType)
{
var dataStream = Components.classes["@mozilla.org/io/string-input-stream;1"]
.createInstance(Components.interfaces.nsIStringInputStream);
aStringData = aStringData.replace(/%s/, aKeyword);
dataStream.setData(aStringData, aStringData.length);
var mimeStream = Components.classes["@mozilla.org/network/mime-input-stream;1"]
.createInstance(Components.interfaces.nsIMIMEInputStream);
mimeStream.addHeader("Content-Type", aType);
mimeStream.addContentLength = true;
mimeStream.setData(dataStream);
return mimeStream.QueryInterface(Components.interfaces.nsIInputStream);
}
function readFromClipboard()
{
var url;
@ -1293,7 +1335,8 @@ function handleURLBarRevert()
function handleURLBarCommand(aTriggeringEvent)
{
canonizeUrl(aTriggeringEvent);
var postData = { };
canonizeUrl(aTriggeringEvent, postData);
try {
addToUrlbarHistory();
@ -1302,10 +1345,10 @@ function handleURLBarCommand(aTriggeringEvent)
// but don't let that interfere with the loading of the url.
}
BrowserLoadURL(aTriggeringEvent);
BrowserLoadURL(aTriggeringEvent, postData.value);
}
function canonizeUrl(aTriggeringEvent)
function canonizeUrl(aTriggeringEvent, aPostDataRef)
{
if (!gURLBar)
return;
@ -1329,7 +1372,7 @@ function canonizeUrl(aTriggeringEvent)
url = "http://www." + url + ".net/";
}
gURLBar.value = getShortcutOrURI(url);
gURLBar.value = getShortcutOrURI(url, aPostDataRef);
}
function UpdatePageProxyState()
@ -1458,7 +1501,7 @@ function SearchBarPopupCommand(aEvent)
if (aEvent.target.id == "miAddEngines") {
var regionBundle = document.getElementById("bundle_browser_region");
loadURI(regionBundle.getString("searchEnginesURL"));
loadURI(regionBundle.getString("searchEnginesURL"), null, null);
return;
}
@ -1746,7 +1789,7 @@ var goButtonObserver = {
var xferData = aXferData.data.split("\n");
var uri = xferData[0] ? xferData[0] : xferData[1];
if (uri)
loadURI(uri);
loadURI(uri, null, null);
},
getSupportedFlavours: function ()
{
@ -1829,7 +1872,7 @@ function OpenSearch(tabName, searchStr, newTabFlag)
//If it is a url go to URL. A Url is "://" or "." as commented above
//Otherwise search on entry
if (forceAsURL) {
BrowserLoadURL()
BrowserLoadURL(null, null)
} else {
if (searchStr) {
var escapedSearchStr = encodeURIComponent(searchStr);
@ -1854,7 +1897,7 @@ function OpenSearch(tabName, searchStr, newTabFlag)
}
if (!newTabFlag) {
loadURI(defaultSearchURL);
loadURI(defaultSearchURL, null, null);
}
else {
var newTab = getBrowser().addTab(defaultSearchURL);
@ -3170,7 +3213,7 @@ nsContextMenu.prototype = {
},
// Open clicked-in frame in the same window
showOnlyThisFrame : function () {
window.loadURI(this.target.ownerDocument.location.href);
window.loadURI(this.target.ownerDocument.location.href, null, null);
},
// View Partial Source
viewPartialSource : function ( context ) {
@ -3497,7 +3540,19 @@ nsContextMenu.prototype = {
if (!form)
return false;
var method = form.method.toUpperCase();
return (method == "GET" || method == "")
// These are the following types of forms we can create keywords for:
//
// method encoding type can create keyword
// GET * YES
// * YES
// POST YES
// POST application/x-www-form-urlencoded YES
// POST text/plain NO (a little tricky to do)
// POST multipart/form-data NO
return (method == "GET" || method == "") ||
(form.enctype == "application/x-www-form-urlencoded") ||
(form.enctype == "");
},
// Determines whether or not the separator with the specified ID should be
@ -3603,11 +3658,12 @@ function asyncOpenWebPanel(event)
{
if (!linkNode.href) return true;
if (linkNode.getAttribute("onclick")) return true;
var url = getShortcutOrURI(linkNode.href);
var postData = { };
var url = getShortcutOrURI(linkNode.href, postData);
if (!url)
return true;
markLinkVisited(linkNode.href, linkNode);
loadURI(url);
loadURI(url, null, postData.value);
event.preventDefault();
return false;
}
@ -3709,7 +3765,8 @@ function middleMousePaste(event)
var url = readFromClipboard();
if (!url)
return false;
url = getShortcutOrURI(url);
var postData = { };
url = getShortcutOrURI(url, postData);
if (!url)
return false;
@ -3723,7 +3780,7 @@ function middleMousePaste(event)
if (!openNewTab) {
// If ctrl wasn't down, then just load the url in the current win/tab.
loadURI(url);
loadURI(url, null, postData.value);
} else {
const nsIURIFixup = Components.interfaces.nsIURIFixup;
if (!gURIFixup)
@ -3732,7 +3789,7 @@ function middleMousePaste(event)
url = gURIFixup.createFixupURI(url, nsIURIFixup.FIXUP_FLAGS_MAKE_ALTERNATE_URI).spec;
openNewTabWith(url, null, event, true);
openNewTabWith(url, null, event, true, postData.value);
}
event.preventBubble();
@ -3797,7 +3854,9 @@ var contentAreaDNDObserver = {
switch (document.firstChild.getAttribute('windowtype')) {
case "navigator:browser":
loadURI(getShortcutOrURI(url));
var postData = { };
var uri = getShortcutOrURI(url, postData);
loadURI(uri, null, postData.value);
break;
case "navigator:view-source":
viewSource(url);
@ -4455,18 +4514,39 @@ function AddKeywordForSearchField()
var uri = Components.classes["@mozilla.org/network/standard-url;1"]
.getService(Components.interfaces.nsIURI);
uri.spec = node.ownerDocument.URL;
var keywordURL = ioService.newURI(node.form.action, node.ownerDocument.characterSet, uri);
var spec = keywordURL.spec;
spec += "?" + escape(node.name) + "=%s";
for (var i = 0; i < node.form.elements.length; ++i) {
var e = node.form.elements[i];
if (e.type.toLowerCase() == "text" || e.type.toLowerCase() == "hidden")
spec += "&" + escape(e.name) + "=" + escape(e.value);
var postData = "";
if (node.form.method.toUpperCase() == "POST" &&
(node.form.enctype == "application/x-www-form-urlencoded" || node.form.enctype == "")) {
for (var i = 0; i < node.form.elements.length; ++i) {
var e = node.form.elements[i];
if (e.type.toLowerCase() == "text" || e.type.toLowerCase() == "hidden" ||
e.localName.toLowerCase() == "textarea")
postData += escape(e.name + "=" + (e == node ? "%s" : e.value)) + "&";
else if (e.localName.toLowerCase() == "select")
postData += escape(e.name + "=" + e.options[e.selectedIndex].value) + "&";
}
}
else {
spec += "?" + escape(node.name) + "=%s";
for (var i = 0; i < node.form.elements.length; ++i) {
var e = node.form.elements[i];
if (e == node) // avoid duplication of the target field value, which was populated above.
continue;
if (e.type.toLowerCase() == "text" || e.type.toLowerCase() == "hidden" ||
e.localName.toLowerCase() == "textarea")
spec += "&" + escape(e.name) + "=" + escape(e.value);
else if (e.localName.toLowerCase() == "select")
spec += "&" + escape(e.name) + "=" + escape(e.options[e.selectedIndex].value);
}
}
dump("*** SPEC = " + spec + "\n");
openDialog("chrome://browser/content/bookmarks/addBookmark2.xul", "",
"centerscreen,chrome,dialog,resizable,dependent",
"", spec, null, node.ownerDocument.characterSet, null, null,
false, "", true);
false, "", true, postData);
}

Просмотреть файл

@ -3,7 +3,7 @@
* area.
**/
function openNewTabWith(href, linkNode, event, securityCheck)
function openNewTabWith(href, linkNode, event, securityCheck, postData)
{
if (securityCheck)
urlSecurityCheck(href, document);
@ -33,7 +33,7 @@ function openNewTabWith(href, linkNode, event, securityCheck)
// open link in new tab
var browser = top.document.getElementById("content");
var theTab = browser.addTab(href, getReferrer(document), originCharset);
var theTab = browser.addTab(href, getReferrer(document), originCharset, postData);
if (!loadInBackground)
browser.selectedTab = theTab;
@ -41,7 +41,7 @@ function openNewTabWith(href, linkNode, event, securityCheck)
markLinkVisited(href, linkNode);
}
function openNewWindowWith(href, linkNode, securityCheck)
function openNewWindowWith(href, linkNode, securityCheck, postData)
{
if (securityCheck)
urlSecurityCheck(href, document);
@ -55,7 +55,7 @@ function openNewWindowWith(href, linkNode, securityCheck)
charsetArg = "charset=" + window._content.document.characterSet;
var referrer = getReferrer(document);
window.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", href, charsetArg, referrer);
window.openDialog(getBrowserURL(), "_blank", "chrome,all,dialog=no", href, charsetArg, referrer, postData);
if (linkNode)
markLinkVisited(href, linkNode);

Просмотреть файл

@ -250,11 +250,11 @@ function onOK()
for (var i = 0; i < groups.length; ++i) {
url = getNormalizedURL(groups[i].url);
BMDS.createBookmarkInContainer(groups[i].name, url, null, null,
groups[i].charset, rSource, -1);
groups[i].charset, null, rSource, -1);
}
} else {
url = getNormalizedURL(gFld_URL.value);
rSource = BMDS.createBookmark(gFld_Name.value, url, null, null, gBookmarkCharset, false);
rSource = BMDS.createBookmark(gFld_Name.value, url, null, null, gBookmarkCharset, false, "");
if (window.arguments.length > 4 && window.arguments[4] == "newBookmark") {
window.arguments[5].newBookmark = rSource;
}

Просмотреть файл

@ -78,6 +78,9 @@
* visible.
* window.arguments[8]: Whether or not a keyword is required to add
* the bookmark.
* window.arguments[9]: PostData to be saved with this bookmark,
* in the format a string of name=value pairs
* separated by CRLFs.
*/
var gSelectedFolder;
@ -91,6 +94,7 @@ var gGroup;
var gKeywordRequired;
var gSuggestedKeyword;
var gRequiredFields = [];
var gPostData;
# on windows, sizeToContent is buggy (see bug 227951), we''ll use resizeTo
# instead and cache the bookmarks tree view size.
@ -121,6 +125,7 @@ function Startup()
onFieldInput();
gSelectedFolder = RDF.GetResource(gMenulist.selectedItem.id);
gExpander.setAttribute("tooltiptext", gExpander.getAttribute("tooltiptextdown"));
gPostData = window.arguments[9];
# read the persisted attribute. If it is not present, set a default height.
WSucks = parseInt(gBookmarksTree.getAttribute("height"));
@ -165,11 +170,11 @@ function onOK()
for (var i = 0; i < groups.length; ++i) {
url = getNormalizedURL(groups[i].url);
BMDS.createBookmarkInContainer(groups[i].name, url, gKeyword.value, null,
groups[i].charset, rSource, -1);
groups[i].charset, gPostData, rSource, -1);
}
} else {
url = getNormalizedURL(window.arguments[1]);
rSource = BMDS.createBookmark(gName.value, url, gKeyword.value, null, window.arguments[3]);
rSource = BMDS.createBookmark(gName.value, url, gKeyword.value, null, window.arguments[3], gPostData);
}
var selection = BookmarksUtils.getSelectionFromResource(rSource);

Просмотреть файл

@ -480,7 +480,7 @@ var BookmarksCommand = {
items = data.substring(0, ix != -1 ? ix : data.length);
name = data.substring(ix);
// XXX: we should infer the best charset
BookmarksUtils.createBookmark(null, items, null, name);
BookmarksUtils.createBookmark(null, items, null, name, null);
items = [items];
break;
default:
@ -644,7 +644,7 @@ var BookmarksCommand = {
createNewBookmark: function (aTarget)
{
var name = BookmarksUtils.getLocaleString("ile_newbookmark");
var resource = BMSVC.createBookmark(name, "", "", "", "");
var resource = BMSVC.createBookmark(name, "", "", "", "", null);
this.createNewResource(resource, aTarget, "newbookmark");
},
@ -1295,7 +1295,7 @@ var BookmarksUtils = {
break;
case "text/x-moz-url":
case "text/unicode":
rSource = BookmarksUtils.createBookmark(null, uri, null, extra);
rSource = BookmarksUtils.createBookmark(null, uri, null, extra, null);
parent = null;
break;
}
@ -1347,7 +1347,7 @@ var BookmarksUtils = {
if (fw)
aCharSet = fw.document.characterSet;
}
return BMSVC.createBookmark(aName, aURL, null, null, aCharSet);
return BMSVC.createBookmark(aName, aURL, null, null, aCharSet, null);
},
flushDataSource: function ()

Просмотреть файл

@ -65,12 +65,14 @@ interface nsIBookmarksService : nsISupports
in wstring aURL,
in wstring aShortcutURL,
in wstring aDescription,
in wstring aDocCharSet);
in wstring aDocCharSet,
in wstring aPostData);
nsIRDFResource createBookmarkInContainer(in wstring aName,
in wstring aURL,
in wstring aShortcutURL,
in wstring aDescription,
in wstring aDocCharSet,
in wstring aDocCharSet,
in wstring aPostData,
in nsIRDFResource aFolder,
in long aIndex);
@ -88,7 +90,7 @@ interface nsIBookmarksService : nsISupports
void updateLastVisitedDate(in string aURL, in wstring docCharset);
string resolveKeyword(in wstring aName);
string resolveKeyword(in wstring aName, out wstring aPostData);
void importSystemBookmarks(in nsIRDFResource aParentFolder);

Просмотреть файл

@ -206,7 +206,7 @@ nsBookmarkContentHandler.prototype = {
var root = rdf.GetResource("NC:BookmarksRoot");
// Append this bookmark to the end.
var bmRes = bms.createBookmarkInContainer(bookmark.name, bookmark.url, bookmark.keyword,
bookmark.description, bookmark.charset, root, -1);
bookmark.description, bookmark.charset, root, -1, "");
dump("*** bookmark =" + bookmark.toSource() + "\n");
var ds = bms.QueryInterface(Components.interfaces.nsIRDFDataSource);
if (bookmark.webpanel == "true") {

Просмотреть файл

@ -107,6 +107,7 @@ nsIRDFResource *kNC_BookmarksToolbarFolder;
nsIRDFResource *kNC_ShortcutURL;
nsIRDFResource *kNC_URL;
nsIRDFResource *kNC_WebPanel;
nsIRDFResource *kNC_PostData;
nsIRDFResource *kRDF_type;
nsIRDFResource *kRDF_nextVal;
nsIRDFResource *kWEB_LastModifiedDate;
@ -232,6 +233,8 @@ bm_AddRefGlobals()
&kNC_URL);
gRDF->GetResource(NS_LITERAL_CSTRING(NC_NAMESPACE_URI "WebPanel"),
&kNC_WebPanel);
gRDF->GetResource(NS_LITERAL_CSTRING(NC_NAMESPACE_URI "PostData"),
&kNC_PostData);
gRDF->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "type"),
&kRDF_type);
gRDF->GetResource(NS_LITERAL_CSTRING(RDF_NAMESPACE_URI "nextVal"),
@ -329,6 +332,7 @@ bm_ReleaseGlobals()
NS_IF_RELEASE(kNC_ShortcutURL);
NS_IF_RELEASE(kNC_URL);
NS_IF_RELEASE(kNC_WebPanel);
NS_IF_RELEASE(kNC_PostData);
NS_IF_RELEASE(kRDF_type);
NS_IF_RELEASE(kRDF_nextVal);
NS_IF_RELEASE(kWEB_LastModifiedDate);
@ -549,6 +553,7 @@ static const char kLastCharsetEquals[] = "LAST_CHARSET=\"";
static const char kShortcutURLEquals[] = "SHORTCUTURL=\"";
static const char kIconEquals[] = "ICON=\"";
static const char kWebPanelEquals[] = "WEB_PANEL=\"";
static const char kPostDataEquals[] = "POST_DATA=\"";
static const char kScheduleEquals[] = "SCHEDULE=\"";
static const char kLastPingEquals[] = "LAST_PING=\"";
static const char kPingETagEquals[] = "PING_ETAG=\"";
@ -1036,6 +1041,7 @@ BookmarkParser::gBookmarkFieldTable[] =
{ kShortcutURLEquals, NC_NAMESPACE_URI "ShortcutURL", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kIconEquals, NC_NAMESPACE_URI "Icon", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kWebPanelEquals, NC_NAMESPACE_URI "WebPanel", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kPostDataEquals, NC_NAMESPACE_URI "PostData", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kLastCharsetEquals, WEB_NAMESPACE_URI "LastCharset", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kScheduleEquals, WEB_NAMESPACE_URI "Schedule", nsnull, BookmarkParser::ParseLiteral, nsnull },
{ kLastPingEquals, WEB_NAMESPACE_URI "LastPingDate", nsnull, BookmarkParser::ParseDate, nsnull },
@ -2519,6 +2525,7 @@ nsBookmarksService::CreateBookmark(const PRUnichar* aName,
const PRUnichar* aShortcutURL,
const PRUnichar* aDescription,
const PRUnichar* aDocCharSet,
const PRUnichar* aPostData,
nsIRDFResource** aResult)
{
// Resource: Bookmark ID
@ -2606,6 +2613,17 @@ nsBookmarksService::CreateBookmark(const PRUnichar* aName,
return rv;
}
// Literal: PostData associated with this bookmark (used for smart keywords)
if (aPostData && *aPostData) {
nsCOMPtr<nsIRDFLiteral> postDataLiteral;
rv = gRDF->GetLiteral(aPostData, getter_AddRefs(postDataLiteral));
if (NS_FAILED(rv))
return rv;
rv = mInner->Assert(bookmarkResource, kNC_PostData, postDataLiteral, PR_TRUE);
if (NS_FAILED(rv))
return rv;
}
*aResult = bookmarkResource;
NS_ADDREF(*aResult);
@ -2618,11 +2636,12 @@ nsBookmarksService::CreateBookmarkInContainer(const PRUnichar* aName,
const PRUnichar* aShortcutURL,
const PRUnichar* aDescription,
const PRUnichar* aDocCharSet,
const PRUnichar* aPostData,
nsIRDFResource* aParentFolder,
PRInt32 aIndex,
nsIRDFResource** aResult)
{
nsresult rv = CreateBookmark(aName, aURL, aShortcutURL, aDescription, aDocCharSet, aResult);
nsresult rv = CreateBookmark(aName, aURL, aShortcutURL, aDescription, aDocCharSet, aPostData, aResult);
if (NS_SUCCEEDED(rv))
rv = InsertResource(*aResult, aParentFolder, aIndex);
return rv;
@ -3070,7 +3089,7 @@ nsBookmarksService::UpdateBookmarkLastModifiedDate(nsIRDFResource *aSource)
}
NS_IMETHODIMP
nsBookmarksService::ResolveKeyword(const PRUnichar *aUserInput, char **aShortcutURL)
nsBookmarksService::ResolveKeyword(const PRUnichar *aUserInput, PRUnichar** aPostData, char **aShortcutURL)
{
NS_PRECONDITION(aUserInput != nsnull, "null ptr");
if (! aUserInput)
@ -3097,6 +3116,19 @@ nsBookmarksService::ResolveKeyword(const PRUnichar *aUserInput, char **aShortcut
return rv;
if (source) {
// Get postData
nsCOMPtr<nsIRDFNode> node;
GetTarget(source, kNC_PostData, PR_TRUE, getter_AddRefs(node));
if (node) {
nsCOMPtr<nsIRDFLiteral> postData(do_QueryInterface(node));
const PRUnichar* postDataVal = nsnull;
postData->GetValueConst(&postDataVal);
nsDependentString postDataStr(postDataVal);
*aPostData = ToNewUnicode(postDataStr);
}
nsAutoString url;
rv = GetURLFromResource(source, url);
if (NS_FAILED(rv))
@ -4686,6 +4718,10 @@ nsBookmarksService::WriteBookmarksContainer(nsIRDFDataSource *ds,
// output kNC_WebPanel
rv |= WriteBookmarkProperties(ds, strm, child, kNC_WebPanel,
kWebPanelEquals, PR_FALSE);
// output kNC_PostData
rv |= WriteBookmarkProperties(ds, strm, child, kNC_PostData,
kPostDataEquals, PR_FALSE);
// output SCHEDULE
rv |= WriteBookmarkProperties(ds, strm, child, kWEB_Schedule, kScheduleEquals, PR_FALSE);
@ -4979,6 +5015,7 @@ nsBookmarksService::CanAccept(nsIRDFResource* aSource,
(aProperty == kNC_ShortcutURL) ||
(aProperty == kNC_URL) ||
(aProperty == kNC_WebPanel) ||
(aProperty == kNC_PostData) ||
(aProperty == kWEB_LastModifiedDate) ||
(aProperty == kWEB_LastVisitDate) ||
(aProperty == kNC_BookmarkAddDate) ||

Просмотреть файл

@ -1160,7 +1160,8 @@ nsIEProfileMigrator::CopySmartKeywords(nsIRDFResource* aParentFolder)
NS_ConvertASCIItoUTF16(url).get(),
keyword.get(),
keywordDesc.get(),
NS_LITERAL_STRING("").get(),
nsnull,
nsnull,
keywordsFolder,
-1,
getter_AddRefs(bookmark));

Просмотреть файл

@ -1116,6 +1116,7 @@ nsOperaProfileMigrator::CopySmartKeywords(nsIBookmarksService* aBMS,
NS_ConvertUTF8toUTF16(keyword).get(),
keywordDesc.get(),
nsnull,
nsnull,
keywordsFolder,
-1,
getter_AddRefs(itemRes));

Просмотреть файл

@ -706,6 +706,7 @@
<parameter name="aURI"/>
<parameter name="aReferrerURI"/>
<parameter name="aCharset"/>
<parameter name="aPostData"/>
<body>
<![CDATA[
var blank = (aURI == "about:blank");
@ -762,9 +763,12 @@
this.mTabListeners[position] = tabListener;
this.mTabFilters[position] = filter;
if (!blank)
if (!blank) {
if (aPostData === undefined)
aPostData = null;
b.loadURIWithFlags(aURI, nsIWebNavigation.LOAD_FLAGS_NONE,
aReferrerURI, null, null);
aReferrerURI, aPostData, null);
}
return t;
]]>

Просмотреть файл

@ -145,8 +145,11 @@ nsExtensionManager.prototype = {
var appVersion = pref.getCharPref(PREF_EM_APP_VERSION);
var extensions = this._ds.getExtensionList(aExtensionID);
var updater = new nsExtensionUpdater(extensions, appID, appVersion);
updater.checkForUpdates();
var updater = new nsExtensionUpdater2(extensions, appID, appVersion);
updater.loadSchema();
// var updater = new nsExtensionUpdater(extensions, appID, appVersion);
// updater.checkForUpdates();
},
// Themes
@ -198,6 +201,112 @@ nsExtensionManager.prototype = {
}
};
function nsExtensionUpdater2(aExtensions,
aTargetAppID, aTargetAppVersion)
{
this._extensions = aExtensions;
this._count = aExtensions.length;
this._appID = aTargetAppID;
this._appVersion = aTargetAppVersion;
this._os = Components.classes["@mozilla.org/observer-service;1"]
.getService(Components.interfaces.nsIObserverService);
}
nsExtensionUpdater2.prototype = {
_extensionSchemaType: null,
loadSchema: function ()
{
function SchemaLoaderListener(aUpdater)
{
this._updater = aUpdater;
}
SchemaLoaderListener.prototype = {
onLoad: function (aSchema)
{
dump("*** schema loaded = " + aSchema + "\n");
var count = aSchema.typeCount;
for (var i = 0; i < count; ++i) {
var type = aSchema.getTypeByIndex(i);
dump("*** schema type = " + type.name + "\n");
}
this._updater._extensionSchemaType = aSchema.getTypeByName("Extension");
this._updater._schemaLoaded();
},
onError: function (aStatus, aMessage)
{
dump("*** schema load error " + aStatus + ", msg = " + aMessage + "\n");
}
};
var schemaLoader = Components.classes["@mozilla.org/xmlextras/schemas/schemaloader;1"]
.createInstance(Components.interfaces.nsISchemaLoader);
var schemaLoaderListener = new SchemaLoaderListener(this);
schemaLoader.loadAsync("http://www.bengoodger.com/software/mb/umo/types.xsd",
schemaLoaderListener);
},
_schemaLoaded: function ()
{
var call = Components.classes["@mozilla.org/xmlextras/soap/call;1"]
.createInstance(Components.interfaces.nsISOAPCall);
call.transportURI = "http://localhost:8080/axis/services/VersionCheck";
for (var i = 0; i < this._extensions.length; ++i) {
var e = this._extensions[i];
var params = [this._createParam("in0", e, this._extensionSchemaType),
this._createParam("in1", this._appID, null),
this._createParam("in2", this._appVersion, null)];
call.encode(0, "getNewestExtension", "urn:VersionCheck", 0, null, params.length, params);
var response = call.invoke();
dump("*** response = " + response + "\n");
var count = { };
var params;
response.getParameters(false, count, params);
dump("*** params = " + count.value + "\n");
for (var j = 0; j < count.value; ++j) {
var param = params[j];
dump("*** param = " + param.name + ", parm = " + param + ", element = " + param.element + ", value = " + param.value + "\n");
// var v = param.value.QueryInterface(Components.interfaces.nsIVariant);
}
}
},
_walkKids: function (e)
{
for (var i = 0; i < e.childNodes.length; ++i) {
var kid = e.childNodes[i];
dump("<" + kid.nodeName);
for (var k = 0; k < kid.attributes.length; ++k)
dump(" " + kid.attributes[k] + "=" + kid.getAttribute(kid.attributes[k]));
if (kid.hasChildNodes()) {
this._walkKids(kid);
dump("</" + kid.nodeName);
}
else
dump(">");
}
},
_createParam: function (aParamName, aParamValue, aParamSchemaType)
{
var param = Components.classes["@mozilla.org/xmlextras/soap/parameter;1"]
.createInstance(Components.interfaces.nsISOAPParameter);
param.name = aParamName;
param.namespaceURI = "urn:VersionCheck";
if (aParamSchemaType)
param.schemaType = aParamSchemaType;
param.value = aParamValue;
return param;
},
};
function nsExtensionUpdater(aExtensions,
aTargetAppID, aTargetAppVersion)
{