forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			82 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
	
		
			3.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Any copyright is dedicated to the Public Domain.
 | |
|  * http://creativecommons.org/publicdomain/zero/1.0/ */
 | |
| 
 | |
| var testData = [
 | |
|   /* baseURI, field name, expected */
 | |
|   [ 'http://example.com/', 'q', 'http://example.com/?q=%s' ],
 | |
|   [ 'http://example.com/new-path-here/', 'q', 'http://example.com/new-path-here/?q=%s' ],
 | |
|   [ '', 'q', 'http://example.org/browser/browser/base/content/test/general/dummy_page.html?q=%s' ],
 | |
|   // Tests for proper behaviour when called on a form whose action contains a question mark.
 | |
|   [ 'http://example.com/search?oe=utf-8', 'q', 'http://example.com/search?oe=utf-8&q=%s' ],
 | |
| ];
 | |
| 
 | |
| var mm = gBrowser.selectedBrowser.messageManager;
 | |
| 
 | |
| add_task(function*() {
 | |
|   yield BrowserTestUtils.withNewTab({
 | |
|     gBrowser,
 | |
|     url: "http://example.org/browser/browser/base/content/test/general/dummy_page.html",
 | |
|   }, function* (browser) {
 | |
|     yield ContentTask.spawn(browser, null, function* () {
 | |
|       let doc = content.document;
 | |
|       let base = doc.createElement("base");
 | |
|       doc.head.appendChild(base);
 | |
|     });
 | |
| 
 | |
|     for (let [baseURI, fieldName, expected] of testData) {
 | |
|       let popupShownPromise = BrowserTestUtils.waitForEvent(document.getElementById("contentAreaContextMenu"),
 | |
|                                                             "popupshown");
 | |
| 
 | |
|       yield ContentTask.spawn(browser, { baseURI, fieldName }, function* (args) {
 | |
|         let doc = content.document;
 | |
| 
 | |
|         let base = doc.querySelector('head > base');
 | |
|         base.href = args.baseURI;
 | |
| 
 | |
|         let form = doc.createElement("form");
 | |
|         form.id = "keyword-form";
 | |
|         let element = doc.createElement("input");
 | |
|         element.setAttribute("type", "text");
 | |
|         element.setAttribute("name", args.fieldName);
 | |
|         form.appendChild(element);
 | |
|         doc.body.appendChild(form);
 | |
| 
 | |
|         /* Open context menu so chrome can access the element */
 | |
|         const domWindowUtils =
 | |
|           content.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
 | |
|                  .getInterface(Components.interfaces.nsIDOMWindowUtils);
 | |
|         let rect = element.getBoundingClientRect();
 | |
|         let left = rect.left + rect.width / 2;
 | |
|         let top = rect.top + rect.height / 2;
 | |
|         domWindowUtils.sendMouseEvent("contextmenu", left, top, 2,
 | |
|                                       1, 0, false, 0, 0, true);
 | |
|       });
 | |
| 
 | |
|       yield popupShownPromise;
 | |
| 
 | |
|       let target = gContextMenuContentData.popupNode;
 | |
| 
 | |
|       let urlCheck = new Promise((resolve, reject) => {
 | |
|         let onMessage = (message) => {
 | |
|           mm.removeMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
 | |
| 
 | |
|           is(message.data.spec, expected,
 | |
|              `Bookmark spec for search field named ${fieldName} and baseURI ${baseURI} incorrect`);
 | |
|           resolve();
 | |
|         };
 | |
|         mm.addMessageListener("ContextMenu:SearchFieldBookmarkData:Result", onMessage);
 | |
| 
 | |
|         mm.sendAsyncMessage("ContextMenu:SearchFieldBookmarkData", null, { target });
 | |
|       });
 | |
| 
 | |
|       yield urlCheck;
 | |
| 
 | |
|       document.getElementById("contentAreaContextMenu").hidePopup();
 | |
| 
 | |
|       yield ContentTask.spawn(browser, null, function* () {
 | |
|         let doc = content.document;
 | |
|         doc.body.removeChild(doc.getElementById("keyword-form"));
 | |
|       });
 | |
|     }
 | |
|   });
 | |
| });
 | 
