From 61faf71088d19cd3748486e78f4c30390e174533 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Fri, 21 Mar 2014 17:02:41 +0000 Subject: [PATCH 01/21] Bug 981305 - don't insert leading or duplicate separators, r=mconley --- .../src/CustomizableWidgets.jsm | 5 ++ .../customizableui/test/browser.ini | 1 + .../browser_981305_separator_insertion.js | 51 +++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 browser/components/customizableui/test/browser_981305_separator_insertion.js diff --git a/browser/components/customizableui/src/CustomizableWidgets.jsm b/browser/components/customizableui/src/CustomizableWidgets.jsm index 9cbc5a273993..21d5ed7d6736 100644 --- a/browser/components/customizableui/src/CustomizableWidgets.jsm +++ b/browser/components/customizableui/src/CustomizableWidgets.jsm @@ -300,6 +300,11 @@ const CustomizableWidgets = [{ let item; if (node.localName == "menuseparator") { + // Don't insert duplicate or leading separators. This can happen if there are + // menus (which we don't copy) above the separator. + if (!fragment.lastChild || fragment.lastChild.localName == "menuseparator") { + continue; + } item = doc.createElementNS(kNSXUL, "menuseparator"); } else if (node.localName == "menuitem") { item = doc.createElementNS(kNSXUL, "toolbarbutton"); diff --git a/browser/components/customizableui/test/browser.ini b/browser/components/customizableui/test/browser.ini index f1b187a4b22f..db43e84b9936 100644 --- a/browser/components/customizableui/test/browser.ini +++ b/browser/components/customizableui/test/browser.ini @@ -81,4 +81,5 @@ skip-if = os == "linux" [browser_978084_dragEnd_after_move.js] [browser_980155_add_overflow_toolbar.js] [browser_981418-widget-onbeforecreated-handler.js] +[browser_981305_separator_insertion.js] [browser_panel_toggle.js] diff --git a/browser/components/customizableui/test/browser_981305_separator_insertion.js b/browser/components/customizableui/test/browser_981305_separator_insertion.js new file mode 100644 index 000000000000..b53d4c868dc2 --- /dev/null +++ b/browser/components/customizableui/test/browser_981305_separator_insertion.js @@ -0,0 +1,51 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +let tempElements = []; +// Shouldn't insert multiple separators into the developer tools subview +add_task(function testMultipleDevtoolsSeparators() { + let devtoolsSubMenu = document.getElementById("menuWebDeveloperPopup"); + // Last element is null to insert at the end: + let beforeEls = [devtoolsSubMenu.firstChild, devtoolsSubMenu.lastChild, null]; + for (let i = 0; i < beforeEls.length; i++) { + let sep = document.createElement("menuseparator"); + tempElements.push(sep); + devtoolsSubMenu.insertBefore(sep, beforeEls[i]); + let menu = document.createElement("menu"); + tempElements.push(menu); + devtoolsSubMenu.insertBefore(menu, beforeEls[i]); + // And another separator for good measure: + sep = document.createElement("menuseparator"); + tempElements.push(sep); + devtoolsSubMenu.insertBefore(sep, beforeEls[i]); + } + yield PanelUI.show(); + + let devtoolsButton = document.getElementById("developer-button"); + devtoolsButton.click(); + yield waitForCondition(() => !PanelUI.multiView.hasAttribute("transitioning")); + let subview = document.getElementById("PanelUI-developerItems"); + ok(subview.firstChild, "Subview should have a kid"); + is(subview.firstChild.localName, "toolbarbutton", "There should be no separators to start with"); + + for (let kid of subview.children) { + if (kid.localName == "menuseparator") { + ok(kid.previousSibling && kid.previousSibling.localName != "menuseparator", + "Separators should never have another separator next to them, and should never be the first node."); + } + } + + let panelHiddenPromise = promisePanelHidden(window); + PanelUI.hide(); + yield panelHiddenPromise; +}); + +registerCleanupFunction(function() { + for (let el of tempElements) { + el.remove(); + } + tempElements = null; +}); From 93b09ac11fa1fce24e27e9424c0944bcf5294d3c Mon Sep 17 00:00:00 2001 From: Stephen Horlander Date: Tue, 18 Mar 2014 14:10:00 +0000 Subject: [PATCH 02/21] Bug 940844 - Update Sync Progress Icon, r=jaws --- browser/themes/linux/jar.mn | 1 + .../linux/syncProgress-horizontalbar.png | Bin 535 -> 11892 bytes .../themes/linux/syncProgress-menuPanel.png | Bin 1090 -> 25426 bytes .../linux/syncProgress-toolbar-inverted.png | Bin 0 -> 14382 bytes browser/themes/linux/syncProgress-toolbar.png | Bin 623 -> 13293 bytes browser/themes/osx/browser.css | 23 ++++++++++++------ browser/themes/osx/jar.mn | 7 +++++- browser/themes/osx/sync-throbber.png | Bin 7896 -> 0 bytes .../themes/osx/syncProgress-horizontalbar.png | Bin 537 -> 11892 bytes .../osx/syncProgress-horizontalbar@2x.png | Bin 1027 -> 27608 bytes browser/themes/osx/syncProgress-menuPanel.png | Bin 0 -> 25426 bytes .../themes/osx/syncProgress-menuPanel@2x.png | Bin 0 -> 55953 bytes .../osx/syncProgress-toolbar-inverted.png | Bin 0 -> 14230 bytes .../osx/syncProgress-toolbar-inverted@2x.png | Bin 0 -> 32029 bytes browser/themes/osx/syncProgress-toolbar.png | Bin 0 -> 13293 bytes .../themes/osx/syncProgress-toolbar@2x.png | Bin 0 -> 33662 bytes browser/themes/shared/menupanel.inc.css | 5 ++++ browser/themes/shared/toolbarbuttons.inc.css | 11 +++++++++ browser/themes/windows/browser-aero.css | 5 ++++ browser/themes/windows/browser.css | 9 +++---- browser/themes/windows/jar.mn | 10 ++++++-- browser/themes/windows/sync-throbber.png | Bin 10362 -> 0 bytes .../syncProgress-horizontalbar-XPVista7.png | Bin 535 -> 11892 bytes .../windows/syncProgress-horizontalbar.png | Bin 370 -> 5469 bytes .../themes/windows/syncProgress-menuPanel.png | Bin 0 -> 25426 bytes .../windows/syncProgress-toolbar-XPVista7.png | Bin 0 -> 13293 bytes .../windows/syncProgress-toolbar-inverted.png | Bin 0 -> 14382 bytes .../themes/windows/syncProgress-toolbar.png | Bin 0 -> 5535 bytes 28 files changed, 55 insertions(+), 16 deletions(-) create mode 100644 browser/themes/linux/syncProgress-toolbar-inverted.png delete mode 100644 browser/themes/osx/sync-throbber.png create mode 100644 browser/themes/osx/syncProgress-menuPanel.png create mode 100644 browser/themes/osx/syncProgress-menuPanel@2x.png create mode 100644 browser/themes/osx/syncProgress-toolbar-inverted.png create mode 100644 browser/themes/osx/syncProgress-toolbar-inverted@2x.png create mode 100644 browser/themes/osx/syncProgress-toolbar.png create mode 100644 browser/themes/osx/syncProgress-toolbar@2x.png delete mode 100644 browser/themes/windows/sync-throbber.png create mode 100644 browser/themes/windows/syncProgress-menuPanel.png create mode 100644 browser/themes/windows/syncProgress-toolbar-XPVista7.png create mode 100644 browser/themes/windows/syncProgress-toolbar-inverted.png create mode 100644 browser/themes/windows/syncProgress-toolbar.png diff --git a/browser/themes/linux/jar.mn b/browser/themes/linux/jar.mn index 67719c7aa91b..53583cf31e94 100644 --- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -292,6 +292,7 @@ browser.jar: skin/classic/browser/sync-notification-24.png skin/classic/browser/syncProgress-menuPanel.png skin/classic/browser/syncProgress-toolbar.png + skin/classic/browser/syncProgress-toolbar-inverted.png skin/classic/browser/syncSetup.css skin/classic/browser/syncCommon.css skin/classic/browser/syncQuota.css diff --git a/browser/themes/linux/syncProgress-horizontalbar.png b/browser/themes/linux/syncProgress-horizontalbar.png index a318003646593dc6e5334d126050dd3a52c68b49..48cd110559d45a13d8428e2a18391cddbe556acd 100644 GIT binary patch literal 11892 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 delta 510 zcmVT$copBYy$jNklL^8;cyw6dk9BO;S)n*@JFJ(U~y{Tr}|GKECgs``yc2 zfdBf&Gag&@rC}dZ?Ey%&^1wAeAon;vr8AzYvWj$ETUH^dC4X`%dBa{#8@qG+fNSN< z>0$q`i#xCSS0K?ye$sbiTl8dn8c6Dd!rYhfhFU6(FL;d**S;b|0^?tp=|?VQE_ zi%ffR36pxUKrLt5gjfS9(#~5}#&5m75Yyhf1)nPC8A-bwIDRgAYB=Mz6yc(Ug{Ye3 ziFY0rr)}4cX@7ar>O}9h=(}i%NJ>QW0+D)>!^GR?|GH%Aik>O@kgTMz>Q{v17~tu- zzX}XqVxoc%d6Sf|j)gN7$#dSbTe2(fa7sz_2cj>mJC_~7umz_|QXo6X(Nm&!rej8U zx3xPyv;f8r)P2B_S^%cw(4KHB{_Pci1K@B5Iwq7=rvLx|07*qoM6N<$f{O(F AF#rGn diff --git a/browser/themes/linux/syncProgress-menuPanel.png b/browser/themes/linux/syncProgress-menuPanel.png index 00e3fd61be3a414755a91af51c9f7c6e38d979d4..6fd6f9c16f6bd2adcca02e71e6da92c579c24eb0 100644 GIT binary patch literal 25426 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 diff --git a/browser/themes/linux/syncProgress-toolbar-inverted.png b/browser/themes/linux/syncProgress-toolbar-inverted.png new file mode 100644 index 0000000000000000000000000000000000000000..4ede4387dec16849bb92298bff29cc259ae2206b GIT binary patch literal 14382 zcmZv@by(AX`~E)~q#LA0NJxVc3JjDK1O%m2ItA&j(Jdw2A|Z`*kM0Hu>25|yjIr%E z@9+Em{O&*AujAOBV;cuAcDx?X>pHLVT%@MD67hqF4*&oFv5K<17J8-ld&9>?-|LLW z>Y^8X6SKE!=#>-NFYz3P&YO1Ogsw1<1rr%%wv0wQp)w;4|vu7uMx#nGcxe9GxgP)9=;Rc}09ZO?n zB&2Wvrij@rDoTLs6npFg0*#xR_#rBKrdB)sH*Zu9`l|DO7BosFec$hq~Eni{eKwKlSI(Gi+5u?-uNhQd4B!S4`~- zg^>j@HRI^Jn3}rXRaa|fT@v!(CpDU_1t!0ma-?9zuKXwgFLd;Pefd%=EA=wWW-%JM9 zo049?QqMeL?|c}86~uO3P+)aBz$}~8W-_DWg?-(@tax}%s*C;O>N6HSljvFiVVU;K zW=+GM?~i7m%Ov1tTmI(Qlc&31G}NN>IzFA4j&{vWUHf~A+_fL}^t{~VS1I>h9C79c zk#(=VPrPAz=6CKNB+$%zhm)M72tph_B;FFP5L5S%a5*pKf z&aR;`{_`7_??XvDnQT~WTW);?=GYD&+KXUuk$th*>ClTRqg=@MBQts0b@GHylfT5t zBVJ8B)t#CBMNLDwhg$-JA>fVQ@!Yese(QMLFTwXts*E7WpmN$i1>j4q%VD>uOdr#o z
RO5{1g$ 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 Dc8le0 literal 0 HcmV?d00001 diff --git a/browser/themes/linux/syncProgress-toolbar.png b/browser/themes/linux/syncProgress-toolbar.png index dff37d9f18744a1e5e435d9423d5dc84350612ea..49e224f0d9c0e3f596566ef86d27281caeeafc86 100644 GIT binary patch literal 13293 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 G|Nj7-Q*>Ye delta 599 zcmV-d0;v7%XYT}%BYy%mNklP)<0o$N!XZ=WiS9IpM=IMG9w{DWcqo4v zh|dAphdf^U$r5Fd>nk5Nr&r!C3=d@PG29pXkAfd6o`k8BePYt0@YJ*kr$K>lLRlFe zC~sl7C;A^9OFTB{2B}egYE}soV|u8$5UW7~k94On+yyGaf`6@FxW&7@^p$0}EB+B# zT=j`%C5j>LFMQ=0Zi{>e;{R}bNA?`UU4=s+w(AQY9p9HhqRjV!uDC7o51~%%3s4Rb zc9IW_S{QBtC1CiD?8$&vAzZF6e8m}VOWgypVQM+=>r6#fEB?T!9pR+gihCJu2>*xT zzYfp5Y+zEzY=01Nd+x`_a6|MnT>UMDg9zCh;0eF!k3Y?jac@yN}_rz<((I;q=%?99f^kV=sLe8z`p=RPz(A z{+cYpYy3C$TNp0#|A*siDoasZa7Av1(<5JXn};6E41ZS?b|9O2Y6J<>mGdy`{hkE(*S8xFmgy;j-*r6g3z4|JXkC(nPV8`?`KJ!#TeHNcg+$ z11~F!dv1Yf;s|_Mbw2h$yr{I8;SA4zApRqJ!@LkIc3$EHR16iLmpbI}Fpvvpgs@-H zZ_&JIpHK>7GhNngV>r$G9|NBezU}(JkC&*@!2LlWtLRmua)xs .toolbarbutton-menubutton-dropmarker > .dropmarker-ic -moz-image-region: rect(36px, 540px, 72px, 504px); } + #sync-button[cui-areatype="toolbar"][status="active"], + #sync-button[cui-areatype="toolbar"][status="active"]:hover:active:not([disabled="true"]) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar@2x.png"); + -moz-image-region: rect(0, 36px, 36px, 0px); + } + + #sync-button[cui-areatype="toolbar"][status="active"]:-moz-lwtheme-brighttext, + #sync-button[cui-areatype="toolbar"][status="active"]:-moz-lwtheme-brighttext:hover:active:not([disabled="true"]) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar-inverted@2x.png"); + } + #feed-button[cui-areatype="toolbar"] { -moz-image-region: rect(0, 576px, 36px, 540px); } @@ -1092,6 +1103,11 @@ toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-dropmarker > .dropmarker-ic -moz-image-region: rect(0px, 768px, 64px, 704px); } + #sync-button[cui-areatype="menu-panel"][status="active"] { + list-style-image: url(chrome://browser/skin/syncProgress-menuPanel@2x.png); + -moz-image-region: rect(0px, 64px, 64px, 0px); + } + #feed-button[cui-areatype="menu-panel"], toolbarpaletteitem[place="palette"] > #feed-button { -moz-image-region: rect(0px, 832px, 64px, 768px); @@ -1593,13 +1609,6 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { margin: 2px; } -/* sync button */ - -#sync-button[status="active"] { - list-style-image: url("chrome://browser/skin/sync-throbber.png"); - -moz-image-region: rect(0, 20px, 20px, 0px); -} - /* ----- FULLSCREEN WINDOW CONTROLS ----- */ #minimize-button, diff --git a/browser/themes/osx/jar.mn b/browser/themes/osx/jar.mn index 1382d9fb398c..1aed85aae480 100644 --- a/browser/themes/osx/jar.mn +++ b/browser/themes/osx/jar.mn @@ -401,7 +401,6 @@ browser.jar: skin/classic/browser/devtools/app-manager/noise.png (../shared/devtools/app-manager/images/noise.png) skin/classic/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC - skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png skin/classic/browser/sync-32.png skin/classic/browser/sync-bg.png @@ -417,6 +416,12 @@ browser.jar: skin/classic/browser/syncProgress.css skin/classic/browser/syncProgress-horizontalbar.png skin/classic/browser/syncProgress-horizontalbar@2x.png + skin/classic/browser/syncProgress-menuPanel.png + skin/classic/browser/syncProgress-menuPanel@2x.png + skin/classic/browser/syncProgress-toolbar.png + skin/classic/browser/syncProgress-toolbar@2x.png + skin/classic/browser/syncProgress-toolbar-inverted.png + skin/classic/browser/syncProgress-toolbar-inverted@2x.png #endif skin/classic/browser/Toolbar-background-noise.png (Toolbar-background-noise.png) skin/classic/browser/lion/toolbarbutton-dropmarker.png (toolbarbutton-dropmarker-lion.png) diff --git a/browser/themes/osx/sync-throbber.png b/browser/themes/osx/sync-throbber.png deleted file mode 100644 index cc8619f41bad61840ac04290c43a2e4eda7ee052..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7896 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 C=?ka; diff --git a/browser/themes/osx/syncProgress-horizontalbar.png b/browser/themes/osx/syncProgress-horizontalbar.png index a1a1ac394c743c790b65f83412e730d1860a1433..48cd110559d45a13d8428e2a18391cddbe556acd 100644 GIT binary patch literal 11892 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 delta 512 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 delta 1007 zcmVQ-EF&x&P@KNL3CE`Q?t6}d zKYj3VnS0Oq&bjB@bM75U8vRth#Cw<-e+O~9>Tzk)bu?_OM$3P?O1xiFjy9rw0BxLm z$F=4o_u(-zhMO=awhrY1CFovd0BpgADm06@PCmj|yB#?}B?>m-GOWgUj&2vTo*JDr1Lbe0M#P zmKDK7U?_xE;F*85ZbS|0NwaIu~Bchk;(YHho*n-WqFj#b%ia_d`L~?ZG zSHc}E)--cYeIK`okeICMCC(z0Sa^~?k0@Y2D^Fi#a3VWaZYI@COPZ$+GR{Dnf8o_+DS z1jxY}eq?`dH|0HH5OL1R!*_)+7kb=t0Xf1daoJu6nAT(wCt*?uPtS$X?IIvYSQXOk zbs)S7DI!kV>QxBOxQI^I96%1gV$|B}z=|T=6mim4mqM6%dG2x^kb}bQT1K|jiQfTy zLpV;ofG!cI*_J}VzZ5#hY(NC2AwkUn_JhpG8fAZ72bUvFjgQ?@S%wkS2pN|Nh%hAw z9nsg|uF^frr(M8DK4KKq&<<=_oRs3HSj`37(`i?6Ljkfy9sw=41*+%!vvA@r5f@Jl*N1tos_m*Bu) zB@wTd`!Y$yCCdbG>pIH7qDV@vxc*&%=5uc1x)w zNd0SEKe(6*hl$x}v8)Y&e&4Ieva6Hv_2Xy5a%$$SmSR26-RPtglG^~5>G2W$$Hd(v zOQ%V0D^k$AxNwA>;9&}yt3&RXOgv$TJET+SBl-!mQ6r81VER7sCU!QQ;|c%(002ovPDHLkV1l0N;^+VX diff --git a/browser/themes/osx/syncProgress-menuPanel.png b/browser/themes/osx/syncProgress-menuPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd6f9c16f6bd2adcca02e71e6da92c579c24eb0 GIT binary patch literal 25426 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
RO5{1g$ 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 Dc8le0 literal 0 HcmV?d00001 diff --git a/browser/themes/windows/syncProgress-toolbar.png b/browser/themes/windows/syncProgress-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..05078a9c8d140cc5ab10b785a39b76a532f4f8d9 GIT binary patch literal 5535 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 literal 0 HcmV?d00001 From 943568d4f8c1105ac8b1b76086ac71c9aa1e0104 Mon Sep 17 00:00:00 2001 From: Mike de Boer Date: Thu, 20 Mar 2014 16:15:24 +0100 Subject: [PATCH 03/21] Bug 984976: fix menu-button border states on Windows 8. r=gijs --- browser/themes/windows/browser-aero.css | 2 -- browser/themes/windows/browser.css | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/browser/themes/windows/browser-aero.css b/browser/themes/windows/browser-aero.css index 24bd0d7405dd..378dc5e94c5b 100644 --- a/browser/themes/windows/browser-aero.css +++ b/browser/themes/windows/browser-aero.css @@ -346,8 +346,6 @@ /* Introducing an additional hover state for the Bookmark button */ #nav-bar .toolbarbutton-1[buttonover] > .toolbarbutton-menubutton-button:hover > .toolbarbutton-icon { background-color: hsla(210,4%,10%,.08); - -moz-border-end: 1px solid; - -moz-padding-end: 5px; border-color: hsla(210,4%,10%,.1); } } diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index 821d32be8bf2..5bd045169cc0 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -671,7 +671,7 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { } #nav-bar .toolbarbutton-1:not([disabled=true]):-moz-any(:hover,[open]) > .toolbarbutton-menubutton-button > .toolbarbutton-icon, -#nav-bar .toolbarbutton-1:not([disabled=true]):hover > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon, +#nav-bar .toolbarbutton-1:not([disabled=true]):-moz-any(:hover,[open]) > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon, #nav-bar .toolbarbutton-1:not([disabled=true]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-icon, #nav-bar .toolbarbutton-1:not([disabled=true]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-text, #nav-bar .toolbarbutton-1:not([disabled=true]):not([checked]):not([open]):not(:active):hover > .toolbarbutton-badge-container, From 6de21bcf7ee01c0533cf8dbf3b4f5e6a264e6f76 Mon Sep 17 00:00:00 2001 From: James Long Date: Fri, 21 Mar 2014 08:55:50 -0400 Subject: [PATCH 04/21] Bug 812172 - Conditional breakpoints logic should be handled server-side. r=past --- toolkit/devtools/client/dbg-client.jsm | 23 +++++-- toolkit/devtools/server/actors/root.js | 2 + toolkit/devtools/server/actors/script.js | 28 +++++++-- toolkit/devtools/server/main.js | 1 + .../devtools/server/tests/unit/head_dbg.js | 1 + .../unit/test_conditional_breakpoint-01.js | 61 ++++++++++++++++++ .../unit/test_conditional_breakpoint-02.js | 60 ++++++++++++++++++ .../unit/test_conditional_breakpoint-03.js | 62 +++++++++++++++++++ .../devtools/server/tests/unit/xpcshell.ini | 3 + 9 files changed, 230 insertions(+), 11 deletions(-) create mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js create mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js create mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js diff --git a/toolkit/devtools/client/dbg-client.jsm b/toolkit/devtools/client/dbg-client.jsm index 5ffdd46636d5..5bf90b96cfcb 100644 --- a/toolkit/devtools/client/dbg-client.jsm +++ b/toolkit/devtools/client/dbg-client.jsm @@ -28,6 +28,8 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); +Cu.import("resource://gre/modules/devtools/Console.jsm"); + let promise = Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js").Promise; const { defer, resolve, reject } = promise; @@ -1407,17 +1409,28 @@ ThreadClient.prototype = { * @param function aOnResponse * Called with the thread's response. */ - setBreakpoint: function (aLocation, aOnResponse) { + setBreakpoint: function ({ url, line, column, condition }, aOnResponse) { // A helper function that sets the breakpoint. let doSetBreakpoint = function (aCallback) { - let packet = { to: this._actor, type: "setBreakpoint", - location: aLocation }; + const location = { + url: url, + line: line, + column: column + }; + + let packet = { + to: this._actor, + type: "setBreakpoint", + location: location, + condition: condition + }; this.client.request(packet, function (aResponse) { // Ignoring errors, since the user may be setting a breakpoint in a // dead script that will reappear on a page reload. if (aOnResponse) { - let bpClient = new BreakpointClient(this.client, aResponse.actor, - aLocation); + let bpClient = new BreakpointClient(this.client, + aResponse.actor, + location); if (aCallback) { aCallback(aOnResponse(aResponse, bpClient)); } else { diff --git a/toolkit/devtools/server/actors/root.js b/toolkit/devtools/server/actors/root.js index 4be5bbdbabe9..07bb2a3bac80 100644 --- a/toolkit/devtools/server/actors/root.js +++ b/toolkit/devtools/server/actors/root.js @@ -187,6 +187,8 @@ RootActor.prototype = { storageInspector: true, // Wether storage inspector is read only storageInspectorReadOnly: true, + // Wether conditional breakpoints are supported + conditionalBreakpoints: true } }; }, diff --git a/toolkit/devtools/server/actors/script.js b/toolkit/devtools/server/actors/script.js index 841d3d47eca8..3175b5a0fb6b 100644 --- a/toolkit/devtools/server/actors/script.js +++ b/toolkit/devtools/server/actors/script.js @@ -38,7 +38,7 @@ function BreakpointStore() { // // is an object // - // { url, line[, actor] } + // { url, line, column[, actor] } // // where the `actor` property is optional. this._breakpoints = Object.create(null); @@ -58,6 +58,7 @@ BreakpointStore.prototype = { * - line * - column (optional; omission implies that the breakpoint is for * the whole line) + * - condition (optional) * - actor (optional) */ addBreakpoint: function (aBreakpoint) { @@ -1374,7 +1375,8 @@ ThreadActor.prototype = { let response = this._createAndStoreBreakpoint({ url: url, line: line, - column: column + column: column, + condition: aRequest.condition }); // If the original location of our generated location is different from // the original location we attempted to set the breakpoint on, we will @@ -1442,11 +1444,13 @@ ThreadActor.prototype = { let storedBp = this.breakpointStore.getBreakpoint(aLocation); if (storedBp.actor) { actor = storedBp.actor; + actor.condition = aLocation.condition; } else { storedBp.actor = actor = new BreakpointActor(this, { url: aLocation.url, line: aLocation.line, - column: aLocation.column + column: aLocation.column, + condition: aLocation.condition }); this.threadLifetimePool.addActor(actor); } @@ -4221,15 +4225,17 @@ FrameActor.prototype.requestTypes = { * @param object aLocation * The location of the breakpoint as specified in the protocol. */ -function BreakpointActor(aThreadActor, aLocation) +function BreakpointActor(aThreadActor, { url, line, column, condition }) { this.scripts = []; this.threadActor = aThreadActor; - this.location = aLocation; + this.location = { url: url, line: line, column: column }; + this.condition = condition; } BreakpointActor.prototype = { actorPrefix: "breakpoint", + condition: null, /** * Called when this same breakpoint is added to another Debugger.Script @@ -4255,6 +4261,14 @@ BreakpointActor.prototype = { this.scripts = []; }, + isValidCondition: function(aFrame) { + if(!this.condition) { + return true; + } + var res = aFrame.eval(this.condition); + return res.return; + }, + /** * A function that the engine calls when a breakpoint has been hit. * @@ -4271,7 +4285,9 @@ BreakpointActor.prototype = { column: this.location.column })); - if (this.threadActor.sources.isBlackBoxed(url) || aFrame.onStep) { + if (this.threadActor.sources.isBlackBoxed(url) + || aFrame.onStep + || !this.isValidCondition(aFrame)) { return undefined; } diff --git a/toolkit/devtools/server/main.js b/toolkit/devtools/server/main.js index 6d3e203604d1..769d186c3bbe 100644 --- a/toolkit/devtools/server/main.js +++ b/toolkit/devtools/server/main.js @@ -65,6 +65,7 @@ this.promised = promised; this.all = all; Cu.import("resource://gre/modules/devtools/SourceMap.jsm"); +Cu.import("resource://gre/modules/devtools/Console.jsm"); function dumpn(str) { if (wantLogging) { diff --git a/toolkit/devtools/server/tests/unit/head_dbg.js b/toolkit/devtools/server/tests/unit/head_dbg.js index 69f0fbcc22a8..135ec33ef10e 100644 --- a/toolkit/devtools/server/tests/unit/head_dbg.js +++ b/toolkit/devtools/server/tests/unit/head_dbg.js @@ -30,6 +30,7 @@ function tryImport(url) { tryImport("resource://gre/modules/devtools/dbg-server.jsm"); tryImport("resource://gre/modules/devtools/dbg-client.jsm"); tryImport("resource://gre/modules/devtools/Loader.jsm"); +tryImport("resource://gre/modules/devtools/Console.jsm"); function testExceptionHook(ex) { try { diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js new file mode 100644 index 000000000000..3d229b50ea32 --- /dev/null +++ b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js @@ -0,0 +1,61 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Check conditional breakpoint when condition evaluates to true. + */ + +var gDebuggee; +var gClient; +var gThreadClient; + +function run_test() +{ + initTestDebuggerServer(); + gDebuggee = addTestGlobal("test-conditional-breakpoint"); + gClient = new DebuggerClient(DebuggerServer.connectPipe()); + gClient.connect(function () { + attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { + gThreadClient = aThreadClient; + test_simple_breakpoint(); + }); + }); + do_test_pending(); +} + +function test_simple_breakpoint() +{ + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + gThreadClient.setBreakpoint({ + url: "test.js", + line: 3, + condition: "a === 1" + }, function (aResponse, bpClient) { + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + // Check the return value. + do_check_eq(aPacket.why.type, "breakpoint"); + do_check_eq(aPacket.frame.where.line, 3); + + // Remove the breakpoint. + bpClient.remove(function (aResponse) { + gThreadClient.resume(function () { + finishClient(gClient); + }); + }); + + }); + // Continue until the breakpoint is hit. + gThreadClient.resume(); + + }); + + }); + + Components.utils.evalInSandbox("debugger;\n" + // 1 + "var a = 1;\n" + // 2 + "var b = 2;\n", // 3 + gDebuggee, + "1.8", + "test.js", + 1); +} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js new file mode 100644 index 000000000000..f74cedc4e704 --- /dev/null +++ b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js @@ -0,0 +1,60 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Check conditional breakpoint when condition evaluates to false. + */ + +var gDebuggee; +var gClient; +var gThreadClient; + +function run_test() +{ + initTestDebuggerServer(); + gDebuggee = addTestGlobal("test-conditional-breakpoint"); + gClient = new DebuggerClient(DebuggerServer.connectPipe()); + gClient.connect(function () { + attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { + gThreadClient = aThreadClient; + test_simple_breakpoint(); + }); + }); + do_test_pending(); +} + +function test_simple_breakpoint() +{ + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + gThreadClient.setBreakpoint({ + url: "test.js", + line: 3, + condition: "a === 2" + }, function (aResponse, bpClient) { + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + // Check the return value. + do_check_eq(aPacket.why.type, "debuggerStatement"); + do_check_eq(aPacket.frame.where.line, 4); + + // Remove the breakpoint. + bpClient.remove(function (aResponse) { + gThreadClient.resume(function () { + finishClient(gClient); + }); + }); + + }); + // Continue until the breakpoint is hit. + gThreadClient.resume(); + }); + }); + + Components.utils.evalInSandbox("debugger;\n" + // 1 + "var a = 1;\n" + // 2 + "var b = 2;\n" + // 3 + "debugger;", // 4 + gDebuggee, + "1.8", + "test.js", + 1); +} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js new file mode 100644 index 000000000000..c340a1cab30a --- /dev/null +++ b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js @@ -0,0 +1,62 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Check conditional breakpoint when condition throws and make sure it is ignored + */ + +var gDebuggee; +var gClient; +var gThreadClient; + +function run_test() +{ + initTestDebuggerServer(); + gDebuggee = addTestGlobal("test-conditional-breakpoint"); + gClient = new DebuggerClient(DebuggerServer.connectPipe()); + gClient.connect(function () { + attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { + gThreadClient = aThreadClient; + test_simple_breakpoint(); + }); + }); + do_test_pending(); +} + +function test_simple_breakpoint() +{ + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + gThreadClient.setBreakpoint({ + url: "test.js", + line: 3, + condition: "throw new Error()" + }, function (aResponse, bpClient) { + gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { + // Check the return value. + do_check_eq(aPacket.why.type, "debuggerStatement"); + do_check_eq(aPacket.frame.where.line, 4); + + // Remove the breakpoint. + bpClient.remove(function (aResponse) { + gThreadClient.resume(function () { + finishClient(gClient); + }); + }); + + }); + // Continue until the breakpoint is hit. + gThreadClient.resume(); + + }); + + }); + + Components.utils.evalInSandbox("debugger;\n" + // 1 + "var a = 1;\n" + // 2 + "var b = 2;\n" + // 3 + "debugger;", // 4 + gDebuggee, + "1.8", + "test.js", + 1); +} diff --git a/toolkit/devtools/server/tests/unit/xpcshell.ini b/toolkit/devtools/server/tests/unit/xpcshell.ini index 8808865d1111..b7e548bd282f 100644 --- a/toolkit/devtools/server/tests/unit/xpcshell.ini +++ b/toolkit/devtools/server/tests/unit/xpcshell.ini @@ -112,6 +112,9 @@ reason = bug 820380 [test_breakpoint-16.js] [test_breakpoint-17.js] [test_breakpoint-18.js] +[test_conditional_breakpoint-01.js] +[test_conditional_breakpoint-02.js] +[test_conditional_breakpoint-03.js] [test_eventlooplag_actor.js] run-if = toolkit == "gonk" [test_listsources-01.js] From 28fd6cdbf90db27e59acbd16e6d2d37f0171b9bd Mon Sep 17 00:00:00 2001 From: Thomas Andersen Date: Thu, 20 Mar 2014 02:02:08 +0100 Subject: [PATCH 05/21] Bug 859059 - Implement "Copy as curl". r=msucan, r=vp --- .../netmonitor/netmonitor-controller.js | 3 + .../devtools/netmonitor/netmonitor-view.js | 34 ++ browser/devtools/netmonitor/netmonitor.xul | 3 + browser/devtools/netmonitor/test/browser.ini | 4 + .../test/browser_net_copy_as_curl.js | 72 ++++ .../netmonitor/test/browser_net_curl-utils.js | 232 ++++++++++ browser/devtools/netmonitor/test/head.js | 3 + .../netmonitor/test/html_copy-as-curl.html | 27 ++ .../netmonitor/test/html_curl-utils.html | 99 +++++ browser/devtools/shared/Curl.jsm | 396 ++++++++++++++++++ .../chrome/browser/devtools/netmonitor.dtd | 6 + 11 files changed, 879 insertions(+) create mode 100644 browser/devtools/netmonitor/test/browser_net_copy_as_curl.js create mode 100644 browser/devtools/netmonitor/test/browser_net_curl-utils.js create mode 100644 browser/devtools/netmonitor/test/html_copy-as-curl.html create mode 100644 browser/devtools/netmonitor/test/html_curl-utils.html create mode 100644 browser/devtools/shared/Curl.jsm diff --git a/browser/devtools/netmonitor/netmonitor-controller.js b/browser/devtools/netmonitor/netmonitor-controller.js index 48c0e6dc604b..e9ab5b82727b 100644 --- a/browser/devtools/netmonitor/netmonitor-controller.js +++ b/browser/devtools/netmonitor/netmonitor-controller.js @@ -140,6 +140,9 @@ Object.defineProperty(this, "NetworkHelper", { XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); +XPCOMUtils.defineLazyModuleGetter(this, "Curl", + "resource:///modules/devtools/Curl.jsm"); + /** * Object defining the network monitor controller components. */ diff --git a/browser/devtools/netmonitor/netmonitor-view.js b/browser/devtools/netmonitor/netmonitor-view.js index 261312c1ee18..769e8f2ec602 100644 --- a/browser/devtools/netmonitor/netmonitor-view.js +++ b/browser/devtools/netmonitor/netmonitor-view.js @@ -523,6 +523,37 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { clipboardHelper.copyString(selected.url, document); }, + /** + * Copy a cURL command from the currently selected item. + */ + copyAsCurl: function() { + let selected = this.selectedItem.attachment; + Task.spawn(function*() { + // Create a sanitized object for the Curl command generator. + let data = { + url: selected.url, + method: selected.method, + headers: [], + httpVersion: selected.httpVersion, + postDataText: null + }; + + // Fetch header values. + for (let { name, value } of selected.requestHeaders.headers) { + let text = yield gNetwork.getString(value); + data.headers.push({ name: name, value: text }); + } + + // Fetch the request payload. + if (selected.requestPostData) { + let postData = selected.requestPostData.postData.text; + data.postDataText = yield gNetwork.getString(postData); + } + + clipboardHelper.copyString(Curl.generateCommand(data), document); + }); + }, + /** * Copy image as data uri. */ @@ -1560,6 +1591,9 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { let copyUrlElement = $("#request-menu-context-copy-url"); copyUrlElement.hidden = !selectedItem; + let copyAsCurlElement = $("#request-menu-context-copy-as-curl"); + copyAsCurlElement.hidden = !selectedItem || !selectedItem.attachment.responseContent; + let copyImageAsDataUriElement = $("#request-menu-context-copy-image-as-data-uri"); copyImageAsDataUriElement.hidden = !selectedItem || !selectedItem.attachment.responseContent || diff --git a/browser/devtools/netmonitor/netmonitor.xul b/browser/devtools/netmonitor/netmonitor.xul index 484088ad4ea8..d91c9f22f709 100644 --- a/browser/devtools/netmonitor/netmonitor.xul +++ b/browser/devtools/netmonitor/netmonitor.xul @@ -29,6 +29,9 @@ + diff --git a/browser/devtools/netmonitor/test/browser.ini b/browser/devtools/netmonitor/test/browser.ini index 7ba4ba489783..acc0a5714b54 100644 --- a/browser/devtools/netmonitor/test/browser.ini +++ b/browser/devtools/netmonitor/test/browser.ini @@ -21,6 +21,8 @@ support-files = html_sorting-test-page.html html_statistics-test-page.html html_status-codes-test-page.html + html_copy-as-curl.html + html_curl-utils.html sjs_content-type-test-server.sjs sjs_simple-test-server.sjs sjs_sorting-test-server.sjs @@ -39,8 +41,10 @@ support-files = [browser_net_clear.js] [browser_net_complex-params.js] [browser_net_content-type.js] +[browser_net_curl-utils.js] [browser_net_copy_image_as_data_uri.js] [browser_net_copy_url.js] +[browser_net_copy_as_curl.js] [browser_net_cyrillic-01.js] [browser_net_cyrillic-02.js] [browser_net_filter-01.js] diff --git a/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js b/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js new file mode 100644 index 000000000000..102e37a33b87 --- /dev/null +++ b/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js @@ -0,0 +1,72 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests if Copy as cURL works. + */ + +function test() { + initNetMonitor(CURL_URL).then(([aTab, aDebuggee, aMonitor]) => { + info("Starting test... "); + + const EXPECTED_POSIX_RESULT = [ + "curl", + "'" + SIMPLE_SJS + "'", + "-H 'Host: example.com'", + "-H 'User-Agent: " + aDebuggee.navigator.userAgent + "'", + "-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'", + "-H 'Accept-Language: " + aDebuggee.navigator.language + "'", + "-H 'Accept-Encoding: gzip, deflate'", + "-H 'X-Custom-Header-1: Custom value'", + "-H 'X-Custom-Header-2: 8.8.8.8'", + "-H 'X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT'", + "-H 'Referer: " + CURL_URL + "'", + "-H 'Connection: keep-alive'" + ].join(" "); + + const EXPECTED_WIN_RESULT = [ + 'curl', + '"' + SIMPLE_SJS + '"', + '-H "Host: example.com"', + '-H "User-Agent: ' + aDebuggee.navigator.userAgent + '"', + '-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"', + '-H "Accept-Language: ' + aDebuggee.navigator.language + '"', + '-H "Accept-Encoding: gzip, deflate"', + '-H "X-Custom-Header-1: Custom value"', + '-H "X-Custom-Header-2: 8.8.8.8"', + '-H "X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT"', + '-H "Referer: ' + CURL_URL + '"', + '-H "Connection: keep-alive"' + ].join(" "); + + const EXPECTED_RESULT = Services.appinfo.OS == "WINNT" ? + EXPECTED_WIN_RESULT : EXPECTED_POSIX_RESULT; + + let { NetMonitorView } = aMonitor.panelWin; + let { RequestsMenu } = NetMonitorView; + + RequestsMenu.lazyUpdate = false; + + waitForNetworkEvents(aMonitor, 1).then(() => { + let requestItem = RequestsMenu.getItemAtIndex(0); + RequestsMenu.selectedItem = requestItem; + + waitForClipboard(EXPECTED_RESULT, function setup() { + RequestsMenu.copyAsCurl(); + }, function onSuccess() { + ok(true, "Clipboard contains a cURL command for the currently selected item's url."); + cleanUp(); + }, function onFailure() { + ok(false, "Creating a cURL command for the currently selected item was unsuccessful."); + cleanUp(); + }); + + }); + + aDebuggee.performRequest(SIMPLE_SJS); + + function cleanUp(){ + teardown(aMonitor).then(finish); + } + }); +} diff --git a/browser/devtools/netmonitor/test/browser_net_curl-utils.js b/browser/devtools/netmonitor/test/browser_net_curl-utils.js new file mode 100644 index 000000000000..cbb4389124b7 --- /dev/null +++ b/browser/devtools/netmonitor/test/browser_net_curl-utils.js @@ -0,0 +1,232 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests Curl Utils functionality. + */ + +function test() { + initNetMonitor(CURL_UTILS_URL).then(([aTab, aDebuggee, aMonitor]) => { + info("Starting test... "); + + let { NetMonitorView, gNetwork } = aMonitor.panelWin; + let { RequestsMenu } = NetMonitorView; + + RequestsMenu.lazyUpdate = false; + + waitForNetworkEvents(aMonitor, 1, 3).then(() => { + let requests = { + get: RequestsMenu.getItemAtIndex(0), + post: RequestsMenu.getItemAtIndex(1), + multipart: RequestsMenu.getItemAtIndex(2), + multipartForm: RequestsMenu.getItemAtIndex(3) + }; + + Task.spawn(function*() { + yield createCurlData(requests.get.attachment, gNetwork).then((aData) => { + test_findHeader(aData); + }); + + yield createCurlData(requests.post.attachment, gNetwork).then((aData) => { + test_isUrlEncodedRequest(aData); + test_writePostDataTextParams(aData); + }); + + yield createCurlData(requests.multipart.attachment, gNetwork).then((aData) => { + test_isMultipartRequest(aData); + test_getMultipartBoundary(aData); + test_removeBinaryDataFromMultipartText(aData); + }); + + yield createCurlData(requests.multipartForm.attachment, gNetwork).then((aData) => { + test_getHeadersFromMultipartText(aData); + }); + + if (Services.appinfo.OS != "WINNT") { + test_escapeStringPosix(); + } else { + test_escapeStringWin(); + } + + teardown(aMonitor).then(finish); + }); + }); + + aDebuggee.performRequests(SIMPLE_SJS); + }); +} + +function test_isUrlEncodedRequest(aData) { + let isUrlEncoded = CurlUtils.isUrlEncodedRequest(aData); + ok(isUrlEncoded, "Should return true for url encoded requests."); +} + +function test_isMultipartRequest(aData) { + let isMultipart = CurlUtils.isMultipartRequest(aData); + ok(isMultipart, "Should return true for multipart/form-data requests."); +} + +function test_findHeader(aData) { + let headers = aData.headers; + let hostName = CurlUtils.findHeader(headers, "Host"); + let requestedWithLowerCased = CurlUtils.findHeader(headers, "x-requested-with"); + let doesNotExist = CurlUtils.findHeader(headers, "X-Does-Not-Exist"); + + is(hostName, "example.com", + "Header with name 'Host' should be found in the request array."); + is(requestedWithLowerCased, "XMLHttpRequest", + "The search should be case insensitive."); + is(doesNotExist, null, + "Should return null when a header is not found."); +} + +function test_writePostDataTextParams(aData) { + let params = CurlUtils.writePostDataTextParams(aData.postDataText); + is(params, "param1=value1¶m2=value2¶m3=value3", + "Should return a serialized representation of the request parameters"); +} + +function test_getMultipartBoundary(aData) { + let boundary = CurlUtils.getMultipartBoundary(aData); + ok(/-{3,}\w+/.test(boundary), + "A boundary string should be found in a multipart request."); +} + +function test_removeBinaryDataFromMultipartText(aData) { + let generatedBoundary = CurlUtils.getMultipartBoundary(aData); + let text = aData.postDataText; + let binaryRemoved = + CurlUtils.removeBinaryDataFromMultipartText(text, generatedBoundary); + let boundary = "--" + generatedBoundary; + + const EXPECTED_POSIX_RESULT = [ + "$'", + boundary, + "\\r\\n\\r\\n", + "Content-Disposition: form-data; name=\"param1\"", + "\\r\\n\\r\\n", + "value1", + "\\r\\n", + boundary, + "\\r\\n\\r\\n", + "Content-Disposition: form-data; name=\"file\"; filename=\"filename.png\"", + "\\r\\n", + "Content-Type: image/png", + "\\r\\n\\r\\n", + generatedBoundary, + "--\\r\\n", + "'" + ].join(""); + + const EXPECTED_WIN_RESULT = [ + '"' + boundary + '"^', + '\u000d\u000A\u000d\u000A', + '"Content-Disposition: form-data; name=""param1"""^', + '\u000d\u000A\u000d\u000A', + '"value1"^', + '\u000d\u000A', + '"' + boundary + '"^', + '\u000d\u000A\u000d\u000A', + '"Content-Disposition: form-data; name=""file""; filename=""filename.png"""^', + '\u000d\u000A', + '"Content-Type: image/png"^', + '\u000d\u000A\u000d\u000A', + '"' + generatedBoundary + '--"^', + '\u000d\u000A', + '""' + ].join(""); + + if (Services.appinfo.OS != "WINNT") { + is(CurlUtils.escapeStringPosix(binaryRemoved), EXPECTED_POSIX_RESULT, + "The mulitpart request payload should not contain binary data."); + } else { + is(CurlUtils.escapeStringWin(binaryRemoved), EXPECTED_WIN_RESULT, + "WinNT: The mulitpart request payload should not contain binary data."); + } +} + +function test_getHeadersFromMultipartText(aData) { + let headers = CurlUtils.getHeadersFromMultipartText(aData.postDataText); + + ok(Array.isArray(headers), + "Should return an array."); + ok(headers.length > 0, + "There should exist at least one request header."); + is(headers[0].name, "Content-Type", + "The first header name should be 'Content-Type'."); +} + +function test_escapeStringPosix() { + let surroundedWithQuotes = "A simple string"; + is(CurlUtils.escapeStringPosix(surroundedWithQuotes), "'A simple string'", + "The string should be surrounded with single quotes."); + + let singleQuotes = "It's unusual to put crickets in your coffee."; + is(CurlUtils.escapeStringPosix(singleQuotes), + "$'It\\'s unusual to put crickets in your coffee.'", + "Single quotes should be escaped."); + + let newLines = "Line 1\r\nLine 2\u000d\u000ALine3"; + is(CurlUtils.escapeStringPosix(newLines), "$'Line 1\\r\\nLine 2\\r\\nLine3'", + "Newlines should be escaped."); + + let controlChars = "\u0007 \u0009 \u000C \u001B"; + is(CurlUtils.escapeStringPosix(controlChars), "$'\\x07 \\x09 \\x0c \\x1b'", + "Control characters should be escaped."); + + let extendedAsciiChars = "æ ø Ă¼ ĂŸ ö Ă©"; + is(CurlUtils.escapeStringPosix(extendedAsciiChars), + "$'\\xc3\\xa6 \\xc3\\xb8 \\xc3\\xbc \\xc3\\x9f \\xc3\\xb6 \\xc3\\xa9'", + "Character codes outside of the decimal range 32 - 126 should be escaped."); +} + +function test_escapeStringWin() { + let surroundedWithDoubleQuotes = "A simple string"; + is(CurlUtils.escapeStringWin(surroundedWithDoubleQuotes), '"A simple string"', + "The string should be surrounded with double quotes."); + + let doubleQuotes = "Quote: \"Time is an illusion. Lunchtime doubly so.\""; + is(CurlUtils.escapeStringWin(doubleQuotes), + '"Quote: ""Time is an illusion. Lunchtime doubly so."""', + "Double quotes should be escaped."); + + let percentSigns = "%AppData%"; + is(CurlUtils.escapeStringWin(percentSigns), '""%"AppData"%""', + "Percent signs should be escaped."); + + let backslashes = "\\A simple string\\"; + is(CurlUtils.escapeStringWin(backslashes), '"\\\\A simple string\\\\"', + "Backslashes should be escaped."); + + let newLines = "line1\r\nline2\r\nline3"; + is(CurlUtils.escapeStringWin(newLines), + '"line1"^\u000d\u000A"line2"^\u000d\u000A"line3"', + "Newlines should be escaped."); +} + +function createCurlData(aSelected, aNetwork) { + return Task.spawn(function*() { + // Create a sanitized object for the Curl command generator. + let data = { + url: aSelected.url, + method: aSelected.method, + headers: [], + httpVersion: aSelected.httpVersion, + postDataText: null + }; + + // Fetch header values. + for (let { name, value } of aSelected.requestHeaders.headers) { + let text = yield aNetwork.getString(value); + data.headers.push({ name: name, value: text }); + } + + // Fetch the request payload. + if (aSelected.requestPostData) { + let postData = aSelected.requestPostData.postData.text; + data.postDataText = yield aNetwork.getString(postData); + } + + return data; + }); +} \ No newline at end of file diff --git a/browser/devtools/netmonitor/test/head.js b/browser/devtools/netmonitor/test/head.js index 496cd7051ebd..17fb59ba19c0 100644 --- a/browser/devtools/netmonitor/test/head.js +++ b/browser/devtools/netmonitor/test/head.js @@ -9,6 +9,7 @@ let { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {}); let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); +let { CurlUtils } = Cu.import("resource:///modules/devtools/Curl.jsm", {}); let TargetFactory = devtools.TargetFactory; let Toolbox = devtools.Toolbox; @@ -34,6 +35,8 @@ const FILTERING_URL = EXAMPLE_URL + "html_filter-test-page.html"; const INFINITE_GET_URL = EXAMPLE_URL + "html_infinite-get-page.html"; const CUSTOM_GET_URL = EXAMPLE_URL + "html_custom-get-page.html"; const STATISTICS_URL = EXAMPLE_URL + "html_statistics-test-page.html"; +const CURL_URL = EXAMPLE_URL + "html_copy-as-curl.html"; +const CURL_UTILS_URL = EXAMPLE_URL + "html_curl-utils.html"; const SIMPLE_SJS = EXAMPLE_URL + "sjs_simple-test-server.sjs"; const CONTENT_TYPE_SJS = EXAMPLE_URL + "sjs_content-type-test-server.sjs"; diff --git a/browser/devtools/netmonitor/test/html_copy-as-curl.html b/browser/devtools/netmonitor/test/html_copy-as-curl.html new file mode 100644 index 000000000000..482d8cd630e3 --- /dev/null +++ b/browser/devtools/netmonitor/test/html_copy-as-curl.html @@ -0,0 +1,27 @@ + + + + + + + Network Monitor test page + + + +

Performing a GET request

+ + + + + diff --git a/browser/devtools/netmonitor/test/html_curl-utils.html b/browser/devtools/netmonitor/test/html_curl-utils.html new file mode 100644 index 000000000000..466edcb9bb93 --- /dev/null +++ b/browser/devtools/netmonitor/test/html_curl-utils.html @@ -0,0 +1,99 @@ + + + + + + + Network Monitor test page + + + +

Performing requests

+ +

+ +

+ +
+ +
+ + + + +
+ + + + + + diff --git a/browser/devtools/shared/Curl.jsm b/browser/devtools/shared/Curl.jsm new file mode 100644 index 000000000000..fc8bcbecaeaf --- /dev/null +++ b/browser/devtools/shared/Curl.jsm @@ -0,0 +1,396 @@ +/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. + * Copyright (C) 2008, 2009 Anthony Ricaud + * Copyright (C) 2011 Google Inc. All rights reserved. + * Copyright (C) 2009 Mozilla Foundation. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of + * its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +"use strict"; + +this.EXPORTED_SYMBOLS = ["Curl", "CurlUtils"]; + +Components.utils.import("resource://gre/modules/Services.jsm"); + +const DEFAULT_HTTP_VERSION = "HTTP/1.1"; + +this.Curl = { + /** + * Generates a cURL command string which can be used from the command line etc. + * + * @param object aData + * Datasource to create the command from. + * The object must contain the following properties: + * - url:string, the URL of the request. + * - method:string, the request method upper cased. HEAD / GET / POST etc. + * - headers:array, an array of request headers {name:x, value:x} tuples. + * - httpVersion:string, http protocol version rfc2616 formatted. Eg. "HTTP/1.1" + * - postDataText:string, optional - the request payload. + * + * @return string + * A cURL command. + */ + generateCommand: function(aData) { + let utils = CurlUtils; + + let command = ["curl"]; + let ignoredHeaders = new Set(); + + // The cURL command is expected to run on the same platform that Firefox runs + // (it may be different from the inspected page platform). + let escapeString = Services.appinfo.OS == "WINNT" ? + utils.escapeStringWin : utils.escapeStringPosix; + + // Add URL. + command.push(escapeString(aData.url)); + + let postDataText = null; + let multipartRequest = utils.isMultipartRequest(aData); + + // Create post data. + let data = []; + if (utils.isUrlEncodedRequest(aData) || aData.method == "PUT") { + postDataText = aData.postDataText; + data.push("--data"); + data.push(escapeString(utils.writePostDataTextParams(postDataText))); + ignoredHeaders.add("Content-Length"); + } else if (multipartRequest) { + postDataText = aData.postDataText; + data.push("--data-binary"); + let boundary = utils.getMultipartBoundary(aData); + let text = utils.removeBinaryDataFromMultipartText(postDataText, boundary); + data.push(escapeString(text)); + ignoredHeaders.add("Content-Length"); + } + + // Add method. + // For GET and POST requests this is not necessary as GET is the + // default. If --data or --binary is added POST is the default. + if (!(aData.method == "GET" || aData.method == "POST")) { + command.push("-X"); + command.push(aData.method); + } + + // Add -I (HEAD) + // For servers that supports HEAD. + // This will fetch the header of a document only. + if (aData.method == "HEAD") { + command.push("-I"); + } + + // Add http version. + if (aData.httpVersion && aData.httpVersion != DEFAULT_HTTP_VERSION) { + command.push("--" + aData.httpVersion.split("/")[1]); + } + + // Add request headers. + let headers = aData.headers; + if (multipartRequest) { + let multipartHeaders = utils.getHeadersFromMultipartText(postDataText); + headers = headers.concat(multipartHeaders); + } + for (let i = 0; i < headers.length; i++) { + let header = headers[i]; + if (ignoredHeaders.has(header.name)) { + continue; + } + command.push("-H"); + command.push(escapeString(header.name + ": " + header.value)); + } + + // Add post data. + command = command.concat(data); + + return command.join(" "); + } +}; + +/** + * Utility functions for the Curl command generator. + */ +this.CurlUtils = { + /** + * Check if the request is an URL encoded request. + * + * @param object aData + * The data source. See the description in the Curl object. + * @return boolean + * True if the request is URL encoded, false otherwise. + */ + isUrlEncodedRequest: function(aData) { + let postDataText = aData.postDataText; + if (!postDataText) { + return false; + } + + postDataText = postDataText.toLowerCase(); + if (postDataText.contains("content-type: application/x-www-form-urlencoded")) { + return true; + } + + let contentType = this.findHeader(aData.headers, "content-type"); + + return (contentType && + contentType.toLowerCase().contains("application/x-www-form-urlencoded")); + }, + + /** + * Check if the request is a multipart request. + * + * @param object aData + * The data source. + * @return boolean + * True if the request is multipart reqeust, false otherwise. + */ + isMultipartRequest: function(aData) { + let postDataText = aData.postDataText; + if (!postDataText) { + return false; + } + + postDataText = postDataText.toLowerCase(); + if (postDataText.contains("content-type: multipart/form-data")) { + return true; + } + + let contentType = this.findHeader(aData.headers, "content-type"); + + return (contentType && + contentType.toLowerCase().contains("multipart/form-data;")); + }, + + /** + * Write out paramters from post data text. + * + * @param object aPostDataText + * Post data text. + * @return string + * Post data parameters. + */ + writePostDataTextParams: function(aPostDataText) { + let lines = aPostDataText.split("\r\n"); + return lines[lines.length - 1]; + }, + + /** + * Finds the header with the given name in the headers array. + * + * @param array aHeaders + * Array of headers info {name:x, value:x}. + * @param string aName + * The header name to find. + * @return string + * The found header value or null if not found. + */ + findHeader: function(aHeaders, aName) { + if (!aHeaders) { + return null; + } + + let name = aName.toLowerCase(); + for (let header of aHeaders) { + if (name == header.name.toLowerCase()) { + return header.value; + } + } + + return null; + }, + + /** + * Returns the boundary string for a multipart request. + * + * @param string aData + * The data source. See the description in the Curl object. + * @return string + * The boundary string for the request. + */ + getMultipartBoundary: function(aData) { + let boundaryRe = /\bboundary=(-{3,}\w+)/i; + + // Get the boundary string from the Content-Type request header. + let contentType = this.findHeader(aData.headers, "Content-Type"); + if (boundaryRe.test(contentType)) { + return contentType.match(boundaryRe)[1]; + } + // Temporary workaround. As of 2014-03-11 the requestHeaders array does not + // always contain the Content-Type header for mulitpart requests. See bug 978144. + // Find the header from the request payload. + let boundaryString = aData.postDataText.match(boundaryRe)[1]; + if (boundaryString) { + return boundaryString; + } + + return null; + }, + + /** + * Removes the binary data from mulitpart text. + * + * @param string aMultipartText + * Multipart form data text. + * @param string aBoundary + * The boundary string. + * @return string + * The mulitpart text without the binary data. + */ + removeBinaryDataFromMultipartText: function(aMultipartText, aBoundary) { + let result = ""; + let boundary = "--" + aBoundary; + let parts = aMultipartText.split(boundary); + for (let part of parts) { + // Each part is expected to have a content disposition line. + let contentDispositionLine = part.trimLeft().split("\r\n")[0]; + if (!contentDispositionLine) { + continue; + } + contentDispositionLine = contentDispositionLine.toLowerCase(); + if (contentDispositionLine.contains("content-disposition: form-data")) { + if (contentDispositionLine.contains("filename=")) { + // The header lines and the binary blob is separated by 2 CRLF's. + // Add only the headers to the result. + let headers = part.split("\r\n\r\n")[0]; + result += boundary + "\r\n" + headers + "\r\n\r\n"; + } + else { + result += boundary + "\r\n" + part; + } + } + } + result += aBoundary + "--\r\n"; + + return result; + }, + + /** + * Get the headers from a multipart post data text. + * + * @param string aMultipartText + * Multipart post text. + * @return array + * An array of header objects {name:x, value:x} + */ + getHeadersFromMultipartText: function(aMultipartText) { + let headers = []; + if (!aMultipartText || aMultipartText.startsWith("---")) { + return headers; + } + + // Get the header section. + let index = aMultipartText.indexOf("\r\n\r\n"); + if (index == -1) { + return headers; + } + + // Parse the header lines. + let headersText = aMultipartText.substring(0, index); + let headerLines = headersText.split("\r\n"); + let lastHeaderName = null; + + for (let line of headerLines) { + // Create a header for each line in fields that spans across multiple lines. + // Subsquent lines always begins with at least one space or tab character. + // (rfc2616) + if (lastHeaderName && /^\s+/.test(line)) { + headers.push({ name: lastHeaderName, value: line.trim() }); + continue; + } + + let indexOfColon = line.indexOf(":"); + if (indexOfColon == -1) { + continue; + } + + let header = [line.slice(0, indexOfColon), line.slice(indexOfColon + 1)]; + if (header.length != 2) { + continue; + } + lastHeaderName = header[0].trim(); + headers.push({ name: lastHeaderName, value: header[1].trim() }); + } + + return headers; + }, + + /** + * Escape util function for POSIX oriented operating systems. + * Credit: Google DevTools + */ + escapeStringPosix: function(str) { + function escapeCharacter(x) { + let code = x.charCodeAt(0); + if (code < 256) { + // Add leading zero when needed to not care about the next character. + return code < 16 ? "\\x0" + code.toString(16) : "\\x" + code.toString(16); + } + code = code.toString(16); + return "\\u" + ("0000" + code).substr(code.length, 4); + } + + if (/[^\x20-\x7E]|\'/.test(str)) { + // Use ANSI-C quoting syntax. + return "$\'" + str.replace(/\\/g, "\\\\") + .replace(/\'/g, "\\\'") + .replace(/\n/g, "\\n") + .replace(/\r/g, "\\r") + .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'"; + } else { + // Use single quote syntax. + return "'" + str + "'"; + } + }, + + /** + * Escape util function for Windows systems. + * Credit: Google DevTools + */ + escapeStringWin: function(str) { + /* Replace quote by double quote (but not by \") because it is + recognized by both cmd.exe and MS Crt arguments parser. + + Replace % by "%" because it could be expanded to an environment + variable value. So %% becomes "%""%". Even if an env variable "" + (2 doublequotes) is declared, the cmd.exe will not + substitute it with its value. + + Replace each backslash with double backslash to make sure + MS Crt arguments parser won't collapse them. + + Replace new line outside of quotes since cmd.exe doesn't let + to do it inside. + */ + return "\"" + str.replace(/"/g, "\"\"") + .replace(/%/g, "\"%\"") + .replace(/\\/g, "\\\\") + .replace(/[\r\n]+/g, "\"^$&\"") + "\""; + } +}; \ No newline at end of file diff --git a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd index 79aa7149cb28..71f7101967b5 100644 --- a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd @@ -202,6 +202,12 @@ - on the context menu that copies the selected request's url --> + + + From 5d444bbb67b63ec9fa912513c3ef1d7906d3082e Mon Sep 17 00:00:00 2001 From: David Rajchenbach-Teller Date: Fri, 21 Mar 2014 08:57:08 -0400 Subject: [PATCH 06/21] Bug 965527 - More and more logging for OS.File AsyncShutdown. r=froydnj --- .../osfile/modules/osfile_async_front.jsm | 148 +++++++++++++----- 1 file changed, 109 insertions(+), 39 deletions(-) diff --git a/toolkit/components/osfile/modules/osfile_async_front.jsm b/toolkit/components/osfile/modules/osfile_async_front.jsm index 6bd0d86e7694..aef1670c518e 100644 --- a/toolkit/components/osfile/modules/osfile_async_front.jsm +++ b/toolkit/components/osfile/modules/osfile_async_front.jsm @@ -135,6 +135,47 @@ for (let [constProp, dirKey] of [ */ let clone = SharedAll.clone; +/** + * Extract a shortened version of an object, fit for logging. + * + * This function returns a copy of the original object in which all + * long strings, Arrays, TypedArrays, ArrayBuffers are removed and + * replaced with plceholders. Use this function to sanitize objects + * if you wish to log them or to keep them in memory. + * + * @param {*} obj The obj to shorten. + * @return {*} array A shorter object, fit for logging. + */ +function summarizeObject(obj) { + if (!obj) { + return null; + } + if (typeof obj == "string") { + if (obj.length > 1024) { + return {"Long string": obj.length}; + } + return obj; + } + if (typeof obj == "object") { + if (Array.isArray(obj)) { + if (obj.length > 32) { + return {"Long array": obj.length}; + } + return [summarizeObject(k) for (k of obj)]; + } + if ("byteLength" in obj) { + // Assume TypedArray or ArrayBuffer + return {"Binary Data": obj.byteLength}; + } + let result = {}; + for (let k of Object.keys(obj)) { + result[k] = summarizeObject(obj[k]); + } + return result; + } + return obj; +} + let worker = null; let Scheduler = { /** @@ -157,19 +198,41 @@ let Scheduler = { queue: Promise.resolve(), /** - * The latest message sent and still waiting for a reply. In DEBUG - * builds, the entire message is stored, which may be memory-consuming. - * In non-DEBUG builds, only the method name is stored. + * Miscellaneous debugging information */ - latestSent: undefined, + Debugging: { + /** + * The latest message sent and still waiting for a reply. In DEBUG + * builds, the entire message is stored, which may be memory-consuming. + * In non-DEBUG builds, only the method name is stored. + */ + latestSent: undefined, - /** - * The latest reply received, or null if we are waiting for a reply. - * In DEBUG builds, the entire response is stored, which may be - * memory-consuming. In non-DEBUG builds, only exceptions and - * method names are stored. - */ - latestReceived: undefined, + /** + * The latest reply received, or null if we are waiting for a reply. + * In DEBUG builds, the entire response is stored, which may be + * memory-consuming. In non-DEBUG builds, only exceptions and + * method names are stored. + */ + latestReceived: undefined, + + /** + * Number of messages sent to the worker. This includes the + * initial SET_DEBUG, if applicable. + */ + messagesSent: 0, + + /** + * Total number of messages ever queued, including the messages + * sent. + */ + messagesQueued: 0, + + /** + * Number of messages received from the worker. + */ + messagesReceived: 0, + }, /** * A timer used to automatically shut down the worker after some time. @@ -234,6 +297,7 @@ let Scheduler = { if (firstLaunch && SharedAll.Config.DEBUG) { // If we have delayed sending SET_DEBUG, do it now. worker.post("SET_DEBUG", [true]); + Scheduler.Debugging.messagesSent++; } // By convention, the last argument of any message may be an |options| object. @@ -242,41 +306,43 @@ let Scheduler = { if (methodArgs) { options = methodArgs[methodArgs.length - 1]; } + Scheduler.Debugging.messagesQueued++; return this.push(() => Task.spawn(function*() { - Scheduler.latestReceived = null; - if (OS.Constants.Sys.DEBUG) { - // Update possibly memory-expensive debugging information - Scheduler.latestSent = [Date.now(), method, ...args]; - } else { - Scheduler.latestSent = [Date.now(), method]; - } + // Update debugging information. As |args| may be quite + // expensive, we only keep a shortened version of it. + Scheduler.Debugging.latestReceived = null; + Scheduler.Debugging.latestSent = [Date.now(), method, summarizeObject(methodArgs)]; let data; let reply; let isError = false; try { - data = yield worker.post(method, ...args); - reply = data; - } catch (error if error instanceof PromiseWorker.WorkerError) { - reply = error; - isError = true; - throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); - } catch (error if error instanceof ErrorEvent) { - reply = error; - let message = error.message; - if (message == "uncaught exception: [object StopIteration]") { - throw StopIteration; + try { + data = yield worker.post(method, ...args); + } finally { + Scheduler.Debugging.messagesReceived++; } + reply = data; + } catch (error) { + reply = error; isError = true; - throw new Error(message, error.filename, error.lineno); + if (error instanceof PromiseWorker.WorkerError) { + throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + } + if (error instanceof ErrorEvent) { + let message = error.message; + if (message == "uncaught exception: [object StopIteration]") { + isError = false; + throw StopIteration; + } + throw new Error(message, error.filename, error.lineno); + } + throw ex; } finally { - Scheduler.latestSent = Scheduler.latestSent.slice(0, 2); - if (OS.Constants.Sys.DEBUG) { - // Update possibly memory-expensive debugging information - Scheduler.latestReceived = [Date.now(), reply]; - } else if (isError) { - Scheduler.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; + Scheduler.Debugging.latestSent = Scheduler.Debugging.latestSent.slice(0, 2); + if (isError) { + Scheduler.Debugging.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; } else { - Scheduler.latestReceived = [Date.now()]; + Scheduler.Debugging.latestReceived = [Date.now(), summarizeObject(reply)]; } if (firstLaunch) { Scheduler._updateTelemetry(); @@ -1363,8 +1429,12 @@ AsyncShutdown.profileBeforeChange.addBlocker( shutdown: Scheduler.shutdown, worker: !!worker, pendingReset: !!Scheduler.resetTimer, - latestSent: Scheduler.latestSent, - latestReceived: Scheduler.latestReceived + latestSent: Scheduler.Debugging.latestSent, + latestReceived: Scheduler.Debugging.latestReceived, + messagesSent: Scheduler.Debugging.messagesSent, + messagesReceived: Scheduler.Debugging.messagesReceived, + messagesQueued: Scheduler.Debugging.messagesQueued, + DEBUG: SharedAll.Config.DEBUG }; // Convert dates to strings for better readability for (let key of ["latestSent", "latestReceived"]) { From 5396ba911c34bb6fa9c3f9a230b49e8f25405e1e Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Tue, 18 Mar 2014 15:16:43 -0500 Subject: [PATCH 07/21] Bug 985094 - Show typeName from protocol.js in listTabs reply. r=past --- toolkit/devtools/server/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/toolkit/devtools/server/main.js b/toolkit/devtools/server/main.js index 769d186c3bbe..699126240bf0 100644 --- a/toolkit/devtools/server/main.js +++ b/toolkit/devtools/server/main.js @@ -803,7 +803,8 @@ ActorPool.prototype = { if (!aActor.actorID) { let prefix = aActor.actorPrefix; if (typeof aActor == "function") { - prefix = aActor.prototype.actorPrefix; + // typeName is a convention used with protocol.js-based actors + prefix = aActor.prototype.actorPrefix || aActor.prototype.typeName; } aActor.actorID = this.conn.allocID(prefix || undefined); } From 89a19eb4f8976be6de0c91c7b838af21c7d9c059 Mon Sep 17 00:00:00 2001 From: David Rajchenbach-Teller Date: Fri, 21 Mar 2014 09:07:30 -0400 Subject: [PATCH 08/21] Bug 985980 - Restore off main thread logging for OS.File. r=froydnj --- toolkit/components/osfile/modules/osfile_shared_allthreads.jsm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/toolkit/components/osfile/modules/osfile_shared_allthreads.jsm b/toolkit/components/osfile/modules/osfile_shared_allthreads.jsm index c7c155e7e24b..d8246feda4c7 100644 --- a/toolkit/components/osfile/modules/osfile_shared_allthreads.jsm +++ b/toolkit/components/osfile/modules/osfile_shared_allthreads.jsm @@ -108,7 +108,7 @@ exports.defineLazyGetter = defineLazyGetter; * The choice of logger can be overridden with Config.TEST. */ let gLogger; -if (typeof console != "undefined" && console.log) { +if (typeof window != "undefined" && window.console && console.log) { gLogger = console.log.bind(console, "OS"); } else { gLogger = function(...args) { From cbd250673ece93262d53c1f2c64f1eaeebcd96b4 Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Thu, 20 Mar 2014 20:23:36 -0400 Subject: [PATCH 09/21] Bug 940393 - Win8: Text color on inactive tabs makes text very hard to read. r=gijs --HG-- extra : rebase_source : 03e07612be960c1b3a961e065404034ae0db5ce1 --- browser/base/content/browser.js | 27 ++++++++ .../migration/src/IEProfileMigrator.js | 64 ++++--------------- browser/modules/Windows8WindowFrameColor.jsm | 33 ++++++++++ browser/modules/moz.build | 1 + browser/themes/windows/browser-aero.css | 27 ++++++++ browser/themes/windows/browser.css | 4 +- toolkit/modules/WindowsRegistry.jsm | 50 +++++++++++++++ toolkit/modules/moz.build | 6 ++ 8 files changed, 159 insertions(+), 53 deletions(-) create mode 100644 browser/modules/Windows8WindowFrameColor.jsm create mode 100644 toolkit/modules/WindowsRegistry.jsm diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 4be040b95b4c..780048f59764 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -1186,6 +1186,33 @@ var gBrowserInit = { WindowsPrefSync.init(); } +#ifdef XP_WIN + if (window.matchMedia("(-moz-os-version: windows-win8)").matches && + window.matchMedia("(-moz-windows-default-theme)").matches) { + let windows8WindowFrameColor = Cu.import("resource:///modules/Windows8WindowFrameColor.jsm", {}).Windows8WindowFrameColor; + let windowFrameColor = windows8WindowFrameColor.get(); + + // Formula from W3C Techniques For Accessibility Evaluation And + // Repair Tools, Section 2.2 http://www.w3.org/TR/AERT#color + let brightnessThreshold = 125; + let colorThreshold = 500; + let bY = windowFrameColor[0] * .299 + + windowFrameColor[1] * .587 + + windowFrameColor[2] * .114; + let fY = 0; // Default to black for foreground text. + let brightnessDifference = Math.abs(bY - fY); + // Color difference calculation is simplified because black is 0 for R,G,B. + let colorDifference = windowFrameColor[0] + windowFrameColor[1] + windowFrameColor[2]; + + // Brightness is defined within {0, 255}. Set an attribute + // if the window frame color doesn't reach these thresholds + // so the theme can be adjusted for readability. + if (brightnessDifference < brightnessThreshold && colorDifference < colorThreshold) { + document.documentElement.setAttribute("darkwindowframe", "true"); + } + } +#endif + SessionStore.promiseInitialized.then(() => { // Bail out if the window has been closed in the meantime. if (window.closed) { diff --git a/browser/components/migration/src/IEProfileMigrator.js b/browser/components/migration/src/IEProfileMigrator.js index 2a226e32ae47..dcfe1b8ed393 100644 --- a/browser/components/migration/src/IEProfileMigrator.js +++ b/browser/components/migration/src/IEProfileMigrator.js @@ -10,7 +10,6 @@ const Cu = Components.utils; const Cr = Components.results; const kMainKey = "Software\\Microsoft\\Internet Explorer\\Main"; -const kRegMultiSz = 7; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); @@ -21,6 +20,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ctypes", "resource://gre/modules/ctypes.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "WindowsRegistry", + "resource://gre/modules/WindowsRegistry.jsm"); //////////////////////////////////////////////////////////////////////////////// //// Helpers. @@ -126,45 +127,6 @@ function hostIsIPAddress(aHost) { return false; } -/** - * Safely reads a value from the registry. - * - * @param aRoot - * The root registry to use. - * @param aPath - * The registry path to the key. - * @param aKey - * The key name. - * @return The key value or undefined if it doesn't exist. If the key is - * a REG_MULTI_SZ, an array is returned. - */ -function readRegKey(aRoot, aPath, aKey) { - let registry = Cc["@mozilla.org/windows-registry-key;1"]. - createInstance(Ci.nsIWindowsRegKey); - try { - registry.open(aRoot, aPath, Ci.nsIWindowsRegKey.ACCESS_READ); - if (registry.hasValue(aKey)) { - let type = registry.getValueType(aKey); - switch (type) { - case kRegMultiSz: - // nsIWindowsRegKey doesn't support REG_MULTI_SZ type out of the box. - let str = registry.readStringValue(aKey); - return [v for each (v in str.split("\0")) if (v)]; - case Ci.nsIWindowsRegKey.TYPE_STRING: - return registry.readStringValue(aKey); - case Ci.nsIWindowsRegKey.TYPE_INT: - return registry.readIntValue(aKey); - default: - throw new Error("Unsupported registry value."); - } - } - } catch (ex) { - } finally { - registry.close(); - } - return undefined; -}; - //////////////////////////////////////////////////////////////////////////////// //// Resources @@ -192,9 +154,9 @@ Bookmarks.prototype = { // Retrieve the name of IE's favorites subfolder that holds the bookmarks // in the toolbar. This was previously stored in the registry and changed // in IE7 to always be called "Links". - let folderName = readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - "Software\\Microsoft\\Internet Explorer\\Toolbar", - "LinksFolderName"); + let folderName = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + "Software\\Microsoft\\Internet Explorer\\Toolbar", + "LinksFolderName"); this.__toolbarFolderName = folderName || "Links"; } return this.__toolbarFolderName; @@ -605,8 +567,8 @@ Settings.prototype = { * Conversion function from the Registry format to the pref format. */ _set: function S__set(aPath, aKey, aPref, aTransformFn) { - let value = readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - aPath, aKey); + let value = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + aPath, aKey); // Don't import settings that have never been flipped. if (value === undefined) return; @@ -651,10 +613,10 @@ IEProfileMigrator.prototype.getResources = function IE_getResources() { Object.defineProperty(IEProfileMigrator.prototype, "sourceHomePageURL", { get: function IE_get_sourceHomePageURL() { - let defaultStartPage = readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, - kMainKey, "Default_Page_URL"); - let startPage = readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - kMainKey, "Start Page"); + let defaultStartPage = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_LOCAL_MACHINE, + kMainKey, "Default_Page_URL"); + let startPage = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + kMainKey, "Start Page"); // If the user didn't customize the Start Page, he is still on the default // page, that may be considered the equivalent of our about:home. There's // no reason to retain it, since it is heavily targeted to IE. @@ -664,8 +626,8 @@ Object.defineProperty(IEProfileMigrator.prototype, "sourceHomePageURL", { // are in addition to the Start Page, and no empty entries are possible, // thus a Start Page is always defined if any of these exists, though it // may be the default one. - let secondaryPages = readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, - kMainKey, "Secondary Start Pages"); + let secondaryPages = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + kMainKey, "Secondary Start Pages"); if (secondaryPages) { if (homepage) secondaryPages.unshift(homepage); diff --git a/browser/modules/Windows8WindowFrameColor.jsm b/browser/modules/Windows8WindowFrameColor.jsm new file mode 100644 index 000000000000..34e41fc17e48 --- /dev/null +++ b/browser/modules/Windows8WindowFrameColor.jsm @@ -0,0 +1,33 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +this.EXPORTED_SYMBOLS = ["Windows8WindowFrameColor"]; + +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); +Cu.import("resource://gre/modules/WindowsRegistry.jsm"); + +const Windows8WindowFrameColor = { + _windowFrameColor: null, + + get: function() { + if (this._windowFrameColor) + return this._windowFrameColor; + + let windowFrameColor = WindowsRegistry.readRegKey(Ci.nsIWindowsRegKey.ROOT_KEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\DWM", + "ColorizationColor"); + // The color returned from the Registry is in decimal form. + let windowFrameColorHex = windowFrameColor.toString(16); + // Zero-pad the number just to make sure that it is 8 digits. + windowFrameColorHex = ("00000000" + windowFrameColorHex).substr(-8); + let windowFrameColorArray = windowFrameColorHex.match(/../g); + let [pixelA, pixelR, pixelG, pixelB] = windowFrameColorArray.map(function(val) parseInt(val, 16)); + + return this._windowFrameColor = [pixelR, pixelG, pixelB]; + }, +}; diff --git a/browser/modules/moz.build b/browser/modules/moz.build index 98b7a45afa58..784e7aefb477 100644 --- a/browser/modules/moz.build +++ b/browser/modules/moz.build @@ -26,6 +26,7 @@ EXTRA_JS_MODULES += [ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': EXTRA_JS_MODULES += [ + 'Windows8WindowFrameColor.jsm', 'WindowsJumpLists.jsm', 'WindowsPreviewPerTab.jsm', ] diff --git a/browser/themes/windows/browser-aero.css b/browser/themes/windows/browser-aero.css index 378dc5e94c5b..ffff4183ea99 100644 --- a/browser/themes/windows/browser-aero.css +++ b/browser/themes/windows/browser-aero.css @@ -136,6 +136,32 @@ border-right-style: none !important; } + #main-window[darkwindowframe="true"] #toolbar-menubar:not(:-moz-lwtheme):not(:-moz-window-inactive), + #main-window[darkwindowframe="true"] #TabsToolbar:not(:-moz-lwtheme):not(:-moz-window-inactive) { + color: white; + } + + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) :-moz-any(@primaryToolbarButtons@):not(:-moz-lwtheme):not(:-moz-window-inactive), + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) #bookmarks-menu-button:not(:-moz-lwtheme) > .toolbarbutton-menubutton-dropmarker > .dropmarker-icon:not(:-moz-window-inactive) { + list-style-image: url(chrome://browser/skin/Toolbar-inverted.png); + } + + #main-window[darkwindowframe="true"] .tabs-newtab-button:not(:-moz-lwtheme):not(:-moz-window-inactive), + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) > #new-tab-button:not(:-moz-lwtheme):not(:-moz-window-inactive), + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) > toolbarpaletteitem > #new-tab-button:not(:-moz-lwtheme):not(:-moz-window-inactive) { + list-style-image: url(chrome://browser/skin/tabbrowser/newtab-inverted.png); + } + + #main-window[darkwindowframe="true"] .tab-close-button:not(:-moz-any(:hover, [selected="true"], :-moz-lwtheme, :-moz-window-inactive)) { + -moz-image-region: rect(0, 64px, 16px, 48px); + } + + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) > #sync-button[status="active"]:not(:-moz-lwtheme), + #main-window[darkwindowframe="true"] :-moz-any(#toolbar-menubar, #TabsToolbar) > toolbarpaletteitem > #sync-button[status="active"]:not(:-moz-lwtheme) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar-inverted.png"); + } + + #toolbar-menubar:not(:-moz-lwtheme) { text-shadow: 0 0 .5em white, 0 0 .5em white, 0 1px 0 rgba(255,255,255,.4); } @@ -195,6 +221,7 @@ #main-menubar:not(:-moz-lwtheme):not(:-moz-window-inactive) { background-color: rgba(255,255,255,.5); + color: black; } @media (-moz-os-version: windows-vista), diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index 5bd045169cc0..da907486743e 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -109,8 +109,8 @@ %endif /* Make the menu inherit the toolbar's color. On non-compositor (Aero Basic, XP modern, classic) - * this is defined above. Otherwise (Aero Glass, Windows 8), this is hardcoded to black in - * browser-aero.css. */ + * this is defined above. Otherwise (Aero Glass, Windows 8 inactive windows), this is hardcoded + * to black in browser-aero.css. */ #main-menubar > menu:not(:-moz-lwtheme) { color: inherit; } diff --git a/toolkit/modules/WindowsRegistry.jsm b/toolkit/modules/WindowsRegistry.jsm new file mode 100644 index 000000000000..074cd37a207f --- /dev/null +++ b/toolkit/modules/WindowsRegistry.jsm @@ -0,0 +1,50 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; +const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; + +this.EXPORTED_SYMBOLS = ["WindowsRegistry"]; + +const WindowsRegistry = { + /** + * Safely reads a value from the registry. + * + * @param aRoot + * The root registry to use. + * @param aPath + * The registry path to the key. + * @param aKey + * The key name. + * @return The key value or undefined if it doesn't exist. If the key is + * a REG_MULTI_SZ, an array is returned. + */ + readRegKey: function(aRoot, aPath, aKey) { + const kRegMultiSz = 7; + let registry = Cc["@mozilla.org/windows-registry-key;1"]. + createInstance(Ci.nsIWindowsRegKey); + try { + registry.open(aRoot, aPath, Ci.nsIWindowsRegKey.ACCESS_READ); + if (registry.hasValue(aKey)) { + let type = registry.getValueType(aKey); + switch (type) { + case kRegMultiSz: + // nsIWindowsRegKey doesn't support REG_MULTI_SZ type out of the box. + let str = registry.readStringValue(aKey); + return [v for each (v in str.split("\0")) if (v)]; + case Ci.nsIWindowsRegKey.TYPE_STRING: + return registry.readStringValue(aKey); + case Ci.nsIWindowsRegKey.TYPE_INT: + return registry.readIntValue(aKey); + default: + throw new Error("Unsupported registry value."); + } + } + } catch (ex) { + } finally { + registry.close(); + } + return undefined; + }, +}; diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build index cb06d27ba62e..d18e27c134b8 100644 --- a/toolkit/modules/moz.build +++ b/toolkit/modules/moz.build @@ -70,6 +70,12 @@ if 'Android' != CONFIG['OS_TARGET']: 'LightweightThemeConsumer.jsm', ] + +if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows': + EXTRA_JS_MODULES += [ + 'WindowsRegistry.jsm', + ] + DEFINES['MOZ_APP_NAME'] = CONFIG['MOZ_APP_NAME'] DEFINES['MOZ_BUILD_APP'] = CONFIG['MOZ_BUILD_APP'] From d269ff5c2a28f10d96e36849a5db8ace67595112 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Fri, 21 Mar 2014 10:33:18 -0400 Subject: [PATCH 10/21] Backed out 3 changesets (bug 965527, bug 859059, bug 812172) for mochitest and xperf orange on a CLOSED TREE Backed out changeset 18f579c4308e (bug 965527) Backed out changeset 70ed33107301 (bug 859059) Backed out changeset 7b59b92580fa (bug 812172) --- .../netmonitor/netmonitor-controller.js | 3 - .../devtools/netmonitor/netmonitor-view.js | 34 -- browser/devtools/netmonitor/netmonitor.xul | 3 - browser/devtools/netmonitor/test/browser.ini | 4 - .../test/browser_net_copy_as_curl.js | 72 ---- .../netmonitor/test/browser_net_curl-utils.js | 232 ---------- browser/devtools/netmonitor/test/head.js | 3 - .../netmonitor/test/html_copy-as-curl.html | 27 -- .../netmonitor/test/html_curl-utils.html | 99 ----- browser/devtools/shared/Curl.jsm | 396 ------------------ .../chrome/browser/devtools/netmonitor.dtd | 6 - .../osfile/modules/osfile_async_front.jsm | 144 ++----- toolkit/devtools/client/dbg-client.jsm | 23 +- toolkit/devtools/server/actors/root.js | 2 - toolkit/devtools/server/actors/script.js | 28 +- toolkit/devtools/server/main.js | 1 - .../devtools/server/tests/unit/head_dbg.js | 1 - .../unit/test_conditional_breakpoint-01.js | 61 --- .../unit/test_conditional_breakpoint-02.js | 60 --- .../unit/test_conditional_breakpoint-03.js | 62 --- .../devtools/server/tests/unit/xpcshell.ini | 3 - 21 files changed, 48 insertions(+), 1216 deletions(-) delete mode 100644 browser/devtools/netmonitor/test/browser_net_copy_as_curl.js delete mode 100644 browser/devtools/netmonitor/test/browser_net_curl-utils.js delete mode 100644 browser/devtools/netmonitor/test/html_copy-as-curl.html delete mode 100644 browser/devtools/netmonitor/test/html_curl-utils.html delete mode 100644 browser/devtools/shared/Curl.jsm delete mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js delete mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js delete mode 100644 toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js diff --git a/browser/devtools/netmonitor/netmonitor-controller.js b/browser/devtools/netmonitor/netmonitor-controller.js index e9ab5b82727b..48c0e6dc604b 100644 --- a/browser/devtools/netmonitor/netmonitor-controller.js +++ b/browser/devtools/netmonitor/netmonitor-controller.js @@ -140,9 +140,6 @@ Object.defineProperty(this, "NetworkHelper", { XPCOMUtils.defineLazyServiceGetter(this, "clipboardHelper", "@mozilla.org/widget/clipboardhelper;1", "nsIClipboardHelper"); -XPCOMUtils.defineLazyModuleGetter(this, "Curl", - "resource:///modules/devtools/Curl.jsm"); - /** * Object defining the network monitor controller components. */ diff --git a/browser/devtools/netmonitor/netmonitor-view.js b/browser/devtools/netmonitor/netmonitor-view.js index 769e8f2ec602..261312c1ee18 100644 --- a/browser/devtools/netmonitor/netmonitor-view.js +++ b/browser/devtools/netmonitor/netmonitor-view.js @@ -523,37 +523,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { clipboardHelper.copyString(selected.url, document); }, - /** - * Copy a cURL command from the currently selected item. - */ - copyAsCurl: function() { - let selected = this.selectedItem.attachment; - Task.spawn(function*() { - // Create a sanitized object for the Curl command generator. - let data = { - url: selected.url, - method: selected.method, - headers: [], - httpVersion: selected.httpVersion, - postDataText: null - }; - - // Fetch header values. - for (let { name, value } of selected.requestHeaders.headers) { - let text = yield gNetwork.getString(value); - data.headers.push({ name: name, value: text }); - } - - // Fetch the request payload. - if (selected.requestPostData) { - let postData = selected.requestPostData.postData.text; - data.postDataText = yield gNetwork.getString(postData); - } - - clipboardHelper.copyString(Curl.generateCommand(data), document); - }); - }, - /** * Copy image as data uri. */ @@ -1591,9 +1560,6 @@ RequestsMenuView.prototype = Heritage.extend(WidgetMethods, { let copyUrlElement = $("#request-menu-context-copy-url"); copyUrlElement.hidden = !selectedItem; - let copyAsCurlElement = $("#request-menu-context-copy-as-curl"); - copyAsCurlElement.hidden = !selectedItem || !selectedItem.attachment.responseContent; - let copyImageAsDataUriElement = $("#request-menu-context-copy-image-as-data-uri"); copyImageAsDataUriElement.hidden = !selectedItem || !selectedItem.attachment.responseContent || diff --git a/browser/devtools/netmonitor/netmonitor.xul b/browser/devtools/netmonitor/netmonitor.xul index d91c9f22f709..484088ad4ea8 100644 --- a/browser/devtools/netmonitor/netmonitor.xul +++ b/browser/devtools/netmonitor/netmonitor.xul @@ -29,9 +29,6 @@ - diff --git a/browser/devtools/netmonitor/test/browser.ini b/browser/devtools/netmonitor/test/browser.ini index acc0a5714b54..7ba4ba489783 100644 --- a/browser/devtools/netmonitor/test/browser.ini +++ b/browser/devtools/netmonitor/test/browser.ini @@ -21,8 +21,6 @@ support-files = html_sorting-test-page.html html_statistics-test-page.html html_status-codes-test-page.html - html_copy-as-curl.html - html_curl-utils.html sjs_content-type-test-server.sjs sjs_simple-test-server.sjs sjs_sorting-test-server.sjs @@ -41,10 +39,8 @@ support-files = [browser_net_clear.js] [browser_net_complex-params.js] [browser_net_content-type.js] -[browser_net_curl-utils.js] [browser_net_copy_image_as_data_uri.js] [browser_net_copy_url.js] -[browser_net_copy_as_curl.js] [browser_net_cyrillic-01.js] [browser_net_cyrillic-02.js] [browser_net_filter-01.js] diff --git a/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js b/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js deleted file mode 100644 index 102e37a33b87..000000000000 --- a/browser/devtools/netmonitor/test/browser_net_copy_as_curl.js +++ /dev/null @@ -1,72 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Tests if Copy as cURL works. - */ - -function test() { - initNetMonitor(CURL_URL).then(([aTab, aDebuggee, aMonitor]) => { - info("Starting test... "); - - const EXPECTED_POSIX_RESULT = [ - "curl", - "'" + SIMPLE_SJS + "'", - "-H 'Host: example.com'", - "-H 'User-Agent: " + aDebuggee.navigator.userAgent + "'", - "-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'", - "-H 'Accept-Language: " + aDebuggee.navigator.language + "'", - "-H 'Accept-Encoding: gzip, deflate'", - "-H 'X-Custom-Header-1: Custom value'", - "-H 'X-Custom-Header-2: 8.8.8.8'", - "-H 'X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT'", - "-H 'Referer: " + CURL_URL + "'", - "-H 'Connection: keep-alive'" - ].join(" "); - - const EXPECTED_WIN_RESULT = [ - 'curl', - '"' + SIMPLE_SJS + '"', - '-H "Host: example.com"', - '-H "User-Agent: ' + aDebuggee.navigator.userAgent + '"', - '-H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"', - '-H "Accept-Language: ' + aDebuggee.navigator.language + '"', - '-H "Accept-Encoding: gzip, deflate"', - '-H "X-Custom-Header-1: Custom value"', - '-H "X-Custom-Header-2: 8.8.8.8"', - '-H "X-Custom-Header-3: Mon, 3 Mar 2014 11:11:11 GMT"', - '-H "Referer: ' + CURL_URL + '"', - '-H "Connection: keep-alive"' - ].join(" "); - - const EXPECTED_RESULT = Services.appinfo.OS == "WINNT" ? - EXPECTED_WIN_RESULT : EXPECTED_POSIX_RESULT; - - let { NetMonitorView } = aMonitor.panelWin; - let { RequestsMenu } = NetMonitorView; - - RequestsMenu.lazyUpdate = false; - - waitForNetworkEvents(aMonitor, 1).then(() => { - let requestItem = RequestsMenu.getItemAtIndex(0); - RequestsMenu.selectedItem = requestItem; - - waitForClipboard(EXPECTED_RESULT, function setup() { - RequestsMenu.copyAsCurl(); - }, function onSuccess() { - ok(true, "Clipboard contains a cURL command for the currently selected item's url."); - cleanUp(); - }, function onFailure() { - ok(false, "Creating a cURL command for the currently selected item was unsuccessful."); - cleanUp(); - }); - - }); - - aDebuggee.performRequest(SIMPLE_SJS); - - function cleanUp(){ - teardown(aMonitor).then(finish); - } - }); -} diff --git a/browser/devtools/netmonitor/test/browser_net_curl-utils.js b/browser/devtools/netmonitor/test/browser_net_curl-utils.js deleted file mode 100644 index cbb4389124b7..000000000000 --- a/browser/devtools/netmonitor/test/browser_net_curl-utils.js +++ /dev/null @@ -1,232 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Tests Curl Utils functionality. - */ - -function test() { - initNetMonitor(CURL_UTILS_URL).then(([aTab, aDebuggee, aMonitor]) => { - info("Starting test... "); - - let { NetMonitorView, gNetwork } = aMonitor.panelWin; - let { RequestsMenu } = NetMonitorView; - - RequestsMenu.lazyUpdate = false; - - waitForNetworkEvents(aMonitor, 1, 3).then(() => { - let requests = { - get: RequestsMenu.getItemAtIndex(0), - post: RequestsMenu.getItemAtIndex(1), - multipart: RequestsMenu.getItemAtIndex(2), - multipartForm: RequestsMenu.getItemAtIndex(3) - }; - - Task.spawn(function*() { - yield createCurlData(requests.get.attachment, gNetwork).then((aData) => { - test_findHeader(aData); - }); - - yield createCurlData(requests.post.attachment, gNetwork).then((aData) => { - test_isUrlEncodedRequest(aData); - test_writePostDataTextParams(aData); - }); - - yield createCurlData(requests.multipart.attachment, gNetwork).then((aData) => { - test_isMultipartRequest(aData); - test_getMultipartBoundary(aData); - test_removeBinaryDataFromMultipartText(aData); - }); - - yield createCurlData(requests.multipartForm.attachment, gNetwork).then((aData) => { - test_getHeadersFromMultipartText(aData); - }); - - if (Services.appinfo.OS != "WINNT") { - test_escapeStringPosix(); - } else { - test_escapeStringWin(); - } - - teardown(aMonitor).then(finish); - }); - }); - - aDebuggee.performRequests(SIMPLE_SJS); - }); -} - -function test_isUrlEncodedRequest(aData) { - let isUrlEncoded = CurlUtils.isUrlEncodedRequest(aData); - ok(isUrlEncoded, "Should return true for url encoded requests."); -} - -function test_isMultipartRequest(aData) { - let isMultipart = CurlUtils.isMultipartRequest(aData); - ok(isMultipart, "Should return true for multipart/form-data requests."); -} - -function test_findHeader(aData) { - let headers = aData.headers; - let hostName = CurlUtils.findHeader(headers, "Host"); - let requestedWithLowerCased = CurlUtils.findHeader(headers, "x-requested-with"); - let doesNotExist = CurlUtils.findHeader(headers, "X-Does-Not-Exist"); - - is(hostName, "example.com", - "Header with name 'Host' should be found in the request array."); - is(requestedWithLowerCased, "XMLHttpRequest", - "The search should be case insensitive."); - is(doesNotExist, null, - "Should return null when a header is not found."); -} - -function test_writePostDataTextParams(aData) { - let params = CurlUtils.writePostDataTextParams(aData.postDataText); - is(params, "param1=value1¶m2=value2¶m3=value3", - "Should return a serialized representation of the request parameters"); -} - -function test_getMultipartBoundary(aData) { - let boundary = CurlUtils.getMultipartBoundary(aData); - ok(/-{3,}\w+/.test(boundary), - "A boundary string should be found in a multipart request."); -} - -function test_removeBinaryDataFromMultipartText(aData) { - let generatedBoundary = CurlUtils.getMultipartBoundary(aData); - let text = aData.postDataText; - let binaryRemoved = - CurlUtils.removeBinaryDataFromMultipartText(text, generatedBoundary); - let boundary = "--" + generatedBoundary; - - const EXPECTED_POSIX_RESULT = [ - "$'", - boundary, - "\\r\\n\\r\\n", - "Content-Disposition: form-data; name=\"param1\"", - "\\r\\n\\r\\n", - "value1", - "\\r\\n", - boundary, - "\\r\\n\\r\\n", - "Content-Disposition: form-data; name=\"file\"; filename=\"filename.png\"", - "\\r\\n", - "Content-Type: image/png", - "\\r\\n\\r\\n", - generatedBoundary, - "--\\r\\n", - "'" - ].join(""); - - const EXPECTED_WIN_RESULT = [ - '"' + boundary + '"^', - '\u000d\u000A\u000d\u000A', - '"Content-Disposition: form-data; name=""param1"""^', - '\u000d\u000A\u000d\u000A', - '"value1"^', - '\u000d\u000A', - '"' + boundary + '"^', - '\u000d\u000A\u000d\u000A', - '"Content-Disposition: form-data; name=""file""; filename=""filename.png"""^', - '\u000d\u000A', - '"Content-Type: image/png"^', - '\u000d\u000A\u000d\u000A', - '"' + generatedBoundary + '--"^', - '\u000d\u000A', - '""' - ].join(""); - - if (Services.appinfo.OS != "WINNT") { - is(CurlUtils.escapeStringPosix(binaryRemoved), EXPECTED_POSIX_RESULT, - "The mulitpart request payload should not contain binary data."); - } else { - is(CurlUtils.escapeStringWin(binaryRemoved), EXPECTED_WIN_RESULT, - "WinNT: The mulitpart request payload should not contain binary data."); - } -} - -function test_getHeadersFromMultipartText(aData) { - let headers = CurlUtils.getHeadersFromMultipartText(aData.postDataText); - - ok(Array.isArray(headers), - "Should return an array."); - ok(headers.length > 0, - "There should exist at least one request header."); - is(headers[0].name, "Content-Type", - "The first header name should be 'Content-Type'."); -} - -function test_escapeStringPosix() { - let surroundedWithQuotes = "A simple string"; - is(CurlUtils.escapeStringPosix(surroundedWithQuotes), "'A simple string'", - "The string should be surrounded with single quotes."); - - let singleQuotes = "It's unusual to put crickets in your coffee."; - is(CurlUtils.escapeStringPosix(singleQuotes), - "$'It\\'s unusual to put crickets in your coffee.'", - "Single quotes should be escaped."); - - let newLines = "Line 1\r\nLine 2\u000d\u000ALine3"; - is(CurlUtils.escapeStringPosix(newLines), "$'Line 1\\r\\nLine 2\\r\\nLine3'", - "Newlines should be escaped."); - - let controlChars = "\u0007 \u0009 \u000C \u001B"; - is(CurlUtils.escapeStringPosix(controlChars), "$'\\x07 \\x09 \\x0c \\x1b'", - "Control characters should be escaped."); - - let extendedAsciiChars = "æ ø Ă¼ ĂŸ ö Ă©"; - is(CurlUtils.escapeStringPosix(extendedAsciiChars), - "$'\\xc3\\xa6 \\xc3\\xb8 \\xc3\\xbc \\xc3\\x9f \\xc3\\xb6 \\xc3\\xa9'", - "Character codes outside of the decimal range 32 - 126 should be escaped."); -} - -function test_escapeStringWin() { - let surroundedWithDoubleQuotes = "A simple string"; - is(CurlUtils.escapeStringWin(surroundedWithDoubleQuotes), '"A simple string"', - "The string should be surrounded with double quotes."); - - let doubleQuotes = "Quote: \"Time is an illusion. Lunchtime doubly so.\""; - is(CurlUtils.escapeStringWin(doubleQuotes), - '"Quote: ""Time is an illusion. Lunchtime doubly so."""', - "Double quotes should be escaped."); - - let percentSigns = "%AppData%"; - is(CurlUtils.escapeStringWin(percentSigns), '""%"AppData"%""', - "Percent signs should be escaped."); - - let backslashes = "\\A simple string\\"; - is(CurlUtils.escapeStringWin(backslashes), '"\\\\A simple string\\\\"', - "Backslashes should be escaped."); - - let newLines = "line1\r\nline2\r\nline3"; - is(CurlUtils.escapeStringWin(newLines), - '"line1"^\u000d\u000A"line2"^\u000d\u000A"line3"', - "Newlines should be escaped."); -} - -function createCurlData(aSelected, aNetwork) { - return Task.spawn(function*() { - // Create a sanitized object for the Curl command generator. - let data = { - url: aSelected.url, - method: aSelected.method, - headers: [], - httpVersion: aSelected.httpVersion, - postDataText: null - }; - - // Fetch header values. - for (let { name, value } of aSelected.requestHeaders.headers) { - let text = yield aNetwork.getString(value); - data.headers.push({ name: name, value: text }); - } - - // Fetch the request payload. - if (aSelected.requestPostData) { - let postData = aSelected.requestPostData.postData.text; - data.postDataText = yield aNetwork.getString(postData); - } - - return data; - }); -} \ No newline at end of file diff --git a/browser/devtools/netmonitor/test/head.js b/browser/devtools/netmonitor/test/head.js index 17fb59ba19c0..496cd7051ebd 100644 --- a/browser/devtools/netmonitor/test/head.js +++ b/browser/devtools/netmonitor/test/head.js @@ -9,7 +9,6 @@ let { Task } = Cu.import("resource://gre/modules/Task.jsm", {}); let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {}); let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); let { devtools } = Cu.import("resource://gre/modules/devtools/Loader.jsm", {}); -let { CurlUtils } = Cu.import("resource:///modules/devtools/Curl.jsm", {}); let TargetFactory = devtools.TargetFactory; let Toolbox = devtools.Toolbox; @@ -35,8 +34,6 @@ const FILTERING_URL = EXAMPLE_URL + "html_filter-test-page.html"; const INFINITE_GET_URL = EXAMPLE_URL + "html_infinite-get-page.html"; const CUSTOM_GET_URL = EXAMPLE_URL + "html_custom-get-page.html"; const STATISTICS_URL = EXAMPLE_URL + "html_statistics-test-page.html"; -const CURL_URL = EXAMPLE_URL + "html_copy-as-curl.html"; -const CURL_UTILS_URL = EXAMPLE_URL + "html_curl-utils.html"; const SIMPLE_SJS = EXAMPLE_URL + "sjs_simple-test-server.sjs"; const CONTENT_TYPE_SJS = EXAMPLE_URL + "sjs_content-type-test-server.sjs"; diff --git a/browser/devtools/netmonitor/test/html_copy-as-curl.html b/browser/devtools/netmonitor/test/html_copy-as-curl.html deleted file mode 100644 index 482d8cd630e3..000000000000 --- a/browser/devtools/netmonitor/test/html_copy-as-curl.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - Network Monitor test page - - - -

Performing a GET request

- - - - - diff --git a/browser/devtools/netmonitor/test/html_curl-utils.html b/browser/devtools/netmonitor/test/html_curl-utils.html deleted file mode 100644 index 466edcb9bb93..000000000000 --- a/browser/devtools/netmonitor/test/html_curl-utils.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - Network Monitor test page - - - -

Performing requests

- -

- -

- -
- -
- - - - -
- - - - - - diff --git a/browser/devtools/shared/Curl.jsm b/browser/devtools/shared/Curl.jsm deleted file mode 100644 index fc8bcbecaeaf..000000000000 --- a/browser/devtools/shared/Curl.jsm +++ /dev/null @@ -1,396 +0,0 @@ -/* -*- Mode: javascript; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/* - * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. - * Copyright (C) 2008, 2009 Anthony Ricaud - * Copyright (C) 2011 Google Inc. All rights reserved. - * Copyright (C) 2009 Mozilla Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of - * its contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -"use strict"; - -this.EXPORTED_SYMBOLS = ["Curl", "CurlUtils"]; - -Components.utils.import("resource://gre/modules/Services.jsm"); - -const DEFAULT_HTTP_VERSION = "HTTP/1.1"; - -this.Curl = { - /** - * Generates a cURL command string which can be used from the command line etc. - * - * @param object aData - * Datasource to create the command from. - * The object must contain the following properties: - * - url:string, the URL of the request. - * - method:string, the request method upper cased. HEAD / GET / POST etc. - * - headers:array, an array of request headers {name:x, value:x} tuples. - * - httpVersion:string, http protocol version rfc2616 formatted. Eg. "HTTP/1.1" - * - postDataText:string, optional - the request payload. - * - * @return string - * A cURL command. - */ - generateCommand: function(aData) { - let utils = CurlUtils; - - let command = ["curl"]; - let ignoredHeaders = new Set(); - - // The cURL command is expected to run on the same platform that Firefox runs - // (it may be different from the inspected page platform). - let escapeString = Services.appinfo.OS == "WINNT" ? - utils.escapeStringWin : utils.escapeStringPosix; - - // Add URL. - command.push(escapeString(aData.url)); - - let postDataText = null; - let multipartRequest = utils.isMultipartRequest(aData); - - // Create post data. - let data = []; - if (utils.isUrlEncodedRequest(aData) || aData.method == "PUT") { - postDataText = aData.postDataText; - data.push("--data"); - data.push(escapeString(utils.writePostDataTextParams(postDataText))); - ignoredHeaders.add("Content-Length"); - } else if (multipartRequest) { - postDataText = aData.postDataText; - data.push("--data-binary"); - let boundary = utils.getMultipartBoundary(aData); - let text = utils.removeBinaryDataFromMultipartText(postDataText, boundary); - data.push(escapeString(text)); - ignoredHeaders.add("Content-Length"); - } - - // Add method. - // For GET and POST requests this is not necessary as GET is the - // default. If --data or --binary is added POST is the default. - if (!(aData.method == "GET" || aData.method == "POST")) { - command.push("-X"); - command.push(aData.method); - } - - // Add -I (HEAD) - // For servers that supports HEAD. - // This will fetch the header of a document only. - if (aData.method == "HEAD") { - command.push("-I"); - } - - // Add http version. - if (aData.httpVersion && aData.httpVersion != DEFAULT_HTTP_VERSION) { - command.push("--" + aData.httpVersion.split("/")[1]); - } - - // Add request headers. - let headers = aData.headers; - if (multipartRequest) { - let multipartHeaders = utils.getHeadersFromMultipartText(postDataText); - headers = headers.concat(multipartHeaders); - } - for (let i = 0; i < headers.length; i++) { - let header = headers[i]; - if (ignoredHeaders.has(header.name)) { - continue; - } - command.push("-H"); - command.push(escapeString(header.name + ": " + header.value)); - } - - // Add post data. - command = command.concat(data); - - return command.join(" "); - } -}; - -/** - * Utility functions for the Curl command generator. - */ -this.CurlUtils = { - /** - * Check if the request is an URL encoded request. - * - * @param object aData - * The data source. See the description in the Curl object. - * @return boolean - * True if the request is URL encoded, false otherwise. - */ - isUrlEncodedRequest: function(aData) { - let postDataText = aData.postDataText; - if (!postDataText) { - return false; - } - - postDataText = postDataText.toLowerCase(); - if (postDataText.contains("content-type: application/x-www-form-urlencoded")) { - return true; - } - - let contentType = this.findHeader(aData.headers, "content-type"); - - return (contentType && - contentType.toLowerCase().contains("application/x-www-form-urlencoded")); - }, - - /** - * Check if the request is a multipart request. - * - * @param object aData - * The data source. - * @return boolean - * True if the request is multipart reqeust, false otherwise. - */ - isMultipartRequest: function(aData) { - let postDataText = aData.postDataText; - if (!postDataText) { - return false; - } - - postDataText = postDataText.toLowerCase(); - if (postDataText.contains("content-type: multipart/form-data")) { - return true; - } - - let contentType = this.findHeader(aData.headers, "content-type"); - - return (contentType && - contentType.toLowerCase().contains("multipart/form-data;")); - }, - - /** - * Write out paramters from post data text. - * - * @param object aPostDataText - * Post data text. - * @return string - * Post data parameters. - */ - writePostDataTextParams: function(aPostDataText) { - let lines = aPostDataText.split("\r\n"); - return lines[lines.length - 1]; - }, - - /** - * Finds the header with the given name in the headers array. - * - * @param array aHeaders - * Array of headers info {name:x, value:x}. - * @param string aName - * The header name to find. - * @return string - * The found header value or null if not found. - */ - findHeader: function(aHeaders, aName) { - if (!aHeaders) { - return null; - } - - let name = aName.toLowerCase(); - for (let header of aHeaders) { - if (name == header.name.toLowerCase()) { - return header.value; - } - } - - return null; - }, - - /** - * Returns the boundary string for a multipart request. - * - * @param string aData - * The data source. See the description in the Curl object. - * @return string - * The boundary string for the request. - */ - getMultipartBoundary: function(aData) { - let boundaryRe = /\bboundary=(-{3,}\w+)/i; - - // Get the boundary string from the Content-Type request header. - let contentType = this.findHeader(aData.headers, "Content-Type"); - if (boundaryRe.test(contentType)) { - return contentType.match(boundaryRe)[1]; - } - // Temporary workaround. As of 2014-03-11 the requestHeaders array does not - // always contain the Content-Type header for mulitpart requests. See bug 978144. - // Find the header from the request payload. - let boundaryString = aData.postDataText.match(boundaryRe)[1]; - if (boundaryString) { - return boundaryString; - } - - return null; - }, - - /** - * Removes the binary data from mulitpart text. - * - * @param string aMultipartText - * Multipart form data text. - * @param string aBoundary - * The boundary string. - * @return string - * The mulitpart text without the binary data. - */ - removeBinaryDataFromMultipartText: function(aMultipartText, aBoundary) { - let result = ""; - let boundary = "--" + aBoundary; - let parts = aMultipartText.split(boundary); - for (let part of parts) { - // Each part is expected to have a content disposition line. - let contentDispositionLine = part.trimLeft().split("\r\n")[0]; - if (!contentDispositionLine) { - continue; - } - contentDispositionLine = contentDispositionLine.toLowerCase(); - if (contentDispositionLine.contains("content-disposition: form-data")) { - if (contentDispositionLine.contains("filename=")) { - // The header lines and the binary blob is separated by 2 CRLF's. - // Add only the headers to the result. - let headers = part.split("\r\n\r\n")[0]; - result += boundary + "\r\n" + headers + "\r\n\r\n"; - } - else { - result += boundary + "\r\n" + part; - } - } - } - result += aBoundary + "--\r\n"; - - return result; - }, - - /** - * Get the headers from a multipart post data text. - * - * @param string aMultipartText - * Multipart post text. - * @return array - * An array of header objects {name:x, value:x} - */ - getHeadersFromMultipartText: function(aMultipartText) { - let headers = []; - if (!aMultipartText || aMultipartText.startsWith("---")) { - return headers; - } - - // Get the header section. - let index = aMultipartText.indexOf("\r\n\r\n"); - if (index == -1) { - return headers; - } - - // Parse the header lines. - let headersText = aMultipartText.substring(0, index); - let headerLines = headersText.split("\r\n"); - let lastHeaderName = null; - - for (let line of headerLines) { - // Create a header for each line in fields that spans across multiple lines. - // Subsquent lines always begins with at least one space or tab character. - // (rfc2616) - if (lastHeaderName && /^\s+/.test(line)) { - headers.push({ name: lastHeaderName, value: line.trim() }); - continue; - } - - let indexOfColon = line.indexOf(":"); - if (indexOfColon == -1) { - continue; - } - - let header = [line.slice(0, indexOfColon), line.slice(indexOfColon + 1)]; - if (header.length != 2) { - continue; - } - lastHeaderName = header[0].trim(); - headers.push({ name: lastHeaderName, value: header[1].trim() }); - } - - return headers; - }, - - /** - * Escape util function for POSIX oriented operating systems. - * Credit: Google DevTools - */ - escapeStringPosix: function(str) { - function escapeCharacter(x) { - let code = x.charCodeAt(0); - if (code < 256) { - // Add leading zero when needed to not care about the next character. - return code < 16 ? "\\x0" + code.toString(16) : "\\x" + code.toString(16); - } - code = code.toString(16); - return "\\u" + ("0000" + code).substr(code.length, 4); - } - - if (/[^\x20-\x7E]|\'/.test(str)) { - // Use ANSI-C quoting syntax. - return "$\'" + str.replace(/\\/g, "\\\\") - .replace(/\'/g, "\\\'") - .replace(/\n/g, "\\n") - .replace(/\r/g, "\\r") - .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'"; - } else { - // Use single quote syntax. - return "'" + str + "'"; - } - }, - - /** - * Escape util function for Windows systems. - * Credit: Google DevTools - */ - escapeStringWin: function(str) { - /* Replace quote by double quote (but not by \") because it is - recognized by both cmd.exe and MS Crt arguments parser. - - Replace % by "%" because it could be expanded to an environment - variable value. So %% becomes "%""%". Even if an env variable "" - (2 doublequotes) is declared, the cmd.exe will not - substitute it with its value. - - Replace each backslash with double backslash to make sure - MS Crt arguments parser won't collapse them. - - Replace new line outside of quotes since cmd.exe doesn't let - to do it inside. - */ - return "\"" + str.replace(/"/g, "\"\"") - .replace(/%/g, "\"%\"") - .replace(/\\/g, "\\\\") - .replace(/[\r\n]+/g, "\"^$&\"") + "\""; - } -}; \ No newline at end of file diff --git a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd index 71f7101967b5..79aa7149cb28 100644 --- a/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd +++ b/browser/locales/en-US/chrome/browser/devtools/netmonitor.dtd @@ -202,12 +202,6 @@ - on the context menu that copies the selected request's url --> - - - diff --git a/toolkit/components/osfile/modules/osfile_async_front.jsm b/toolkit/components/osfile/modules/osfile_async_front.jsm index aef1670c518e..6bd0d86e7694 100644 --- a/toolkit/components/osfile/modules/osfile_async_front.jsm +++ b/toolkit/components/osfile/modules/osfile_async_front.jsm @@ -135,47 +135,6 @@ for (let [constProp, dirKey] of [ */ let clone = SharedAll.clone; -/** - * Extract a shortened version of an object, fit for logging. - * - * This function returns a copy of the original object in which all - * long strings, Arrays, TypedArrays, ArrayBuffers are removed and - * replaced with plceholders. Use this function to sanitize objects - * if you wish to log them or to keep them in memory. - * - * @param {*} obj The obj to shorten. - * @return {*} array A shorter object, fit for logging. - */ -function summarizeObject(obj) { - if (!obj) { - return null; - } - if (typeof obj == "string") { - if (obj.length > 1024) { - return {"Long string": obj.length}; - } - return obj; - } - if (typeof obj == "object") { - if (Array.isArray(obj)) { - if (obj.length > 32) { - return {"Long array": obj.length}; - } - return [summarizeObject(k) for (k of obj)]; - } - if ("byteLength" in obj) { - // Assume TypedArray or ArrayBuffer - return {"Binary Data": obj.byteLength}; - } - let result = {}; - for (let k of Object.keys(obj)) { - result[k] = summarizeObject(obj[k]); - } - return result; - } - return obj; -} - let worker = null; let Scheduler = { /** @@ -198,41 +157,19 @@ let Scheduler = { queue: Promise.resolve(), /** - * Miscellaneous debugging information + * The latest message sent and still waiting for a reply. In DEBUG + * builds, the entire message is stored, which may be memory-consuming. + * In non-DEBUG builds, only the method name is stored. */ - Debugging: { - /** - * The latest message sent and still waiting for a reply. In DEBUG - * builds, the entire message is stored, which may be memory-consuming. - * In non-DEBUG builds, only the method name is stored. - */ - latestSent: undefined, + latestSent: undefined, - /** - * The latest reply received, or null if we are waiting for a reply. - * In DEBUG builds, the entire response is stored, which may be - * memory-consuming. In non-DEBUG builds, only exceptions and - * method names are stored. - */ - latestReceived: undefined, - - /** - * Number of messages sent to the worker. This includes the - * initial SET_DEBUG, if applicable. - */ - messagesSent: 0, - - /** - * Total number of messages ever queued, including the messages - * sent. - */ - messagesQueued: 0, - - /** - * Number of messages received from the worker. - */ - messagesReceived: 0, - }, + /** + * The latest reply received, or null if we are waiting for a reply. + * In DEBUG builds, the entire response is stored, which may be + * memory-consuming. In non-DEBUG builds, only exceptions and + * method names are stored. + */ + latestReceived: undefined, /** * A timer used to automatically shut down the worker after some time. @@ -297,7 +234,6 @@ let Scheduler = { if (firstLaunch && SharedAll.Config.DEBUG) { // If we have delayed sending SET_DEBUG, do it now. worker.post("SET_DEBUG", [true]); - Scheduler.Debugging.messagesSent++; } // By convention, the last argument of any message may be an |options| object. @@ -306,43 +242,41 @@ let Scheduler = { if (methodArgs) { options = methodArgs[methodArgs.length - 1]; } - Scheduler.Debugging.messagesQueued++; return this.push(() => Task.spawn(function*() { - // Update debugging information. As |args| may be quite - // expensive, we only keep a shortened version of it. - Scheduler.Debugging.latestReceived = null; - Scheduler.Debugging.latestSent = [Date.now(), method, summarizeObject(methodArgs)]; + Scheduler.latestReceived = null; + if (OS.Constants.Sys.DEBUG) { + // Update possibly memory-expensive debugging information + Scheduler.latestSent = [Date.now(), method, ...args]; + } else { + Scheduler.latestSent = [Date.now(), method]; + } let data; let reply; let isError = false; try { - try { - data = yield worker.post(method, ...args); - } finally { - Scheduler.Debugging.messagesReceived++; - } + data = yield worker.post(method, ...args); reply = data; - } catch (error) { + } catch (error if error instanceof PromiseWorker.WorkerError) { reply = error; isError = true; - if (error instanceof PromiseWorker.WorkerError) { - throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + } catch (error if error instanceof ErrorEvent) { + reply = error; + let message = error.message; + if (message == "uncaught exception: [object StopIteration]") { + throw StopIteration; } - if (error instanceof ErrorEvent) { - let message = error.message; - if (message == "uncaught exception: [object StopIteration]") { - isError = false; - throw StopIteration; - } - throw new Error(message, error.filename, error.lineno); - } - throw ex; + isError = true; + throw new Error(message, error.filename, error.lineno); } finally { - Scheduler.Debugging.latestSent = Scheduler.Debugging.latestSent.slice(0, 2); - if (isError) { - Scheduler.Debugging.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; + Scheduler.latestSent = Scheduler.latestSent.slice(0, 2); + if (OS.Constants.Sys.DEBUG) { + // Update possibly memory-expensive debugging information + Scheduler.latestReceived = [Date.now(), reply]; + } else if (isError) { + Scheduler.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; } else { - Scheduler.Debugging.latestReceived = [Date.now(), summarizeObject(reply)]; + Scheduler.latestReceived = [Date.now()]; } if (firstLaunch) { Scheduler._updateTelemetry(); @@ -1429,12 +1363,8 @@ AsyncShutdown.profileBeforeChange.addBlocker( shutdown: Scheduler.shutdown, worker: !!worker, pendingReset: !!Scheduler.resetTimer, - latestSent: Scheduler.Debugging.latestSent, - latestReceived: Scheduler.Debugging.latestReceived, - messagesSent: Scheduler.Debugging.messagesSent, - messagesReceived: Scheduler.Debugging.messagesReceived, - messagesQueued: Scheduler.Debugging.messagesQueued, - DEBUG: SharedAll.Config.DEBUG + latestSent: Scheduler.latestSent, + latestReceived: Scheduler.latestReceived }; // Convert dates to strings for better readability for (let key of ["latestSent", "latestReceived"]) { diff --git a/toolkit/devtools/client/dbg-client.jsm b/toolkit/devtools/client/dbg-client.jsm index 5bf90b96cfcb..5ffdd46636d5 100644 --- a/toolkit/devtools/client/dbg-client.jsm +++ b/toolkit/devtools/client/dbg-client.jsm @@ -28,8 +28,6 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/Timer.jsm"); -Cu.import("resource://gre/modules/devtools/Console.jsm"); - let promise = Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js").Promise; const { defer, resolve, reject } = promise; @@ -1409,28 +1407,17 @@ ThreadClient.prototype = { * @param function aOnResponse * Called with the thread's response. */ - setBreakpoint: function ({ url, line, column, condition }, aOnResponse) { + setBreakpoint: function (aLocation, aOnResponse) { // A helper function that sets the breakpoint. let doSetBreakpoint = function (aCallback) { - const location = { - url: url, - line: line, - column: column - }; - - let packet = { - to: this._actor, - type: "setBreakpoint", - location: location, - condition: condition - }; + let packet = { to: this._actor, type: "setBreakpoint", + location: aLocation }; this.client.request(packet, function (aResponse) { // Ignoring errors, since the user may be setting a breakpoint in a // dead script that will reappear on a page reload. if (aOnResponse) { - let bpClient = new BreakpointClient(this.client, - aResponse.actor, - location); + let bpClient = new BreakpointClient(this.client, aResponse.actor, + aLocation); if (aCallback) { aCallback(aOnResponse(aResponse, bpClient)); } else { diff --git a/toolkit/devtools/server/actors/root.js b/toolkit/devtools/server/actors/root.js index 07bb2a3bac80..4be5bbdbabe9 100644 --- a/toolkit/devtools/server/actors/root.js +++ b/toolkit/devtools/server/actors/root.js @@ -187,8 +187,6 @@ RootActor.prototype = { storageInspector: true, // Wether storage inspector is read only storageInspectorReadOnly: true, - // Wether conditional breakpoints are supported - conditionalBreakpoints: true } }; }, diff --git a/toolkit/devtools/server/actors/script.js b/toolkit/devtools/server/actors/script.js index 3175b5a0fb6b..841d3d47eca8 100644 --- a/toolkit/devtools/server/actors/script.js +++ b/toolkit/devtools/server/actors/script.js @@ -38,7 +38,7 @@ function BreakpointStore() { // // is an object // - // { url, line, column[, actor] } + // { url, line[, actor] } // // where the `actor` property is optional. this._breakpoints = Object.create(null); @@ -58,7 +58,6 @@ BreakpointStore.prototype = { * - line * - column (optional; omission implies that the breakpoint is for * the whole line) - * - condition (optional) * - actor (optional) */ addBreakpoint: function (aBreakpoint) { @@ -1375,8 +1374,7 @@ ThreadActor.prototype = { let response = this._createAndStoreBreakpoint({ url: url, line: line, - column: column, - condition: aRequest.condition + column: column }); // If the original location of our generated location is different from // the original location we attempted to set the breakpoint on, we will @@ -1444,13 +1442,11 @@ ThreadActor.prototype = { let storedBp = this.breakpointStore.getBreakpoint(aLocation); if (storedBp.actor) { actor = storedBp.actor; - actor.condition = aLocation.condition; } else { storedBp.actor = actor = new BreakpointActor(this, { url: aLocation.url, line: aLocation.line, - column: aLocation.column, - condition: aLocation.condition + column: aLocation.column }); this.threadLifetimePool.addActor(actor); } @@ -4225,17 +4221,15 @@ FrameActor.prototype.requestTypes = { * @param object aLocation * The location of the breakpoint as specified in the protocol. */ -function BreakpointActor(aThreadActor, { url, line, column, condition }) +function BreakpointActor(aThreadActor, aLocation) { this.scripts = []; this.threadActor = aThreadActor; - this.location = { url: url, line: line, column: column }; - this.condition = condition; + this.location = aLocation; } BreakpointActor.prototype = { actorPrefix: "breakpoint", - condition: null, /** * Called when this same breakpoint is added to another Debugger.Script @@ -4261,14 +4255,6 @@ BreakpointActor.prototype = { this.scripts = []; }, - isValidCondition: function(aFrame) { - if(!this.condition) { - return true; - } - var res = aFrame.eval(this.condition); - return res.return; - }, - /** * A function that the engine calls when a breakpoint has been hit. * @@ -4285,9 +4271,7 @@ BreakpointActor.prototype = { column: this.location.column })); - if (this.threadActor.sources.isBlackBoxed(url) - || aFrame.onStep - || !this.isValidCondition(aFrame)) { + if (this.threadActor.sources.isBlackBoxed(url) || aFrame.onStep) { return undefined; } diff --git a/toolkit/devtools/server/main.js b/toolkit/devtools/server/main.js index 699126240bf0..1fdca2634aa5 100644 --- a/toolkit/devtools/server/main.js +++ b/toolkit/devtools/server/main.js @@ -65,7 +65,6 @@ this.promised = promised; this.all = all; Cu.import("resource://gre/modules/devtools/SourceMap.jsm"); -Cu.import("resource://gre/modules/devtools/Console.jsm"); function dumpn(str) { if (wantLogging) { diff --git a/toolkit/devtools/server/tests/unit/head_dbg.js b/toolkit/devtools/server/tests/unit/head_dbg.js index 135ec33ef10e..69f0fbcc22a8 100644 --- a/toolkit/devtools/server/tests/unit/head_dbg.js +++ b/toolkit/devtools/server/tests/unit/head_dbg.js @@ -30,7 +30,6 @@ function tryImport(url) { tryImport("resource://gre/modules/devtools/dbg-server.jsm"); tryImport("resource://gre/modules/devtools/dbg-client.jsm"); tryImport("resource://gre/modules/devtools/Loader.jsm"); -tryImport("resource://gre/modules/devtools/Console.jsm"); function testExceptionHook(ex) { try { diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js deleted file mode 100644 index 3d229b50ea32..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-01.js +++ /dev/null @@ -1,61 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition evaluates to true. - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "a === 1" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "breakpoint"); - do_check_eq(aPacket.frame.where.line, 3); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - - }); - - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n", // 3 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js deleted file mode 100644 index f74cedc4e704..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-02.js +++ /dev/null @@ -1,60 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition evaluates to false. - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "a === 2" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "debuggerStatement"); - do_check_eq(aPacket.frame.where.line, 4); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - }); - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n" + // 3 - "debugger;", // 4 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js b/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js deleted file mode 100644 index c340a1cab30a..000000000000 --- a/toolkit/devtools/server/tests/unit/test_conditional_breakpoint-03.js +++ /dev/null @@ -1,62 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -/** - * Check conditional breakpoint when condition throws and make sure it is ignored - */ - -var gDebuggee; -var gClient; -var gThreadClient; - -function run_test() -{ - initTestDebuggerServer(); - gDebuggee = addTestGlobal("test-conditional-breakpoint"); - gClient = new DebuggerClient(DebuggerServer.connectPipe()); - gClient.connect(function () { - attachTestTabAndResume(gClient, "test-conditional-breakpoint", function (aResponse, aTabClient, aThreadClient) { - gThreadClient = aThreadClient; - test_simple_breakpoint(); - }); - }); - do_test_pending(); -} - -function test_simple_breakpoint() -{ - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - gThreadClient.setBreakpoint({ - url: "test.js", - line: 3, - condition: "throw new Error()" - }, function (aResponse, bpClient) { - gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket) { - // Check the return value. - do_check_eq(aPacket.why.type, "debuggerStatement"); - do_check_eq(aPacket.frame.where.line, 4); - - // Remove the breakpoint. - bpClient.remove(function (aResponse) { - gThreadClient.resume(function () { - finishClient(gClient); - }); - }); - - }); - // Continue until the breakpoint is hit. - gThreadClient.resume(); - - }); - - }); - - Components.utils.evalInSandbox("debugger;\n" + // 1 - "var a = 1;\n" + // 2 - "var b = 2;\n" + // 3 - "debugger;", // 4 - gDebuggee, - "1.8", - "test.js", - 1); -} diff --git a/toolkit/devtools/server/tests/unit/xpcshell.ini b/toolkit/devtools/server/tests/unit/xpcshell.ini index b7e548bd282f..8808865d1111 100644 --- a/toolkit/devtools/server/tests/unit/xpcshell.ini +++ b/toolkit/devtools/server/tests/unit/xpcshell.ini @@ -112,9 +112,6 @@ reason = bug 820380 [test_breakpoint-16.js] [test_breakpoint-17.js] [test_breakpoint-18.js] -[test_conditional_breakpoint-01.js] -[test_conditional_breakpoint-02.js] -[test_conditional_breakpoint-03.js] [test_eventlooplag_actor.js] run-if = toolkit == "gonk" [test_listsources-01.js] From 9c62d6f5f216be9c1b1cf7d390551a91e380cb78 Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Fri, 21 Mar 2014 11:45:30 -0400 Subject: [PATCH 11/21] Bug 986472 - Ensure that touch points fall inside the element bounds when being moved. r=wesj --- mobile/android/chrome/content/browser.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mobile/android/chrome/content/browser.js b/mobile/android/chrome/content/browser.js index 4692d39ae46b..7d99721e10e2 100644 --- a/mobile/android/chrome/content/browser.js +++ b/mobile/android/chrome/content/browser.js @@ -4742,8 +4742,8 @@ var BrowserEventHandler = { let rect = rects[0]; // if either width or height is zero, we don't want to move the click to the edge of the element. See bug 757208 if (rect.width != 0 && rect.height != 0) { - aX = Math.min(Math.floor(rect.left + rect.width), Math.max(Math.ceil(rect.left), aX)); - aY = Math.min(Math.floor(rect.top + rect.height), Math.max(Math.ceil(rect.top), aY)); + aX = Math.min(Math.ceil(rect.left + rect.width) - 1, Math.max(Math.ceil(rect.left), aX)); + aY = Math.min(Math.ceil(rect.top + rect.height) - 1, Math.max(Math.ceil(rect.top), aY)); } } } From db73971346ed849dfa3e8c614fb428f2dc5bed50 Mon Sep 17 00:00:00 2001 From: Gijs Kruitbosch Date: Sat, 22 Mar 2014 16:51:27 +0000 Subject: [PATCH 12/21] Bug 986515 - classic gradient leaks over other toolbars, r=jaws --HG-- extra : rebase_source : 262172896476159d99c253a5d1a7dc5e7ffb5ca4 --- browser/themes/windows/browser.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index da907486743e..06e2efa728c4 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -157,6 +157,11 @@ box-shadow: 0 0 50px 8px InactiveCaption; } + #main-window[tabsintitlebar]:not([sizemode=fullscreen]) toolbar[customindex]:not(:-moz-lwtheme), + #main-window[tabsintitlebar]:not([sizemode=fullscreen]) #PersonalToolbar:not(:-moz-lwtheme) { + position: relative; + } + /* Need to constrain the box shadow fade to avoid overlapping layers, see bug 886281. */ #main-window[tabsintitlebar]:not([sizemode=fullscreen]) #navigator-toolbox:not(:-moz-lwtheme) { overflow: -moz-hidden-unscrollable; From be7b444c2539c66a8bcbf500533601e62aa8f78d Mon Sep 17 00:00:00 2001 From: Mike de Boer Date: Fri, 21 Mar 2014 17:42:16 +0100 Subject: [PATCH 13/21] Bug 982770: restore sidebar splitter and header styles on Windows 8. r=jaws --- browser/themes/windows/browser-aero.css | 64 ++++++++++--------- .../themes/windows/places/organizer-aero.css | 22 ++++--- 2 files changed, 45 insertions(+), 41 deletions(-) diff --git a/browser/themes/windows/browser-aero.css b/browser/themes/windows/browser-aero.css index ffff4183ea99..b33951220572 100644 --- a/browser/themes/windows/browser-aero.css +++ b/browser/themes/windows/browser-aero.css @@ -21,6 +21,39 @@ } } +@media (-moz-windows-default-theme) { + .sidebar-header, + #sidebar-header { + -moz-appearance: none; + color: black; + background-color: #EEF3FA; + border-bottom: none; + text-shadow: none; + } + + .sidebar-title, + #sidebar-title { + font-weight: bold; + } + + .sidebar-splitter { + border: 0; + -moz-border-end: 1px solid #A9B7C9; + min-width: 0; + width: 3px; + background-color: transparent; + -moz-margin-start: -3px; + position: relative; + } + + #appcontent ~ .sidebar-splitter { + -moz-border-start: 1px solid #A9B7C9; + -moz-border-end: none; + -moz-margin-start: 0; + -moz-margin-end: -3px; + } +} + @media (-moz-windows-default-theme) and (-moz-os-version: windows-vista), (-moz-windows-default-theme) and (-moz-os-version: windows-win7) { #navigator-toolbox > toolbar:not(:-moz-lwtheme), @@ -52,37 +85,6 @@ border-color: hsla(206,100%,60%,.65) hsla(206,100%,55%,.65) hsla(206,100%,50%,.65); } - .sidebar-header, - #sidebar-header { - -moz-appearance: none; - color: black; - background-color: #EEF3FA; - border-bottom: none; - text-shadow: none; - } - - .sidebar-title, - #sidebar-title { - font-weight: bold; - } - - .sidebar-splitter { - border: 0; - -moz-border-end: 1px solid #A9B7C9; - min-width: 0; - width: 3px; - background-color: transparent; - -moz-margin-start: -3px; - position: relative; - } - - #appcontent ~ .sidebar-splitter { - -moz-border-start: 1px solid #A9B7C9; - -moz-border-end: none; - -moz-margin-start: 0; - -moz-margin-end: -3px; - } - .menu-accel, .menu-iconic-accel { color: graytext; diff --git a/browser/themes/windows/places/organizer-aero.css b/browser/themes/windows/places/organizer-aero.css index 2e4316fa94c6..99d490e176da 100644 --- a/browser/themes/windows/places/organizer-aero.css +++ b/browser/themes/windows/places/organizer-aero.css @@ -36,6 +36,18 @@ } } +@media (-moz-windows-default-theme) { + #placesView > splitter { + border: 0; + -moz-border-end: 1px solid #A9B7C9; + min-width: 0; + width: 3px; + background-color: transparent; + -moz-margin-start: -3px; + position: relative; + } +} + @media (-moz-windows-default-theme) and (-moz-os-version: windows-vista), (-moz-windows-default-theme) and (-moz-os-version: windows-win7) { #placesView, @@ -50,16 +62,6 @@ color: black; } - #placesView > splitter { - border: 0; - -moz-border-end: 1px solid #A9B7C9; - min-width: 0; - width: 3px; - background-color: transparent; - -moz-margin-start: -3px; - position: relative; - } - #detailsDeck { border-top-color: #A9B7C9; } From 97c34ce81e7c09e27d87bbdccdf80a8f598b4fee Mon Sep 17 00:00:00 2001 From: Gavin Sharp Date: Fri, 21 Mar 2014 10:01:09 -0700 Subject: [PATCH 14/21] Bug 976002: followup comment fix --HG-- extra : rebase_source : 51567c379574539b32e386b7a03558b87d36d87f --- configure.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure.in b/configure.in index f106521f4487..ecf7a9fee336 100644 --- a/configure.in +++ b/configure.in @@ -7463,7 +7463,7 @@ fi AC_SUBST(MOZ_AUDIO_CHANNEL_MANAGER) dnl ======================================================== -dnl = Enable Support for Firefox Accounts in B2G +dnl = Enable Support for Firefox Accounts (services/fxaccounts) dnl ======================================================== if test -n "$MOZ_SERVICES_FXACCOUNTS"; then AC_DEFINE(MOZ_SERVICES_FXACCOUNTS) From 1b5f5e3e5b26a0053c16fbec3b34a150ab0cf033 Mon Sep 17 00:00:00 2001 From: David Rajchenbach-Teller Date: Fri, 21 Mar 2014 13:44:58 -0400 Subject: [PATCH 15/21] Bug 965527 - More and more logging for OS.File AsyncShutdown. r=froydnj --- .../osfile/modules/osfile_async_front.jsm | 143 +++++++++++++----- 1 file changed, 104 insertions(+), 39 deletions(-) diff --git a/toolkit/components/osfile/modules/osfile_async_front.jsm b/toolkit/components/osfile/modules/osfile_async_front.jsm index 2f825cdaf8e0..940bf9dffb2f 100644 --- a/toolkit/components/osfile/modules/osfile_async_front.jsm +++ b/toolkit/components/osfile/modules/osfile_async_front.jsm @@ -135,6 +135,47 @@ for (let [constProp, dirKey] of [ */ let clone = SharedAll.clone; +/** + * Extract a shortened version of an object, fit for logging. + * + * This function returns a copy of the original object in which all + * long strings, Arrays, TypedArrays, ArrayBuffers are removed and + * replaced with placeholders. Use this function to sanitize objects + * if you wish to log them or to keep them in memory. + * + * @param {*} obj The obj to shorten. + * @return {*} array A shorter object, fit for logging. + */ +function summarizeObject(obj) { + if (!obj) { + return null; + } + if (typeof obj == "string") { + if (obj.length > 1024) { + return {"Long string": obj.length}; + } + return obj; + } + if (typeof obj == "object") { + if (Array.isArray(obj)) { + if (obj.length > 32) { + return {"Long array": obj.length}; + } + return [summarizeObject(k) for (k of obj)]; + } + if ("byteLength" in obj) { + // Assume TypedArray or ArrayBuffer + return {"Binary Data": obj.byteLength}; + } + let result = {}; + for (let k of Object.keys(obj)) { + result[k] = summarizeObject(obj[k]); + } + return result; + } + return obj; +} + let worker = null; let Scheduler = { /** @@ -157,19 +198,36 @@ let Scheduler = { queue: Promise.resolve(), /** - * The latest message sent and still waiting for a reply. In DEBUG - * builds, the entire message is stored, which may be memory-consuming. - * In non-DEBUG builds, only the method name is stored. + * Miscellaneous debugging information */ - latestSent: undefined, + Debugging: { + /** + * The latest message sent and still waiting for a reply. + */ + latestSent: undefined, - /** - * The latest reply received, or null if we are waiting for a reply. - * In DEBUG builds, the entire response is stored, which may be - * memory-consuming. In non-DEBUG builds, only exceptions and - * method names are stored. - */ - latestReceived: undefined, + /** + * The latest reply received, or null if we are waiting for a reply. + */ + latestReceived: undefined, + + /** + * Number of messages sent to the worker. This includes the + * initial SET_DEBUG, if applicable. + */ + messagesSent: 0, + + /** + * Total number of messages ever queued, including the messages + * sent. + */ + messagesQueued: 0, + + /** + * Number of messages received from the worker. + */ + messagesReceived: 0, + }, /** * A timer used to automatically shut down the worker after some time. @@ -234,6 +292,7 @@ let Scheduler = { if (firstLaunch && SharedAll.Config.DEBUG) { // If we have delayed sending SET_DEBUG, do it now. worker.post("SET_DEBUG", [true]); + Scheduler.Debugging.messagesSent++; } // By convention, the last argument of any message may be an |options| object. @@ -242,41 +301,43 @@ let Scheduler = { if (methodArgs) { options = methodArgs[methodArgs.length - 1]; } + Scheduler.Debugging.messagesQueued++; return this.push(() => Task.spawn(function*() { - Scheduler.latestReceived = null; - if (OS.Constants.Sys.DEBUG) { - // Update possibly memory-expensive debugging information - Scheduler.latestSent = [Date.now(), method, ...args]; - } else { - Scheduler.latestSent = [Date.now(), method]; - } + // Update debugging information. As |args| may be quite + // expensive, we only keep a shortened version of it. + Scheduler.Debugging.latestReceived = null; + Scheduler.Debugging.latestSent = [Date.now(), method, summarizeObject(methodArgs)]; let data; let reply; let isError = false; try { - data = yield worker.post(method, ...args); - reply = data; - } catch (error if error instanceof PromiseWorker.WorkerError) { - reply = error; - isError = true; - throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); - } catch (error if error instanceof ErrorEvent) { - reply = error; - let message = error.message; - if (message == "uncaught exception: [object StopIteration]") { - throw StopIteration; + try { + data = yield worker.post(method, ...args); + } finally { + Scheduler.Debugging.messagesReceived++; } + reply = data; + } catch (error) { + reply = error; isError = true; - throw new Error(message, error.filename, error.lineno); + if (error instanceof PromiseWorker.WorkerError) { + throw EXCEPTION_CONSTRUCTORS[error.data.exn || "OSError"](error.data); + } + if (error instanceof ErrorEvent) { + let message = error.message; + if (message == "uncaught exception: [object StopIteration]") { + isError = false; + throw StopIteration; + } + throw new Error(message, error.filename, error.lineno); + } + throw error; } finally { - Scheduler.latestSent = Scheduler.latestSent.slice(0, 2); - if (OS.Constants.Sys.DEBUG) { - // Update possibly memory-expensive debugging information - Scheduler.latestReceived = [Date.now(), reply]; - } else if (isError) { - Scheduler.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; + Scheduler.Debugging.latestSent = Scheduler.Debugging.latestSent.slice(0, 2); + if (isError) { + Scheduler.Debugging.latestReceived = [Date.now(), reply.message, reply.fileName, reply.lineNumber]; } else { - Scheduler.latestReceived = [Date.now()]; + Scheduler.Debugging.latestReceived = [Date.now(), summarizeObject(reply)]; } if (firstLaunch) { Scheduler._updateTelemetry(); @@ -1381,8 +1442,12 @@ AsyncShutdown.profileBeforeChange.addBlocker( shutdown: Scheduler.shutdown, worker: !!worker, pendingReset: !!Scheduler.resetTimer, - latestSent: Scheduler.latestSent, - latestReceived: Scheduler.latestReceived + latestSent: Scheduler.Debugging.latestSent, + latestReceived: Scheduler.Debugging.latestReceived, + messagesSent: Scheduler.Debugging.messagesSent, + messagesReceived: Scheduler.Debugging.messagesReceived, + messagesQueued: Scheduler.Debugging.messagesQueued, + DEBUG: SharedAll.Config.DEBUG }; // Convert dates to strings for better readability for (let key of ["latestSent", "latestReceived"]) { From 8e3a90b7bfe115b1edbd97b6c2becdc849778fe9 Mon Sep 17 00:00:00 2001 From: Jim Chen Date: Fri, 21 Mar 2014 13:44:59 -0400 Subject: [PATCH 16/21] Bug 984463 - Update GeckoEditableListener constants to match IMEMessage constants. r=masayuki --- mobile/android/base/GeckoEditable.java | 4 ++-- widget/nsIWidget.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/mobile/android/base/GeckoEditable.java b/mobile/android/base/GeckoEditable.java index aff8aa08e835..1b91eb4b9b82 100644 --- a/mobile/android/base/GeckoEditable.java +++ b/mobile/android/base/GeckoEditable.java @@ -53,8 +53,8 @@ interface GeckoEditableListener { final int NOTIFY_IME_REPLY_EVENT = -1; final int NOTIFY_IME_OF_FOCUS = 1; final int NOTIFY_IME_OF_BLUR = 2; - final int NOTIFY_IME_TO_COMMIT_COMPOSITION = 4; - final int NOTIFY_IME_TO_CANCEL_COMPOSITION = 5; + final int NOTIFY_IME_TO_COMMIT_COMPOSITION = 7; + final int NOTIFY_IME_TO_CANCEL_COMPOSITION = 8; // IME enabled state for notifyIMEContext() final int IME_STATE_DISABLED = 0; final int IME_STATE_ENABLED = 1; diff --git a/widget/nsIWidget.h b/widget/nsIWidget.h index dc954b999f13..022fe0f3293d 100644 --- a/widget/nsIWidget.h +++ b/widget/nsIWidget.h @@ -482,6 +482,7 @@ struct SizeConstraints { }; // IMEMessage is shared by IMEStateManager and TextComposition. +// Update values in GeckoEditable.java if you make changes here. // XXX Negative values are used in Android... enum IMEMessage MOZ_ENUM_TYPE(int8_t) { From 791e1b429bff3fb9b7a2b27e1b8e795cbe5d1dd9 Mon Sep 17 00:00:00 2001 From: Irving Reid Date: Thu, 20 Mar 2014 13:41:42 -0400 Subject: [PATCH 17/21] Bug 986000 - Fix addonsListTmp undefined error in XPIProviderUtils.js. r=Mossop --- toolkit/mozapps/extensions/internal/XPIProviderUtils.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/toolkit/mozapps/extensions/internal/XPIProviderUtils.js b/toolkit/mozapps/extensions/internal/XPIProviderUtils.js index f4db5911cc93..5a59a8ae2589 100644 --- a/toolkit/mozapps/extensions/internal/XPIProviderUtils.js +++ b/toolkit/mozapps/extensions/internal/XPIProviderUtils.js @@ -1482,8 +1482,7 @@ this.XPIDatabase = { Services.prefs.setCharPref(PREF_EM_ENABLED_ADDONS, enabledAddons.join(",")); } catch (e) { - logger.error("Failed to write add-ons list to " + addonsListTmp.parent + "/" + - FILE_XPI_ADDONS_LIST, e); + logger.error("Failed to write add-ons list to profile directory", e); return false; } } From a815232c1c423913509a3ed97450d1a8982c8a74 Mon Sep 17 00:00:00 2001 From: Irving Reid Date: Thu, 20 Mar 2014 14:43:56 -0400 Subject: [PATCH 18/21] Bug 986080 - Return empty array if getting directory entries fails. r=Mossop --- toolkit/mozapps/extensions/internal/XPIProvider.jsm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/toolkit/mozapps/extensions/internal/XPIProvider.jsm b/toolkit/mozapps/extensions/internal/XPIProvider.jsm index 30cc53eeef91..5f7c0053ad27 100644 --- a/toolkit/mozapps/extensions/internal/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -1321,7 +1321,7 @@ function recursiveLastModifiedTime(aFile) { * Directory to look at * @param aSortEntries * True to sort entries by filename - * @return An array of nsIFile, or null if aDir is not a readable directory + * @return An array of nsIFile, or an empty array if aDir is not a readable directory */ function getDirectoryEntries(aDir, aSortEntries) { let dirEnum; @@ -1340,10 +1340,13 @@ function getDirectoryEntries(aDir, aSortEntries) { return entries } catch (e) { - return null; + logger.warn("Can't iterate directory " + aDir.path, e); + return []; } finally { - dirEnum.close(); + if (dirEnum) { + dirEnum.close(); + } } } From 9e742dea43ec1df19086e35ba0b2d8f607368427 Mon Sep 17 00:00:00 2001 From: Blake Winton Date: Fri, 21 Mar 2014 13:44:59 -0400 Subject: [PATCH 19/21] Bug 986529 - Invert tab close icon on Windows classic theme. r=jaws, ui-r=shorlander --- toolkit/themes/windows/global/global.css | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/toolkit/themes/windows/global/global.css b/toolkit/themes/windows/global/global.css index 8c551d0fe77e..6babec4369ee 100644 --- a/toolkit/themes/windows/global/global.css +++ b/toolkit/themes/windows/global/global.css @@ -337,6 +337,10 @@ label[disabled="true"]:-moz-system-metric(windows-classic) { -moz-image-region: rect(0, 48px, 16px, 32px); } +.close-icon:-moz-system-metric(windows-classic):not(:-moz-lwtheme):not(:hover):not([selected=true]) { + -moz-image-region: rect(0, 64px, 16px, 48px); +} + %ifdef XP_WIN @media (-moz-windows-theme: luna-blue) { .close-icon { From 8861e06a058a02d97d60d7f30fee37a2d2b6e9d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20Qu=C3=A8ze?= Date: Fri, 21 Mar 2014 19:07:38 +0100 Subject: [PATCH 20/21] Bug 979424 - Implement structure and state switching for translation infobar, r=felipe. --- browser/base/content/browser.css | 6 + browser/components/translation/jar.mn | 5 + browser/components/translation/moz.build | 6 + .../components/translation/test/browser.ini | 3 + .../test/browser_translation_infobar.js | 155 ++++++++++++++ .../translation/translation-infobar.xml | 196 ++++++++++++++++++ .../en-US/chrome/browser/translation.dtd | 20 ++ browser/locales/jar.mn | 1 + 8 files changed, 392 insertions(+) create mode 100644 browser/components/translation/jar.mn create mode 100644 browser/components/translation/test/browser.ini create mode 100644 browser/components/translation/test/browser_translation_infobar.js create mode 100644 browser/components/translation/translation-infobar.xml create mode 100644 browser/locales/en-US/chrome/browser/translation.dtd diff --git a/browser/base/content/browser.css b/browser/base/content/browser.css index 986ca9a241d6..8fabdee9214f 100644 --- a/browser/base/content/browser.css +++ b/browser/base/content/browser.css @@ -793,6 +793,12 @@ panelview > .social-panel-frame { height: auto; } +/* Translation */ +notification[value="translation"] { + -moz-binding: url("chrome://browser/content/translation-infobar.xml#translationbar"); +} + +/* Social */ /* Note the chatbox 'width' values are duplicated in socialchat.xml */ chatbox { -moz-binding: url("chrome://browser/content/socialchat.xml#chatbox"); diff --git a/browser/components/translation/jar.mn b/browser/components/translation/jar.mn new file mode 100644 index 000000000000..c5e322ffcd61 --- /dev/null +++ b/browser/components/translation/jar.mn @@ -0,0 +1,5 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +browser.jar: + content/browser/translation-infobar.xml diff --git a/browser/components/translation/moz.build b/browser/components/translation/moz.build index 906a12aad9d6..b71a897e8e37 100644 --- a/browser/components/translation/moz.build +++ b/browser/components/translation/moz.build @@ -10,6 +10,12 @@ EXTRA_JS_MODULES = [ 'LanguageDetector.jsm' ] +JAR_MANIFESTS += ['jar.mn'] + +BROWSER_CHROME_MANIFESTS += [ + 'test/browser.ini' +] + XPCSHELL_TESTS_MANIFESTS += [ 'test/xpcshell.ini' ] diff --git a/browser/components/translation/test/browser.ini b/browser/components/translation/test/browser.ini new file mode 100644 index 000000000000..c4da3ad4bf70 --- /dev/null +++ b/browser/components/translation/test/browser.ini @@ -0,0 +1,3 @@ +[DEFAULT] + +[browser_translation_infobar.js] diff --git a/browser/components/translation/test/browser_translation_infobar.js b/browser/components/translation/test/browser_translation_infobar.js new file mode 100644 index 000000000000..adaf45a7918f --- /dev/null +++ b/browser/components/translation/test/browser_translation_infobar.js @@ -0,0 +1,155 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +// tests the translation infobar, using a fake 'Translation' implementation. + +var Translation = { + supportedSourceLanguages: ["en", "zh", "ja", "es", "de", "fr", "ru", "ar", "ko", "pt"], + supportedTargetLanguages: ["en", "pl", "tr", "vi"], + defaultTargetLanguage: "en", + + _translateFrom: "", + _translateTo: "", + _deferred: null, + translate: function(aFrom, aTo) { + this._translateFrom = aFrom; + this._translateTo = aTo; + this._deferred = Promise.defer(); + return this._deferred.promise; + }, + + _reset: function() { + this._translateFrom = ""; + this._translateTo = ""; + this._deferred = null; + }, + + failTranslation: function() { + this._deferred.reject(); + this._reset(); + }, + + finishTranslation: function() { + this._deferred.resolve(); + this._reset(); + }, + + _showOriginalCalled: false, + showOriginalContent: function() { + this._showOriginalCalled = true; + }, + + _showTranslationCalled: false, + showTranslatedContent: function() { + this._showTranslationCalled = true; + }, + + showTranslationUI: function(aLanguage) { + let notificationBox = gBrowser.getNotificationBox(); + let notif = notificationBox.appendNotification("", "translation", null, + notificationBox.PRIORITY_INFO_HIGH); + notif.init(this); + notif.detectedLanguage = aLanguage; + return notif; + } +}; + +function test() { + waitForExplicitFinish(); + + // Show an info bar saying the current page is in French + let notif = Translation.showTranslationUI("fr"); + is(notif.state, notif.STATE_OFFER, "the infobar is offering translation"); + is(notif._getAnonElt("detectedLanguage").value, "fr", "The detected language is displayed"); + + // Click the "Translate" button + notif._getAnonElt("translate").click(); + is(notif.state, notif.STATE_TRANSLATING, "the infobar is in the translating state"); + ok(!!Translation._deferred, "Translation.translate has been called"); + is(Translation._translateFrom, "fr", "from language correct"); + is(Translation._translateTo, Translation.defaultTargetLanguage, "from language correct"); + + // Make the translation fail and check we are in the error state. + Translation.failTranslation(); + is(notif.state, notif.STATE_ERROR, "infobar in the error state"); + + // Click the try again button + notif._getAnonElt("tryAgain").click(); + is(notif.state, notif.STATE_TRANSLATING, "infobar in the translating state"); + ok(!!Translation._deferred, "Translation.translate has been called"); + is(Translation._translateFrom, "fr", "from language correct"); + is(Translation._translateTo, Translation.defaultTargetLanguage, "to language correct"); + + // Make the translation succeed and check we are in the 'translated' state. + Translation.finishTranslation(); + is(notif.state, notif.STATE_TRANSLATED, "infobar in the translated state"); + + // Test 'Show Original' / 'Show Translation' buttons. + // First check 'Show Original' is visible and 'Show Translation' is hidden. + ok(!notif._getAnonElt("showOriginal").hidden, "'Show Original' button visible"); + ok(notif._getAnonElt("showTranslation").hidden, "'Show Translation' button hidden"); + // Click the button. + notif._getAnonElt("showOriginal").click(); + // Check the correct function has been called. + ok(Translation._showOriginalCalled, "'Translation.showOriginalContent' called") + ok(!Translation._showTranslationCalled, "'Translation.showTranslatedContent' not called") + Translation._showOriginalCalled = false; + // And the 'Show Translation' button is now visible. + ok(notif._getAnonElt("showOriginal").hidden, "'Show Original' button hidden"); + ok(!notif._getAnonElt("showTranslation").hidden, "'Show Translation' button visible"); + // Click the 'Show Translation' button + notif._getAnonElt("showTranslation").click(); + // Check the correct function has been called. + ok(!Translation._showOriginalCalled, "'Translation.showOriginalContent' not called") + ok(Translation._showTranslationCalled, "'Translation.showTranslatedContent' called") + Translation._showTranslationCalled = false; + // Check that the 'Show Original' button is visible again. + ok(!notif._getAnonElt("showOriginal").hidden, "'Show Original' button visible"); + ok(notif._getAnonElt("showTranslation").hidden, "'Show Translation' button hidden"); + + // Check that changing the source language causes a re-translation + let from = notif._getAnonElt("fromLanguage"); + from.value = "es"; + from.doCommand(); + is(notif.state, notif.STATE_TRANSLATING, "infobar in the translating state"); + ok(!!Translation._deferred, "Translation.translate has been called"); + is(Translation._translateFrom, "es", "from language correct"); + is(Translation._translateTo, Translation.defaultTargetLanguage, "to language correct"); + Translation.finishTranslation(); + + // Check that changing the target language causes a re-translation + let to = notif._getAnonElt("toLanguage"); + to.value = "pl"; + to.doCommand(); + is(notif.state, notif.STATE_TRANSLATING, "infobar in the translating state"); + ok(!!Translation._deferred, "Translation.translate has been called"); + is(Translation._translateFrom, "es", "from language correct"); + is(Translation._translateTo, "pl", "to language correct"); + Translation.finishTranslation(); + + // Cleanup. + notif.close(); + + // Reopen the info bar to check that it's possible to override the detected language. + notif = Translation.showTranslationUI("fr"); + is(notif.state, notif.STATE_OFFER, "the infobar is offering translation"); + is(notif._getAnonElt("detectedLanguage").value, "fr", "The detected language is displayed"); + // Change the language and click 'Translate' + notif._getAnonElt("detectedLanguage").value = "ja"; + notif._getAnonElt("translate").click(); + is(notif.state, notif.STATE_TRANSLATING, "the infobar is in the translating state"); + ok(!!Translation._deferred, "Translation.translate has been called"); + is(Translation._translateFrom, "ja", "from language correct"); + notif.close(); + + // Reopen one last time to check the 'Not Now' button closes the notification. + notif = Translation.showTranslationUI("fr"); + + let notificationBox = gBrowser.getNotificationBox(); + ok(!!notificationBox.getNotificationWithValue("translation"), "there's a 'translate' notification"); + notif._getAnonElt("notNow").click(); + ok(!notificationBox.getNotificationWithValue("translation"), "no 'translate' notification after clicking 'not now'"); + + finish(); +} diff --git a/browser/components/translation/translation-infobar.xml b/browser/components/translation/translation-infobar.xml new file mode 100644 index 000000000000..4ff827463ab2 --- /dev/null +++ b/browser/components/translation/translation-infobar.xml @@ -0,0 +1,196 @@ + + + + +%notificationDTD; + +%translationDTD; +]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 1 + 2 + 3 + + + + + + + + + + + + + + + return document.getAnonymousElementByAttribute(this, "anonid", aAnonId); + + + + + "" + + + + + + + { this.state = this.STATE_TRANSLATED; }, + () => { this.state = this.STATE_ERROR; }); + ]]> + + + + + + + + + + + + + + + + + + diff --git a/browser/locales/en-US/chrome/browser/translation.dtd b/browser/locales/en-US/chrome/browser/translation.dtd new file mode 100644 index 000000000000..89207801d111 --- /dev/null +++ b/browser/locales/en-US/chrome/browser/translation.dtd @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + diff --git a/browser/locales/jar.mn b/browser/locales/jar.mn index b7b2c7f4ec97..71a194d3460c 100644 --- a/browser/locales/jar.mn +++ b/browser/locales/jar.mn @@ -76,6 +76,7 @@ locale/browser/tabbrowser.properties (%chrome/browser/tabbrowser.properties) locale/browser/tabview.properties (%chrome/browser/tabview.properties) locale/browser/taskbar.properties (%chrome/browser/taskbar.properties) + locale/browser/translation.dtd (%chrome/browser/translation.dtd) locale/browser/downloads/downloads.dtd (%chrome/browser/downloads/downloads.dtd) locale/browser/downloads/downloads.properties (%chrome/browser/downloads/downloads.properties) locale/browser/places/places.dtd (%chrome/browser/places/places.dtd) From 24af39cd7458f80ffecd049909663d77adcb3b90 Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Fri, 21 Mar 2014 14:56:30 -0400 Subject: [PATCH 21/21] Backed out changeset 675945ee2609 (bug 986529) --- toolkit/themes/windows/global/global.css | 4 ---- 1 file changed, 4 deletions(-) diff --git a/toolkit/themes/windows/global/global.css b/toolkit/themes/windows/global/global.css index 6babec4369ee..8c551d0fe77e 100644 --- a/toolkit/themes/windows/global/global.css +++ b/toolkit/themes/windows/global/global.css @@ -337,10 +337,6 @@ label[disabled="true"]:-moz-system-metric(windows-classic) { -moz-image-region: rect(0, 48px, 16px, 32px); } -.close-icon:-moz-system-metric(windows-classic):not(:-moz-lwtheme):not(:hover):not([selected=true]) { - -moz-image-region: rect(0, 64px, 16px, 48px); -} - %ifdef XP_WIN @media (-moz-windows-theme: luna-blue) { .close-icon {

5eM) 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 literal 0 HcmV?d00001 diff --git a/browser/themes/osx/syncProgress-toolbar.png b/browser/themes/osx/syncProgress-toolbar.png new file mode 100644 index 0000000000000000000000000000000000000000..49e224f0d9c0e3f596566ef86d27281caeeafc86 GIT binary patch literal 13293 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 G|Nj7-Q*>Ye literal 0 HcmV?d00001 diff --git a/browser/themes/osx/syncProgress-toolbar@2x.png b/browser/themes/osx/syncProgress-toolbar@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd203872564dc72b89b85431b205a7a3e2689b1f GIT binary patch literal 33662 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:jXP%tnQ^|B(G-ubX$scX8|nX{eCv7olN^ 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 Rn-hW344$rjF6*2UngH`@yYB!1 literal 0 HcmV?d00001 diff --git a/browser/themes/shared/menupanel.inc.css b/browser/themes/shared/menupanel.inc.css index 06570363a865..9cb57c06c326 100644 --- a/browser/themes/shared/menupanel.inc.css +++ b/browser/themes/shared/menupanel.inc.css @@ -54,6 +54,11 @@ toolbarpaletteitem[place="palette"] > #sync-button { -moz-image-region: rect(0px, 384px, 32px, 352px); } +#sync-button[cui-areatype="menu-panel"][status="active"] { + list-style-image: url(chrome://browser/skin/syncProgress-menuPanel.png); + -moz-image-region: rect(0px, 32px, 32px, 0px); +} + #feed-button[cui-areatype="menu-panel"], toolbarpaletteitem[place="palette"] > #feed-button { -moz-image-region: rect(0px, 416px, 32px, 384px); diff --git a/browser/themes/shared/toolbarbuttons.inc.css b/browser/themes/shared/toolbarbuttons.inc.css index 73ac418ae4d2..a471a3138036 100644 --- a/browser/themes/shared/toolbarbuttons.inc.css +++ b/browser/themes/shared/toolbarbuttons.inc.css @@ -56,6 +56,17 @@ -moz-image-region: rect(0, 270px, 18px, 252px); } +#sync-button[cui-areatype="toolbar"][status="active"], +#sync-button[cui-areatype="toolbar"][status="active"]:hover:active:not([disabled="true"]) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar.png"); + -moz-image-region: rect(0, 18px, 18px, 0px); +} + +#sync-button[cui-areatype="toolbar"][status="active"]:-moz-lwtheme-brighttext, +#sync-button[cui-areatype="toolbar"][status="active"]:-moz-lwtheme-brighttext:hover:active:not([disabled="true"]) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar-inverted.png"); +} + #feed-button[cui-areatype="toolbar"] { -moz-image-region: rect(0, 288px, 18px, 270px); } diff --git a/browser/themes/windows/browser-aero.css b/browser/themes/windows/browser-aero.css index 64fd91c598b0..24bd0d7405dd 100644 --- a/browser/themes/windows/browser-aero.css +++ b/browser/themes/windows/browser-aero.css @@ -242,6 +242,11 @@ list-style-image: url("chrome://browser/skin/Toolbar-inverted.png"); } + #toolbar-menubar > #sync-button[status="active"]:not(:-moz-lwtheme), + #toolbar-menubar > toolbarpaletteitem > #sync-button[status="active"]:not(:-moz-lwtheme) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar-inverted.png"); + } + /* Glass Fog */ #TabsToolbar:not(:-moz-lwtheme) { diff --git a/browser/themes/windows/browser.css b/browser/themes/windows/browser.css index cdb051220b3e..821d32be8bf2 100644 --- a/browser/themes/windows/browser.css +++ b/browser/themes/windows/browser.css @@ -969,12 +969,9 @@ toolbarbutton[sdk-button="true"][cui-areatype="toolbar"] > .toolbarbutton-icon { list-style-image: url("chrome://browser/skin/Toolbar-inverted.png"); } -#sync-button[cui-areatype="toolbar"][status="active"] { - /* !important because we need to override the glass selectors that trigger - * use of the Toolbar-inverted image. Those use a list of all primary toolbar - * buttons, so we can't easily fix those selectors. */ - list-style-image: url("chrome://browser/skin/sync-throbber.png") !important; - -moz-image-region: rect(0, 18px, 18px, 0); +#main-window[tabsintitlebar]:not([inFullscreen]) :-moz-any(#TabsToolbar, #toolbar-menubar) > #sync-button[status="active"]:-moz-system-metric(windows-classic):not(:-moz-lwtheme), +#main-window[tabsintitlebar]:not([inFullscreen]) :-moz-any(#TabsToolbar, #toolbar-menubar) > toolbarpaletteitem > #sync-button[status="active"]:-moz-system-metric(windows-classic):not(:-moz-lwtheme) { + list-style-image: url("chrome://browser/skin/syncProgress-toolbar-inverted.png"); } /* tabview button & menu item */ diff --git a/browser/themes/windows/jar.mn b/browser/themes/windows/jar.mn index d2ed990d5c1e..2a82cafeef18 100644 --- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -312,7 +312,6 @@ browser.jar: skin/classic/browser/devtools/app-manager/noise.png (../shared/devtools/app-manager/images/noise.png) skin/classic/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC - skin/classic/browser/sync-throbber.png skin/classic/browser/sync-16.png skin/classic/browser/sync-32.png skin/classic/browser/sync-128.png @@ -328,6 +327,10 @@ browser.jar: skin/classic/browser/syncProgress.css skin/classic/browser/syncProgress-horizontalbar.png skin/classic/browser/syncProgress-horizontalbar-XPVista7.png + skin/classic/browser/syncProgress-menuPanel.png + skin/classic/browser/syncProgress-toolbar.png + skin/classic/browser/syncProgress-toolbar-inverted.png + skin/classic/browser/syncProgress-toolbar-XPVista7.png #endif skin/classic/browser/devtools/tooltip/arrow-horizontal-dark.png (../shared/devtools/tooltip/arrow-horizontal-dark.png) skin/classic/browser/devtools/tooltip/arrow-horizontal-dark@2x.png (../shared/devtools/tooltip/arrow-horizontal-dark@2x.png) @@ -648,7 +651,6 @@ browser.jar: skin/classic/aero/browser/devtools/app-manager/default-app-icon.png (../shared/devtools/app-manager/images/default-app-icon.png) #ifdef MOZ_SERVICES_SYNC - skin/classic/aero/browser/sync-throbber.png skin/classic/aero/browser/sync-16.png skin/classic/aero/browser/sync-32.png skin/classic/aero/browser/sync-128.png @@ -664,6 +666,10 @@ browser.jar: skin/classic/aero/browser/syncProgress.css skin/classic/aero/browser/syncProgress-horizontalbar.png skin/classic/aero/browser/syncProgress-horizontalbar-XPVista7.png + skin/classic/aero/browser/syncProgress-menuPanel.png + skin/classic/aero/browser/syncProgress-toolbar.png + skin/classic/aero/browser/syncProgress-toolbar-inverted.png + skin/classic/aero/browser/syncProgress-toolbar-XPVista7.png #endif #endif skin/classic/aero/browser/devtools/tooltip/arrow-horizontal-dark.png (../shared/devtools/tooltip/arrow-horizontal-dark.png) diff --git a/browser/themes/windows/sync-throbber.png b/browser/themes/windows/sync-throbber.png deleted file mode 100644 index d25490b4faa7d215db750a20d2f4b17b1954f1b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10362 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 diff --git a/browser/themes/windows/syncProgress-horizontalbar-XPVista7.png b/browser/themes/windows/syncProgress-horizontalbar-XPVista7.png index a318003646593dc6e5334d126050dd3a52c68b49..48cd110559d45a13d8428e2a18391cddbe556acd 100644 GIT binary patch literal 11892 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 delta 510 zcmVT$copBYy$jNklL^8;cyw6dk9BO;S)n*@JFJ(U~y{Tr}|GKECgs``yc2 zfdBf&Gag&@rC}dZ?Ey%&^1wAeAon;vr8AzYvWj$ETUH^dC4X`%dBa{#8@qG+fNSN< z>0$q`i#xCSS0K?ye$sbiTl8dn8c6Dd!rYhfhFU6(FL;d**S;b|0^?tp=|?VQE_ zi%ffR36pxUKrLt5gjfS9(#~5}#&5m75Yyhf1)nPC8A-bwIDRgAYB=Mz6yc(Ug{Ye3 ziFY0rr)}4cX@7ar>O}9h=(}i%NJ>QW0+D)>!^GR?|GH%Aik>O@kgTMz>Q{v17~tu- zzX}XqVxoc%d6Sf|j)gN7$#dSbTe2(fa7sz_2cj>mJC_~7umz_|QXo6X(Nm&!rej8U zx3xPyv;f8r)P2B_S^%cw(4KHB{_Pci1K@B5Iwq7=rvLx|07*qoM6N<$f{O(F AF#rGn diff --git a/browser/themes/windows/syncProgress-horizontalbar.png b/browser/themes/windows/syncProgress-horizontalbar.png index 025293f75185d955a5f40afc4fd8c41ec416c223..79d9723898305d40c56d385c59025dc60a7128de 100644 GIT binary patch literal 5469 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 qH>zlX$ diff --git a/browser/themes/windows/syncProgress-menuPanel.png b/browser/themes/windows/syncProgress-menuPanel.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd6f9c16f6bd2adcca02e71e6da92c579c24eb0 GIT binary patch literal 25426 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 G|Nj7-Q*>Ye literal 0 HcmV?d00001 diff --git a/browser/themes/windows/syncProgress-toolbar-inverted.png b/browser/themes/windows/syncProgress-toolbar-inverted.png new file mode 100644 index 0000000000000000000000000000000000000000..4ede4387dec16849bb92298bff29cc259ae2206b GIT binary patch literal 14382 zcmZv@by(AX`~E)~q#LA0NJxVc3JjDK1O%m2ItA&j(Jdw2A|Z`*kM0Hu>25|yjIr%E z@9+Em{O&*AujAOBV;cuAcDx?X>pHLVT%@MD67hqF4*&oFv5K<17J8-ld&9>?-|LLW z>Y^8X6SKE!=#>-NFYz3P&YO1Ogsw1<1rr%%wv0wQp)w;4|vu7uMx#nGcxe9GxgP)9=;Rc}09ZO?n zB&2Wvrij@rDoTLs6npFg0*#xR_#rBKrdB)sH*Zu9`l|DO7BosFec$hq~Eni{eKwKlSI(Gi+5u?-uNhQd4B!S4`~- zg^>j@HRI^Jn3}rXRaa|fT@v!(CpDU_1t!0ma-?9zuKXwgFLd;Pefd%=EA=wWW-%JM9 zo049?QqMeL?|c}86~uO3P+)aBz$}~8W-_DWg?-(@tax}%s*C;O>N6HSljvFiVVU;K zW=+GM?~i7m%Ov1tTmI(Qlc&31G}NN>IzFA4j&{vWUHf~A+_fL}^t{~VS1I>h9C79c zk#(=VPrPAz=6CKNB+$%zhm)M72tph_B;FFP5L5S%a5*pKf z&aR;`{_`7_??XvDnQT~WTW);?=GYD&+KXUuk$th*>ClTRqg=@MBQts0b@GHylfT5t zBVJ8B)t#CBMNLDwhg$-JA>fVQ@!Yese(QMLFTwXts*E7WpmN$i1>j4q%VD>uOdr#o z