mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge cvs-trunk-mirror to mozilla-central. Conflict resolution:
* client.mk: new NSS tag merge to client.py --HG-- rename : js/src/jsapi.c => js/src/jsapi.cpp rename : js/src/jsdbgapi.c => js/src/jsdbgapi.cpp rename : js/src/jsopcode.c => js/src/jsopcode.cpp
This commit is contained in:
commit
4393fe5a30
@ -1526,7 +1526,7 @@ NS_IMETHODIMP nsAccessibilityService::GetAccessible(nsIDOMNode *aNode,
|
||||
}
|
||||
break;
|
||||
}
|
||||
else if (tableFrame->GetType() == nsAccessibilityAtoms::tableCellFrame) {
|
||||
else if (tableContent->Tag() == nsAccessibilityAtoms::table) {
|
||||
// Stop before we are fooled by any additional table ancestors
|
||||
// This table cell frameis part of a separate ancestor table.
|
||||
tryTagNameOrFrame = PR_FALSE;
|
||||
|
@ -257,6 +257,9 @@ nsDocAccessible::GetState(PRUint32 *aState, PRUint32 *aExtraState)
|
||||
// which it should be if it is scrollable. A XUL document could be focusable.
|
||||
// See bug 376803.
|
||||
*aState |= nsIAccessibleStates::STATE_FOCUSABLE;
|
||||
if (gLastFocusedNode == mDOMNode) {
|
||||
*aState |= nsIAccessibleStates::STATE_FOCUSED;
|
||||
}
|
||||
}
|
||||
|
||||
if (!mIsContentLoaded) {
|
||||
@ -854,8 +857,18 @@ NS_IMETHODIMP nsDocAccessible::FireDocLoadEvents(PRUint32 aEventType)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (sameTypeRoot == treeItem) {
|
||||
// Not a frame or iframe
|
||||
if (!isFinished) {
|
||||
// Fire state change event to set STATE_BUSY when document is loading. For
|
||||
// example, Window-Eyes expects to get it.
|
||||
nsCOMPtr<nsIAccessibleStateChangeEvent> accEvent =
|
||||
new nsAccStateChangeEvent(this, nsIAccessibleStates::STATE_BUSY,
|
||||
PR_FALSE, PR_TRUE);
|
||||
FireAccessibleEvent(accEvent);
|
||||
}
|
||||
|
||||
nsAccUtils::FireAccEvent(aEventType, this);
|
||||
}
|
||||
return NS_OK;
|
||||
|
@ -100,6 +100,26 @@ function doTest()
|
||||
is(accTable4.cellRefAt(1,1).firstChild.name, "cell3", "wrong cell");
|
||||
}
|
||||
|
||||
// Test table with display:inline and an outside table. We shouldn't be fooled
|
||||
// by the outside table and shouldn't create table accessible and table cell
|
||||
// accessible in this case
|
||||
var table5 = document.getElementById("table5");
|
||||
accNotCreated = false;
|
||||
try {
|
||||
var accTable1 = accService.getAccessibleFor(table1);
|
||||
} catch (e) {
|
||||
accNotCreated = true;
|
||||
}
|
||||
ok(accNotCreated, "wrongly created table accessible");
|
||||
var t5Cell = document.getElementById("t5_cell");
|
||||
accNotCreated = false;
|
||||
try {
|
||||
var accCell = accService.getAccessibleFor(t5Cell);
|
||||
} catch (e) {
|
||||
accNotCreated = true;
|
||||
}
|
||||
ok(accNotCreated, "wrongly created table cell accessible");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
@ -150,6 +170,18 @@ addLoadEvent(doTest);
|
||||
<td>cell3</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td style="display:block">
|
||||
<table style="display:inline" id="table5">
|
||||
<tr><td id="t5_cell">cell0</td></tr>
|
||||
</table>
|
||||
</td>
|
||||
<td>cell1</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</center>
|
||||
</body>
|
||||
</html>
|
||||
|
20
browser/EULA
20
browser/EULA
@ -1,5 +1,5 @@
|
||||
MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT
|
||||
Version 2.0
|
||||
MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT
|
||||
Version 3.0, May 2008
|
||||
|
||||
A SOURCE CODE VERSION OF CERTAIN FIREFOX BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.
|
||||
|
||||
@ -11,16 +11,18 @@ DURING THE MOZILLA FIREFOX INSTALLATION PROCESS, AND AT LATER TIMES, YOU MAY BE
|
||||
|
||||
2. TERMINATION. If you breach this Agreement your right to use the Product will terminate immediately and without notice, but all provisions of this Agreement except the License Grant (Paragraph 1) will survive termination and continue in effect. Upon termination, you must destroy all copies of the Product.
|
||||
|
||||
3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, "Open Source Licenses") at http://mozilla.org. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.
|
||||
3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, "Open Source Licenses") at http://www.mozilla.org/MPL. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.
|
||||
|
||||
4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/firefox/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.
|
||||
4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/legal/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.
|
||||
|
||||
5. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED "AS IS" WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLA'S DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
5. WEBSITE INFORMATION SERVICES. Mozilla and its contributors, licensors and partners work to provide the most accurate and up-to-date phishing and malware information. However, they cannot guarantee that this information is comprehensive and error-free: some risky sites may not be identified, and some safe sites may be identified in error.
|
||||
|
||||
6. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE "MOZILLA GROUP") WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUP'S COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
6. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED "AS IS" WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLA'S DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
7. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.
|
||||
7. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE "MOZILLA GROUP") WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUP'S COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
8. U.S. GOVERNMENT END-USERS. This Product is a "commercial item," as that term is defined in 48 C.F.R. 2.101, consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.
|
||||
8. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.
|
||||
|
||||
9. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. (d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties' original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. (g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns.
|
||||
9. U.S. GOVERNMENT END-USERS. This Product is a "commercial item," as that term is defined in 48 C.F.R. 2.101, consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.
|
||||
|
||||
10. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. (d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties' original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. (g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns.
|
||||
|
BIN
browser/EULA.rtf
BIN
browser/EULA.rtf
Binary file not shown.
@ -42,7 +42,7 @@ resource 'STR#' (5000, "English") {
|
||||
// single quotes ('), 0xD5 is also the apostrophe.
|
||||
data 'TEXT' (5000, "English") {
|
||||
"MINEFIELD END-USER SOFTWARE LICENSE AGREEMENT\n"
|
||||
"Version 2.0\n"
|
||||
"Version 3.0, May 2008\n"
|
||||
"\n"
|
||||
"A SOURCE CODE VERSION OF CERTAIN MINEFIELD BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.\n"
|
||||
"\n"
|
||||
@ -54,19 +54,21 @@ data 'TEXT' (5000, "English") {
|
||||
"\n"
|
||||
"2. TERMINATION. If you breach this Agreement your right to use the Product will terminate immediately and without notice, but all provisions of this Agreement except the License Grant (Paragraph 1) will survive termination and continue in effect. Upon termination, you must destroy all copies of the Product.\n"
|
||||
"\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://mozilla.org. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://www.mozilla.org/MPL. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/firefox/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/legal/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"\n"
|
||||
"5. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"5. WEBSITE INFORMATION SERVICES. Mozilla and its contributors, licensors and partners work to provide the most accurate and up-to-date phishing and malware information. However, they cannot guarantee that this information is comprehensive and error-free: some risky sites may not be identified, and some safe sites may be identified in error.\n"
|
||||
"\n"
|
||||
"6. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"6. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"7. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"7. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"8. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"8. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"\n"
|
||||
"9. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"9. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"\n"
|
||||
"10. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"(d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the partiesÕ original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. "
|
||||
"(g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns."
|
||||
};
|
||||
@ -95,8 +97,8 @@ data 'styl' (5000, "English") {
|
||||
$"0000 0000 0000"
|
||||
|
||||
// Style 2. This is used to display the body.
|
||||
// Start character = 58
|
||||
$"0000 003A"
|
||||
// Start character = 68
|
||||
$"0000 0044"
|
||||
// Height = 16
|
||||
$"0010"
|
||||
// Ascent = 12
|
||||
|
@ -636,7 +636,7 @@ pref("urlclassifier.gethashtables", "goog-phish-shavar,goog-malware-shavar");
|
||||
pref("urlclassifier.confirm-age", 2700);
|
||||
|
||||
// Maximum size of the sqlite3 cache during an update, in bytes
|
||||
#ifdef UNIX_BUT_NOT_MAC
|
||||
#ifdef MOZ_WIDGET_GTK2
|
||||
pref("urlclassifier.updatecachemax", 104857600);
|
||||
#else
|
||||
pref("urlclassifier.updatecachemax", -1);
|
||||
@ -647,11 +647,19 @@ pref("browser.safebrowsing.malware.reportURL", "http://safebrowsing.clients.goog
|
||||
|
||||
#endif
|
||||
|
||||
// defaults to true
|
||||
pref("browser.EULA.2.accepted", true);
|
||||
// defaults to true on Windows and Mac, because the installer shows this
|
||||
#ifdef XP_MACOSX
|
||||
pref("browser.EULA.3.accepted", true);
|
||||
#elifdef XP_WIN
|
||||
pref("browser.EULA.3.accepted", true);
|
||||
#else
|
||||
# Need to fix the unittest and talos machine profiles before flipping this by default
|
||||
#pref("browser.EULA.3.accepted", false);
|
||||
pref("browser.EULA.3.accepted", true);
|
||||
#endif
|
||||
|
||||
// if we rev the EULA again, we should bump this so users agree to the new EULA
|
||||
pref("browser.EULA.version", 2);
|
||||
pref("browser.EULA.version", 3);
|
||||
|
||||
pref("browser.sessionstore.enabled", true);
|
||||
pref("browser.sessionstore.resume_from_crash", true);
|
||||
|
@ -8,31 +8,33 @@
|
||||
<body>
|
||||
|
||||
<p>MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT<br/>
|
||||
Version 2.0</p>
|
||||
Version 3.0, May 2008</p>
|
||||
|
||||
<p>A SOURCE CODE VERSION OF CERTAIN FIREFOX BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.</p>
|
||||
<p><b>A source code version of certain Firefox Browser functionality that you may use, modify and distribute is available to you free-of-charge from <a href="http://www.mozilla.org">www.mozilla.org</a> under the Mozilla Public License and other open source software licenses.</b></p>
|
||||
|
||||
<p>The accompanying executable code version of Mozilla Firefox and related documentation (the “Product”) is made available to you under the terms of this MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT (THE “AGREEMENT”). BY CLICKING THE “ACCEPT” BUTTON, OR BY INSTALLING OR USING THE MOZILLA FIREFOX BROWSER, YOU ARE CONSENTING TO BE BOUND BY THE AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, DO NOT CLICK THE “ACCEPT” BUTTON, AND DO NOT INSTALL OR USE ANY PART OF THE MOZILLA FIREFOX BROWSER.</p>
|
||||
<p>The accompanying executable code version of Mozilla Firefox and related documentation (the "Product") is made available to you under the terms of this <b>Mozilla Firefox End-User Software License Agreement (the "Agreement"). By clicking the "Accept" button, or by installing or using the Mozilla Firefox Browser, you are consenting to be bound by the Agreement. If you do not agree to the terms and conditions of this Agreement, do not click the "Accept" button, and do not install or use any part of the Mozilla Firefox Browser.</b></p>
|
||||
|
||||
<p>DURING THE MOZILLA FIREFOX INSTALLATION PROCESS, AND AT LATER TIMES, YOU MAY BE GIVEN THE OPTION OF INSTALLING ADDITIONAL COMPONENTS FROM THIRD-PARTY SOFTWARE PROVIDERS. THE INSTALLATION AND USE OF THOSE THIRD-PARTY COMPONENTS MAY BE GOVERNED BY ADDITIONAL LICENSE AGREEMENTS.</p>
|
||||
<p><b>During the Mozilla Firefox installation process, and at later times, you may be given the option of installing additional components from third-party software providers. The installation and use of those third-party components may be governed by additional license agreements.</b></p>
|
||||
|
||||
<p>1. LICENSE GRANT. The Mozilla Corporation grants you a non-exclusive license to use the executable code version of the Product. This Agreement will also govern any software upgrades provided by Mozilla that replace and/or supplement the original Product, unless such upgrades are accompanied by a separate license, in which case the terms of that license will govern.</p>
|
||||
|
||||
<p>2. TERMINATION. If you breach this Agreement your right to use the Product will terminate immediately and without notice, but all provisions of this Agreement except the License Grant (Paragraph 1) will survive termination and continue in effect. Upon termination, you must destroy all copies of the Product.</p>
|
||||
|
||||
<p>3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, “Open Source Licenses”) at http://mozilla.org. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.</p>
|
||||
<p>3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, "Open Source Licenses") at <a href="http://www.mozilla.org/MPL">http://www.mozilla.org/MPL</a>. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.</p>
|
||||
|
||||
<p>4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/firefox/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.</p>
|
||||
<p>4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at <a href="http://www.mozilla.com/legal/privacy/">http://www.mozilla.com/legal/privacy/</a>, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.</p>
|
||||
|
||||
<p>5. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED “AS IS” WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLA’S DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.</p>
|
||||
<p>5. WEBSITE INFORMATION SERVICES. Mozilla and its contributors, licensors and partners work to provide the most accurate and up-to-date phishing and malware information. However, they cannot guarantee that this information is comprehensive and error-free: some risky sites may not be identified, and some safe sites may be identified in error.</p>
|
||||
|
||||
<p>6. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE “MOZILLA GROUP”) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUP’S COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.</p>
|
||||
<p>6. DISCLAIMER OF WARRANTY. <b>The product is provided "as is" with all faults. To the extent permitted by law, Mozilla and Mozilla’s distributors, and licensors hereby disclaim all warranties, whether express or implied, including without limitation warranties that the product is free of defects, merchantable, fit for a particular purpose and non-infringing. You bear the entire risk as to selecting the product for your purposes and as to the quality and performance of the product. This limitation will apply notwithstanding the failure of essential purpose of any remedy. Some jurisdictions do not allow the exclusion or limitation of implied warranties, so this disclaimer may not apply to you.</b></p>
|
||||
|
||||
<p>7. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.</p>
|
||||
<p>7. LIMITATION OF LIABILITY. <b>Except as required by law, Mozilla and its distributors, directors, licensors, contributors and agents (collectively, the "Mozilla Group") will not be liable for any indirect, special, incidental, consequential or exemplary damages arising out of or in any way relating to this agreement or the use of or inability to use the product, including without limitation damages for loss of goodwill, work stoppage, lost profits, loss of data, and computer failure or malfunction, even if advised of the possibility of such damages and regardless of the theory (contract, tort or otherwise) upon which such claim is based. The Mozilla Group's collective liability under this agreement will not exceed the greater of $500 (five hundred dollars) and the fees paid by you under the license (if any). Some jurisdictions do not allow the exclusion or limitation of incidental, consequential or special damages, so this exclusion and limitation may not apply to you.</b></p>
|
||||
|
||||
<p>8. U.S. GOVERNMENT END-USERS. This Product is a “commercial item,” as that term is defined in 48 C.F.R. 2.101, consisting of “commercial computer software” and “commercial computer software documentation,” as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.</p>
|
||||
<p>8. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.</p>
|
||||
|
||||
<p>9. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. (d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties’ original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. (g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns.</p>
|
||||
<p>9. U.S. GOVERNMENT END-USERS. This Product is a "commercial item," as that term is defined in 48 C.F.R. 2.101, consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.</p>
|
||||
|
||||
<p>10. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. (d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties' original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. (g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
@ -42,31 +42,33 @@ resource 'STR#' (5000, "English") {
|
||||
// single quotes ('), 0xD5 is also the apostrophe.
|
||||
data 'TEXT' (5000, "English") {
|
||||
"GRAN PARADISO END-USER SOFTWARE LICENSE AGREEMENT\n"
|
||||
"Version 2.0\n"
|
||||
"Version 3.0, May 2008\n"
|
||||
"\n"
|
||||
"A SOURCE CODE VERSION OF CERTAIN GRAN PARADISO BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.\n"
|
||||
"A SOURCE CODE VERSION OF CERTAIN FIREFOX BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.\n"
|
||||
"\n"
|
||||
"The accompanying executable code version of Gran Paradiso and related documentation (the ÒProductÓ) is made available to you under the terms of this GRAN PARADISO END-USER SOFTWARE LICENSE AGREEMENT (THE ÒAGREEMENTÓ). BY CLICKING THE ÒACCEPTÓ BUTTON, OR BY INSTALLING OR USING THE GRAN PARADISO BROWSER, YOU ARE CONSENTING TO BE BOUND BY THE AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, DO NOT CLICK THE ÒACCEPTÓ BUTTON, AND DO NOT INSTALL OR USE ANY PART OF THE GRAN PARADISO BROWSER.\n"
|
||||
"The accompanying executable code version of Mozilla Firefox and related documentation (the ÒProductÓ) is made available to you under the terms of this MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT (THE ÒAGREEMENTÓ). BY CLICKING THE ÒACCEPTÓ BUTTON, OR BY INSTALLING OR USING THE MOZILLA FIREFOX BROWSER, YOU ARE CONSENTING TO BE BOUND BY THE AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT, DO NOT CLICK THE ÒACCEPTÓ BUTTON, AND DO NOT INSTALL OR USE ANY PART OF THE MOZILLA FIREFOX BROWSER.\n"
|
||||
"\n"
|
||||
"DURING THE GRAN PARADISO INSTALLATION PROCESS, AND AT LATER TIMES, YOU MAY BE GIVEN THE OPTION OF INSTALLING ADDITIONAL COMPONENTS FROM THIRD-PARTY SOFTWARE PROVIDERS. THE INSTALLATION AND USE OF THOSE THIRD-PARTY COMPONENTS MAY BE GOVERNED BY ADDITIONAL LICENSE AGREEMENTS.\n"
|
||||
"DURING THE MOZILLA FIREFOX INSTALLATION PROCESS, AND AT LATER TIMES, YOU MAY BE GIVEN THE OPTION OF INSTALLING ADDITIONAL COMPONENTS FROM THIRD-PARTY SOFTWARE PROVIDERS. THE INSTALLATION AND USE OF THOSE THIRD-PARTY COMPONENTS MAY BE GOVERNED BY ADDITIONAL LICENSE AGREEMENTS.\n"
|
||||
"\n"
|
||||
"1. LICENSE GRANT. The Mozilla Corporation grants you a non-exclusive license to use the executable code version of the Product. This Agreement will also govern any software upgrades provided by Mozilla that replace and/or supplement the original Product, unless such upgrades are accompanied by a separate license, in which case the terms of that license will govern.\n"
|
||||
"\n"
|
||||
"2. TERMINATION. If you breach this Agreement your right to use the Product will terminate immediately and without notice, but all provisions of this Agreement except the License Grant (Paragraph 1) will survive termination and continue in effect. Upon termination, you must destroy all copies of the Product.\n"
|
||||
"\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://mozilla.org. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://www.mozilla.org/MPL. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/firefox/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/legal/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"\n"
|
||||
"5. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"5. WEBSITE INFORMATION SERVICES. Mozilla and its contributors, licensors and partners work to provide the most accurate and up-to-date phishing and malware information. However, they cannot guarantee that this information is comprehensive and error-free: some risky sites may not be identified, and some safe sites may be identified in error.\n"
|
||||
"\n"
|
||||
"6. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"6. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"7. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"7. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"8. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"8. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"\n"
|
||||
"9. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"9. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"\n"
|
||||
"10. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"(d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the partiesÕ original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. "
|
||||
"(g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns."
|
||||
};
|
||||
@ -95,8 +97,8 @@ data 'styl' (5000, "English") {
|
||||
$"0000 0000 0000"
|
||||
|
||||
// Style 2. This is used to display the body.
|
||||
// Start character = 62
|
||||
$"0000 003E"
|
||||
// Start character = 72
|
||||
$"0000 0048"
|
||||
// Height = 16
|
||||
$"0010"
|
||||
// Ascent = 12
|
||||
|
@ -48,11 +48,61 @@
|
||||
|
||||
#main-window {
|
||||
-moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedWindow");
|
||||
-moz-appearance: none;
|
||||
}
|
||||
|
||||
#main-window[chromehidden~="toolbar"][chromehidden~="location"][chromehidden~="directories"] {
|
||||
border-top: 1px solid rgba(0,0,0,0.65);
|
||||
-moz-appearance: none;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
/* ----- INACTIVE WINDOW ----- */
|
||||
|
||||
#main-window:not([active="true"]) > #navigator-toolbox > toolbar {
|
||||
border-top-color: rgba(255,255,255,0.45);
|
||||
border-bottom-color: rgba(0,0,0,0.35);
|
||||
background-color: #cfcfcf;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #navigator-toolbox > #nav-bar {
|
||||
background-image: url("chrome://global/skin/toolbar/toolbar-background-inactive.png");
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #navigator-toolbox > #PersonalToolbar {
|
||||
background-image: url("chrome://browser/skin/bookmark_toolbar_background-inactive.png");
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #navigator-toolbox > toolbar > toolbaritem,
|
||||
#main-window:not([active="true"]) > #navigator-toolbox > toolbar > toolbarbutton,
|
||||
#main-window:not([active="true"]) > #browser-bottombox {
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #browser > vbox > #sidebar,
|
||||
#main-window:not([active="true"]) > #browser > vbox > sidebarheader {
|
||||
background-color: #e8e8e8;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) .tabbrowser-strip {
|
||||
background-color: #cfcfcf;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) .tabbrowser-tab {
|
||||
color: #575757;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) .tabbrowser-tab[selected="true"] > .tab-image-middle,
|
||||
#main-window:not([active="true"]) .tabbrowser-tab[selected="true"] > .tab-closebutton,
|
||||
#main-window:not([active="true"]) .tabbrowser-tab[selected="true"] > .tab-close-button {
|
||||
background-image: url("chrome://browser/skin/tabbrowser/tab-middle-inactive.png");
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) .tabbrowser-tab[selected="true"] > .tab-image-left {
|
||||
background: url("chrome://browser/skin/tabbrowser/tab-left-inactive.png") no-repeat;
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) .tabbrowser-tab[selected="true"] > .tab-image-right {
|
||||
background: url("chrome://browser/skin/tabbrowser/tab-right-inactive.png") no-repeat;
|
||||
}
|
||||
|
||||
/* ----- SEARCH FIELD ----- */
|
||||
|
@ -43,6 +43,15 @@
|
||||
-moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedWindow");
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #topStackBar {
|
||||
background-image: url("chrome://global/skin/toolbar/toolbar-background-inactive.png");
|
||||
background-color: #cfcfcf;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.35);
|
||||
}
|
||||
|
||||
#main-window:not([active="true"]) > #topStackBar > #viewGroup {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
#topStackBar {
|
||||
display: -moz-box;
|
||||
|
@ -4,6 +4,24 @@
|
||||
-moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedWindow");
|
||||
}
|
||||
|
||||
/* Inactive Window */
|
||||
|
||||
#places:not([active="true"]) > #placesToolbox > #placesToolbar {
|
||||
background-image: url("chrome://global/skin/toolbar/toolbar-background-inactive.png");
|
||||
background-color: #cfcfcf;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.35);
|
||||
}
|
||||
|
||||
#places:not([active="true"]) > #placesToolbox > #placesToolbar > toolbarbutton,
|
||||
#places:not([active="true"]) > #placesToolbox > #placesToolbar > #searchFilter {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
#places:not([active="true"]) > #placesView > #placesList {
|
||||
background-color: #e8e8e8;
|
||||
}
|
||||
|
||||
|
||||
/* Places Organizer Sidebars */
|
||||
|
||||
#placesList {
|
||||
|
@ -43,6 +43,16 @@
|
||||
-moz-binding: url("chrome://global/skin/globalBindings.xml#unifiedPrefwindow");
|
||||
}
|
||||
|
||||
#BrowserPreferences:not([active="true"]) > .paneSelector {
|
||||
background-image: url("chrome://global/skin/toolbar/toolbar-background-tall-inactive.png");
|
||||
background-color: #cfcfcf;
|
||||
border-bottom: 1px solid rgba(0,0,0,0.35);
|
||||
}
|
||||
|
||||
#BrowserPreferences:not([active="true"]) > .paneSelector > radio {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.prefWindow-dlgbuttons {
|
||||
margin: 0 12px 8px 12px;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
NSPR_CO_TAG = 'NSPR_4_7_1_RTM'
|
||||
NSS_CO_TAG = 'NSS_3_12_RC2'
|
||||
NSS_CO_TAG = 'NSS_3_12_RC3'
|
||||
|
||||
NSPR_DIRS = ('nsprpub',)
|
||||
NSS_DIRS = ('dbm',
|
||||
|
@ -2804,12 +2804,7 @@ nsDocument::DispatchContentLoadedEvents()
|
||||
|
||||
if (target_frame) {
|
||||
nsCOMPtr<nsIDocument> parent = mParentDocument;
|
||||
while (parent) {
|
||||
parent = parent->GetParentDocument();
|
||||
if (!parent) {
|
||||
break;
|
||||
}
|
||||
|
||||
do {
|
||||
nsCOMPtr<nsIDOMDocumentEvent> document_event =
|
||||
do_QueryInterface(parent);
|
||||
|
||||
@ -2851,7 +2846,9 @@ nsDocument::DispatchContentLoadedEvents()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
parent = parent->GetParentDocument();
|
||||
} while (parent);
|
||||
}
|
||||
|
||||
UnblockOnload(PR_TRUE);
|
||||
|
@ -178,6 +178,7 @@ _TEST_FILES = test_bug5141.html \
|
||||
file_bug428847-1.xhtml \
|
||||
file_bug428847-2.xhtml \
|
||||
test_bug425201.html \
|
||||
test_bug431833.html \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
|
@ -1,61 +1,61 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=308484
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 308484</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=308484">Mozilla Bug 308484</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 308484 **/
|
||||
|
||||
var headers = ["Host", "Content-Length", "Transfer-Encoding", "Via", "Upgrade"];
|
||||
var i, request;
|
||||
|
||||
// Try setting headers in unprivileged context
|
||||
request = new XMLHttpRequest();
|
||||
request.open("GET", window.location.href);
|
||||
for (i = 0; i < headers.length; i++)
|
||||
request.setRequestHeader(headers[i], "test" + i);
|
||||
|
||||
// Read out headers
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
|
||||
var channel = request.channel.QueryInterface(Components.interfaces.nsIHttpChannel);
|
||||
for (i = 0; i < headers.length; i++) {
|
||||
// Retrieving Content-Length will throw an exception
|
||||
var value = null;
|
||||
try {
|
||||
value = channel.getRequestHeader(headers[i]);
|
||||
}
|
||||
catch(e) {}
|
||||
|
||||
isnot(value, "test" + i, "Setting " + headers[i] + " header in unprivileged context");
|
||||
}
|
||||
|
||||
// Try setting headers in privileged context
|
||||
request = new XMLHttpRequest();
|
||||
request.open("GET", window.location.href);
|
||||
for (i = 0; i < headers.length; i++)
|
||||
request.setRequestHeader(headers[i], "test" + i);
|
||||
|
||||
// Read out headers
|
||||
var channel = request.channel.QueryInterface(Components.interfaces.nsIHttpChannel);
|
||||
for (i = 0; i < headers.length; i++) {
|
||||
var value = channel.getRequestHeader(headers[i]);
|
||||
is(value, "test" + i, "Setting " + headers[i] + " header in privileged context");
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=308484
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 308484</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=308484">Mozilla Bug 308484</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 308484 **/
|
||||
|
||||
var headers = ["Host", "Content-Length", "Transfer-Encoding", "Via", "Upgrade"];
|
||||
var i, request;
|
||||
|
||||
// Try setting headers in unprivileged context
|
||||
request = new XMLHttpRequest();
|
||||
request.open("GET", window.location.href);
|
||||
for (i = 0; i < headers.length; i++)
|
||||
request.setRequestHeader(headers[i], "test" + i);
|
||||
|
||||
// Read out headers
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect UniversalBrowserWrite");
|
||||
var channel = request.channel.QueryInterface(Components.interfaces.nsIHttpChannel);
|
||||
for (i = 0; i < headers.length; i++) {
|
||||
// Retrieving Content-Length will throw an exception
|
||||
var value = null;
|
||||
try {
|
||||
value = channel.getRequestHeader(headers[i]);
|
||||
}
|
||||
catch(e) {}
|
||||
|
||||
isnot(value, "test" + i, "Setting " + headers[i] + " header in unprivileged context");
|
||||
}
|
||||
|
||||
// Try setting headers in privileged context
|
||||
request = new XMLHttpRequest();
|
||||
request.open("GET", window.location.href);
|
||||
for (i = 0; i < headers.length; i++)
|
||||
request.setRequestHeader(headers[i], "test" + i);
|
||||
|
||||
// Read out headers
|
||||
var channel = request.channel.QueryInterface(Components.interfaces.nsIHttpChannel);
|
||||
for (i = 0; i < headers.length; i++) {
|
||||
var value = channel.getRequestHeader(headers[i]);
|
||||
is(value, "test" + i, "Setting " + headers[i] + " header in privileged context");
|
||||
}
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
49
content/base/test/test_bug431833.html
Normal file
49
content/base/test/test_bug431833.html
Normal file
@ -0,0 +1,49 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=431833
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 431833</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=431833">Mozilla Bug 431833</a>
|
||||
<p id="display">
|
||||
<iframe id="f1" src="data:text/html,1"></iframe>
|
||||
<iframe id="f2" src="data:text/html,2"></iframe>
|
||||
<iframe id="f3" src="data:text/html,<iframe id='f4' src='data:text/html,3'></iframe>"></iframe>
|
||||
</p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
/** Test for Bug 431833 **/
|
||||
|
||||
var str = "FAIL";
|
||||
function test(e) {
|
||||
if (str == "FAIL")
|
||||
str = "";
|
||||
|
||||
str += "PASS: " + e.target.id + '. ';
|
||||
}
|
||||
|
||||
window.addEventListener('DOMFrameContentLoaded',test,true);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
addLoadEvent(function() {
|
||||
is(str, "PASS: f1. PASS: f2. PASS: f3. PASS: f4. ",
|
||||
"DOMFrameContentLoaded events didn't fire?");
|
||||
});
|
||||
|
||||
addLoadEvent(SimpleTest.finish);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -71,6 +71,13 @@ nsDOMMessageEvent::GetOrigin(nsAString& aOrigin)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMMessageEvent::GetLastEventId(nsAString& aLastEventId)
|
||||
{
|
||||
aLastEventId = mLastEventId;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsDOMMessageEvent::GetSource(nsIDOMWindow** aSource)
|
||||
{
|
||||
@ -84,6 +91,7 @@ nsDOMMessageEvent::InitMessageEvent(const nsAString& aType,
|
||||
PRBool aCancelable,
|
||||
const nsAString& aData,
|
||||
const nsAString& aOrigin,
|
||||
const nsAString& aLastEventId,
|
||||
nsIDOMWindow* aSource)
|
||||
{
|
||||
nsresult rv = nsDOMEvent::InitEvent(aType, aCanBubble, aCancelable);
|
||||
@ -91,6 +99,7 @@ nsDOMMessageEvent::InitMessageEvent(const nsAString& aType,
|
||||
|
||||
mData = aData;
|
||||
mOrigin = aOrigin;
|
||||
mLastEventId = aLastEventId;
|
||||
mSource = aSource;
|
||||
|
||||
return NS_OK;
|
||||
@ -103,6 +112,7 @@ nsDOMMessageEvent::InitMessageEventNS(const nsAString& aNamespaceURI,
|
||||
PRBool aCancelable,
|
||||
const nsAString& aData,
|
||||
const nsAString& aOrigin,
|
||||
const nsAString& aLastEventId,
|
||||
nsIDOMWindow* aSource)
|
||||
{
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
|
@ -44,7 +44,8 @@
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
|
||||
/**
|
||||
* Implements the MessageEvent event, used for cross-document messaging.
|
||||
* Implements the MessageEvent event, used for cross-document messaging and
|
||||
* server-sent events.
|
||||
*
|
||||
* See http://www.whatwg.org/specs/web-apps/current-work/#messageevent for
|
||||
* further details.
|
||||
@ -69,6 +70,7 @@ public:
|
||||
private:
|
||||
nsString mData;
|
||||
nsString mOrigin;
|
||||
nsString mLastEventId;
|
||||
nsCOMPtr<nsIDOMWindow> mSource;
|
||||
};
|
||||
|
||||
|
@ -1358,7 +1358,13 @@ nsGenericHTMLElement::GetEventListenerManagerForAttr(nsIEventListenerManager** a
|
||||
// override BindToTree for those classes and munge event listeners there?
|
||||
nsIDocument *document = GetOwnerDoc();
|
||||
nsresult rv = NS_OK;
|
||||
if (document && (win = document->GetInnerWindow())) {
|
||||
|
||||
// FIXME (https://bugzilla.mozilla.org/show_bug.cgi?id=431767)
|
||||
// nsDocument::GetInnerWindow can return an outer window in some cases,
|
||||
// we don't want to stick an event listener on an outer window, so
|
||||
// bail if it does.
|
||||
if (document &&
|
||||
(win = document->GetInnerWindow()) && win->IsInnerWindow()) {
|
||||
nsCOMPtr<nsPIDOMEventTarget> piTarget(do_QueryInterface(win));
|
||||
NS_ENSURE_TRUE(piTarget, NS_ERROR_FAILURE);
|
||||
|
||||
|
@ -1,25 +1,25 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
#div1 {
|
||||
color: green;
|
||||
-moz-binding: url(file_bug379959_xbl.xml#xbltest);
|
||||
}
|
||||
#div2 {
|
||||
color: green;
|
||||
-moz-binding: url(http://example.com/tests/content/xbl/test/file_bug379959_xbl.xml#xbltest);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="div1"></div>
|
||||
<div id="div2"></div>
|
||||
<script>
|
||||
onload = function() {
|
||||
nodes = document.getAnonymousNodes(document.getElementById('div1'));
|
||||
parent.postMessage(nodes ? nodes.length : 0);
|
||||
nodes = document.getAnonymousNodes(document.getElementById('div2'));
|
||||
parent.postMessage(nodes ? nodes.length : 0);
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
#div1 {
|
||||
color: green;
|
||||
-moz-binding: url(file_bug379959_xbl.xml#xbltest);
|
||||
}
|
||||
#div2 {
|
||||
color: green;
|
||||
-moz-binding: url(http://example.com/tests/content/xbl/test/file_bug379959_xbl.xml#xbltest);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="div1"></div>
|
||||
<div id="div2"></div>
|
||||
<script>
|
||||
onload = function() {
|
||||
nodes = document.getAnonymousNodes(document.getElementById('div1'));
|
||||
parent.postMessage(nodes ? nodes.length : 0, "http://localhost:8888");
|
||||
nodes = document.getAnonymousNodes(document.getElementById('div2'));
|
||||
parent.postMessage(nodes ? nodes.length : 0, "http://localhost:8888");
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
|
@ -1,18 +1,18 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
#d {
|
||||
color: green;
|
||||
-moz-binding: url(data:text/xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Cbindings%20id%3D%22xbltestBindings%22%20xmlns%3D%22http%3A//www.mozilla.org/xbl%22%3E%0A%20%20%3Cbinding%20id%3D%22xbltest%22%3E%3Ccontent%3EPASS%3C/content%3E%3C/binding%3E%0A%3C/bindings%3E%0A);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="d"></div>
|
||||
<script>
|
||||
onload = function() {
|
||||
nodes = document.getAnonymousNodes(document.getElementById('d'));
|
||||
parent.postMessage(nodes ? nodes.length : 0);
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<style>
|
||||
#d {
|
||||
color: green;
|
||||
-moz-binding: url(data:text/xml;charset=utf-8,%3C%3Fxml%20version%3D%221.0%22%3F%3E%0A%3Cbindings%20id%3D%22xbltestBindings%22%20xmlns%3D%22http%3A//www.mozilla.org/xbl%22%3E%0A%20%20%3Cbinding%20id%3D%22xbltest%22%3E%3Ccontent%3EPASS%3C/content%3E%3C/binding%3E%0A%3C/bindings%3E%0A);
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="d"></div>
|
||||
<script>
|
||||
onload = function() {
|
||||
nodes = document.getAnonymousNodes(document.getElementById('d'));
|
||||
parent.postMessage(nodes ? nodes.length : 0, "http://localhost:8888");
|
||||
}
|
||||
</script>
|
||||
</html>
|
||||
|
@ -27,9 +27,14 @@ SimpleTest.waitForExplicitFinish();
|
||||
gen = runTest();
|
||||
var messages = 0;
|
||||
|
||||
document.addEventListener("message",
|
||||
function(e) { messages++; gen.send(e.data); },
|
||||
false);
|
||||
function receiveMessage(e)
|
||||
{
|
||||
is(e.origin, "http://localhost:8888", "wrong sender!");
|
||||
messages++;
|
||||
gen.send(e.data);
|
||||
}
|
||||
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
const prefName = "layout.debug.enable_data_xbl";
|
||||
|
||||
|
@ -44,7 +44,7 @@ interface nsIControllers;
|
||||
interface nsIDOMLocation;
|
||||
interface nsIVariant;
|
||||
|
||||
[scriptable, uuid(89b9ff5a-78db-430b-b3b4-66469457435a)]
|
||||
[scriptable, uuid(3414EBC7-731F-4697-9F43-ACA6F5050875)]
|
||||
interface nsIDOMWindowInternal : nsIDOMWindow2
|
||||
{
|
||||
readonly attribute nsIDOMWindowInternal window;
|
||||
@ -205,15 +205,19 @@ interface nsIDOMWindowInternal : nsIDOMWindow2
|
||||
* Implements a safe message-passing system which can cross same-origin
|
||||
* boundaries.
|
||||
*
|
||||
* This method, when called, causes a MessageEvent to be dispatched at the
|
||||
* primary document for the window upon which this method is called. (Note
|
||||
* that the postMessage property on windows is allAccess and thus is readable
|
||||
* cross-origin.) The dispatched event will have message as its data, the
|
||||
* calling context's window as its source, and a domain and URI determined by
|
||||
* the calling context's main document URI.
|
||||
* This method, when called, causes a MessageEvent to be asynchronously
|
||||
* dispatched at the primary document for the window upon which this method is
|
||||
* called. (Note that the postMessage property on windows is allAccess and
|
||||
* thus is readable cross-origin.) The dispatched event will have message as
|
||||
* its data, the calling context's window as its source, and an origin
|
||||
* determined by the calling context's main document URI. The targetOrigin
|
||||
* argument specifies a URI and is used to restrict the message to be sent
|
||||
* only when the target window has the same origin as targetOrigin (since,
|
||||
* when the sender and the target have different origins, neither can read the
|
||||
* location of the other).
|
||||
*
|
||||
* See the WHATWG HTML5 specification, section 6.4, for more details.
|
||||
*/
|
||||
[binaryname(PostMessageMoz)] void postMessage(in DOMString message,
|
||||
[optional] in DOMString origin);
|
||||
in DOMString targetOrigin);
|
||||
};
|
||||
|
@ -43,9 +43,9 @@
|
||||
* cross-domain messaging.
|
||||
*
|
||||
* For more information on this interface, please see
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/multipage/section-event0.html#event0
|
||||
* http://www.whatwg.org/specs/web-apps/current-work/#messageevent
|
||||
*/
|
||||
[scriptable, uuid(ca081997-91f9-40c1-890c-3edf39b6c571)]
|
||||
[scriptable, uuid(98150805-6A15-4667-815A-1A8C87CB4BBC)]
|
||||
interface nsIDOMMessageEvent : nsIDOMEvent
|
||||
{
|
||||
/**
|
||||
@ -60,6 +60,12 @@ interface nsIDOMMessageEvent : nsIDOMEvent
|
||||
* ":" followed by that port. This value does not have a trailing slash.
|
||||
*/
|
||||
readonly attribute DOMString origin;
|
||||
|
||||
/**
|
||||
* The last event ID string of the event source, for server-sent DOM events; this
|
||||
* value is the empty string for cross-origin messaging.
|
||||
*/
|
||||
readonly attribute DOMString lastEventId;
|
||||
|
||||
/**
|
||||
* The window which originated this event.
|
||||
@ -69,19 +75,20 @@ interface nsIDOMMessageEvent : nsIDOMEvent
|
||||
/**
|
||||
* Initializes this event with the given data, in a manner analogous to
|
||||
* the similarly-named method on the nsIDOMEvent interface, also setting the
|
||||
* data, origin, and source attributes of this appropriately.
|
||||
* data, origin, source, and lastEventId attributes of this appropriately.
|
||||
*/
|
||||
void initMessageEvent(in DOMString aType,
|
||||
in boolean aCanBubble,
|
||||
in boolean aCancelable,
|
||||
in DOMString aData,
|
||||
in DOMString aOrigin,
|
||||
in DOMString aLastEventId,
|
||||
in nsIDOMWindow aSource);
|
||||
|
||||
/**
|
||||
* Initializes this event with the given data, in a manner analogous to
|
||||
* the similarly-named method on the Event interface, also setting the data,
|
||||
* origin, and source attributes of this appropriately.
|
||||
* origin, source, and lastEventId attributes of this appropriately.
|
||||
*/
|
||||
void initMessageEventNS(in DOMString aNamespaceURI,
|
||||
in DOMString aType,
|
||||
@ -89,5 +96,6 @@ interface nsIDOMMessageEvent : nsIDOMEvent
|
||||
in boolean aCancelable,
|
||||
in DOMString aData,
|
||||
in DOMString aOrigin,
|
||||
in DOMString aLastEventId,
|
||||
in nsIDOMWindow aSource);
|
||||
};
|
||||
|
@ -2241,45 +2241,45 @@ nsGlobalWindow::PostHandleEvent(nsEventChainPostVisitor& aVisitor)
|
||||
// Set / unset the "active" attribute on the documentElement
|
||||
// of the top level window
|
||||
nsCOMPtr<nsIWidget> mainWidget = GetMainWidget();
|
||||
NS_ENSURE_TRUE(mainWidget, nsnull);
|
||||
if (mainWidget) {
|
||||
// Get the top level widget (if the main widget is a sheet, this will
|
||||
// be the sheet's top (non-sheet) parent).
|
||||
nsCOMPtr<nsIWidget> topLevelWidget = mainWidget->GetSheetWindowParent();
|
||||
if (!topLevelWidget)
|
||||
topLevelWidget = mainWidget;
|
||||
|
||||
// Get the top level widget (if the main widget is a sheet, this will
|
||||
// be the sheet's top (non-sheet) parent).
|
||||
nsCOMPtr<nsIWidget> topLevelWidget = mainWidget->GetSheetWindowParent();
|
||||
if (!topLevelWidget)
|
||||
topLevelWidget = mainWidget;
|
||||
// Get the top level widget's nsGlobalWindow
|
||||
nsCOMPtr<nsIDOMWindowInternal> topLevelWindow;
|
||||
if (topLevelWidget == mainWidget) {
|
||||
topLevelWindow = static_cast<nsIDOMWindowInternal *>(this);
|
||||
} else {
|
||||
// This is a workaround for the following problem:
|
||||
// When a window with an open sheet loses focus, only the sheet window
|
||||
// receives the NS_DEACTIVATE event. However, it's not the sheet that
|
||||
// should lose the "active" attribute, but the containing top level window.
|
||||
void* clientData;
|
||||
topLevelWidget->GetClientData(clientData); // clientData is nsXULWindow
|
||||
nsISupports* data = static_cast<nsISupports*>(clientData);
|
||||
nsCOMPtr<nsIInterfaceRequestor> req(do_QueryInterface(data));
|
||||
topLevelWindow = do_GetInterface(req);
|
||||
}
|
||||
|
||||
// Get the top level widget's nsGlobalWindow
|
||||
nsCOMPtr<nsIDOMWindowInternal> topLevelWindow;
|
||||
if (topLevelWidget == mainWidget) {
|
||||
topLevelWindow = static_cast<nsIDOMWindowInternal *>(this);
|
||||
} else {
|
||||
// This is a workaround for the following problem:
|
||||
// When a window with an open sheet loses focus, only the sheet window
|
||||
// receives the NS_DEACTIVATE event. However, it's not the sheet that
|
||||
// should lose the "active" attribute, but the containing top level window.
|
||||
void* clientData;
|
||||
topLevelWidget->GetClientData(clientData); // clientData is nsXULWindow
|
||||
nsISupports* data = static_cast<nsISupports*>(clientData);
|
||||
nsCOMPtr<nsIInterfaceRequestor> req(do_QueryInterface(data));
|
||||
topLevelWindow = do_GetInterface(req);
|
||||
}
|
||||
|
||||
if (topLevelWindow) {
|
||||
// Only set the attribute if the document is a XUL document and the
|
||||
// window is a chrome window
|
||||
nsCOMPtr<nsIDOMDocument> domDoc;
|
||||
topLevelWindow->GetDocument(getter_AddRefs(domDoc));
|
||||
nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc));
|
||||
nsCOMPtr<nsIDOMXULDocument> xulDoc(do_QueryInterface(doc));
|
||||
nsCOMPtr<nsIDOMChromeWindow> chromeWin = do_QueryInterface(topLevelWindow);
|
||||
if (xulDoc && chromeWin) {
|
||||
nsCOMPtr<nsIContent> rootElem = doc->GetRootContent();
|
||||
if (aVisitor.mEvent->message == NS_ACTIVATE)
|
||||
rootElem->SetAttr(kNameSpaceID_None, nsGkAtoms::active,
|
||||
NS_LITERAL_STRING("true"), PR_TRUE);
|
||||
else
|
||||
rootElem->UnsetAttr(kNameSpaceID_None, nsGkAtoms::active, PR_TRUE);
|
||||
if (topLevelWindow) {
|
||||
// Only set the attribute if the document is a XUL document and the
|
||||
// window is a chrome window
|
||||
nsCOMPtr<nsIDOMDocument> domDoc;
|
||||
topLevelWindow->GetDocument(getter_AddRefs(domDoc));
|
||||
nsCOMPtr<nsIDocument> doc(do_QueryInterface(domDoc));
|
||||
nsCOMPtr<nsIDOMXULDocument> xulDoc(do_QueryInterface(doc));
|
||||
nsCOMPtr<nsIDOMChromeWindow> chromeWin = do_QueryInterface(topLevelWindow);
|
||||
if (xulDoc && chromeWin) {
|
||||
nsCOMPtr<nsIContent> rootElem = doc->GetRootContent();
|
||||
if (aVisitor.mEvent->message == NS_ACTIVATE)
|
||||
rootElem->SetAttr(kNameSpaceID_None, nsGkAtoms::active,
|
||||
NS_LITERAL_STRING("true"), PR_TRUE);
|
||||
else
|
||||
rootElem->UnsetAttr(kNameSpaceID_None, nsGkAtoms::active, PR_TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -5186,10 +5186,155 @@ nsGlobalWindow::CallerInnerWindow()
|
||||
return static_cast<nsGlobalWindow*>(win.get());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Class used to represent events generated by calls to Window.postMessage,
|
||||
* which asynchronously creates and dispatches events.
|
||||
*/
|
||||
class PostMessageEvent : public nsRunnable
|
||||
{
|
||||
public:
|
||||
NS_DECL_NSIRUNNABLE
|
||||
|
||||
PostMessageEvent(nsGlobalWindow* aSource,
|
||||
const nsAString& aCallerOrigin,
|
||||
const nsAString& aMessage,
|
||||
nsGlobalWindow* aTargetWindow,
|
||||
nsIURI* aProvidedOrigin,
|
||||
PRBool aTrustedCaller)
|
||||
: mSource(aSource),
|
||||
mCallerOrigin(aCallerOrigin),
|
||||
mMessage(aMessage),
|
||||
mTargetWindow(aTargetWindow),
|
||||
mProvidedOrigin(aProvidedOrigin),
|
||||
mTrustedCaller(aTrustedCaller)
|
||||
{
|
||||
MOZ_COUNT_CTOR(PostMessageEvent);
|
||||
}
|
||||
|
||||
~PostMessageEvent()
|
||||
{
|
||||
MOZ_COUNT_DTOR(PostMessageEvent);
|
||||
}
|
||||
|
||||
private:
|
||||
nsRefPtr<nsGlobalWindow> mSource;
|
||||
nsString mCallerOrigin;
|
||||
nsString mMessage;
|
||||
nsRefPtr<nsGlobalWindow> mTargetWindow;
|
||||
nsCOMPtr<nsIURI> mProvidedOrigin;
|
||||
PRBool mTrustedCaller;
|
||||
};
|
||||
|
||||
NS_IMETHODIMP
|
||||
PostMessageEvent::Run()
|
||||
{
|
||||
NS_ABORT_IF_FALSE(mTargetWindow->IsOuterWindow(),
|
||||
"should have been passed an outer window!");
|
||||
NS_ABORT_IF_FALSE(!mSource || mSource->IsOuterWindow(),
|
||||
"should have been passed an outer window!");
|
||||
|
||||
nsRefPtr<nsGlobalWindow> targetWindow =
|
||||
mTargetWindow->GetCurrentInnerWindowInternal();
|
||||
NS_ABORT_IF_FALSE(targetWindow->IsInnerWindow(),
|
||||
"we ordered an inner window!");
|
||||
|
||||
// Ensure that any origin which might have been provided is the origin of this
|
||||
// window's document. Note that we do this *now* instead of when postMessage
|
||||
// is called because the target window might have been navigated to a
|
||||
// different location between then and now. If this check happened when
|
||||
// postMessage was called, it would be fairly easy for a malicious webpage to
|
||||
// intercept messages intended for another site by carefully timing navigation
|
||||
// of the target window so it changed location after postMessage but before
|
||||
// now.
|
||||
if (mProvidedOrigin) {
|
||||
// Get the target's origin either from its principal or, in the case the
|
||||
// principal doesn't carry a URI (e.g. the system principal), the target's
|
||||
// document.
|
||||
nsIPrincipal* targetPrin = targetWindow->GetPrincipal();
|
||||
if (!targetPrin)
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIURI> targetURI;
|
||||
if (NS_FAILED(targetPrin->GetURI(getter_AddRefs(targetURI))))
|
||||
return NS_OK;
|
||||
if (!targetURI) {
|
||||
targetURI = targetWindow->mDoc->GetDocumentURI();
|
||||
if (!targetURI)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Note: This is contrary to the spec with respect to file: URLs, which
|
||||
// the spec groups into a single origin, but given we intentionally
|
||||
// don't do that in other places it seems better to hold the line for
|
||||
// now. Long-term, we want HTML5 to address this so that we can
|
||||
// be compliant while being safer.
|
||||
nsIScriptSecurityManager* ssm = nsContentUtils::GetSecurityManager();
|
||||
nsresult rv =
|
||||
ssm->CheckSameOriginURI(mProvidedOrigin, targetURI, PR_TRUE);
|
||||
if (NS_FAILED(rv))
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Create the event
|
||||
nsCOMPtr<nsIDOMDocumentEvent> docEvent =
|
||||
do_QueryInterface(targetWindow->mDocument);
|
||||
if (!docEvent)
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIDOMEvent> event;
|
||||
docEvent->CreateEvent(NS_LITERAL_STRING("MessageEvent"),
|
||||
getter_AddRefs(event));
|
||||
if (!event)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMMessageEvent> message = do_QueryInterface(event);
|
||||
nsresult rv = message->InitMessageEvent(NS_LITERAL_STRING("message"),
|
||||
PR_FALSE /* non-bubbling */,
|
||||
PR_TRUE /* cancelable */,
|
||||
mMessage,
|
||||
mCallerOrigin,
|
||||
EmptyString(),
|
||||
mSource);
|
||||
if (NS_FAILED(rv))
|
||||
return NS_OK;
|
||||
|
||||
|
||||
// We can't simply call dispatchEvent on the window because doing so ends
|
||||
// up flipping the trusted bit on the event, and we don't want that to
|
||||
// happen because then untrusted content can call postMessage on a chrome
|
||||
// window if it can get a reference to it.
|
||||
|
||||
nsIPresShell *shell = targetWindow->mDoc->GetPrimaryShell();
|
||||
nsRefPtr<nsPresContext> presContext;
|
||||
if (shell)
|
||||
presContext = shell->GetPresContext();
|
||||
|
||||
nsEvent* internalEvent;
|
||||
nsCOMPtr<nsIPrivateDOMEvent> privEvent = do_QueryInterface(message);
|
||||
privEvent->SetTrusted(mTrustedCaller);
|
||||
privEvent->GetInternalNSEvent(&internalEvent);
|
||||
|
||||
nsEventStatus status = nsEventStatus_eIgnore;
|
||||
nsEventDispatcher::Dispatch(static_cast<nsPIDOMWindow*>(mTargetWindow),
|
||||
presContext,
|
||||
internalEvent,
|
||||
message,
|
||||
&status);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsGlobalWindow::PostMessageMoz(const nsAString& aMessage, const nsAString& aOrigin)
|
||||
{
|
||||
FORWARD_TO_INNER_CREATE(PostMessageMoz, (aMessage, aOrigin));
|
||||
// NB: Since much of what this method does must happen at event dispatch time,
|
||||
// this method does not forward to the inner window, unlike most other
|
||||
// methods. We do this because the only time we need to refer to this
|
||||
// window, we need a reference to the outer window (the PostMessageEvent
|
||||
// ctor call), and we don't want to pay the price of forwarding to the
|
||||
// inner window for no actual benefit. Furthermore, this function must
|
||||
// only be called from script anyway, which should only have references to
|
||||
// outer windows (and if script has an inner window we've already lost).
|
||||
NS_ABORT_IF_FALSE(IsOuterWindow(), "only call this method on outer windows");
|
||||
|
||||
//
|
||||
// Window.postMessage is an intentional subversion of the same-origin policy.
|
||||
@ -5199,30 +5344,36 @@ nsGlobalWindow::PostMessageMoz(const nsAString& aMessage, const nsAString& aOrig
|
||||
// http://www.whatwg.org/specs/web-apps/current-work/multipage/section-crossDocumentMessages.html
|
||||
//
|
||||
|
||||
|
||||
// First, get the caller's window
|
||||
nsRefPtr<nsGlobalWindow> callerInnerWin = CallerInnerWindow();
|
||||
if (!callerInnerWin)
|
||||
return NS_OK;
|
||||
NS_ASSERTION(callerInnerWin->IsInnerWindow(), "should have gotten an inner window here");
|
||||
NS_ABORT_IF_FALSE(callerInnerWin->IsInnerWindow(),
|
||||
"should have gotten an inner window here");
|
||||
|
||||
// Compute the caller's origin either from its principal or, in the case the
|
||||
// principal doesn't carry a URI (e.g. the system principal), the caller's
|
||||
// document.
|
||||
// document. We must get this now instead of when the event is created and
|
||||
// dispatched, because ultimately it is the identity of the calling window
|
||||
// *now* that determines who sent the message (and not an identity which might
|
||||
// have changed due to intervening navigations).
|
||||
nsIPrincipal* callerPrin = callerInnerWin->GetPrincipal();
|
||||
if (!callerPrin)
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIURI> callerURI;
|
||||
if (NS_FAILED(callerPrin->GetURI(getter_AddRefs(callerURI))))
|
||||
nsCOMPtr<nsIURI> callerOuterURI;
|
||||
if (NS_FAILED(callerPrin->GetURI(getter_AddRefs(callerOuterURI))))
|
||||
return NS_OK;
|
||||
if (!callerURI) {
|
||||
if (!callerOuterURI) {
|
||||
nsCOMPtr<nsIDocument> doc = do_QueryInterface(callerInnerWin->mDocument);
|
||||
if (!doc)
|
||||
return NS_OK;
|
||||
callerURI = doc->GetDocumentURI();
|
||||
if (!callerURI)
|
||||
callerOuterURI = doc->GetDocumentURI();
|
||||
if (!callerOuterURI)
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsIURI> callerURI = NS_GetInnermostURI(callerOuterURI);
|
||||
if (!callerURI)
|
||||
return NS_OK;
|
||||
const nsCString& empty = EmptyCString();
|
||||
nsCOMPtr<nsIURI> callerOrigin;
|
||||
if (NS_FAILED(callerURI->Clone(getter_AddRefs(callerOrigin))) ||
|
||||
@ -5230,97 +5381,33 @@ nsGlobalWindow::PostMessageMoz(const nsAString& aMessage, const nsAString& aOrig
|
||||
return NS_OK;
|
||||
|
||||
|
||||
// Calling postMessage on a closed window does nothing.
|
||||
if (!mDocument)
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMEventTarget> targetDoc = do_QueryInterface(mDocument);
|
||||
nsCOMPtr<nsIDOMDocumentEvent> docEvent = do_QueryInterface(mDocument);
|
||||
|
||||
|
||||
// Ensure that any origin which might have been provided is the origin of this
|
||||
// window's document.
|
||||
if (!aOrigin.IsVoid()) {
|
||||
nsCOMPtr<nsIURI> providedOrigin;
|
||||
// Convert the provided origin string into a URI for comparison purposes.
|
||||
// "*" indicates no specific origin is required.
|
||||
nsCOMPtr<nsIURI> providedOrigin;
|
||||
if (!aOrigin.EqualsASCII("*")) {
|
||||
if (NS_FAILED(NS_NewURI(getter_AddRefs(providedOrigin), aOrigin)))
|
||||
return NS_ERROR_DOM_SYNTAX_ERR;
|
||||
if (NS_FAILED(providedOrigin->SetUserPass(empty)) ||
|
||||
NS_FAILED(providedOrigin->SetPath(empty)))
|
||||
return NS_OK;
|
||||
|
||||
// Get the target's origin either from its principal or, in the case the
|
||||
// principal doesn't carry a URI (e.g. the system principal), the target's
|
||||
// document.
|
||||
nsIPrincipal* targetPrin = GetPrincipal();
|
||||
if (!targetPrin)
|
||||
return NS_OK;
|
||||
nsCOMPtr<nsIURI> targetURI;
|
||||
if (NS_FAILED(targetPrin->GetURI(getter_AddRefs(targetURI))))
|
||||
return NS_OK;
|
||||
if (!targetURI) {
|
||||
nsCOMPtr<nsIDocument> targetDoc = do_QueryInterface(mDocument);
|
||||
if (!targetDoc)
|
||||
return NS_OK;
|
||||
targetURI = targetDoc->GetDocumentURI();
|
||||
if (!targetURI)
|
||||
return NS_OK;
|
||||
}
|
||||
nsCOMPtr<nsIURI> targetOrigin;
|
||||
if (NS_FAILED(targetURI->Clone(getter_AddRefs(targetOrigin))) ||
|
||||
NS_FAILED(targetOrigin->SetUserPass(empty)) ||
|
||||
NS_FAILED(targetOrigin->SetPath(empty)))
|
||||
return NS_OK;
|
||||
|
||||
PRBool equal = PR_FALSE;
|
||||
if (NS_FAILED(targetOrigin->Equals(providedOrigin, &equal)) || !equal)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
// Create the event
|
||||
nsCOMPtr<nsIDOMEvent> event;
|
||||
docEvent->CreateEvent(NS_LITERAL_STRING("MessageEvent"),
|
||||
getter_AddRefs(event));
|
||||
if (!event)
|
||||
return NS_OK;
|
||||
|
||||
nsCAutoString origin;
|
||||
if (NS_FAILED(callerOrigin->GetPrePath(origin)))
|
||||
return NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMMessageEvent> message = do_QueryInterface(event);
|
||||
nsresult rv = message->InitMessageEvent(NS_LITERAL_STRING("message"),
|
||||
PR_TRUE /* bubbling */,
|
||||
PR_TRUE /* cancelable */,
|
||||
aMessage,
|
||||
NS_ConvertUTF8toUTF16(origin),
|
||||
nsContentUtils::IsCallerChrome()
|
||||
? nsnull
|
||||
: callerInnerWin->GetOuterWindowInternal());
|
||||
if (NS_FAILED(rv))
|
||||
return NS_OK;
|
||||
|
||||
|
||||
// Finally, dispatch the event, ignoring the result to prevent an exception
|
||||
// from revealing anything about the document for this window.
|
||||
PRBool dummy;
|
||||
targetDoc->DispatchEvent(message, &dummy);
|
||||
|
||||
// Cancel exceptions that might somehow be pending. XPConnect swallows these
|
||||
// exceptions across JS contexts, but there can be concerns if the caller
|
||||
// and the thrower are same-context but different-origin -- see bug 387706
|
||||
// comment 26, waring the typo in it. Consequently, we play it safe and always
|
||||
// cancel exceptions.
|
||||
nsAXPCNativeCallContext *ncc;
|
||||
rv = nsContentUtils::XPConnect()->GetCurrentNativeCallContext(&ncc);
|
||||
if (NS_FAILED(rv) || !ncc)
|
||||
return NS_OK;
|
||||
|
||||
JSContext *cx = nsnull;
|
||||
if (NS_SUCCEEDED(ncc->GetJSContext(&cx)))
|
||||
::JS_ClearPendingException(cx);
|
||||
|
||||
return NS_OK;
|
||||
// Create and asynchronously dispatch a runnable which will handle actual DOM
|
||||
// event creation and dispatch.
|
||||
nsRefPtr<PostMessageEvent> event =
|
||||
new PostMessageEvent(nsContentUtils::IsCallerChrome()
|
||||
? nsnull
|
||||
: callerInnerWin->GetOuterWindowInternal(),
|
||||
NS_ConvertUTF8toUTF16(origin),
|
||||
aMessage,
|
||||
this,
|
||||
providedOrigin,
|
||||
nsContentUtils::IsCallerTrustedForWrite());
|
||||
return NS_DispatchToCurrentThread(event);
|
||||
}
|
||||
|
||||
class nsCloseEvent : public nsRunnable {
|
||||
|
@ -122,6 +122,7 @@ class nsGlobalWindow;
|
||||
#ifdef OJI
|
||||
class nsDummyJavaPluginOwner;
|
||||
#endif
|
||||
class PostMessageEvent;
|
||||
|
||||
class nsDOMOfflineResourceList;
|
||||
class nsDOMOfflineLoadStatusList;
|
||||
@ -743,6 +744,7 @@ protected:
|
||||
|
||||
friend class nsDOMScriptableHelper;
|
||||
friend class nsDOMWindowUtils;
|
||||
friend class PostMessageEvent;
|
||||
static nsIFactory *sComputedDOMStyleFactory;
|
||||
};
|
||||
|
||||
|
@ -57,7 +57,7 @@ function run()
|
||||
catch (ex) {
|
||||
}
|
||||
|
||||
window.parent.postMessage(message);
|
||||
window.parent.postMessage(message, "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -23,7 +23,7 @@ function run()
|
||||
message += "\n failed globalStorage[sub1.ält.example.org]";
|
||||
}
|
||||
|
||||
window.parent.postMessage(message);
|
||||
window.parent.postMessage(message, "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -52,7 +52,7 @@ function run()
|
||||
catch (ex) {
|
||||
}
|
||||
|
||||
window.parent.postMessage(message);
|
||||
window.parent.postMessage(message, "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -31,7 +31,7 @@ function run()
|
||||
message += "\n failed globalStorage[\"example.org\"]";
|
||||
}
|
||||
|
||||
window.parent.postMessage(message);
|
||||
window.parent.postMessage(message, "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -36,7 +36,7 @@ function receiveMessage(evt)
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
@ -29,7 +29,7 @@ function receiveMessage(evt)
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -31,7 +31,7 @@ function receiveMessage(evt)
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
@ -27,7 +27,7 @@ function run()
|
||||
message += " ip-address-mutated-on-throw(" + domain + ")";
|
||||
}
|
||||
|
||||
window.parent.postMessage(message);
|
||||
window.parent.postMessage(message, "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -56,7 +56,7 @@ function receiveMessage(evt)
|
||||
break;
|
||||
}
|
||||
|
||||
evt.source.postMessage(message);
|
||||
evt.source.postMessage(message, evt.origin);
|
||||
}
|
||||
|
||||
function idnTest(newDomain)
|
||||
@ -91,7 +91,7 @@ function punycodeTest(newDomain)
|
||||
return errors;
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</head>
|
||||
|
@ -89,12 +89,12 @@ function receiveMessage(evt)
|
||||
if (/test$/.test(origin))
|
||||
{
|
||||
// XXX bug 414090
|
||||
// The value of MessageEvent.domain with postMessage *should* always be IDN;
|
||||
// The value of MessageEvent.origin with postMessage *should* always be IDN;
|
||||
// unfortunately, given our current setup for dealing with Unicode-based
|
||||
// domain-name spoofing, whether a domain is in the safe-for-IDN whitelist
|
||||
// affects the value of this property (likewise for window.location,
|
||||
// document.location, MessageEvent.uri, document.domain, and probably a slew
|
||||
// of other things). :-(
|
||||
// document.location, document.domain, and probably a slew of other
|
||||
// things). :-(
|
||||
//
|
||||
// These two tests should illustrate what currently happens and what should
|
||||
// happen once bug 414090 is fixed.
|
||||
@ -147,22 +147,60 @@ function receiveMessage(evt)
|
||||
|
||||
function run()
|
||||
{
|
||||
window.frames.idnKidWhitelist.postMessage("idn-whitelist");
|
||||
ok(gotIDNWhitelist, "IDN whitelist message not received");
|
||||
var target = window.frames.idnKidWhitelist;
|
||||
target.postMessage("idn-whitelist", "http://sub1.παράδειγμα.δοκιμή");
|
||||
|
||||
window.frames.punycodeKidWhitelist.postMessage("punycode-whitelist");
|
||||
ok(gotPunycodeWhitelist, "punycode whitelist message not received");
|
||||
// Double-timeouts account for 1) delay for message to be received by target
|
||||
// window and 2) delay for response from target window to be received by this
|
||||
// window.
|
||||
|
||||
window.frames.idnKidNoWhitelist.postMessage("idn-nowhitelist");
|
||||
ok(gotIDNNoWhitelist, "IDN no-whitelist message not received");
|
||||
setTimeout(function()
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
ok(gotIDNWhitelist, "IDN whitelist message not received");
|
||||
|
||||
window.frames.punycodeKidNoWhitelist.postMessage("punycode-nowhitelist");
|
||||
ok(gotPunycodeNoWhitelist, "punycode no-whitelist message not received");
|
||||
var target = window.frames.punycodeKidWhitelist;
|
||||
target.postMessage("punycode-whitelist", "http://sub1.παράδειγμα.δοκιμή");
|
||||
|
||||
SimpleTest.finish();
|
||||
setTimeout(function()
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
ok(gotPunycodeWhitelist, "punycode whitelist message not received");
|
||||
|
||||
var target = window.frames.idnKidNoWhitelist;
|
||||
target.postMessage("idn-nowhitelist", "http://sub1.exämple.test");
|
||||
|
||||
setTimeout(function()
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
ok(gotIDNNoWhitelist, "IDN no-whitelist message not received");
|
||||
|
||||
var target = window.frames.punycodeKidNoWhitelist;
|
||||
target.postMessage("punycode-nowhitelist",
|
||||
"http://sub1.exämple.test");
|
||||
|
||||
setTimeout(function()
|
||||
{
|
||||
setTimeout(function()
|
||||
{
|
||||
ok(gotPunycodeNoWhitelist,
|
||||
"punycode no-whitelist message not received");
|
||||
|
||||
SimpleTest.finish();
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
|
@ -29,7 +29,7 @@ function receiveMessage(evt)
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -73,6 +73,9 @@ _TEST_FILES = \
|
||||
postMessage_origin_helper.xhtml \
|
||||
test_postMessage_closed.html \
|
||||
postMessage_closed_helper.html \
|
||||
test_postMessage_jar.html \
|
||||
postMessage.jar \
|
||||
postMessage.jar^headers^ \
|
||||
$(NULL)
|
||||
|
||||
_CHROME_FILES = \
|
||||
|
BIN
dom/tests/mochitest/whatwg/postMessage.jar
Normal file
BIN
dom/tests/mochitest/whatwg/postMessage.jar
Normal file
Binary file not shown.
1
dom/tests/mochitest/whatwg/postMessage.jar^headers^
Normal file
1
dom/tests/mochitest/whatwg/postMessage.jar^headers^
Normal file
@ -0,0 +1 @@
|
||||
Content-Type: application/java-archive
|
@ -6,8 +6,8 @@
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
// Content cannot post to chrome without privileges
|
||||
window.parent.postMessage("SHOULD NOT GET THIS!");
|
||||
|
||||
window.parent.postMessage("SHOULD NOT GET THIS!", "*");
|
||||
|
||||
var msg = "post-to-content-response";
|
||||
|
||||
if (evt.source !== null)
|
||||
@ -28,10 +28,10 @@
|
||||
{
|
||||
// ...so get privileges and test that this works with privileges
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
window.parent.postMessage(msg);
|
||||
window.parent.postMessage(msg, "*");
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -5,17 +5,17 @@
|
||||
<script type="application/javascript">
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
evt.source.postMessage("FAIL");
|
||||
evt.source.postMessage("FAIL", "*");
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function setup()
|
||||
{
|
||||
var query = location.search.substring(1);
|
||||
|
||||
if (query == "opener")
|
||||
window.opener.postMessage("message");
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -16,11 +16,13 @@ function receiveMessage(evt)
|
||||
response += " wrong-source";
|
||||
if (evt.data !== "from-parent")
|
||||
response += " wrong-data(" + evt.data + ")";
|
||||
if (evt.lastEventId !== "")
|
||||
response += " wrong-lastEventId(" + evt.lastEventId + ")";
|
||||
|
||||
window.parent.postMessage(response);
|
||||
window.parent.postMessage(response, "http://localhost:8888");
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -8,13 +8,17 @@
|
||||
|
||||
function setup()
|
||||
{
|
||||
$("domain").textContent = location.hostname + ":" + (location.port || 80);
|
||||
var target = $("domain");
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
var response = evt.data + "-response";
|
||||
|
||||
if (evt.lastEventId !== "")
|
||||
response += " wrong-lastEventId(" + evt.lastEventId + ")";
|
||||
|
||||
if (evt.source !== window.parent)
|
||||
{
|
||||
response += " unexpected-source(" + evt.source + ")";
|
||||
@ -22,8 +26,11 @@
|
||||
response += " location(" + window.location.href + ")";
|
||||
}
|
||||
|
||||
if (isMozilla && evt.isTrusted)
|
||||
response += " unexpected-trusted";
|
||||
if (isMozilla)
|
||||
{
|
||||
if (evt.isTrusted !== false)
|
||||
response += " unexpected-trusted";
|
||||
}
|
||||
|
||||
if (evt.type != "message")
|
||||
response += " wrong-type(" + evt.type + ")";
|
||||
@ -40,7 +47,7 @@
|
||||
else
|
||||
{
|
||||
response += " unexpected-message-to(" + window.location.href + ")";
|
||||
window.parent.postMessage(response);
|
||||
window.parent.postMessage(response, "http://localhost:8888");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -68,7 +75,7 @@
|
||||
}
|
||||
finally
|
||||
{
|
||||
source.postMessage(response);
|
||||
source.postMessage(response, evt.origin);
|
||||
}
|
||||
}
|
||||
|
||||
@ -90,11 +97,11 @@
|
||||
if (!threw || privateVariable !== undefined)
|
||||
response += " accessed-source!!!";
|
||||
|
||||
source.postMessage(response);
|
||||
source.postMessage(response, evt.origin);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -13,21 +13,23 @@
|
||||
response += " wrong-sender-origin(" + evt.origin + ")";
|
||||
if (evt.data !== "idn-message")
|
||||
response += " wrong-data(" + evt.data + ")";
|
||||
if (evt.lastEventId !== "")
|
||||
response += " wrong-lastEventId(" + evt.lastEventId + ")";
|
||||
if (evt.source !== window.parent)
|
||||
response += " wrong-source";
|
||||
if (evt.target !== document)
|
||||
if (evt.target !== window)
|
||||
response += " wrong-target";
|
||||
if (evt.type !== "message")
|
||||
response += " wrong-type(" + evt.type + ")";
|
||||
|
||||
evt.source.postMessage(response);
|
||||
evt.source.postMessage(response, evt.origin);
|
||||
}
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function setup()
|
||||
{
|
||||
var target = document.getElementById("location");
|
||||
target.textContent = document.domain;
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -9,28 +9,34 @@ http://sub1.test1.example.org/tests/dom/tests/mochitest/whatwg/postMessage_joine
|
||||
<script type="application/javascript">
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
var response, target;
|
||||
var response, target, providedOrigin;
|
||||
var data = evt.data;
|
||||
if (data === "subframe-test-finished")
|
||||
{
|
||||
target = window.parent;
|
||||
providedOrigin = "http://localhost:8888";
|
||||
response = "test-passed";
|
||||
}
|
||||
else if (data === "start-test")
|
||||
{
|
||||
target = window.frames.innermost;
|
||||
providedOrigin = "http://example.org";
|
||||
response = "start-test";
|
||||
}
|
||||
else
|
||||
{
|
||||
target = window.parent;
|
||||
providedOrigin = "http://localhost:8888";
|
||||
response = "not reached";
|
||||
}
|
||||
|
||||
if (evt.lastEventId !== "")
|
||||
response += " wrong-lastEventId(" + evt.lastEventId + ")";
|
||||
|
||||
if (evt.type !== "message")
|
||||
response += " wrong-type(" + evt.type + ")";
|
||||
|
||||
if (evt.target !== document)
|
||||
if (evt.target !== window)
|
||||
{
|
||||
response += " wrong-target(" + evt.target + ")";
|
||||
response += " location(" + window.location.href + ")";
|
||||
@ -55,7 +61,7 @@ http://sub1.test1.example.org/tests/dom/tests/mochitest/whatwg/postMessage_joine
|
||||
response += " location(" + window.location.href + ")";
|
||||
}
|
||||
|
||||
target.postMessage(response);
|
||||
target.postMessage(response, providedOrigin);
|
||||
}
|
||||
|
||||
function setup()
|
||||
@ -69,7 +75,7 @@ http://sub1.test1.example.org/tests/dom/tests/mochitest/whatwg/postMessage_joine
|
||||
target.textContent = "Location: " + oldDomain +
|
||||
", effective domain: " + newDomain;
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -11,19 +11,26 @@ http://example.org/tests/dom/tests/mochitest/whatwg/postMessage_joined_helper2.h
|
||||
{
|
||||
var response = "subframe-test-finished";
|
||||
|
||||
if (evt.origin !== "http://sub1.test1.example.org")
|
||||
{
|
||||
response += " wrong-origin(" + evt.origin + ")";
|
||||
response += " location(" + window.location.href + ")";
|
||||
}
|
||||
|
||||
if (evt.data !== "start-test")
|
||||
response += " incorrect-subframe-data(" + evt.data + ")";
|
||||
if (evt.type !== "message")
|
||||
response += " wrong-type(" + evt.type + ")";
|
||||
if (evt.target !== document)
|
||||
if (evt.target !== window)
|
||||
{
|
||||
response += " wrong-target(" + evt.target + ")";
|
||||
response += " location(" + window.location.href + ")";
|
||||
}
|
||||
|
||||
if (isMozilla && evt.isTrusted)
|
||||
if (isMozilla)
|
||||
{
|
||||
response += " unexpected-trusted-event";
|
||||
if (evt.isTrusted !== false)
|
||||
response += " unexpected-trusted-event";
|
||||
}
|
||||
|
||||
if (evt.source !== window.parent)
|
||||
@ -45,13 +52,7 @@ http://example.org/tests/dom/tests/mochitest/whatwg/postMessage_joined_helper2.h
|
||||
if (!passed)
|
||||
response += " expected-joined-domains";
|
||||
|
||||
if (evt.origin !== "http://sub1.test1.example.org")
|
||||
{
|
||||
response += " wrong-origin(" + evt.origin + ")";
|
||||
response += " location(" + window.location.href + ")";
|
||||
}
|
||||
|
||||
window.parent.postMessage(response);
|
||||
window.parent.postMessage(response, "http://sub1.test1.example.org");
|
||||
}
|
||||
|
||||
function setup()
|
||||
@ -65,7 +66,7 @@ http://example.org/tests/dom/tests/mochitest/whatwg/postMessage_joined_helper2.h
|
||||
target.textContent = "Location: " + oldDomain +
|
||||
", effective domain: " + newDomain;
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -3,46 +3,103 @@
|
||||
<head>
|
||||
<title>postMessage called through another frame</title>
|
||||
<script type="application/javascript">
|
||||
var PATH = "/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html";
|
||||
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
var response = "response-to-sibling-sent-message";
|
||||
if (evt.lastEventId !== "")
|
||||
{
|
||||
fail("unexpected non-empty lastEventId");
|
||||
return;
|
||||
}
|
||||
|
||||
// Our parent frame called testSiblingPostMessage (below) on a frame
|
||||
// containing this page on localhost:8888. testSiblingPostMessage then
|
||||
// called postMessage on this page on example.org:8000. We thus expect
|
||||
// to see an event whose source is the window of our sibling frame on
|
||||
// localhost:8888. In other words, the event we receive should have:
|
||||
//
|
||||
// http://localhost:8888/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html
|
||||
//
|
||||
// and not
|
||||
//
|
||||
// http://localhost:8888/tests/dom/tests/mochitest/whatwg/test_postMessage_onOther.html
|
||||
//
|
||||
// as its source.
|
||||
switch (window.location.href)
|
||||
{
|
||||
case "http://example.com" + PATH:
|
||||
receiveTopDomain(evt);
|
||||
break;
|
||||
|
||||
if (evt.data !== "message-from-sibling")
|
||||
response += " wrong-data(" + evt.data + ")";
|
||||
case "http://test1.example.com" + PATH:
|
||||
receiveSubDomain(evt);
|
||||
break;
|
||||
|
||||
default:
|
||||
fail("unexpected location");
|
||||
}
|
||||
}
|
||||
|
||||
function fail(msg)
|
||||
{
|
||||
window.parent.postMessage("FAIL " + msg, "*");
|
||||
}
|
||||
|
||||
// The parent frame sends "start-test" to the subdomain frame to start.
|
||||
// The subdomain frame then sets document.domain to the top domain so that
|
||||
// the top domain frame can access it. It then sends a message to the top
|
||||
// domain frame to tell it to do likewise; once that happens, the top domain
|
||||
// frame can then call a method on the subdomain frame window, which will
|
||||
// call a method *on the top domain window* to send a message to the parent
|
||||
// window. We thus expect to see an event whose source is the subdomain
|
||||
// window -- *not* the top domain window. Therefore, its .origin should be:
|
||||
//
|
||||
// http://test1.example.com
|
||||
//
|
||||
// and not
|
||||
//
|
||||
// http://example.com
|
||||
|
||||
function receiveSubDomain(evt)
|
||||
{
|
||||
if (evt.origin !== "http://localhost:8888")
|
||||
response += " failed-wrong-origin(" + evt.origin + ")";
|
||||
if (evt.source !== window.parent.firstFrame)
|
||||
response += " failed-wrong-source";
|
||||
{
|
||||
fail("wrong top-domain origin: " + evt.origin);
|
||||
return;
|
||||
}
|
||||
if (evt.data !== "start-test")
|
||||
{
|
||||
fail("wrong top-domain message: " + evt.origin);
|
||||
return;
|
||||
}
|
||||
|
||||
window.parent.postMessage(response);
|
||||
document.domain = "example.com";
|
||||
window.parent.topDomainFrame.postMessage("domain-switch",
|
||||
"http://example.com");
|
||||
}
|
||||
|
||||
function receiveTopDomain(evt)
|
||||
{
|
||||
if (evt.origin !== "http://test1.example.com")
|
||||
{
|
||||
fail("wrong subdomain origin: " + evt.origin);
|
||||
return;
|
||||
}
|
||||
if (evt.data !== "domain-switch")
|
||||
{
|
||||
fail("wrong subdomain message: " + evt.origin);
|
||||
return;
|
||||
}
|
||||
if (evt.source !== window.parent.subDomainFrame)
|
||||
{
|
||||
fail("wrong source on message from subdomain");
|
||||
return;
|
||||
}
|
||||
|
||||
document.domain = "example.com";
|
||||
window.parent.subDomainFrame.testSiblingPostMessage();
|
||||
}
|
||||
|
||||
function testSiblingPostMessage()
|
||||
{
|
||||
window.parent.secondFrame.postMessage("message-from-sibling");
|
||||
window.parent.postMessage("test-finished", "http://localhost:8888");
|
||||
}
|
||||
|
||||
function setup()
|
||||
{
|
||||
var target = document.getElementById("location");
|
||||
target.textContent = document.domain;
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("load", setup, false);
|
||||
</script>
|
||||
</head>
|
||||
|
@ -1,7 +1,7 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>postMessage throwing page</title>
|
||||
<title>postMessage origin-testing helper page</title>
|
||||
<script type="application/javascript"><![CDATA[
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
@ -14,10 +14,10 @@ function receiveMessage(evt)
|
||||
if (evt.data !== "PASS")
|
||||
response += " wrong-data(" + evt.data + ")";
|
||||
|
||||
window.parent.postMessage(response);
|
||||
window.parent.postMessage(response, "http://localhost:8888");
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
|
||||
// Aids for identifying origins
|
||||
@ -25,7 +25,7 @@ document.addEventListener("message", receiveMessage, false);
|
||||
function setup()
|
||||
{
|
||||
var target = document.getElementById("location");
|
||||
target.textContent = document.domain + ":" + (location.port || 80);
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -5,7 +5,7 @@
|
||||
<script type="application/javascript">
|
||||
window.postMessage = function (evt)
|
||||
{
|
||||
window.parent.postMessage("FAIL overridden postMessage called");
|
||||
window.parent.postMessage("FAIL overridden postMessage called", "*");
|
||||
};
|
||||
|
||||
var count = 0;
|
||||
@ -17,21 +17,21 @@
|
||||
{
|
||||
window.dispatchEvent = function(evt)
|
||||
{
|
||||
window.parent.postMessage("FAIL");
|
||||
window.parent.postMessage("FAIL", "*");
|
||||
throw "dispatchEvent threw";
|
||||
};
|
||||
}
|
||||
|
||||
window.parent.postMessage(evt.data);
|
||||
window.parent.postMessage(evt.data, "http://localhost:8888");
|
||||
}
|
||||
|
||||
function setup()
|
||||
{
|
||||
var target = document.getElementById("location");
|
||||
target.textContent = document.domain;
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
</script>
|
||||
|
@ -7,12 +7,12 @@
|
||||
{
|
||||
throw 17;
|
||||
}
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function setup()
|
||||
{
|
||||
var target = document.getElementById("location");
|
||||
target.textContent = document.domain;
|
||||
target.textContent = location.hostname + ":" + (location.port || 80);
|
||||
}
|
||||
|
||||
window.addEventListener("load", setup, false);
|
||||
|
@ -11,6 +11,8 @@ function sendMessage(evt)
|
||||
msg += " wrong-origin(" + evt.origin + ")";
|
||||
if (evt.data !== "parent-message")
|
||||
msg += " wrong-data(" + evt.data + ")";
|
||||
if (evt.lastEventId !== "")
|
||||
msg += " wrong-lastEventId(" + evt.lastEventId + ")";
|
||||
if (evt.source !== window.parent)
|
||||
msg += " wrong-source";
|
||||
|
||||
@ -18,10 +20,10 @@ function sendMessage(evt)
|
||||
// "bobhope:password", but Gecko elides that from the content-visible URL,
|
||||
// and I can't find another way to actually detect this programmatically.
|
||||
|
||||
window.parent.postMessage(msg);
|
||||
window.parent.postMessage(msg, "http://localhost:8888");
|
||||
}
|
||||
|
||||
document.addEventListener("message", sendMessage, false);
|
||||
window.addEventListener("message", sendMessage, false);
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -28,6 +28,7 @@ SimpleTest.waitForExplicitFinish();
|
||||
var data = "foobar";
|
||||
var origin = "http://cool.example.com";
|
||||
var bubbles = true, cancelable = true;
|
||||
var lastEventId = "lastEventId";
|
||||
|
||||
var target;
|
||||
|
||||
@ -43,16 +44,21 @@ function sendMsg()
|
||||
if (isMozilla)
|
||||
{
|
||||
is(evt.source, null,
|
||||
"not initialized yet, so null in our implementation");
|
||||
"not initialized yet, so null in our implementation");
|
||||
is(evt.lastEventId, "",
|
||||
"not initialized yet, so empty string in our implementation");
|
||||
}
|
||||
|
||||
evt.initMessageEvent("message", bubbles, cancelable, data, origin, null);
|
||||
evt.initMessageEvent("message", bubbles, cancelable, data, origin,
|
||||
lastEventId, null);
|
||||
ok(evt.source === null, "null source is fine for a MessageEvent");
|
||||
|
||||
evt.initMessageEvent("message", bubbles, cancelable, data, origin, window);
|
||||
evt.initMessageEvent("message", bubbles, cancelable, data, origin,
|
||||
lastEventId, window);
|
||||
|
||||
is(evt.data, data, "unexpected data");
|
||||
is(evt.origin, origin, "unexpected origin");
|
||||
is(evt.lastEventId, lastEventId, "unexpected lastEventId");
|
||||
|
||||
is(evt.cancelable, cancelable, "wrong cancelable property");
|
||||
is(evt.bubbles, bubbles, "wrong bubbling property");
|
||||
@ -71,6 +77,7 @@ function recvMsg(evt)
|
||||
{
|
||||
is(evt.data, data, "unexpected data");
|
||||
is(evt.origin, origin, "unexpected origin");
|
||||
is(evt.lastEventId, lastEventId, "unexpected lastEventId");
|
||||
|
||||
is(evt.cancelable, cancelable, "wrong cancelable property");
|
||||
is(evt.bubbles, bubbles, "wrong bubbling property");
|
||||
|
@ -28,7 +28,8 @@ function run()
|
||||
{
|
||||
var msg = document.createEvent("MessageEvent");
|
||||
msg.initMessageEvent("message", true, true,
|
||||
"foo", "http://evil.com", window);
|
||||
"foo", "http://evil.com", "",
|
||||
window);
|
||||
|
||||
try
|
||||
{
|
||||
|
@ -27,20 +27,30 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=postMessage
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var testsCompletedCount = 0;
|
||||
|
||||
/** Variable for receivers to attempt to get. */
|
||||
window.privateVariable = 17;
|
||||
|
||||
/** For sentinel finish, if necessary in deficient browsers */
|
||||
/** For sentinel finish, if necessary in deficient browsers. */
|
||||
var finished = false;
|
||||
|
||||
/** Receives MessageEvents to this window. */
|
||||
/** Ends testing if it isn't already done. */
|
||||
function finish()
|
||||
{
|
||||
if (!finished)
|
||||
{
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
/** Receives MessageEvents. */
|
||||
function messageReceiver(evt)
|
||||
{
|
||||
try
|
||||
{
|
||||
ok(evt instanceof MessageEvent, "umm, how did we get this?");
|
||||
is(evt.lastEventId, "",
|
||||
"postMessage creates events with empty lastEventId");
|
||||
is(evt.type, "message", "expected events of type 'message'");
|
||||
|
||||
if (isMozilla)
|
||||
@ -61,8 +71,6 @@ function messageReceiver(evt)
|
||||
|
||||
switch (evt.data)
|
||||
{
|
||||
case "post-to-self":
|
||||
|
||||
case "post-to-self-response":
|
||||
receiveSelf(evt);
|
||||
break;
|
||||
@ -73,23 +81,21 @@ function messageReceiver(evt)
|
||||
|
||||
case "post-to-other-cross-domain-response":
|
||||
receiveOtherCrossDomain(evt);
|
||||
|
||||
// All the tests have executed, so we're done.
|
||||
finish();
|
||||
break;
|
||||
|
||||
default:
|
||||
ok(false, "unexpected message: " + evt.data);
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "error processing event with data '" + evt.data + "': " + e);
|
||||
}
|
||||
|
||||
// if all the tests have executed, we're done
|
||||
if (++testsCompletedCount == allTests.length)
|
||||
{
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@ -103,7 +109,7 @@ function respondToSelf(evt)
|
||||
is(evt.origin, "http://localhost:8888", "event has wrong origin");
|
||||
is(evt.source, window, "we posted this message!");
|
||||
|
||||
evt.source.postMessage("post-to-self-response");
|
||||
evt.source.postMessage("post-to-self-response", evt.origin);
|
||||
}
|
||||
|
||||
|
||||
@ -115,6 +121,9 @@ function receiveSelf(evt)
|
||||
{
|
||||
is(evt.origin, "http://localhost:8888", "event has wrong origin");
|
||||
is(evt.source, window, "we posted this message!");
|
||||
|
||||
window.frames.otherSameDomain.postMessage("post-to-other-same-domain",
|
||||
"http://localhost:8888");
|
||||
}
|
||||
|
||||
function receiveOtherSameDomain(evt)
|
||||
@ -123,6 +132,9 @@ function receiveOtherSameDomain(evt)
|
||||
"same-domain response event has wrong origin");
|
||||
is(evt.source, window.frames.otherSameDomain,
|
||||
"wrong source for same-domain message!");
|
||||
|
||||
window.frames.otherCrossDomain.postMessage("post-to-other-cross-domain",
|
||||
"http://example.org:8000");
|
||||
}
|
||||
|
||||
function receiveOtherCrossDomain(evt)
|
||||
@ -141,55 +153,14 @@ function receiveOtherCrossDomain(evt)
|
||||
* TEST SETUP *
|
||||
**************/
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
|
||||
/**
|
||||
* Returns a nullary function which posts the given message to the given
|
||||
* destination.
|
||||
*/
|
||||
function createMessageDispatcher(message, destination)
|
||||
function start()
|
||||
{
|
||||
function dispatcher()
|
||||
{
|
||||
try
|
||||
{
|
||||
destination.postMessage(message);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "error while calling postMessage: " + e);
|
||||
}
|
||||
}
|
||||
|
||||
return dispatcher;
|
||||
window.postMessage("post-to-self", "http://localhost:8888");
|
||||
}
|
||||
|
||||
var allTests =
|
||||
[
|
||||
createMessageDispatcher("post-to-self", window),
|
||||
createMessageDispatcher("post-to-other-same-domain",
|
||||
window.frames.otherSameDomain),
|
||||
createMessageDispatcher("post-to-other-cross-domain",
|
||||
window.frames.otherCrossDomain),
|
||||
];
|
||||
window.addEventListener("load", start, false);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
|
||||
for (var i = 0, sz = allTests.length; i != sz; i++)
|
||||
addLoadEvent(allTests[i]);
|
||||
|
||||
/**
|
||||
* Browsers which fail to send a response to a postMessage need this to
|
||||
* finish the test.
|
||||
*/
|
||||
function sentinel()
|
||||
{
|
||||
if (!finished)
|
||||
{
|
||||
ok(false, "shouldn't be necessary (finished in last of allTests)");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
addLoadEvent(sentinel);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -28,15 +28,16 @@ function receiveMessage(evt)
|
||||
ok(evt.source === window, "wrong source");
|
||||
|
||||
is(evt.data, "generate-event", "wrong data");
|
||||
is(evt.lastEventId, "", "wrong lastEventId");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function run()
|
||||
{
|
||||
window.postMessage("generate-event");
|
||||
window.postMessage("generate-event", "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -29,13 +29,22 @@ chrome://mochikit/content/chrome/dom/tests/mochitest/whatwg/test_postMessage_chr
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var testsCompletedCount = 0;
|
||||
var finished = false;
|
||||
function finish()
|
||||
{
|
||||
if (!finished)
|
||||
{
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
/** Receives MessageEvents to this window. */
|
||||
function messageReceiver(evt)
|
||||
{
|
||||
ok(evt instanceof MessageEvent, "umm, how did we get this?");
|
||||
is(evt.type, "message", "expected events of type 'message'");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
|
||||
switch (evt.data)
|
||||
{
|
||||
@ -49,12 +58,9 @@ function messageReceiver(evt)
|
||||
|
||||
default:
|
||||
ok(false, "unexpected message: " + evt.data);
|
||||
finish();
|
||||
break;
|
||||
}
|
||||
|
||||
// if all the tests have executed, we're done
|
||||
if (++testsCompletedCount == allTests.length)
|
||||
setTimeout(SimpleTest.finish, 0);
|
||||
}
|
||||
|
||||
|
||||
@ -67,6 +73,9 @@ function checkSelf(evt)
|
||||
is(evt.isTrusted, true, "should have sent a trusted event");
|
||||
is(evt.origin, "chrome://mochikit", "wrong origin for chrome: URL");
|
||||
is(evt.source, null, "chrome posters get a null source, for security");
|
||||
|
||||
window.frames.contentDomain.postMessage("post-to-content",
|
||||
"http://example.org");
|
||||
}
|
||||
|
||||
|
||||
@ -80,6 +89,8 @@ function receiveContent(evt)
|
||||
is(evt.origin, "http://example.org", "content response event has wrong URI");
|
||||
is(evt.source, window.frames.contentDomain,
|
||||
"wrong source for same-domain message!");
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
|
||||
@ -87,25 +98,13 @@ function receiveContent(evt)
|
||||
* TEST SETUP *
|
||||
**************/
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
|
||||
/**
|
||||
* Returns a nullary function which posts the given message to the given
|
||||
* destination.
|
||||
*/
|
||||
function createMessageDispatcher(message, destination)
|
||||
function run()
|
||||
{
|
||||
return function() { destination.postMessage(message); };
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
window.postMessage("post-to-self", "*");
|
||||
}
|
||||
|
||||
var allTests =
|
||||
[
|
||||
createMessageDispatcher("post-to-self", window),
|
||||
createMessageDispatcher("post-to-content",
|
||||
window.frames.contentDomain),
|
||||
];
|
||||
|
||||
allTests.forEach(addLoadEvent);
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -23,6 +23,7 @@ function receiveMessage(evt)
|
||||
{
|
||||
is(evt.origin, "http://localhost:8888", "wrong origin");
|
||||
ok(evt.source === openedWindow, "wrong source");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
|
||||
is(evt.data, "message", "wrong data");
|
||||
if (evt.data !== "message")
|
||||
@ -33,7 +34,7 @@ function receiveMessage(evt)
|
||||
function afterClose()
|
||||
{
|
||||
document.removeEventListener("message", receiveMessage, false);
|
||||
evt.source.postMessage("NOT-RECEIVED");
|
||||
evt.source.postMessage("NOT-RECEIVED", "*");
|
||||
|
||||
var iframe = document.createElement("iframe");
|
||||
iframe.id = "insertedIframe";
|
||||
@ -45,7 +46,7 @@ function receiveMessage(evt)
|
||||
setTimeout(afterClose, 0);
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function iframeLoaded(evt)
|
||||
{
|
||||
@ -54,7 +55,7 @@ function iframeLoaded(evt)
|
||||
|
||||
var iframeWindow = iframe.contentWindow;
|
||||
$("holder").removeChild($("insertedIframe"));
|
||||
iframeWindow.postMessage("NOT-RECEIVED");
|
||||
iframeWindow.postMessage("NOT-RECEIVED", "*");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
@ -25,17 +25,18 @@ function receiveMessage(evt)
|
||||
{
|
||||
is(evt.origin, "http://localhost:8888", "wrong origin");
|
||||
ok(evt.source === window.frames.kid, "wrong source");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
|
||||
is(evt.data, "response-message", "wrong data");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function run()
|
||||
{
|
||||
window.frames.kid.postMessage("from-parent");
|
||||
window.frames.kid.postMessage("from-parent", "http://localhost:8888");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -41,30 +41,28 @@ function receiveMessage(evt)
|
||||
"wrong origin -- IDN issue, perhaps?");
|
||||
|
||||
is(evt.data, "idn-response", "unexpected test result");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
ok(evt.source === idnWindow, "wrong source");
|
||||
|
||||
responseReceived = true;
|
||||
SimpleTest.finish();
|
||||
}
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
var xhtmlns = "http://www.w3.org/1999/xhtml";
|
||||
|
||||
function setup()
|
||||
{
|
||||
var idnFrame = document.getElementsByTagNameNS(xhtmlns, "iframe")[0];
|
||||
idnWindow = idnFrame.contentWindow;
|
||||
try
|
||||
{
|
||||
var idnFrame = document.getElementsByTagNameNS(xhtmlns, "iframe")[0];
|
||||
idnWindow = idnFrame.contentWindow;
|
||||
idnWindow.postMessage("idn-message");
|
||||
|
||||
ok(responseReceived, "should have gotten a response before returning");
|
||||
idnWindow.postMessage("idn-message", "http://sub1.ält.example.org:8000");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "failed to post message: " + e);
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
addLoadEvent(setup);
|
||||
|
50
dom/tests/mochitest/whatwg/test_postMessage_jar.html
Normal file
50
dom/tests/mochitest/whatwg/test_postMessage_jar.html
Normal file
@ -0,0 +1,50 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=430251
|
||||
-->
|
||||
<head>
|
||||
<title>postMessage's interaction with pages at jar: URIs</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="browserFu.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<base href="http://example.com/" />
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=430251">Mozilla Bug 430251</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
|
||||
<iframe src="jar:http://example.com/tests/dom/tests/mochitest/whatwg/postMessage.jar!/postMessage_jar.html"
|
||||
name="kid"></iframe>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="application/javascript">
|
||||
/** Test for Bug 430251 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function receiveMessage(evt)
|
||||
{
|
||||
is(evt.origin, "http://example.com", "wrong sender");
|
||||
ok(evt.source === window.frames.kid, "wrong source");
|
||||
|
||||
is(evt.data, "finish-test", "wrong data");
|
||||
is(evt.lastEventId, "", "wrong lastEventId");
|
||||
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function run()
|
||||
{
|
||||
window.frames.kid.postMessage("start-test", "http://example.com");
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@ -35,27 +35,20 @@ function receiveTestResult(evt)
|
||||
ok(evt.isTrusted === false, "shouldn't have been a trusted event");
|
||||
}
|
||||
|
||||
var data = evt.data;
|
||||
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
|
||||
// Either we passed the test or we failed it. The message's
|
||||
// contents should help to diagnose the failure. Either way,
|
||||
// consider this the end of the test.
|
||||
is(data, "test-passed", "unexpected test result");
|
||||
is(evt.data, "test-passed", "unexpected test result");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function setup()
|
||||
{
|
||||
document.addEventListener("message", receiveTestResult, false);
|
||||
try
|
||||
{
|
||||
window.frames.container.postMessage("start-test");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "failed to post message");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
window.addEventListener("message", receiveTestResult, false);
|
||||
window.frames.container.postMessage("start-test",
|
||||
"http://sub1.test1.example.org");
|
||||
}
|
||||
|
||||
addLoadEvent(setup);
|
||||
|
@ -14,10 +14,10 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=postMessage
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none"></div>
|
||||
|
||||
<iframe src="http://localhost:8888/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html"
|
||||
name="firstFrame"></iframe>
|
||||
<iframe src="http://example.org:8000/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html"
|
||||
name="secondFrame"></iframe>
|
||||
<iframe src="http://example.com/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html"
|
||||
name="topDomainFrame"></iframe>
|
||||
<iframe src="http://test1.example.com/tests/dom/tests/mochitest/whatwg/postMessage_onOther.html"
|
||||
name="subDomainFrame"></iframe>
|
||||
|
||||
|
||||
<pre id="test">
|
||||
@ -26,50 +26,26 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=postMessage
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var finished = false;
|
||||
|
||||
/** Receives MessageEvents to this window. */
|
||||
function messageReceiver(evt)
|
||||
{
|
||||
ok(evt instanceof MessageEvent, "wrong event type");
|
||||
is(evt.origin, "http://example.org:8000", "unexpected origin");
|
||||
is(evt.data, "response-to-sibling-sent-message",
|
||||
is(evt.origin, "http://test1.example.com", "unexpected origin");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
is(evt.data, "test-finished",
|
||||
"unexpected data in message");
|
||||
|
||||
// Handle buggy browsers that might somehow have received a message twice
|
||||
if (finished)
|
||||
return;
|
||||
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function postToSecondFrameThroughFirstFrame()
|
||||
function run()
|
||||
{
|
||||
try
|
||||
{
|
||||
window.frames.firstFrame.testSiblingPostMessage();
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "threw exception trying to post through firstFrame: " + e);
|
||||
}
|
||||
window.frames.subDomainFrame.postMessage("start-test",
|
||||
"http://test1.example.com");
|
||||
}
|
||||
|
||||
/** For buggy browsers that didn't send a response. */
|
||||
function sentinel()
|
||||
{
|
||||
if (!finished)
|
||||
{
|
||||
ok(false, "should have been finished by now -- didn't receive response?");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
|
||||
addLoadEvent(postToSecondFrameThroughFirstFrame);
|
||||
addLoadEvent(sentinel);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -43,14 +43,6 @@ function errorCheck(i, called, errorCode, actualCode)
|
||||
is(actualCode, errorCode, "wrong error thrown in test #" + i);
|
||||
}
|
||||
|
||||
function errorCheckTodo(i, called, errorCode, actualCode)
|
||||
{
|
||||
todo(!called, "receiver should not have been called for test #" + i);
|
||||
todo_is(actualCode, errorCode, "wrong error thrown in test #" + i);
|
||||
}
|
||||
|
||||
var ONE_PASS = ["PASS"];
|
||||
|
||||
var tests =
|
||||
[
|
||||
// 0
|
||||
@ -79,7 +71,7 @@ var tests =
|
||||
source: "sameDomain",
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
// 5
|
||||
{
|
||||
@ -93,7 +85,7 @@ var tests =
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
returnOrigin: "http://localhost:8888",
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
{
|
||||
args: ["NOT-RECEIVED", "hä"],
|
||||
@ -110,7 +102,7 @@ var tests =
|
||||
source: "sameDomain",
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
// 10
|
||||
{
|
||||
@ -123,7 +115,7 @@ var tests =
|
||||
source: "sameDomain",
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
{
|
||||
args: ["TODO", "http://\nlocalhost:8888"],
|
||||
@ -131,7 +123,7 @@ var tests =
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
returnOrigin: "http://localhost:8888",
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
{
|
||||
args: ["TODO", "http://localhost:8888\0"],
|
||||
@ -139,7 +131,7 @@ var tests =
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
returnOrigin: "http://localhost:8888",
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
{
|
||||
args: ["TODO", "http://localhost:8888\n"],
|
||||
@ -147,16 +139,16 @@ var tests =
|
||||
code: DOMException.SYNTAX_ERR,
|
||||
|
||||
returnOrigin: "http://localhost:8888",
|
||||
throwsNoException: true
|
||||
hasThrowsNoExceptionBug: true
|
||||
},
|
||||
// 15
|
||||
{
|
||||
args: ONE_PASS,
|
||||
args: ["PASS", "*"],
|
||||
source: "sameDomain",
|
||||
returnOrigin: "http://localhost:8888"
|
||||
},
|
||||
{
|
||||
args: ["PASS", null],
|
||||
args: ["PASS", "http://localhost:8888"],
|
||||
source: "sameDomain",
|
||||
returnOrigin: "http://localhost:8888"
|
||||
},
|
||||
@ -311,35 +303,35 @@ var tests =
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.exämple.test:80"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.exämple.test:80/"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.exämple.test/"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.exämple.test/foobar"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
// 50
|
||||
{
|
||||
@ -347,35 +339,35 @@ var tests =
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.xn--exmple-cua.test:80"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.xn--exmple-cua.test:80/"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.xn--exmple-cua.test/"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
{
|
||||
args: ["PASS", "http://sub1.xn--exmple-cua.test/foobar"],
|
||||
source: "idnKidNoWhitelist",
|
||||
returnOrigin: "http://sub1.exämple.test",
|
||||
|
||||
wrongReturnOrigin: true
|
||||
hasWrongReturnOriginBug: true
|
||||
},
|
||||
// 55
|
||||
{
|
||||
@ -385,32 +377,39 @@ var tests =
|
||||
},
|
||||
];
|
||||
|
||||
function allTests()
|
||||
function allTests(callback)
|
||||
{
|
||||
var test, target, called;
|
||||
|
||||
function receive(evt)
|
||||
function eventCheck(evt)
|
||||
{
|
||||
var originCheck = test.wrongReturnOrigin ? todo_is : is;
|
||||
ok(test === tests[i],
|
||||
"i and test are out of sync! async is hard, let's go shopping");
|
||||
|
||||
var originCheck = test.hasWrongReturnOriginBug ? todo_is : is;
|
||||
originCheck(evt.origin, test.returnOrigin, "wrong origin for #" + i);
|
||||
if (test.args[0] == "TODO")
|
||||
todo_is(evt.data, "PASS", "wrong data");
|
||||
else
|
||||
is(evt.data, "PASS", "wrong data");
|
||||
is(evt.lastEventId, "",
|
||||
"postMessage creates events with empty lastEventId");
|
||||
ok(evt.source === target, "wrong source");
|
||||
called = true;
|
||||
}
|
||||
|
||||
function post(win, args, err)
|
||||
function nextTest()
|
||||
{
|
||||
called = false;
|
||||
win.postMessage.apply(win, args);
|
||||
}
|
||||
i++;
|
||||
|
||||
document.addEventListener("message", receive, false);
|
||||
if (i === end)
|
||||
{
|
||||
removeListener(listener);
|
||||
|
||||
setTimeout(callback, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
for (var i = 0, sz = tests.length; i < sz; i++)
|
||||
{
|
||||
test = tests[i];
|
||||
|
||||
target = $(test.source).contentWindow;
|
||||
@ -418,55 +417,109 @@ function allTests()
|
||||
{
|
||||
called = false;
|
||||
target.postMessage.apply(target, test.args);
|
||||
if (test.throwsNoException)
|
||||
todo(false, "should throw on test #" + i);
|
||||
else if (test.expectNoCallback)
|
||||
(test.checkCallback || ok)(!called, "shouldn't have been called #" + i);
|
||||
else
|
||||
(test.checkCallback || ok)(called, "should have been called #" + i);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
(test.errorCheck || errorCheck)(i, called, e.code, test.code);
|
||||
// Since an exception was thrown, we know at this point that we're not
|
||||
// waiting on anything else in the queue of script to run, and we can just
|
||||
// call nextTest directly.
|
||||
errorCheck(i, called, e.code, test.code);
|
||||
nextTest();
|
||||
return;
|
||||
}
|
||||
|
||||
// We've set up the event generated by postMessage to be dispatched, and
|
||||
// it's sitting in a queue somewhere. However, it hasn't arrived yet, and
|
||||
// the target document hasn't received the event -- so we need to continue
|
||||
// our tests later.
|
||||
setTimeout(function()
|
||||
{
|
||||
// The event was dispatched, and the target frame's code processed it and
|
||||
// responded -- so now *that* response is sitting in the queue of script to
|
||||
// execute. Process pending script one more time so we know we've gotten
|
||||
// the response.
|
||||
setTimeout(function()
|
||||
{
|
||||
// Finally, we've posted our message and received our response, and
|
||||
// there's nothing further coming down the pipe.
|
||||
if (test.hasThrowsNoExceptionBug)
|
||||
todo(false, "should throw on test #" + i);
|
||||
else
|
||||
ok(test.expectNoCallback ^ called, "should have been called #" + i);
|
||||
|
||||
nextTest();
|
||||
}, 0);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
document.removeEventListener("message", receive, false);
|
||||
var listener = registerMessageListener(eventCheck);
|
||||
|
||||
var i = -1, end = tests.length;
|
||||
nextTest();
|
||||
}
|
||||
|
||||
function oddballTests()
|
||||
function registerMessageListener(func, callback)
|
||||
{
|
||||
var called;
|
||||
function receive(evt)
|
||||
{
|
||||
func(evt);
|
||||
if (callback)
|
||||
callback();
|
||||
}
|
||||
|
||||
window.addEventListener("message", receive, false);
|
||||
|
||||
return receive;
|
||||
}
|
||||
|
||||
function removeListener(listener)
|
||||
{
|
||||
window.removeEventListener("message", listener, false);
|
||||
}
|
||||
|
||||
function oddballTests(callback)
|
||||
{
|
||||
var called = false;
|
||||
|
||||
function eventChecks(evt)
|
||||
{
|
||||
is(evt.origin, "http://localhost:8888", "wrong sender");
|
||||
is(evt.data, "PASS", "wrong data");
|
||||
is(evt.lastEventId, "",
|
||||
"postMessage creates events with empty lastEventId");
|
||||
ok(evt.source === window, "wrong source");
|
||||
called = true;
|
||||
}
|
||||
document.addEventListener("message", receive, false);
|
||||
|
||||
try
|
||||
var listener = registerMessageListener(eventChecks, function()
|
||||
{
|
||||
called = false;
|
||||
window.postMessage("PASS");
|
||||
is(called, true, "should have been called");
|
||||
removeListener(listener);
|
||||
|
||||
called = false;
|
||||
listener = registerMessageListener(eventChecks, function()
|
||||
{
|
||||
is(called, true, "should have been called");
|
||||
|
||||
called = false;
|
||||
window.postMessage("PASS", null);
|
||||
is(called, true, "should have been called");
|
||||
}
|
||||
finally
|
||||
{
|
||||
document.removeEventListener("message", receive, false);
|
||||
}
|
||||
removeListener(listener);
|
||||
callback();
|
||||
});
|
||||
|
||||
window.postMessage("PASS", "http://localhost:8888");
|
||||
});
|
||||
|
||||
window.postMessage("PASS", "http://localhost:8888");
|
||||
}
|
||||
|
||||
function run()
|
||||
{
|
||||
oddballTests();
|
||||
allTests();
|
||||
SimpleTest.finish();
|
||||
oddballTests(function()
|
||||
{
|
||||
allTests(function()
|
||||
{
|
||||
SimpleTest.finish();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
|
@ -25,7 +25,7 @@ SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var count = 0;
|
||||
|
||||
function test()
|
||||
function test(callback)
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -33,11 +33,11 @@ function test()
|
||||
switch (count)
|
||||
{
|
||||
case 1:
|
||||
window.frames[0].postMessage("PASS 1");
|
||||
window.frames[0].postMessage("PASS 1", "http://example.org:8000");
|
||||
break;
|
||||
|
||||
case 2:
|
||||
window.frames[0].postMessage("PASS 2");
|
||||
window.frames[0].postMessage("PASS 2", "http://example.org:8000");
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -48,6 +48,17 @@ function test()
|
||||
{
|
||||
ok(false, "error running test " + count + ": " + e);
|
||||
}
|
||||
|
||||
// Waiting for sent postMessage event to be processed...
|
||||
setTimeout(function()
|
||||
{
|
||||
// Waiting for responding postMessage event to be processed...
|
||||
setTimeout(function()
|
||||
{
|
||||
// We have our response!
|
||||
callback();
|
||||
}, 0);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
function messageReceiver(evt)
|
||||
@ -69,14 +80,24 @@ function messageReceiver(evt)
|
||||
break;
|
||||
}
|
||||
|
||||
is(evt.data, expect, "uh-oh, we didn't get the right postMessage!");
|
||||
is(evt.data, expect,
|
||||
"uh-oh, we (" + count + ") didn't get the right postMessage!");
|
||||
}
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
|
||||
addLoadEvent(test);
|
||||
addLoadEvent(test);
|
||||
addLoadEvent(SimpleTest.finish);
|
||||
function run()
|
||||
{
|
||||
test(function()
|
||||
{
|
||||
test(function()
|
||||
{
|
||||
SimpleTest.finish();
|
||||
}, 0);
|
||||
});
|
||||
}
|
||||
|
||||
window.addEventListener("load", run, false);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
@ -29,7 +29,8 @@ var B64_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+
|
||||
* @param bytes
|
||||
* An array of bytes to encode.
|
||||
*/
|
||||
function b64(str) {
|
||||
function b64(str)
|
||||
{
|
||||
var byteArray = new Array(str.length);
|
||||
for (var i = 0, sz = str.length; i < sz; i++)
|
||||
byteArray[i] = str.charCodeAt(i);
|
||||
@ -132,7 +133,10 @@ function messageReceiver(evt)
|
||||
is(evt.origin, "http://localhost:8888",
|
||||
"wrong origin for event from about:blank");
|
||||
is(evt.source, aboutBlankWindow, "wrong source");
|
||||
|
||||
// ...and onto the next test
|
||||
aboutBlankResponseReceived = true;
|
||||
setupBlank2();
|
||||
}
|
||||
else if (evt.data === "about:blank2-response")
|
||||
{
|
||||
@ -140,6 +144,8 @@ function messageReceiver(evt)
|
||||
"wrong origin for event from about:blank #2");
|
||||
is(evt.source, aboutBlank2Window, "wrong source");
|
||||
aboutBlank2ResponseReceived = true;
|
||||
|
||||
setupData();
|
||||
}
|
||||
else if (evt.data === "data-response")
|
||||
{
|
||||
@ -150,7 +156,9 @@ function messageReceiver(evt)
|
||||
"window/script that opened the URL, in this case the origin of this " +
|
||||
"file)");
|
||||
is(evt.source, dataWindow, "wrong source");
|
||||
|
||||
dataResponseReceived = true;
|
||||
finish();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -182,16 +190,16 @@ function getContents(description, responseText)
|
||||
" if (evt.data !== 'from-opener')\n" +
|
||||
" response += ' wrong-data(' + evt.data + ')';\n" +
|
||||
"\n" +
|
||||
" window.parent.postMessage(response);\n" +
|
||||
" window.parent.postMessage(response, 'http://localhost:8888');\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"function ready()\n" +
|
||||
"{\n" +
|
||||
" window.parent.postMessage('next-test');\n" +
|
||||
" window.parent.postMessage('next-test', 'http://localhost:8888');\n" +
|
||||
"}\n" +
|
||||
"\n" +
|
||||
"window.addEventListener('load', ready, false);\n" +
|
||||
"document.addEventListener('message', receive, false);\n" +
|
||||
"window.addEventListener('message', receive, false);\n" +
|
||||
" </script>\n" +
|
||||
"</head>\n" +
|
||||
"<body><p>" + description + "</p></body>\n" +
|
||||
@ -200,6 +208,16 @@ function getContents(description, responseText)
|
||||
return contents;
|
||||
}
|
||||
|
||||
/** Finish the test, but don't finish twice if we timed out. */
|
||||
function finish()
|
||||
{
|
||||
if (!finished)
|
||||
{
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
}
|
||||
}
|
||||
|
||||
var xhtmlns = "http://www.w3.org/1999/xhtml";
|
||||
|
||||
function insert(el)
|
||||
@ -236,8 +254,7 @@ function blankFailed()
|
||||
ok(false,
|
||||
"test timed out (postMessage not accessible on window.parent in " +
|
||||
"the first about:blank iframe?)");
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@ -276,8 +293,7 @@ function dataFailed()
|
||||
ok(false,
|
||||
"test timed out (postMessage not accessible on window.parent in " +
|
||||
"the data: iframe?)");
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
@ -306,18 +322,7 @@ function nextTest()
|
||||
|
||||
function testBlank()
|
||||
{
|
||||
try
|
||||
{
|
||||
aboutBlankWindow.postMessage("from-opener");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "exception thrown trying to post message #1 to about:blank");
|
||||
}
|
||||
|
||||
ok(aboutBlankResponseReceived, "about:blank never got a response!");
|
||||
|
||||
setTimeout(setupBlank2, 0);
|
||||
aboutBlankWindow.postMessage("from-opener", "http://localhost:8888");
|
||||
}
|
||||
|
||||
function testBlank2()
|
||||
@ -331,39 +336,18 @@ function testBlank2()
|
||||
doc.body.textContent = "This was about:blank #2";
|
||||
|
||||
var script = doc.createElement("script");
|
||||
script.textContent = "window.parent.postMessage('about:blank2-response');";
|
||||
script.textContent =
|
||||
"window.parent.postMessage('about:blank2-response', " +
|
||||
" 'http://localhost:8888');";
|
||||
doc.body.appendChild(script);
|
||||
|
||||
// Note that this script gets run synchronously, so we're done with the
|
||||
// test here.
|
||||
ok(aboutBlank2ResponseReceived, "postMessage from about:blank #2 failed");
|
||||
|
||||
setTimeout(setupData, 0);
|
||||
}
|
||||
|
||||
function testData()
|
||||
{
|
||||
try
|
||||
{
|
||||
dataWindow.postMessage("from-opener");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
ok(false, "exception thrown trying to post message to data: URL window");
|
||||
}
|
||||
|
||||
ok(dataResponseReceived, "we never got a response!");
|
||||
|
||||
// Don't re-report -- we must have already failed, and this can
|
||||
// screw up the displayed results.
|
||||
if (finished)
|
||||
return;
|
||||
|
||||
finished = true;
|
||||
SimpleTest.finish();
|
||||
dataWindow.postMessage("from-opener", "http://localhost:8888");
|
||||
}
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
|
||||
addLoadEvent(setupBlank);
|
||||
]]></script>
|
||||
|
@ -30,7 +30,7 @@ function atLoad()
|
||||
{
|
||||
try
|
||||
{
|
||||
sameDomain.postMessage("foo");
|
||||
sameDomain.postMessage("foo", "http://localhost:8888");
|
||||
ok(true, "should not have thrown for same-domain exception");
|
||||
}
|
||||
catch (e)
|
||||
@ -51,7 +51,7 @@ function next2()
|
||||
{
|
||||
try
|
||||
{
|
||||
crossDomain.postMessage("foo");
|
||||
crossDomain.postMessage("foo", "http://example.org:8000");
|
||||
ok(true, "should not have thrown for cross-domain exception");
|
||||
}
|
||||
catch (e)
|
||||
|
@ -28,15 +28,16 @@ function receiveMessage(evt)
|
||||
{
|
||||
is(evt.origin, "http://example.org", "wrong origin");
|
||||
is(evt.data, "child-message", "wrong data");
|
||||
is(evt.lastEventId, "", "postMessage creates events with empty lastEventId");
|
||||
ok(evt.source === window.frames.userPassKid, "wrong source");
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", receiveMessage, false);
|
||||
window.addEventListener("message", receiveMessage, false);
|
||||
|
||||
function sendMessage(evt)
|
||||
{
|
||||
window.frames.userPassKid.postMessage("parent-message");
|
||||
window.frames.userPassKid.postMessage("parent-message", "http://example.org");
|
||||
}
|
||||
|
||||
window.addEventListener("load", sendMessage, false);
|
||||
|
@ -97,13 +97,6 @@ pref("editor.toolbars.showbutton.absolutePosition", true);
|
||||
pref("editor.toolbars.showbutton.decreaseZIndex", true);
|
||||
pref("editor.toolbars.showbutton.increaseZIndex", true);
|
||||
|
||||
pref("editor.auto_save", false);
|
||||
pref("editor.auto_save_delay", 10); // minutes
|
||||
pref("editor.use_html_editor", 0);
|
||||
pref("editor.html_editor", "");
|
||||
pref("editor.use_image_editor", 0);
|
||||
pref("editor.image_editor", "");
|
||||
|
||||
pref("editor.history.url_maximum", 10);
|
||||
|
||||
pref("editor.publish.", "");
|
||||
|
@ -3861,7 +3861,7 @@ var nsPreferencesCommand =
|
||||
|
||||
doCommand: function(aCommand)
|
||||
{
|
||||
goPreferences('editor', 'chrome://editor/content/pref-composer.xul','editor');
|
||||
goPreferences('composer_pane');
|
||||
window.content.focus();
|
||||
}
|
||||
};
|
||||
|
@ -24,13 +24,33 @@
|
||||
accesskey="&editorCheck.accesskey;"
|
||||
preference="general.startup.editor"/>
|
||||
</groupbox>
|
||||
<!-- category tree entries for editor -->
|
||||
<treechildren id="prefsPanelChildren">
|
||||
<treeitem container="true"
|
||||
id="composerItem"
|
||||
insertafter="mailnews,navigator"
|
||||
label="&compose.label;"
|
||||
prefpane="composer_pane"
|
||||
url="chrome://editor/content/pref-composer.xul"
|
||||
helpTopic="composer_prefs_general">
|
||||
<treechildren id="composerChildren">
|
||||
<!-- XXX Move pref panes from below to here as they are migrated -->
|
||||
<treeitem id="toolbarsItem"
|
||||
label="&toolbars.label;"
|
||||
prefpane="toolbars_pane"
|
||||
url="chrome://editor/content/pref-toolbars.xul"
|
||||
helpTopic="composer_prefs_toolbars"/>
|
||||
</treechildren>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
|
||||
<!-- category tree entries for editor -->
|
||||
<treechildren id="panelChildren">
|
||||
<treeitem container="true" id="editor" insertafter="mailnews,navigator">
|
||||
<treerow>
|
||||
<treecell url="chrome://editor/content/pref-composer.xul" label="&compose.label;" />
|
||||
<treecell label="Migrated: &compose.label;"/>
|
||||
</treerow>
|
||||
<!-- XXX Move these up as we migrate the panels -->
|
||||
<treechildren>
|
||||
<treeitem>
|
||||
<treerow>
|
||||
@ -46,7 +66,7 @@
|
||||
-->
|
||||
<treeitem>
|
||||
<treerow>
|
||||
<treecell url="chrome://editor/content/pref-toolbars.xul" label="&toolbars.label;"/>
|
||||
<treecell label="Migrated: &toolbars.label;"/>
|
||||
</treerow>
|
||||
</treeitem>
|
||||
</treechildren>
|
||||
|
@ -40,154 +40,87 @@
|
||||
<?xml-stylesheet href="chrome://communicator/skin/" type="text/css"?>
|
||||
<?xul-overlay href="chrome://global/content/globalOverlay.xul"?>
|
||||
|
||||
<!DOCTYPE page SYSTEM "chrome://editor/locale/pref-composer.dtd" >
|
||||
<!DOCTYPE overlay SYSTEM "chrome://editor/locale/pref-composer.dtd">
|
||||
|
||||
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="parent.initPanel('chrome://editor/content/pref-composer.xul');"
|
||||
headertitle="&pref.composer.title;">
|
||||
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<prefpane id="composer_pane"
|
||||
label="&pref.composer.title;"
|
||||
script="chrome://editor/content/EdDialogCommon.js chrome://editor/content/editorUtilities.js">
|
||||
|
||||
<script type="application/x-javascript">
|
||||
<!-- Add "shouldAutoSave", "autoSaveAmount" to _elementIDs when implemented -->
|
||||
<![CDATA[
|
||||
var _elementIDs = ["maintainTableStructure", "preserveFormatting", "saveAssociatedFiles", "showPublishDialog", "recentFiles", "useCSS", "crInPCreatesNewP"];
|
||||
]]>
|
||||
</script>
|
||||
<script type="application/x-javascript" src="chrome://editor/content/EdDialogCommon.js"/>
|
||||
<script type="application/x-javascript" src="chrome://editor/content/editorUtilities.js"/>
|
||||
|
||||
<!-- Recent files menu -->
|
||||
<groupbox>
|
||||
<caption label="&recentFiles.title;"/>
|
||||
<hbox align="center">
|
||||
<label value = "&documentsInMenu.label;"
|
||||
accesskey = "&documentsInMenu.accesskey;"
|
||||
control = "recentFiles"/>
|
||||
<textbox
|
||||
id="recentFiles"
|
||||
name="recent string"
|
||||
size="3"
|
||||
value="10"
|
||||
preftype="int"
|
||||
prefstring="editor.history.url_maximum"
|
||||
oninput=" ValidateNumber(this, null, 0, 99); LimitStringLength('recentFiles',2);"
|
||||
/>
|
||||
</hbox>
|
||||
</groupbox>
|
||||
<preferences id="composer_preferences">
|
||||
<preference id="editor.history.url_maximum"
|
||||
name="editor.history.url_maximum"
|
||||
type="int"/>
|
||||
<preference id="editor.prettyprint"
|
||||
name="editor.prettyprint"
|
||||
type="bool"
|
||||
inverted="true"/>
|
||||
<preference id="editor.save_associated_files"
|
||||
name="editor.save_associated_files"
|
||||
type="bool"/>
|
||||
<preference id="editor.always_show_publish_dialog"
|
||||
name="editor.always_show_publish_dialog"
|
||||
type="bool"/>
|
||||
<preference id="editor.table.maintain_structure"
|
||||
name="editor.table.maintain_structure"
|
||||
type="bool"/>
|
||||
<preference id="editor.use_css"
|
||||
name="editor.use_css"
|
||||
type="bool"/>
|
||||
<preference id="editor.CR_creates_new_p"
|
||||
name="editor.CR_creates_new_p"
|
||||
type="bool"/>
|
||||
</preferences>
|
||||
|
||||
<!-- HTML formatting on output -->
|
||||
<groupbox>
|
||||
<caption label="&savingFiles.title;"/>
|
||||
<spacer class="spacer"/>
|
||||
<checkbox
|
||||
label = "&preserveExisting.label;"
|
||||
id = "preserveFormatting"
|
||||
accesskey = "&preserveExisting.accesskey;"
|
||||
tooltiptext = "&preserveExisting.tooltip;"
|
||||
preftype = "bool"
|
||||
prefstring = "editor.prettyprint"
|
||||
reversed = "true"
|
||||
/>
|
||||
<checkbox
|
||||
label = "&saveAssociatedFiles.label;"
|
||||
id = "saveAssociatedFiles"
|
||||
accesskey = "&saveAssociatedFiles.accesskey;"
|
||||
preftype = "bool"
|
||||
prefindex = "0"
|
||||
prefstring = "editor.save_associated_files"
|
||||
/>
|
||||
<checkbox
|
||||
label = "&showPublishDialog.label;"
|
||||
id = "showPublishDialog"
|
||||
accesskey = "&showPublishDialog.accesskey;"
|
||||
preftype = "bool"
|
||||
prefindex = "0"
|
||||
prefstring = "editor.always_show_publish_dialog"
|
||||
/>
|
||||
</groupbox>
|
||||
|
||||
<groupbox align="start">
|
||||
<caption label = "&composerEditing.label;"/>
|
||||
<checkbox
|
||||
label = "&maintainStructure.label;"
|
||||
id = "maintainTableStructure"
|
||||
accesskey = "&maintainStructure.accesskey;"
|
||||
tooltiptext = "&maintainStructure.tooltip;"
|
||||
prefstring = "editor.table.maintain_structure"
|
||||
/>
|
||||
<checkbox
|
||||
label = "&useCSS.label;"
|
||||
id = "useCSS"
|
||||
accesskey = "&useCSS.accesskey;"
|
||||
prefstring = "editor.use_css"
|
||||
/>
|
||||
<checkbox
|
||||
label = "&crInPCreatesNewP.label;"
|
||||
id = "crInPCreatesNewP"
|
||||
accesskey = "&crInPCreatesNewP.accesskey;"
|
||||
prefstring = "editor.CR_creates_new_p"
|
||||
/>
|
||||
</groupbox>
|
||||
|
||||
<!-- Take out Auto-Save; not supported at this time
|
||||
<groupbox>
|
||||
<caption label="&saving;"/>
|
||||
<hbox align="center">
|
||||
<checkbox
|
||||
label = "&AutoSaveCheck;"
|
||||
id = "shouldAutoSave"
|
||||
prefstring = "editor.auto_save"
|
||||
name = "autosave"
|
||||
/>
|
||||
<textbox
|
||||
id="autoSaveAmount"
|
||||
name="time"
|
||||
size="3"
|
||||
value="5"
|
||||
preftype="int"
|
||||
prefstring="editor.auto_save_delay"
|
||||
/>
|
||||
<label value="&minText;" />
|
||||
</hbox>
|
||||
</groupbox>
|
||||
-->
|
||||
|
||||
<!-- External Editors are not supported at this time
|
||||
<!-- Recent files menu -->
|
||||
<groupbox>
|
||||
<caption label="&exterLegend.label;"/>
|
||||
<hbox>
|
||||
<checkbox
|
||||
name = "htmlSourceEditorCheckbox"
|
||||
label = "&htmlSource;"
|
||||
preftype = "int"
|
||||
prefindex = "0"
|
||||
prefstring = "editor.use_html_editor"
|
||||
/>
|
||||
<textbox
|
||||
name = "&chooseButton.label;"
|
||||
preftype = "string"
|
||||
/>
|
||||
<button
|
||||
name = ""
|
||||
label = "&chooseButton.label;"
|
||||
/>
|
||||
</hbox>
|
||||
<caption label="&recentFiles.title;"/>
|
||||
<hbox align="center">
|
||||
<label value="&documentsInMenu.label;"
|
||||
accesskey="&documentsInMenu.accesskey;"
|
||||
control="recentFiles"/>
|
||||
<textbox id="recentFiles"
|
||||
name="recent string"
|
||||
size="3"
|
||||
value="10"
|
||||
preference="editor.history.url_maximum"
|
||||
oninput=" ValidateNumber(this, null, 0, 99); LimitStringLength('recentFiles',2);"/>
|
||||
</hbox>
|
||||
</groupbox>
|
||||
|
||||
<hbox>
|
||||
<checkbox
|
||||
name = "htmlImageEditorCheckbox"
|
||||
label = "&imageeditor;"
|
||||
preftype = "int"
|
||||
prefindex = "0"
|
||||
prefstring ="editor.use_image_editor"
|
||||
/>
|
||||
<!-- HTML formatting on output -->
|
||||
<groupbox>
|
||||
<caption label="&savingFiles.title;"/>
|
||||
<checkbox id="preserveFormatting"
|
||||
label="&preserveExisting.label;"
|
||||
accesskey="&preserveExisting.accesskey;"
|
||||
tooltiptext="&preserveExisting.tooltip;"
|
||||
preference="editor.prettyprint"/>
|
||||
<checkbox id="saveAssociatedFiles"
|
||||
label="&saveAssociatedFiles.label;"
|
||||
accesskey="&saveAssociatedFiles.accesskey;"
|
||||
preference="editor.save_associated_files"/>
|
||||
<checkbox id="showPublishDialog"
|
||||
label="&showPublishDialog.label;"
|
||||
accesskey="&showPublishDialog.accesskey;"
|
||||
preference="editor.always_show_publish_dialog"/>
|
||||
</groupbox>
|
||||
|
||||
<textbox
|
||||
name="chooseButton.label"
|
||||
prefstring = "editor.image_editor"
|
||||
/>
|
||||
<button label="&chooseButton.label;" />
|
||||
</hbox>
|
||||
|
||||
</groupbox>
|
||||
-->
|
||||
</page>
|
||||
<groupbox align="start">
|
||||
<caption label="&composerEditing.label;"/>
|
||||
<checkbox id="maintainTableStructure"
|
||||
label="&maintainStructure.label;"
|
||||
accesskey="&maintainStructure.accesskey;"
|
||||
tooltiptext="&maintainStructure.tooltip;"
|
||||
preference="editor.table.maintain_structure"/>
|
||||
<checkbox id="useCSS"
|
||||
label="&useCSS.label;"
|
||||
accesskey="&useCSS.accesskey;"
|
||||
preference="editor.use_css"/>
|
||||
<checkbox id="crInPCreatesNewP"
|
||||
label="&crInPCreatesNewP.label;"
|
||||
accesskey="&crInPCreatesNewP.accesskey;"
|
||||
preference="editor.CR_creates_new_p"/>
|
||||
</groupbox>
|
||||
</prefpane>
|
||||
</overlay>
|
||||
|
@ -37,93 +37,195 @@
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
|
||||
<!DOCTYPE page SYSTEM "chrome://editor/locale/pref-toolbars.dtd">
|
||||
<!DOCTYPE overlay SYSTEM "chrome://editor/locale/pref-toolbars.dtd">
|
||||
|
||||
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
onload="parent.initPanel('chrome://editor/content/pref-toolbars.xul');"
|
||||
headertitle="&pref.toolbars.title;">
|
||||
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<prefpane id="toolbars_pane"
|
||||
label="&pref.toolbars.title;">
|
||||
|
||||
<script type="application/x-javascript">
|
||||
<![CDATA[
|
||||
var _elementIDs = [
|
||||
"showNew", "showOpen", "showSave", "showPublish", "showPreview", "showSmaller", "showLarger", "showBold",
|
||||
"showCut", "showCopy", "showPaste", "showPrint", "showFind", "showBullets", "showNumbers", "showItalic",
|
||||
"showImage", "showHline", "showTable", "showLink", "showAnchor", "showOutdent", "showIndent", "showUnderline",
|
||||
"showAbsolutePosition", "showDecreaseZIndex", "showIncreaseZIndex" ];
|
||||
]]>
|
||||
</script>
|
||||
<preferences id="toolbars_preferences">
|
||||
<preference id="editor.toolbars.showbutton.new"
|
||||
name="editor.toolbars.showbutton.new"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.open"
|
||||
name="editor.toolbars.showbutton.open"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.save"
|
||||
name="editor.toolbars.showbutton.save"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.publish"
|
||||
name="editor.toolbars.showbutton.publish"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.preview"
|
||||
name="editor.toolbars.showbutton.preview"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.cut"
|
||||
name="editor.toolbars.showbutton.cut"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.copy"
|
||||
name="editor.toolbars.showbutton.copy"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.paste"
|
||||
name="editor.toolbars.showbutton.paste"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.print"
|
||||
name="editor.toolbars.showbutton.print"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.find"
|
||||
name="editor.toolbars.showbutton.find"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.image"
|
||||
name="editor.toolbars.showbutton.image"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.hline"
|
||||
name="editor.toolbars.showbutton.hline"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.table"
|
||||
name="editor.toolbars.showbutton.table"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.link"
|
||||
name="editor.toolbars.showbutton.link"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.namedAnchor"
|
||||
name="editor.toolbars.showbutton.namedAnchor"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.DecreaseFontSize"
|
||||
name="editor.toolbars.showbutton.DecreaseFontSize"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.IncreaseFontSize"
|
||||
name="editor.toolbars.showbutton.IncreaseFontSize"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.bold"
|
||||
name="editor.toolbars.showbutton.bold"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.absolutePosition"
|
||||
name="editor.toolbars.showbutton.absolutePosition"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.ul"
|
||||
name="editor.toolbars.showbutton.ul"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.ol"
|
||||
name="editor.toolbars.showbutton.ol"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.italic"
|
||||
name="editor.toolbars.showbutton.italic"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.decreaseZIndex"
|
||||
name="editor.toolbars.showbutton.decreaseZIndex"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.outdent"
|
||||
name="editor.toolbars.showbutton.outdent"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.indent"
|
||||
name="editor.toolbars.showbutton.indent"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.underline"
|
||||
name="editor.toolbars.showbutton.underline"
|
||||
type="bool"/>
|
||||
<preference id="editor.toolbars.showbutton.increaseZIndex"
|
||||
name="editor.toolbars.showbutton.increaseZIndex"
|
||||
type="bool"/>
|
||||
</preferences>
|
||||
|
||||
<groupbox orient="horizontal">
|
||||
<caption label="&composition.caption;"/>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&new.label;" id="showNew"
|
||||
prefstring="editor.toolbars.showbutton.new"/>
|
||||
<checkbox label="&open.label;" id="showOpen"
|
||||
prefstring="editor.toolbars.showbutton.open"/>
|
||||
<checkbox label="&save.label;" id="showSave"
|
||||
prefstring="editor.toolbars.showbutton.save"/>
|
||||
<checkbox label="&publish.label;" id="showPublish"
|
||||
prefstring="editor.toolbars.showbutton.publish"/>
|
||||
<checkbox label="&preview.label;" id="showPreview"
|
||||
prefstring="editor.toolbars.showbutton.preview"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&cut.label;" id="showCut"
|
||||
prefstring="editor.toolbars.showbutton.cut"/>
|
||||
<checkbox label="©.label;" id="showCopy"
|
||||
prefstring="editor.toolbars.showbutton.copy"/>
|
||||
<checkbox label="&paste.label;" id="showPaste"
|
||||
prefstring="editor.toolbars.showbutton.paste"/>
|
||||
<checkbox label="&print.label;" id="showPrint"
|
||||
prefstring="editor.toolbars.showbutton.print"/>
|
||||
<checkbox label="&find.label;" id="showFind"
|
||||
prefstring="editor.toolbars.showbutton.find"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&image.label;" id="showImage"
|
||||
prefstring="editor.toolbars.showbutton.image"/>
|
||||
<checkbox label="&hline.label;" id="showHline"
|
||||
prefstring="editor.toolbars.showbutton.hline"/>
|
||||
<checkbox label="&table.label;" id="showTable"
|
||||
prefstring="editor.toolbars.showbutton.table"/>
|
||||
<checkbox label="&link.label;" id="showLink"
|
||||
prefstring="editor.toolbars.showbutton.link"/>
|
||||
<checkbox label="&anchor.label;" id="showAnchor"
|
||||
prefstring="editor.toolbars.showbutton.namedAnchor"/>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
<groupbox orient="horizontal">
|
||||
<caption label="&composition.caption;"/>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showNew"
|
||||
label="&new.label;"
|
||||
preference="editor.toolbars.showbutton.new"/>
|
||||
<checkbox id="showOpen"
|
||||
label="&open.label;"
|
||||
preference="editor.toolbars.showbutton.open"/>
|
||||
<checkbox id="showSave"
|
||||
label="&save.label;"
|
||||
preference="editor.toolbars.showbutton.save"/>
|
||||
<checkbox id="showPublish"
|
||||
label="&publish.label;"
|
||||
preference="editor.toolbars.showbutton.publish"/>
|
||||
<checkbox id="showPreview"
|
||||
label="&preview.label;"
|
||||
preference="editor.toolbars.showbutton.preview"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showCut"
|
||||
label="&cut.label;"
|
||||
preference="editor.toolbars.showbutton.cut"/>
|
||||
<checkbox id="showCopy"
|
||||
label="©.label;"
|
||||
preference="editor.toolbars.showbutton.copy"/>
|
||||
<checkbox id="showPaste"
|
||||
label="&paste.label;"
|
||||
preference="editor.toolbars.showbutton.paste"/>
|
||||
<checkbox id="showPrint"
|
||||
label="&print.label;"
|
||||
preference="editor.toolbars.showbutton.print"/>
|
||||
<checkbox id="showFind"
|
||||
label="&find.label;"
|
||||
preference="editor.toolbars.showbutton.find"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showImage"
|
||||
label="&image.label;"
|
||||
preference="editor.toolbars.showbutton.image"/>
|
||||
<checkbox id="showHline"
|
||||
label="&hline.label;"
|
||||
preference="editor.toolbars.showbutton.hline"/>
|
||||
<checkbox id="showTable"
|
||||
label="&table.label;"
|
||||
preference="editor.toolbars.showbutton.table"/>
|
||||
<checkbox id="showLink"
|
||||
label="&link.label;"
|
||||
preference="editor.toolbars.showbutton.link"/>
|
||||
<checkbox id="showAnchor"
|
||||
label="&anchor.label;"
|
||||
preference="editor.toolbars.showbutton.namedAnchor"/>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
|
||||
<groupbox orient="horizontal">
|
||||
<caption label="&formatting.caption;"/>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&smaller.label;" id="showSmaller"
|
||||
prefstring="editor.toolbars.showbutton.DecreaseFontSize"/>
|
||||
<checkbox label="&larger.label;" id="showLarger"
|
||||
prefstring="editor.toolbars.showbutton.IncreaseFontSize"/>
|
||||
<checkbox label="&bold.label;" id="showBold"
|
||||
prefstring="editor.toolbars.showbutton.bold"/>
|
||||
<checkbox label="&absolutePosition.label;" id="showAbsolutePosition"
|
||||
prefstring="editor.toolbars.showbutton.absolutePosition"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&bullets.label;" id="showBullets"
|
||||
prefstring="editor.toolbars.showbutton.ul"/>
|
||||
<checkbox label="&numbers.label;" id="showNumbers"
|
||||
prefstring="editor.toolbars.showbutton.ol"/>
|
||||
<checkbox label="&italic.label;" id="showItalic"
|
||||
prefstring="editor.toolbars.showbutton.italic"/>
|
||||
<checkbox label="&decreaseZIndex.label;" id="showDecreaseZIndex"
|
||||
prefstring="editor.toolbars.showbutton.decreaseZIndex"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox label="&outdent.label;" id="showOutdent"
|
||||
prefstring="editor.toolbars.showbutton.outdent"/>
|
||||
<checkbox label="&indent.label;" id="showIndent"
|
||||
prefstring="editor.toolbars.showbutton.indent"/>
|
||||
<checkbox label="&underline.label;" id="showUnderline"
|
||||
prefstring="editor.toolbars.showbutton.underline"/>
|
||||
<checkbox label="&increaseZIndex.label;" id="showIncreaseZIndex"
|
||||
prefstring="editor.toolbars.showbutton.increaseZIndex"/>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
</page>
|
||||
<groupbox orient="horizontal">
|
||||
<caption label="&formatting.caption;"/>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showSmaller"
|
||||
label="&smaller.label;"
|
||||
preference="editor.toolbars.showbutton.DecreaseFontSize"/>
|
||||
<checkbox id="showLarger"
|
||||
label="&larger.label;"
|
||||
preference="editor.toolbars.showbutton.IncreaseFontSize"/>
|
||||
<checkbox id="showBold"
|
||||
label="&bold.label;"
|
||||
preference="editor.toolbars.showbutton.bold"/>
|
||||
<checkbox id="showAbsolutePosition"
|
||||
label="&absolutePosition.label;"
|
||||
preference="editor.toolbars.showbutton.absolutePosition"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showBullets"
|
||||
label="&bullets.label;"
|
||||
preference="editor.toolbars.showbutton.ul"/>
|
||||
<checkbox id="showNumbers"
|
||||
label="&numbers.label;"
|
||||
preference="editor.toolbars.showbutton.ol"/>
|
||||
<checkbox id="showItalic"
|
||||
label="&italic.label;"
|
||||
preference="editor.toolbars.showbutton.italic"/>
|
||||
<checkbox id="showDecreaseZIndex"
|
||||
label="&decreaseZIndex.label;"
|
||||
preference="editor.toolbars.showbutton.decreaseZIndex"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<checkbox id="showOutdent"
|
||||
label="&outdent.label;"
|
||||
preference="editor.toolbars.showbutton.outdent"/>
|
||||
<checkbox id="showIndent"
|
||||
label="&indent.label;"
|
||||
preference="editor.toolbars.showbutton.indent"/>
|
||||
<checkbox id="showUnderline"
|
||||
label="&underline.label;"
|
||||
preference="editor.toolbars.showbutton.underline"/>
|
||||
<checkbox id="showIncreaseZIndex"
|
||||
label="&increaseZIndex.label;"
|
||||
preference="editor.toolbars.showbutton.increaseZIndex"/>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
</prefpane>
|
||||
</overlay>
|
||||
|
@ -4,6 +4,7 @@ comm.jar:
|
||||
% overlay chrome://messenger/content/mailWindowOverlay.xul chrome://editor/content/editorMailOverlay.xul
|
||||
#ifdef MOZ_SUITE
|
||||
% overlay chrome://communicator/content/pref/preftree.xul chrome://editor/content/editorPrefsOverlay.xul
|
||||
% overlay chrome://communicator/content/pref/preferences.xul chrome://editor/content/editorPrefsOverlay.xul
|
||||
% overlay chrome://communicator/content/pref/pref-appearance.xul chrome://editor/content/editorPrefsOverlay.xul
|
||||
% overlay chrome://navigator/content/navigatorOverlay.xul chrome://editor/content/editorNavigatorOverlay.xul
|
||||
% content editor-region %content/editor-region/ xpcnativewrappers=yes
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
</script>
|
||||
<body>
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
<body>
|
||||
<iframe name="frame1" src="http://example.org/tests/extensions/cookie/test/file_domain_inner_inner.html"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta2=tag2">
|
||||
<script type="text/javascript">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can2=has2";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.parent.opener.postMessage("message");
|
||||
</script>
|
||||
</head>
|
||||
window.parent.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,15 +1,15 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<iframe name="frame1" src="http://example.org/tests/extensions/cookie/test/file_image_inner_inner.html"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,20 +1,20 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" media="all" href="http://example.org/tests/extensions/cookie/test/test1.css" />
|
||||
<link rel="stylesheet" type="text/css" media="all" href="http://example.com/tests/extensions/cookie/test/test2.css" />
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta2=tag2">
|
||||
<script type="text/javascript">
|
||||
function runTest() {
|
||||
function runTest() {
|
||||
document.cookie = "can2=has2";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.parent.opener.postMessage("message");
|
||||
window.parent.opener.postMessage("message", "http://localhost:8888");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<img src="http://example.org/tests/extensions/cookie/test/image1.png" onload="runTest()" />
|
||||
<img src="http://example.com/tests/extensions/cookie/test/image2.png" onload="runTest()" />
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,17 +1,17 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
function runTest() {
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
</head>
|
||||
<body>
|
||||
<img src="http://example.org/tests/extensions/cookie/test/image1.png" onload="runTest()" />
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
</script>
|
||||
<body>
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
<body>
|
||||
<iframe name="frame1" src="http://localhost:8888/tests/extensions/cookie/test/file_domain_inner_inner.html"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
</script>
|
||||
<body>
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
<body>
|
||||
<iframe name="frame1" src="http://127.0.0.1:8888/tests/extensions/cookie/test/file_domain_inner_inner.html"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,14 +1,14 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<META HTTP-EQUIV="Set-Cookie" CONTENT="meta=tag">
|
||||
<script type="text/javascript">
|
||||
document.cookie = "can=has";
|
||||
|
||||
// send a message to our test document, to say we're done loading
|
||||
window.opener.postMessage("message");
|
||||
</script>
|
||||
<body>
|
||||
window.opener.postMessage("message", "http://localhost:8888");
|
||||
</script>
|
||||
<body>
|
||||
<iframe name="frame1" src="http://test2.example.org/tests/extensions/cookie/test/file_domain_inner_inner.html"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -63,5 +63,5 @@ function runTest() {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
|
||||
|
@ -107,5 +107,5 @@ function runTest() {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
document.addEventListener("message", messageReceiver, false);
|
||||
window.addEventListener("message", messageReceiver, false);
|
||||
|
||||
|
@ -73,6 +73,7 @@
|
||||
#include <math.h>
|
||||
|
||||
#include "prlog.h"
|
||||
#include "prinit.h"
|
||||
static PRLogModuleInfo *gFontLog = PR_NewLogModule("winfonts");
|
||||
|
||||
#define ROUND(x) floor((x) + 0.5)
|
||||
@ -1243,7 +1244,7 @@ public:
|
||||
if (rv == E_PENDING) {
|
||||
if (shapeDC == mDC) {
|
||||
// we already tried this once, something failed, give up
|
||||
return GDI_ERROR;
|
||||
return E_PENDING;
|
||||
}
|
||||
|
||||
SelectFont();
|
||||
@ -1336,8 +1337,10 @@ public:
|
||||
SelectFont();
|
||||
|
||||
nsAutoTArray<int,500> partialWidthArray;
|
||||
// Callers incorrectly assume this code is infallible,
|
||||
// so we must abort on this OOM condition.
|
||||
if (!partialWidthArray.SetLength(mNumGlyphs))
|
||||
return GDI_ERROR;
|
||||
PR_Abort();
|
||||
SIZE size;
|
||||
|
||||
GetTextExtentExPointI(mDC,
|
||||
@ -2131,10 +2134,12 @@ gfxWindowsFontGroup::InitTextRunUniscribe(gfxContext *aContext, gfxTextRun *aRun
|
||||
rv = item->Shape();
|
||||
}
|
||||
|
||||
NS_ASSERTION(SUCCEEDED(rv), "Failed to shape -- we should never hit this");
|
||||
NS_ASSERTION(SUCCEEDED(rv), "Failed to shape, twice -- we should never hit this");
|
||||
|
||||
rv = item->Place();
|
||||
NS_ASSERTION(SUCCEEDED(rv), "Failed to place -- this is pretty bad.");
|
||||
if (SUCCEEDED(rv)) {
|
||||
rv = item->Place();
|
||||
NS_ASSERTION(SUCCEEDED(rv), "Failed to place -- this is pretty bad.");
|
||||
}
|
||||
|
||||
if (FAILED(rv)) {
|
||||
aRun->ResetGlyphRuns();
|
||||
|
@ -1330,6 +1330,7 @@ JS_InitStandardClasses(JSContext *cx, JSObject *obj)
|
||||
js_InitNumberClass(cx, obj) &&
|
||||
js_InitRegExpClass(cx, obj) &&
|
||||
js_InitStringClass(cx, obj) &&
|
||||
js_InitEval(cx, obj) &&
|
||||
#if JS_HAS_SCRIPT_OBJECT
|
||||
js_InitScriptClass(cx, obj) &&
|
||||
#endif
|
||||
|
@ -105,7 +105,8 @@ js_UntrapScriptCode(JSContext *cx, JSScript *script)
|
||||
for (trap = (JSTrap *)rt->trapList.next;
|
||||
trap != (JSTrap *)&rt->trapList;
|
||||
trap = (JSTrap *)trap->links.next) {
|
||||
if (trap->script == script) {
|
||||
if (trap->script == script &&
|
||||
(size_t)(trap->pc - script->code) < script->length) {
|
||||
if (code == script->code) {
|
||||
jssrcnote *sn, *notes;
|
||||
size_t nbytes;
|
||||
|
@ -4617,7 +4617,7 @@ DecompileCode(JSPrinter *jp, JSScript *script, jsbytecode *pc, uintN len,
|
||||
code = js_UntrapScriptCode(cx, jp->script);
|
||||
if (code != oldcode) {
|
||||
jp->script->code = code;
|
||||
jp->script->main = code + (oldmain - jp->script->code);
|
||||
jp->script->main = code + (oldmain - oldcode);
|
||||
pc = code + (pc - oldcode);
|
||||
}
|
||||
|
||||
@ -4907,6 +4907,7 @@ static char *
|
||||
DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
jsbytecode *pc)
|
||||
{
|
||||
jsbytecode *code, *oldcode, *oldmain;
|
||||
JSOp op;
|
||||
const JSCodeSpec *cs;
|
||||
jsbytecode *begin, *end;
|
||||
@ -4918,9 +4919,20 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
char *name;
|
||||
|
||||
JS_ASSERT(script->main <= pc && pc < script->code + script->length);
|
||||
|
||||
pcstack = NULL;
|
||||
oldcode = script->code;
|
||||
oldmain = script->main;
|
||||
|
||||
/* From this point the control must flow through the label out. */
|
||||
code = js_UntrapScriptCode(cx, script);
|
||||
if (code != oldcode) {
|
||||
script->code = code;
|
||||
script->main = code + (oldmain - oldcode);
|
||||
pc = code + (pc - oldcode);
|
||||
}
|
||||
|
||||
op = (JSOp) *pc;
|
||||
if (op == JSOP_TRAP)
|
||||
op = JS_GetTrapOpcode(cx, script, pc);
|
||||
|
||||
/* None of these stack-writing ops generates novel values. */
|
||||
JS_ASSERT(op != JSOP_CASE && op != JSOP_CASEX &&
|
||||
@ -4931,8 +4943,10 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
* |this| could convert to a very long object initialiser, so cite it by
|
||||
* its keyword name instead.
|
||||
*/
|
||||
if (op == JSOP_THIS)
|
||||
return JS_strdup(cx, js_this_str);
|
||||
if (op == JSOP_THIS) {
|
||||
name = JS_strdup(cx, js_this_str);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
* JSOP_BINDNAME is special: it generates a value, the base object of a
|
||||
@ -4940,8 +4954,10 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
* js_DecompileValueGenerator, the name being bound is irrelevant. Just
|
||||
* fall back to the base object.
|
||||
*/
|
||||
if (op == JSOP_BINDNAME)
|
||||
return FAILED_EXPRESSION_DECOMPILER;
|
||||
if (op == JSOP_BINDNAME) {
|
||||
name = FAILED_EXPRESSION_DECOMPILER;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* NAME ops are self-contained, others require left or right context. */
|
||||
cs = &js_CodeSpec[op];
|
||||
@ -4953,8 +4969,10 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
case JOF_XMLNAME:
|
||||
case 0:
|
||||
sn = js_GetSrcNote(script, pc);
|
||||
if (!sn)
|
||||
return FAILED_EXPRESSION_DECOMPILER;
|
||||
if (!sn) {
|
||||
name = FAILED_EXPRESSION_DECOMPILER;
|
||||
goto out;
|
||||
}
|
||||
switch (SN_TYPE(sn)) {
|
||||
case SRC_PCBASE:
|
||||
begin -= js_GetSrcNoteOffset(sn, 0);
|
||||
@ -4964,18 +4982,23 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
begin += cs->length;
|
||||
break;
|
||||
default:
|
||||
return FAILED_EXPRESSION_DECOMPILER;
|
||||
name = FAILED_EXPRESSION_DECOMPILER;
|
||||
goto out;
|
||||
}
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
len = PTRDIFF(end, begin, jsbytecode);
|
||||
if (len <= 0)
|
||||
return FAILED_EXPRESSION_DECOMPILER;
|
||||
if (len <= 0) {
|
||||
name = FAILED_EXPRESSION_DECOMPILER;
|
||||
goto out;
|
||||
}
|
||||
|
||||
pcstack = (jsbytecode **) JS_malloc(cx, script->depth * sizeof *pcstack);
|
||||
if (!pcstack)
|
||||
return NULL;
|
||||
if (!pcstack) {
|
||||
name = NULL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* From this point the control must flow through the label out. */
|
||||
pcdepth = ReconstructPCStack(cx, script, begin, pcstack);
|
||||
@ -4997,6 +5020,12 @@ DecompileExpression(JSContext *cx, JSScript *script, JSFunction *fun,
|
||||
}
|
||||
|
||||
out:
|
||||
if (code != oldcode) {
|
||||
JS_free(cx, script->code);
|
||||
script->code = oldcode;
|
||||
script->main = oldmain;
|
||||
}
|
||||
|
||||
JS_free(cx, pcstack);
|
||||
return name;
|
||||
}
|
||||
@ -5198,7 +5227,10 @@ ReconstructPCStack(JSContext *cx, JSScript *script, jsbytecode *pc,
|
||||
JS_ASSERT(ndefs == 0);
|
||||
LOCAL_ASSERT(pcdepth >= 1);
|
||||
LOCAL_ASSERT(nuses == 0 ||
|
||||
*pcstack[pcdepth - 1] == JSOP_ENTERBLOCK);
|
||||
*pcstack[pcdepth - 1] == JSOP_ENTERBLOCK ||
|
||||
(*pcstack[pcdepth - 1] == JSOP_TRAP &&
|
||||
JS_GetTrapOpcode(cx, script, pcstack[pcdepth - 1])
|
||||
== JSOP_ENTERBLOCK));
|
||||
pcstack[pcdepth - 1] = pc;
|
||||
break;
|
||||
}
|
||||
|
@ -1770,20 +1770,17 @@ nsBlockFrame::ReflowDirtyLines(nsBlockReflowState& aState)
|
||||
line->MarkDirty();
|
||||
}
|
||||
|
||||
ReplacedElementWidthToClear replacedWidthStruct;
|
||||
ReplacedElementWidthToClear *replacedWidth = nsnull;
|
||||
nsIFrame *replacedBlock = nsnull;
|
||||
if (line->IsBlock() &&
|
||||
!nsBlockFrame::BlockCanIntersectFloats(line->mFirstChild)) {
|
||||
replacedWidthStruct =
|
||||
nsBlockFrame::WidthToClearPastFloats(aState, line->mFirstChild);
|
||||
replacedWidth = &replacedWidthStruct;
|
||||
replacedBlock = line->mFirstChild;
|
||||
}
|
||||
|
||||
// We have to reflow the line if it's a block whose clearance
|
||||
// might have changed, so detect that.
|
||||
if (!line->IsDirty() &&
|
||||
(line->GetBreakTypeBefore() != NS_STYLE_CLEAR_NONE ||
|
||||
replacedWidth)) {
|
||||
replacedBlock)) {
|
||||
nscoord curY = aState.mY;
|
||||
// See where we would be after applying any clearance due to
|
||||
// BRs.
|
||||
@ -1792,7 +1789,7 @@ nsBlockFrame::ReflowDirtyLines(nsBlockReflowState& aState)
|
||||
}
|
||||
|
||||
nscoord newY =
|
||||
aState.ClearFloats(curY, line->GetBreakTypeBefore(), replacedWidth);
|
||||
aState.ClearFloats(curY, line->GetBreakTypeBefore(), replacedBlock);
|
||||
|
||||
if (line->HasClearance()) {
|
||||
// Reflow the line if it might not have clearance anymore.
|
||||
@ -2796,12 +2793,10 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
||||
PRBool treatWithClearance = aLine->HasClearance();
|
||||
|
||||
PRBool mightClearFloats = breakType != NS_STYLE_CLEAR_NONE;
|
||||
ReplacedElementWidthToClear replacedWidthStruct;
|
||||
ReplacedElementWidthToClear *replacedWidth = nsnull;
|
||||
nsIFrame *replacedBlock = nsnull;
|
||||
if (!nsBlockFrame::BlockCanIntersectFloats(frame)) {
|
||||
mightClearFloats = PR_TRUE;
|
||||
replacedWidthStruct = nsBlockFrame::WidthToClearPastFloats(aState, frame);
|
||||
replacedWidth = &replacedWidthStruct;
|
||||
replacedBlock = frame;
|
||||
}
|
||||
|
||||
// If our top margin was counted as part of some parents top-margin
|
||||
@ -2811,7 +2806,7 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
||||
if (!treatWithClearance && !applyTopMargin && mightClearFloats &&
|
||||
aState.mReflowState.mDiscoveredClearance) {
|
||||
nscoord curY = aState.mY + aState.mPrevBottomMargin.get();
|
||||
nscoord clearY = aState.ClearFloats(curY, breakType, replacedWidth);
|
||||
nscoord clearY = aState.ClearFloats(curY, breakType, replacedBlock);
|
||||
if (clearY != curY) {
|
||||
// Looks like that assumption was invalid, we do need
|
||||
// clearance. Tell our ancestor so it can reflow again. It is
|
||||
@ -2890,7 +2885,7 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
||||
// decision is only allowed to be made under the optimistic
|
||||
// first pass.
|
||||
nscoord curY = aState.mY + aState.mPrevBottomMargin.get();
|
||||
nscoord clearY = aState.ClearFloats(curY, breakType, replacedWidth);
|
||||
nscoord clearY = aState.ClearFloats(curY, breakType, replacedBlock);
|
||||
if (clearY != curY) {
|
||||
// Looks like we need clearance and we didn't know about it already. So
|
||||
// recompute collapsed margin
|
||||
@ -2918,7 +2913,7 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
||||
if (treatWithClearance) {
|
||||
nscoord currentY = aState.mY;
|
||||
// advance mY to the clear position.
|
||||
aState.mY = aState.ClearFloats(aState.mY, breakType, replacedWidth);
|
||||
aState.mY = aState.ClearFloats(aState.mY, breakType, replacedBlock);
|
||||
|
||||
// Compute clearance. It's the amount we need to add to the top
|
||||
// border-edge of the frame, after applying collapsed margins
|
||||
@ -2949,7 +2944,8 @@ nsBlockFrame::ReflowBlockFrame(nsBlockReflowState& aState,
|
||||
PRBool isImpacted = aState.IsImpactedByFloat() ? PR_TRUE : PR_FALSE;
|
||||
aLine->SetLineIsImpactedByFloat(isImpacted);
|
||||
nsRect availSpace;
|
||||
aState.ComputeBlockAvailSpace(frame, display, replacedWidth, availSpace);
|
||||
aState.ComputeBlockAvailSpace(frame, display, replacedBlock != nsnull,
|
||||
availSpace);
|
||||
|
||||
// Now put the Y coordinate back to the top of the top-margin +
|
||||
// clearance, and flow the block.
|
||||
@ -6777,7 +6773,6 @@ nsBlockFrame::ReplacedElementWidthToClear
|
||||
nsBlockFrame::WidthToClearPastFloats(nsBlockReflowState& aState,
|
||||
nsIFrame* aFrame)
|
||||
{
|
||||
aState.GetAvailableSpace();
|
||||
nscoord leftOffset, rightOffset;
|
||||
nsCSSOffsetState offsetState(aFrame, aState.mReflowState.rendContext,
|
||||
aState.mContentArea.width);
|
||||
|
@ -297,7 +297,9 @@ public:
|
||||
|
||||
/**
|
||||
* Returns the width that needs to be cleared past floats for blocks
|
||||
* that cannot intersect floats.
|
||||
* that cannot intersect floats. aState must already have
|
||||
* GetAvailableSpace called on it for the vertical position that we
|
||||
* care about (which need not be its current mY)
|
||||
*/
|
||||
struct ReplacedElementWidthToClear {
|
||||
nscoord marginLeft, borderBoxWidth, marginRight;
|
||||
|
@ -254,9 +254,7 @@ nsBlockReflowState::ComputeReplacedBlockOffsetsForFloats(nsIFrame* aFrame,
|
||||
void
|
||||
nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
|
||||
const nsStyleDisplay* aDisplay,
|
||||
nsBlockFrame::
|
||||
ReplacedElementWidthToClear
|
||||
*aReplacedWidth,
|
||||
PRBool aBlockAvoidsFloats,
|
||||
nsRect& aResult)
|
||||
{
|
||||
#ifdef REALLY_NOISY_REFLOW
|
||||
@ -285,9 +283,10 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
|
||||
// nsBlockFrame::WidthToClearPastFloats would need to use the
|
||||
// shrink-wrap formula, max(MIN_WIDTH, min(avail width, PREF_WIDTH))
|
||||
// rather than just using MIN_WIDTH.
|
||||
NS_ASSERTION(nsBlockFrame::BlockCanIntersectFloats(aFrame) == !aReplacedWidth,
|
||||
NS_ASSERTION(nsBlockFrame::BlockCanIntersectFloats(aFrame) ==
|
||||
!aBlockAvoidsFloats,
|
||||
"unexpected replaced width");
|
||||
if (!aReplacedWidth) {
|
||||
if (!aBlockAvoidsFloats) {
|
||||
if (mBand.GetFloatCount()) {
|
||||
// Use the float-edge property to determine how the child block
|
||||
// will interact with the float.
|
||||
@ -355,9 +354,16 @@ nsBlockReflowState::ComputeBlockAvailSpace(nsIFrame* aFrame,
|
||||
}
|
||||
}
|
||||
else {
|
||||
nsBlockFrame::ReplacedElementWidthToClear replacedWidthStruct;
|
||||
nsBlockFrame::ReplacedElementWidthToClear *replacedWidth = nsnull;
|
||||
if (aFrame->GetType() == nsGkAtoms::tableOuterFrame) {
|
||||
replacedWidth = &replacedWidthStruct;
|
||||
replacedWidthStruct = nsBlockFrame::WidthToClearPastFloats(*this, aFrame);
|
||||
}
|
||||
|
||||
nscoord leftOffset, rightOffset;
|
||||
ComputeReplacedBlockOffsetsForFloats(aFrame, leftOffset, rightOffset,
|
||||
aReplacedWidth);
|
||||
replacedWidth);
|
||||
aResult.x = borderPadding.left + leftOffset;
|
||||
aResult.width = mContentArea.width - leftOffset - rightOffset;
|
||||
}
|
||||
@ -1099,7 +1105,7 @@ nsBlockReflowState::PlaceBelowCurrentLineFloats(nsFloatCacheFreeList& aList, PRB
|
||||
|
||||
nscoord
|
||||
nsBlockReflowState::ClearFloats(nscoord aY, PRUint8 aBreakType,
|
||||
nsBlockFrame::ReplacedElementWidthToClear *aReplacedWidth)
|
||||
nsIFrame *aReplacedBlock)
|
||||
{
|
||||
#ifdef DEBUG
|
||||
if (nsBlockFrame::gNoisyReflow) {
|
||||
@ -1122,15 +1128,17 @@ nsBlockReflowState::ClearFloats(nscoord aY, PRUint8 aBreakType,
|
||||
newY = bp.top + mSpaceManager->ClearFloats(newY - bp.top, aBreakType);
|
||||
}
|
||||
|
||||
if (aReplacedWidth) {
|
||||
if (aReplacedBlock) {
|
||||
for (;;) {
|
||||
GetAvailableSpace(newY, PR_FALSE);
|
||||
nsBlockFrame::ReplacedElementWidthToClear replacedWidth =
|
||||
nsBlockFrame::WidthToClearPastFloats(*this, aReplacedBlock);
|
||||
if (mBand.GetFloatCount() == 0 ||
|
||||
PR_MAX(mAvailSpaceRect.x, aReplacedWidth->marginLeft) +
|
||||
aReplacedWidth->borderBoxWidth +
|
||||
PR_MAX(mAvailSpaceRect.x, replacedWidth.marginLeft) +
|
||||
replacedWidth.borderBoxWidth +
|
||||
PR_MAX(mContentArea.width -
|
||||
PR_MIN(mContentArea.width, mAvailSpaceRect.XMost()),
|
||||
aReplacedWidth->marginRight) <=
|
||||
replacedWidth.marginRight) <=
|
||||
mContentArea.width) {
|
||||
break;
|
||||
}
|
||||
|
@ -108,9 +108,9 @@ public:
|
||||
|
||||
// Returns the first coordinate >= aY that clears the
|
||||
// floats indicated by aBreakType and has enough width between floats
|
||||
// (or no floats remaining) to accomodate aReplacedWidth.
|
||||
// (or no floats remaining) to accomodate aReplacedBlock.
|
||||
nscoord ClearFloats(nscoord aY, PRUint8 aBreakType,
|
||||
nsBlockFrame::ReplacedElementWidthToClear *aReplacedWidth = nsnull);
|
||||
nsIFrame *aReplacedBlock = nsnull);
|
||||
|
||||
PRBool IsAdjacentWithTop() const {
|
||||
return mY ==
|
||||
@ -140,18 +140,19 @@ public:
|
||||
// Reconstruct the previous bottom margin that goes above |aLine|.
|
||||
void ReconstructMarginAbove(nsLineList::iterator aLine);
|
||||
|
||||
// Caller must have called GetAvailableSpace for the current mY
|
||||
// Caller must have called GetAvailableSpace for the correct position
|
||||
// (which need not be the current mY). Callers need only pass
|
||||
// aReplacedWidth for outer table frames.
|
||||
void ComputeReplacedBlockOffsetsForFloats(nsIFrame* aFrame,
|
||||
nscoord& aLeftResult,
|
||||
nscoord& aRightResult,
|
||||
nsBlockFrame::ReplacedElementWidthToClear
|
||||
*aReplacedWidth = nsnull);
|
||||
nsBlockFrame::ReplacedElementWidthToClear
|
||||
*aReplacedWidth = nsnull);
|
||||
|
||||
// Caller must have called GetAvailableSpace for the current mY
|
||||
void ComputeBlockAvailSpace(nsIFrame* aFrame,
|
||||
const nsStyleDisplay* aDisplay,
|
||||
nsBlockFrame::ReplacedElementWidthToClear
|
||||
*aReplacedWidth,
|
||||
PRBool aBlockAvoidsFloats,
|
||||
nsRect& aResult);
|
||||
|
||||
protected:
|
||||
|
14
layout/reftests/bugs/430813-3-ref.html
Normal file
14
layout/reftests/bugs/430813-3-ref.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Testcase, bug 430813</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
</head>
|
||||
<body>
|
||||
<div style="margin-bottom: 1px">text</div>
|
||||
<div style="float:left;width:90px;height:300px"></div>
|
||||
<div style="margin-left:90px">
|
||||
This text should be near the top of the page, not pushed below the float.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
14
layout/reftests/bugs/430813-3.html
Normal file
14
layout/reftests/bugs/430813-3.html
Normal file
@ -0,0 +1,14 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Testcase, bug 430813</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
</head>
|
||||
<body>
|
||||
<div style="margin-bottom: 1px">text</div>
|
||||
<div style="float:left;width:90px;height:300px"></div>
|
||||
<div style="overflow:hidden">
|
||||
This text should be near the top of the page, not pushed below the float.
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -819,3 +819,4 @@ fails-if(MOZ_WIDGET_TOOLKIT=="gtk2") == 424074-1-ref2.xul 424074-1-ref3.xul
|
||||
== 430412-1.html 430412-1-ref.html
|
||||
== 430813-1.html 430813-1-ref.html
|
||||
== 430813-2.html 430813-2-ref.html
|
||||
== 430813-3.html 430813-3-ref.html
|
||||
|
@ -1129,8 +1129,7 @@ nsMenuPopupFrame::SetPopupPosition(nsIFrame* aAnchorFrame)
|
||||
*/
|
||||
|
||||
if ( (screenViewLocY + mRect.height) > screenBottomTwips ) {
|
||||
// XXX Bug 84121 comment 48 says the next line has to use screenHeightTwips, why not screenBottomTwips?
|
||||
PRInt32 moveDistY = (screenViewLocY + mRect.height) - screenHeightTwips;
|
||||
PRInt32 moveDistY = (screenViewLocY + mRect.height) - screenBottomTwips;
|
||||
if ( screenViewLocY - moveDistY < screenTopTwips )
|
||||
moveDistY = screenViewLocY - screenTopTwips;
|
||||
screenViewLocY -= moveDistY;
|
||||
|
@ -42,7 +42,7 @@ resource 'STR#' (5000, "English") {
|
||||
// single quotes ('), 0xD5 is also the apostrophe.
|
||||
data 'TEXT' (5000, "English") {
|
||||
"MOZILLA FIREFOX END-USER SOFTWARE LICENSE AGREEMENT\n"
|
||||
"Version 2.0\n"
|
||||
"Version 3.0, May 2008\n"
|
||||
"\n"
|
||||
"A SOURCE CODE VERSION OF CERTAIN FIREFOX BROWSER FUNCTIONALITY THAT YOU MAY USE, MODIFY AND DISTRIBUTE IS AVAILABLE TO YOU FREE-OF-CHARGE FROM WWW.MOZILLA.ORG UNDER THE MOZILLA PUBLIC LICENSE and other open source software licenses.\n"
|
||||
"\n"
|
||||
@ -54,19 +54,21 @@ data 'TEXT' (5000, "English") {
|
||||
"\n"
|
||||
"2. TERMINATION. If you breach this Agreement your right to use the Product will terminate immediately and without notice, but all provisions of this Agreement except the License Grant (Paragraph 1) will survive termination and continue in effect. Upon termination, you must destroy all copies of the Product.\n"
|
||||
"\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://mozilla.org. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"3. PROPRIETARY RIGHTS. Portions of the Product are available in source code form under the terms of the Mozilla Public License and other open source licenses (collectively, ÒOpen Source LicensesÓ) at http://www.mozilla.org/MPL. Nothing in this Agreement will be construed to limit any rights granted under the Open Source Licenses. Subject to the foregoing, Mozilla, for itself and on behalf of its licensors, hereby reserves all intellectual property rights in the Product, except for the rights expressly granted in this Agreement. You may not remove or alter any trademark, logo, copyright or other proprietary notice in or on the Product. This license does not grant you any right to use the trademarks, service marks or logos of Mozilla or its licensors.\n"
|
||||
"\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/firefox/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"4. PRIVACY POLICY. You agree to the Mozilla Firefox Privacy Policy, made available online at http://www.mozilla.com/legal/privacy/, as that policy may be changed from time to time. When Mozilla changes the policy in a material way a notice will be posted on the website at www.mozilla.com and when any change is made in the privacy policy, the updated policy will be posted at the above link. It is your responsibility to ensure that you understand the terms of the privacy policy, so you should periodically check the current version of the policy for changes.\n"
|
||||
"\n"
|
||||
"5. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"5. WEBSITE INFORMATION SERVICES. Mozilla and its contributors, licensors and partners work to provide the most accurate and up-to-date phishing and malware information. However, they cannot guarantee that this information is comprehensive and error-free: some risky sites may not be identified, and some safe sites may be identified in error.\n"
|
||||
"\n"
|
||||
"6. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"6. DISCLAIMER OF WARRANTY. THE PRODUCT IS PROVIDED ÒAS ISÓ WITH ALL FAULTS. TO THE EXTENT PERMITTED BY LAW, MOZILLA AND MOZILLAÕS DISTRIBUTORS, AND LICENSORS HEREBY DISCLAIM ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION WARRANTIES THAT THE PRODUCT IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE AND NON-INFRINGING. YOU BEAR THE ENTIRE RISK AS TO SELECTING THE PRODUCT FOR YOUR PURPOSES AND AS TO THE QUALITY AND PERFORMANCE OF THE PRODUCT. THIS LIMITATION WILL APPLY NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF IMPLIED WARRANTIES, SO THIS DISCLAIMER MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"7. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"7. LIMITATION OF LIABILITY. EXCEPT AS REQUIRED BY LAW, MOZILLA AND ITS DISTRIBUTORS, DIRECTORS, LICENSORS, CONTRIBUTORS AND AGENTS (COLLECTIVELY, THE ÒMOZILLA GROUPÓ) WILL NOT BE LIABLE FOR ANY INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES ARISING OUT OF OR IN ANY WAY RELATING TO THIS AGREEMENT OR THE USE OF OR INABILITY TO USE THE PRODUCT, INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, LOST PROFITS, LOSS OF DATA, AND COMPUTER FAILURE OR MALFUNCTION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES AND REGARDLESS OF THE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH SUCH CLAIM IS BASED. THE MOZILLA GROUPÕS COLLECTIVE LIABILITY UNDER THIS AGREEMENT WILL NOT EXCEED THE GREATER OF $500 (FIVE HUNDRED DOLLARS) AND THE FEES PAID BY YOU UNDER THE LICENSE (IF ANY). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL, CONSEQUENTIAL OR SPECIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.\n"
|
||||
"\n"
|
||||
"8. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"8. EXPORT CONTROLS. This license is subject to all applicable export restrictions. You must comply with all export and import laws and restrictions and regulations of any United States or foreign agency or authority relating to the Product and its use.\n"
|
||||
"\n"
|
||||
"9. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"9. U.S. GOVERNMENT END-USERS. This Product is a Òcommercial item,Ó as that term is defined in 48 C.F.R. 2.101, consisting of Òcommercial computer softwareÓ and Òcommercial computer software documentation,Ó as such terms are used in 48 C.F.R. 12.212 (Sept. 1995) and 48 C.F.R. 227.7202 (June 1995). Consistent with 48 C.F.R. 12.212, 48 C.F.R. 27.405(b)(2) (June 1998) and 48 C.F.R. 227.7202, all U.S. Government End Users acquire the Product with only those rights as set forth therein.\n"
|
||||
"\n"
|
||||
"10. MISCELLANEOUS. (a) This Agreement constitutes the entire agreement between Mozilla and you concerning the subject matter hereof, and it may only be modified by a written amendment signed by an authorized executive of Mozilla. (b) Except to the extent applicable law, if any, provides otherwise, this Agreement will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions. (c) This Agreement will not be governed by the United Nations Convention on Contracts for the International Sale of Goods. "
|
||||
"(d) If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the partiesÕ original intent, and the remaining portions will remain in full force and effect. (e) A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. (f) Except as required by law, the controlling language of this Agreement is English. "
|
||||
"(g) You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms; the Mozilla Corporation may assign its rights under this Agreement without condition. (h) This Agreement will be binding upon and inure to the benefit of the parties, their successors and permitted assigns."
|
||||
};
|
||||
@ -95,8 +97,8 @@ data 'styl' (5000, "English") {
|
||||
$"0000 0000 0000"
|
||||
|
||||
// Style 2. This is used to display the body.
|
||||
// Start character = 64
|
||||
$"0000 0040"
|
||||
// Start character = 74
|
||||
$"0000 004A"
|
||||
// Height = 16
|
||||
$"0010"
|
||||
// Ascent = 12
|
||||
|
@ -276,6 +276,18 @@ static struct nsMyTrustedEVInfo myTrustedEVInfos[] = {
|
||||
"BQk=",
|
||||
nsnull
|
||||
},
|
||||
{
|
||||
// CN=Network Solutions Certificate Authority,O=Network Solutions L.L.C.,C=US
|
||||
"1.3.6.1.4.1.782.1.2.1.8.1",
|
||||
"Network Solutions EV OID",
|
||||
SEC_OID_UNKNOWN,
|
||||
"74:F8:A3:C3:EF:E7:B3:90:06:4B:83:90:3C:21:64:60:20:E5:DF:CE",
|
||||
"MGIxCzAJBgNVBAYTAlVTMSEwHwYDVQQKExhOZXR3b3JrIFNvbHV0aW9ucyBMLkwu"
|
||||
"Qy4xMDAuBgNVBAMTJ05ldHdvcmsgU29sdXRpb25zIENlcnRpZmljYXRlIEF1dGhv"
|
||||
"cml0eQ==",
|
||||
"V8szb8JcFuZHFhfjkDFo4A==",
|
||||
nsnull
|
||||
},
|
||||
{
|
||||
// OU=Sample Certification Authority,O=\"Sample, Inc.\",C=US
|
||||
"0.0.0.0",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user