1eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdescription('Test setting the protocol attribute of the URL in HTMLAnchorElement .'); 2eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 3eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar a = document.createElement('a'); 4eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 5eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Basic test"); 6eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 7eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "http-foo"; 8eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'http-foo://www.mydomain.com/path/'"); 9eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 10eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 throws "Invalid argument" exception. 11eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set a protocol that contains ':'"); 12eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocktry { 13eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 14eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "http:foo"; 15eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'http://www.mydomain.com/path/'"); 16eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} catch(e) { 17eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Exception: " + e.description); 18eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} 19eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 20eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 throws "Invalid argument" exception. 21eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set a protocol that contains invalid characters"); 22eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocktry { 23eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 24eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "http^foo"; 25eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/'"); 26eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} catch(e) { 27eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Exception: " + e.description); 28eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} 29eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 30eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// The expected behavior should change when the character table is updated. 31eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 encodes '^' in the host. 32eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set a protocol to a URL with invalid host name"); 33eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "h:^^"; 34eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "foo"; 35eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'foo:^^'"); 36eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 37eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 throws "Invalid argument" exception. 38eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocktry { 39eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set a protocol that starts with ':'"); 40eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 41eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = ":http"; 42eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/'"); 43eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} catch(e) { 44eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Exception: " + e.description); 45eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} 46eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 47eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 converts null to "null", which is not the right thing to do. 48eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set protocol to null"); 49eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 50eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = null; 51eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/'"); 52eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 53eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 throws "Invalid argument" exception. 54eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocktry { 55eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set protocol to empty string"); 56eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 57eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = ""; 58eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'https://www.mydomain.com/path/'"); 59eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} catch(e) { 60eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Exception: " + e.description); 61eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block} 62eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 63eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// Firefox 3.5.2 tries to build a hierarchical URL. 64eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set protocol to http on malformed URL"); 65eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "foo:??bar"; 66eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "http"; 67eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'http:??bar'"); 68eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 69eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block// IE8 keeps the protocol if it is 'c:'. 70eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set protocol to a URL which points to a local file"); 71eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "c:\path"; 72eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = "f-oo"; 73eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'f-oo:path'"); 74eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 75eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockdebug("Set protocol to undefined"); 76eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.href = "https://www.mydomain.com/path/"; 77eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blocka.protocol = undefined; 78eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve BlockshouldBe("a.href", "'undefined://www.mydomain.com/path/'"); 79eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Block 80eff69b907ef2cd3a9af0351287a929c66f58e3f6Steve Blockvar successfullyParsed = true; 81