author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Wed, 06 Jul 2016 11:41:53 +0200 | |
changeset 303799 | 95ffbc4ff63584631c408e8d9912961fcf68bb09 |
parent 303790 | a7d6bb9e7d12166470ad4210dd1f56b7b07d0dc8 (current diff) |
parent 303798 | d8fa10d0a52eb52ee1fc46f88c37662c71af37a6 (diff) |
child 303847 | 39ec98bf2580a236471714c28b336d8c974cc365 |
child 303857 | f89429b567cc881c5de58042c465fcd830415a04 |
child 303971 | d666f37dfa890eb321002fa4daf75080826d2649 |
push id | 30402 |
push user | cbook@mozilla.com |
push date | Wed, 06 Jul 2016 09:42:05 +0000 |
treeherder | mozilla-central@95ffbc4ff635 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 50.0a1 |
first release with | nightly linux32
95ffbc4ff635
/
50.0a1
/
20160706030233
/
files
nightly linux64
95ffbc4ff635
/
50.0a1
/
20160706030233
/
files
nightly mac
95ffbc4ff635
/
50.0a1
/
20160706030201
/
files
nightly win32
95ffbc4ff635
/
50.0a1
/
20160706030233
/
files
nightly win64
95ffbc4ff635
/
50.0a1
/
20160706030233
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
50.0a1
/
20160706030233
/
pushlog to previous
nightly linux64
50.0a1
/
20160706030233
/
pushlog to previous
nightly mac
50.0a1
/
20160706030201
/
pushlog to previous
nightly win32
50.0a1
/
20160706030233
/
pushlog to previous
nightly win64
50.0a1
/
20160706030233
/
pushlog to previous
|
--- a/browser/base/content/sync/genericChange.xul +++ b/browser/base/content/sync/genericChange.xul @@ -62,17 +62,17 @@ <vbox id="passphraseRow"> <hbox flex="1"> <label id="passphraseLabel" control="passphraseBox"/> <spacer flex="1"/> <label id="generatePassphraseButton" hidden="true" value="&syncGenerateNewKey.label;" - class="text-link inline-link" + class="text-link" onclick="event.stopPropagation(); Change.doGeneratePassphrase();"/> </hbox> <textbox id="passphraseBox" flex="1" onfocus="this.select()" oninput="Change.validate()"/> </vbox>
--- a/browser/base/content/sync/setup.xul +++ b/browser/base/content/sync/setup.xul @@ -178,22 +178,22 @@ <checkbox id="tos" accesskey="&setup.tosAgree1.accesskey;" oncommand="this.focus(); gSyncSetup.checkFields();"/> <description id="tosDesc" flex="1" onclick="document.getElementById('tos').focus(); document.getElementById('tos').click()"> &setup.tosAgree1.label; - <label class="text-link inline-link" + <label class="text-link" onclick="event.stopPropagation();gSyncUtils.openToS();"> &setup.tosLink.label; </label> &setup.tosAgree2.label; - <label class="text-link inline-link" + <label class="text-link" onclick="event.stopPropagation();gSyncUtils.openPrivacyPolicy();"> &setup.ppLink.label; </label> &setup.tosAgree3.label; </description> </hbox> </row> </rows>
--- a/browser/components/preferences/in-content/privacy.xul +++ b/browser/components/preferences/in-content/privacy.xul @@ -131,19 +131,19 @@ value="&trackingProtectionPBMLearnMore.label;"/> <spacer flex="1" /> <button id="changeBlockListPBM" label="&changeBlockList.label;" accesskey="&changeBlockList.accesskey;" preference="pref.privacy.disable_button.change_blocklist"/> </hbox> </vbox> <vbox> - <description>&doNotTrack.pre.label;<html:a - class="inline-link" id="doNotTrackSettings" href="#" - >&doNotTrack.settings.label;</html:a>&doNotTrack.post.label;</description> + <description>&doNotTrack.pre.label;<label + class="text-link" id="doNotTrackSettings" + >&doNotTrack.settings.label;</label>&doNotTrack.post.label;</description> </vbox> </groupbox> <!-- History --> <groupbox id="historyGroup" data-category="panePrivacy" hidden="true"> <caption><label>&history.label;</label></caption> <hbox align="center"> <label id="historyModeLabel" @@ -160,32 +160,32 @@ <label>&historyHeader.post.label;</label> </hbox> <deck id="historyPane"> <vbox id="historyRememberPane"> <hbox align="center" flex="1"> <vbox flex="1"> <description>&rememberDescription.label;</description> <separator class="thin"/> - <description>&rememberActions.pre.label;<html:a - class="inline-link" id="historyRememberClear" href="#" - >&rememberActions.clearHistory.label;</html:a>&rememberActions.middle.label;<html:a - class="inline-link" id="historyRememberCookies" href="#" - >&rememberActions.removeCookies.label;</html:a>&rememberActions.post.label;</description> + <description>&rememberActions.pre.label;<label + class="text-link" id="historyRememberClear" + >&rememberActions.clearHistory.label;</label>&rememberActions.middle.label;<label + class="text-link" id="historyRememberCookies" + >&rememberActions.removeCookies.label;</label>&rememberActions.post.label;</description> </vbox> </hbox> </vbox> <vbox id="historyDontRememberPane"> <hbox align="center" flex="1"> <vbox flex="1"> <description>&dontrememberDescription.label;</description> <separator class="thin"/> - <description>&dontrememberActions.pre.label;<html:a - class="inline-link" id="historyDontRememberClear" href="#" - >&dontrememberActions.clearHistory.label;</html:a>&dontrememberActions.post.label;</description> + <description>&dontrememberActions.pre.label;<label + class="text-link" id="historyDontRememberClear" + >&dontrememberActions.clearHistory.label;</label>&dontrememberActions.post.label;</description> </vbox> </hbox> </vbox> <vbox id="historyCustomPane"> <separator class="thin"/> <vbox> <vbox align="start"> <checkbox id="privateBrowsingAutoStart"
--- a/browser/components/uitour/test/browser.ini +++ b/browser/components/uitour/test/browser.ini @@ -35,13 +35,13 @@ skip-if = os == "linux" # Linux: Bug 986 skip-if = true # Bug 1225832 - New Loop architecture is not compatible with test. [browser_UITour_loop_panel.js] [browser_UITour_modalDialog.js] skip-if = os != "mac" # modal dialog disabling only working on OS X. [browser_UITour_observe.js] [browser_UITour_panel_close_annotation.js] skip-if = true # Disabled due to frequent failures, bugs 1026310 and 1032137 [browser_UITour_pocket.js] -skip-if = os == "linux" || debug +skip-if = true # Disabled pending removal of pocket UI Tour [browser_UITour_registerPageID.js] [browser_UITour_resetProfile.js] [browser_UITour_sync.js] [browser_UITour_toggleReaderMode.js]
--- a/browser/extensions/pocket/content/main.js +++ b/browser/extensions/pocket/content/main.js @@ -123,58 +123,70 @@ var pktUI = (function() { // -- Panel UI -- // /** * Show the sign-up panel */ function showSignUp() { + // AB test: Direct logged-out users to tab vs panel + if (pktApi.getSignupPanelTabTestVariant() == 'tab') + { + let site = Services.prefs.getCharPref("extensions.pocket.site"); + openTabWithUrl('https://' + site + '/firefox_learnmore?src=ff_ext&s=ffi&t=buttonclick', true); + + // force the panel closed before it opens + // wrapped in setTimeout to avoid race condition after logging out + // if this test goes to 100%, we should move this logic up before + // the panel is actually opened + setTimeout(function() { + getPanel().hidePopup(); + }, 0); + + return; + } + + // Control: Show panel as normal getFirefoxAccountSignedInUser(function(userdata) { var fxasignedin = (typeof userdata == 'object' && userdata !== null) ? '1' : '0'; var startheight = 490; var inOverflowMenu = isInOverflowMenu(); if (inOverflowMenu) { startheight = overflowMenuHeight; } - else if (pktApi.getSignupAB().indexOf('storyboard') > -1) + else { startheight = 460; if (fxasignedin == '1') { startheight = 406; } } - else - { - if (fxasignedin == '1') - { - startheight = 436; - } - } var variant; if (inOverflowMenu) { variant = 'overflow'; } else { - variant = pktApi.getSignupAB(); + variant = 'storyboard_lm'; } + var panelId = showPanel("about:pocket-signup?pockethost=" + Services.prefs.getCharPref("extensions.pocket.site") + "&fxasignedin=" + fxasignedin + "&variant=" + variant + '&inoverflowmenu=' + inOverflowMenu + "&locale=" + getUILocale(), { onShow: function() { }, onHide: panelDidHide, width: inOverflowMenu ? overflowMenuWidth : 300, height: startheight - }); }); + }); } /** * Show the logged-out state / sign-up panel */ function saveAndShowConfirmation(url, title) { // Validate input parameter
--- a/browser/extensions/pocket/content/panels/js/signup.js +++ b/browser/extensions/pocket/content/panels/js/signup.js @@ -99,38 +99,38 @@ PKT_SIGNUP_OVERLAY.prototype = { this.active = true; // set translations this.getTranslations(); this.dictJSON.fxasignedin = this.fxasignedin ? 1 : 0; this.dictJSON.variant = (this.variant ? this.variant : 'undefined'); this.dictJSON.variant += this.fxasignedin ? '_fxa' : '_nonfxa'; this.dictJSON.pockethost = this.pockethost; - this.dictJSON.showlearnmore = (this.variant.indexOf('_lm') > -1 || this.variant == 'storyboard' || this.variant == 'hero') ? 1 : 0; + this.dictJSON.showlearnmore = true; // extra modifier class for collapsed state if (this.inoverflowmenu) { $('body').addClass('pkt_ext_signup_overflow'); } // extra modifier class for language if (this.locale) { $('body').addClass('pkt_ext_signup_' + this.locale); } // Create actual content - if (this.variant == 'storyboard' || this.variant == 'storyboard_lm' || this.variant == 'storyboard_nlm') + if (this.variant == 'overflow') { - $('body').append(Handlebars.templates.signupstoryboard_shell(this.dictJSON)); + $('body').append(Handlebars.templates.signup_shell(this.dictJSON)); } else { - $('body').append(Handlebars.templates.signup_shell(this.dictJSON)); + $('body').append(Handlebars.templates.signupstoryboard_shell(this.dictJSON)); } // tell background we're ready thePKT_SIGNUP.sendMessage("show"); // close events this.initCloseTabEvents();
--- a/browser/extensions/pocket/content/pktApi.jsm +++ b/browser/extensions/pocket/content/pktApi.jsm @@ -604,43 +604,51 @@ var pktApi = (function() { success: options.success, error: options.error }); } /** * Helper function to get current signup AB group the user is in */ - function getSignupAB() { - var setting = getSetting('signupAB'); - if (!setting || setting.includes('hero')) + function getSignupPanelTabTestVariant() { + return getSimpleTestOption('panelTab', 0.1, 'tab'); + } + + function getSimpleTestOption(testName, threshold, testOptionName) { + // Get the test from preferences if we've already assigned the user to a test + var settingName = 'test.' + testName; + var assignedValue = getSetting(settingName); + + // If not assigned yet, pick and store a value + if (!assignedValue) { - var rand = (Math.floor(Math.random()*100+1)); - if (rand > 90) - { - setting = 'storyboard_nlm'; + if (Math.random() <= threshold) { + assignedValue = testOptionName; } - else - { - setting = 'storyboard_lm'; + else { + assignedValue = 'control'; } - setSetting('signupAB',setting); + + setSetting('test.'+testName, assignedValue); } - return setting; + + return assignedValue; } + /** * Public functions */ return { isUserLoggedIn : isUserLoggedIn, clearUserData: clearUserData, addLink: addLink, deleteItem: deleteItem, addTagsToItem: addTagsToItem, addTagsToURL: addTagsToURL, getTags: getTags, isPremiumUser: isPremiumUser, getSuggestedTagsForItem: getSuggestedTagsForItem, getSuggestedTagsForURL: getSuggestedTagsForURL, - getSignupAB: getSignupAB + getSignupPanelTabTestVariant: getSignupPanelTabTestVariant, }; }());
--- a/browser/extensions/pocket/install.rdf.in +++ b/browser/extensions/pocket/install.rdf.in @@ -5,17 +5,17 @@ #filter substitution <RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#"> <Description about="urn:mozilla:install-manifest"> <em:id>firefox@getpocket.com</em:id> - <em:version>1.0.3b1</em:version> + <em:version>1.0.4</em:version> <em:type>2</em:type> <em:bootstrap>true</em:bootstrap> <!-- Target Application this theme can install into, with minimum and maximum supported versions. --> <em:targetApplication> <Description> <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
--- a/browser/themes/linux/jar.mn +++ b/browser/themes/linux/jar.mn @@ -77,19 +77,16 @@ browser.jar: skin/classic/browser/places/organizer.css (places/organizer.css) skin/classic/browser/places/organizer.xml (places/organizer.xml) skin/classic/browser/places/query.png (places/query.png) skin/classic/browser/places/tag.png (places/tag.png) skin/classic/browser/places/toolbarDropMarker.png (places/toolbarDropMarker.png) skin/classic/browser/places/unsortedBookmarks.png (places/unsortedBookmarks.png) skin/classic/browser/places/downloads.png (places/downloads.png) skin/classic/browser/preferences/alwaysAsk.png (preferences/alwaysAsk.png) - skin/classic/browser/preferences/mail.png (preferences/mail.png) - skin/classic/browser/preferences/Options.png (preferences/Options.png) - skin/classic/browser/preferences/Options-sync.png (preferences/Options-sync.png) skin/classic/browser/preferences/preferences.css (preferences/preferences.css) * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css) * skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css) skin/classic/browser/preferences/applications.css (preferences/applications.css) skin/classic/browser/social/services-16.png (social/services-16.png) skin/classic/browser/social/services-64.png (social/services-64.png) skin/classic/browser/social/share-button.png (social/share-button.png) skin/classic/browser/social/share-button-active.png (social/share-button-active.png)
deleted file mode 100644 index 89901fb698c4a06792d6ae974489cb6b93ed3994..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 82bebd2a4f0b610dd02925140adac8e7a8493792..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/browser/themes/linux/preferences/preferences.css +++ b/browser/themes/linux/preferences/preferences.css @@ -1,106 +1,36 @@ /* # -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- # 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/. */ /* Global Styles */ -#BrowserPreferences radio[pane] { - list-style-image: url("chrome://browser/skin/preferences/Options.png"); -} - -radio[pane=paneMain] { - -moz-image-region: rect(0px, 32px, 32px, 0px) -} - -radio[pane=paneTabs] { - -moz-image-region: rect(0px, 64px, 32px, 32px) -} - -#BrowserPreferences radio[pane=paneSearch] { - list-style-image: url("chrome://browser/skin/search-pref.png"); -} - .checkbox-check { -moz-appearance: checkbox; } -radio[pane=paneContent] { - -moz-image-region: rect(0px, 96px, 32px, 64px) -} - -radio[pane=paneApplications] { - -moz-image-region: rect(0px, 128px, 32px, 96px) -} - -radio[pane=panePrivacy] { - -moz-image-region: rect(0px, 160px, 32px, 128px) -} - -radio[pane=paneSecurity] { - -moz-image-region: rect(0px, 192px, 32px, 160px) -} - -radio[pane=paneAdvanced] { - -moz-image-region: rect(0px, 224px, 32px, 192px) -} - -radio[pane=paneSync] { - list-style-image: url("chrome://browser/skin/preferences/Options-sync.png") !important; -} - -/* These lines should be removed as part of fixing bug 1140495 */ -label.small { - font-size: smaller; -} - -#tabPrefsBox { - margin: 5px; -} - /* General Pane */ #useFirefoxSync, #getStarted { font-size: 90%; } #isNotDefaultLabel { font-weight: bold; } /* Content Pane */ #translationAttributionImage { width: 70px; cursor: pointer; } -/* Applications Pane */ -#BrowserPreferences[animated="true"] #handlersView { - height: 25em; -} - -#BrowserPreferences[animated="false"] #handlersView { - -moz-box-flex: 1; -} - -/* Privacy Pane */ - -/* styles for the link elements copied from .text-link in global.css */ -.inline-link { - color: -moz-nativehyperlinktext; - text-decoration: none; -} - -.inline-link:hover { - text-decoration: underline; -} - /* Modeless Window Dialogs */ .windowDialog, .windowDialog prefpane { padding: 0px; } .contentPane { margin: 9px 8px 5px 8px; @@ -113,30 +43,20 @@ label.small { /* Cookies Manager */ #cookiesChildren::-moz-tree-image(domainCol) { width: 16px; height: 16px; margin: 0px 2px; list-style-image: url("chrome://mozapps/skin/places/defaultFavicon.png"); } -#paneApplications { - margin-left: 4px; - margin-right: 4px; - padding-left: 0; - padding-right: 0; -} - #linksOpenInBox { margin-top: 5px; } -#paneAdvanced { - padding-bottom: 10px; -} #advancedPrefs { margin-left: 0; margin-right: 0; } #cookiesChildren::-moz-tree-image(domainCol, container) { list-style-image: url("moz-icon://stock/gtk-directory?size=menu"); }
--- a/browser/themes/osx/jar.mn +++ b/browser/themes/osx/jar.mn @@ -124,27 +124,21 @@ browser.jar: skin/classic/browser/places/unfiledBookmarks.png (places/unfiledBookmarks.png) skin/classic/browser/places/unfiledBookmarks@2x.png (places/unfiledBookmarks@2x.png) skin/classic/browser/places/tag.png (places/tag.png) skin/classic/browser/places/tag@2x.png (places/tag@2x.png) skin/classic/browser/places/downloads.png (places/downloads.png) skin/classic/browser/places/livemark-item.png (places/livemark-item.png) skin/classic/browser/preferences/alwaysAsk.png (preferences/alwaysAsk.png) skin/classic/browser/preferences/application.png (preferences/application.png) - skin/classic/browser/preferences/Options.png (preferences/Options.png) - skin/classic/browser/preferences/Options-sync.png (preferences/Options-sync.png) skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png) * skin/classic/browser/preferences/preferences.css (preferences/preferences.css) * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css) * skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css) skin/classic/browser/preferences/applications.css (preferences/applications.css) - skin/classic/browser/preferences/checkbox.png (preferences/checkbox.png) - skin/classic/browser/preferences/checkbox@2x.png (preferences/checkbox@2x.png) - skin/classic/browser/yosemite/preferences/checkbox.png (preferences/checkbox-yosemite.png) - skin/classic/browser/yosemite/preferences/checkbox@2x.png (preferences/checkbox-yosemite@2x.png) skin/classic/browser/social/services-16.png (social/services-16.png) skin/classic/browser/social/services-16@2x.png (social/services-16@2x.png) skin/classic/browser/social/services-64.png (social/services-64.png) skin/classic/browser/social/services-64@2x.png (social/services-64@2x.png) skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon.png (tabbrowser/alltabs-box-bkgnd-icon.png) skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon-inverted.png (tabbrowser/alltabs-box-bkgnd-icon-inverted.png) skin/classic/browser/tabbrowser/alltabs-box-bkgnd-icon-inverted@2x.png (tabbrowser/alltabs-box-bkgnd-icon-inverted@2x.png) skin/classic/browser/tabbrowser/newtab.png (tabbrowser/newtab.png) @@ -250,14 +244,12 @@ browser.jar: % override chrome://browser/skin/menuPanel-customize.png chrome://browser/skin/yosemite/menuPanel-customize.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-customize@2x.png chrome://browser/skin/yosemite/menuPanel-customize@2x.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-exit.png chrome://browser/skin/yosemite/menuPanel-exit.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-exit@2x.png chrome://browser/skin/yosemite/menuPanel-exit@2x.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-help.png chrome://browser/skin/yosemite/menuPanel-help.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-help@2x.png chrome://browser/skin/yosemite/menuPanel-help@2x.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-small.png chrome://browser/skin/yosemite/menuPanel-small.png os=Darwin osversion>=10.10 % override chrome://browser/skin/menuPanel-small@2x.png chrome://browser/skin/yosemite/menuPanel-small@2x.png os=Darwin osversion>=10.10 -% override chrome://browser/skin/preferences/checkbox.png chrome://browser/skin/yosemite/preferences/checkbox.png os=Darwin osversion>=10.10 -% override chrome://browser/skin/preferences/checkbox@2x.png chrome://browser/skin/yosemite/preferences/checkbox@2x.png os=Darwin osversion>=10.10 % override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/yosemite/reload-stop-go.png os=Darwin osversion>=10.10 % override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/yosemite/reload-stop-go@2x.png os=Darwin osversion>=10.10 % override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/yosemite/sync-horizontalbar.png os=Darwin osversion>=10.10 % override chrome://browser/skin/sync-horizontalbar@2x.png chrome://browser/skin/yosemite/sync-horizontalbar@2x.png os=Darwin osversion>=10.10
deleted file mode 100644 index 89901fb698c4a06792d6ae974489cb6b93ed3994..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 615029cd1058a1656deb6c2e99cd45506cd0a762..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 1421c7d0e29cc43deab290b4d99f08c778fe3a00..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 9f156f2587d396c049f98a7ff57b7e09ad419910..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index fd009385362bcef2a1bdb4f4da71307366300c58..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index a5094640fd2f412b4b13cc9bc37337766de3dfc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/browser/themes/osx/preferences/preferences.css +++ b/browser/themes/osx/preferences/preferences.css @@ -10,140 +10,44 @@ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); @namespace html url("http://www.w3.org/1999/xhtml"); .windowDialog { padding: 12px; font: -moz-dialog; } -.paneSelector { - list-style-image: url("chrome://browser/skin/preferences/Options.png"); -} - -/* ----- GENERAL BUTTON ----- */ - -radio[pane=paneGeneral], -radio[pane=paneMain] { - -moz-image-region: rect(0px, 32px, 32px, 0px); -} - -/* ----- TABS BUTTON ----- */ - -radio[pane=paneTabs] { - -moz-image-region: rect(0px, 64px, 32px, 32px); -} - -/* ----- SEARCH BUTTON ----- */ - -radio[pane=paneSearch] { - list-style-image: url("chrome://browser/skin/search-pref.png"); -} - -/* ----- CONTENT BUTTON ----- */ - -radio[pane=paneContent] { - -moz-image-region: rect(0px, 96px, 32px, 64px); -} - -/* ----- APPLICATIONS BUTTON ----- */ - -radio[pane=paneApplications] { - -moz-image-region: rect(0px, 128px, 32px, 96px); -} - -/* ----- PRIVACY BUTTON ----- */ - -radio[pane=panePrivacy] { - -moz-image-region: rect(0px, 160px, 32px, 128px); -} - -/* ----- SECURITY BUTTON ----- */ - -radio[pane=paneSecurity] { - -moz-image-region: rect(0px, 192px, 32px, 160px); -} - -/* ----- ADVANCED BUTTON ----- */ - -radio[pane=paneAdvanced] { - -moz-image-region: rect(0px, 224px, 32px, 192px); -} - -/* ----- SYNC BUTTON ----- */ - -radio[pane=paneSync] { - list-style-image: url("chrome://browser/skin/preferences/Options-sync.png"); -} - -/* These lines should be removed as part of fixing bug 1140495 */ -label.small { - font-size: smaller; -} - /* ----- APPLICATIONS PREFPANE ----- */ -#BrowserPreferences[animated="true"] #handlersView { - height: 25em; -} - -#BrowserPreferences[animated="false"] #handlersView { - -moz-box-flex: 1; -} - description { font: small-caption; font-weight: normal; line-height: 1.3em; margin-bottom: 4px !important; } prefpane .groupbox-body { -moz-appearance: none; padding: 8px 4px 4px 4px; } -#paneTabs > groupbox { - margin: 0; -} - -#tabPrefsBox { - margin: 12px 4px; -} - prefpane .groupbox-title { background: url("chrome://global/skin/50pct_transparent_grey.png") repeat-x bottom left; margin-bottom: 4px; } tabpanels { padding: 20px 7px 7px; } caption { padding-inline-start: 5px; padding-top: 4px; padding-bottom: 2px; } -#paneMain description, -#paneContent description, -#paneAdvanced description, -#paneSecurity description { - font: -moz-dialog; -} - -#paneContent { - padding-top: 8px; -} - -#paneContent row { - padding: 2px 4px; - -moz-box-align: center; -} - #popupPolicyRow { margin-bottom: 4px !important; padding-bottom: 4px !important; border-bottom: 1px solid #ccc; } #translationAttributionImage { width: 70px; @@ -179,34 +83,16 @@ caption { font-size: 90%; } #isNotDefaultLabel { font-weight: bold; } /** - * Privacy Pane - */ - -html|a.inline-link { - color: -moz-nativehyperlinktext; - text-decoration: none; -} - -html|a.inline-link:hover { - text-decoration: underline; -} - -html|a.inline-link:-moz-focusring { - outline-width: 0; - box-shadow: @focusRingShadow@; -} - -/** * Update Preferences */ #autoInstallOptions { margin-inline-start: 20px; } .updateControls { margin-inline-start: 10px;
--- a/browser/themes/shared/jar.inc.mn +++ b/browser/themes/shared/jar.inc.mn @@ -81,17 +81,16 @@ skin/classic/browser/fxa/logo@2x.png (../shared/fxa/logo@2x.png) skin/classic/browser/fxa/sync-illustration.png (../shared/fxa/sync-illustration.png) skin/classic/browser/fxa/sync-illustration@2x.png (../shared/fxa/sync-illustration@2x.png) skin/classic/browser/fxa/sync-illustration.svg (../shared/fxa/sync-illustration.svg) skin/classic/browser/fxa/android.png (../shared/fxa/android.png) skin/classic/browser/fxa/android@2x.png (../shared/fxa/android@2x.png) skin/classic/browser/fxa/ios.png (../shared/fxa/ios.png) skin/classic/browser/fxa/ios@2x.png (../shared/fxa/ios@2x.png) - skin/classic/browser/search-pref.png (../shared/search/search-pref.png) skin/classic/browser/search-indicator.png (../shared/search/search-indicator.png) skin/classic/browser/search-indicator@2x.png (../shared/search/search-indicator@2x.png) skin/classic/browser/search-engine-placeholder.png (../shared/search/search-engine-placeholder.png) skin/classic/browser/search-engine-placeholder@2x.png (../shared/search/search-engine-placeholder@2x.png) skin/classic/browser/searchReset.css (../shared/searchReset.css) skin/classic/browser/badge-add-engine.png (../shared/search/badge-add-engine.png) skin/classic/browser/badge-add-engine@2x.png (../shared/search/badge-add-engine@2x.png) skin/classic/browser/search-indicator-badge-add.png (../shared/search/search-indicator-badge-add.png)
deleted file mode 100644 index 1d50804b35d29d786da83988168a612b087e3126..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/browser/themes/windows/jar.mn +++ b/browser/themes/windows/jar.mn @@ -136,31 +136,22 @@ browser.jar: skin/classic/browser/places/unsortedBookmarks.png (places/unsortedBookmarks.png) skin/classic/browser/places/unsortedBookmarks-XP.png (places/unsortedBookmarks-XP.png) skin/classic/browser/places/downloads.png (places/downloads.png) skin/classic/browser/places/livemark-item.png (places/livemark-item.png) skin/classic/browser/preferences/alwaysAsk.png (preferences/alwaysAsk.png) skin/classic/browser/preferences/alwaysAsk-XP.png (preferences/alwaysAsk-XP.png) skin/classic/browser/preferences/application.png (preferences/application.png) skin/classic/browser/preferences/application-XP.png (preferences/application-XP.png) - skin/classic/browser/preferences/mail.png (preferences/mail.png) - skin/classic/browser/preferences/mail-XP.png (preferences/mail-XP.png) - skin/classic/browser/preferences/Options.png (preferences/Options.png) - skin/classic/browser/preferences/Options-XP.png (preferences/Options-XP.png) - skin/classic/browser/preferences/Options-sync.png (preferences/Options-sync.png) skin/classic/browser/preferences/saveFile.png (preferences/saveFile.png) skin/classic/browser/preferences/saveFile-XP.png (preferences/saveFile-XP.png) skin/classic/browser/preferences/preferences.css (preferences/preferences.css) * skin/classic/browser/preferences/in-content/preferences.css (preferences/in-content/preferences.css) * skin/classic/browser/preferences/in-content/dialog.css (preferences/in-content/dialog.css) skin/classic/browser/preferences/applications.css (preferences/applications.css) - skin/classic/browser/preferences/checkbox.png (preferences/checkbox.png) - skin/classic/browser/preferences/checkbox-aero.png (preferences/checkbox-aero.png) - skin/classic/browser/preferences/checkbox-classic.png (preferences/checkbox-classic.png) - skin/classic/browser/preferences/checkbox-xp.png (preferences/checkbox-xp.png) skin/classic/browser/social/services-16.png (social/services-16.png) skin/classic/browser/social/services-64.png (social/services-64.png) skin/classic/browser/tabbrowser/newtab.svg (tabbrowser/newtab.svg) skin/classic/browser/tabbrowser/newtab-XPVista7.svg (tabbrowser/newtab-XPVista7.svg) skin/classic/browser/tabbrowser/newtab-inverted.svg (tabbrowser/newtab-inverted.svg) skin/classic/browser/tabbrowser/newtab-inverted-XPVista7.svg (tabbrowser/newtab-inverted-XPVista7.svg) skin/classic/browser/tabbrowser/connecting.png (tabbrowser/connecting.png) skin/classic/browser/tabbrowser/connecting@2x.png (tabbrowser/connecting@2x.png) @@ -249,18 +240,16 @@ browser.jar: % override chrome://browser/skin/places/libraryToolbar.png chrome://browser/skin/places/libraryToolbar-XP.png os=WINNT osversion<6 % override chrome://browser/skin/places/starred48.png chrome://browser/skin/places/starred48-XP.png os=WINNT osversion<6 % override chrome://browser/skin/places/tag.png chrome://browser/skin/places/tag-XP.png os=WINNT osversion<6 % override chrome://browser/skin/places/history.png chrome://browser/skin/places/history-XP.png os=WINNT osversion<6 % override chrome://browser/skin/places/allBookmarks.png chrome://browser/skin/places/allBookmarks-XP.png os=WINNT osversion<6 % override chrome://browser/skin/places/unsortedBookmarks.png chrome://browser/skin/places/unsortedBookmarks-XP.png os=WINNT osversion<6 % override chrome://browser/skin/preferences/alwaysAsk.png chrome://browser/skin/preferences/alwaysAsk-XP.png os=WINNT osversion<6 % override chrome://browser/skin/preferences/application.png chrome://browser/skin/preferences/application-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/preferences/mail.png chrome://browser/skin/preferences/mail-XP.png os=WINNT osversion<6 -% override chrome://browser/skin/preferences/Options.png chrome://browser/skin/preferences/Options-XP.png os=WINNT osversion<6 % override chrome://browser/skin/preferences/saveFile.png chrome://browser/skin/preferences/saveFile-XP.png os=WINNT osversion<6 % override chrome://browser/skin/actionicon-tab.png chrome://browser/skin/actionicon-tab-XPVista7.png os=WINNT osversion<=6.1 % override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-XPVista7.png os=WINNT osversion<=6.1 % override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7.png os=WINNT osversion<=6.1 % override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-XPVista7.png os=WINNT osversion<=6.1 % override chrome://browser/skin/reload-stop-go@2x.png chrome://browser/skin/reload-stop-go-XPVista7@2x.png os=WINNT osversion<=6.1 % override chrome://browser/skin/sync-horizontalbar.png chrome://browser/skin/sync-horizontalbar-XPVista7.png os=WINNT osversion<=6.1 @@ -290,18 +279,15 @@ browser.jar: % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-aero@2x.png os=WINNT osversion=6.1 % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.2 % override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/Toolbar-win8@2x.png os=WINNT osversion=6.3 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-XP.png os=WINNT osversion<6 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6.1 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.2 % override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.3 -% override chrome://browser/skin/preferences/checkbox.png chrome://browser/skin/preferences/checkbox-aero.png os=WINNT osversion=6 -% override chrome://browser/skin/preferences/checkbox.png chrome://browser/skin/preferences/checkbox-aero.png os=WINNT osversion=6.1 -% override chrome://browser/skin/preferences/checkbox.png chrome://browser/skin/preferences/checkbox-xp.png os=WINNT osversion<6 % override chrome://browser/skin/tabbrowser/tab-background-start.png chrome://browser/skin/tabbrowser/tab-background-start-preWin10.png os=WINNT osversion<=6.3 % override chrome://browser/skin/tabbrowser/tab-background-start@2x.png chrome://browser/skin/tabbrowser/tab-background-start-preWin10@2x.png os=WINNT osversion<=6.3 % override chrome://browser/skin/tabbrowser/tab-background-middle.png chrome://browser/skin/tabbrowser/tab-background-middle-preWin10.png os=WINNT osversion<=6.3 % override chrome://browser/skin/tabbrowser/tab-background-middle@2x.png chrome://browser/skin/tabbrowser/tab-background-middle-preWin10@2x.png os=WINNT osversion<=6.3 % override chrome://browser/skin/tabbrowser/tab-background-end.png chrome://browser/skin/tabbrowser/tab-background-end-preWin10.png os=WINNT osversion<=6.3 % override chrome://browser/skin/tabbrowser/tab-background-end@2x.png chrome://browser/skin/tabbrowser/tab-background-end-preWin10@2x.png os=WINNT osversion<=6.3
deleted file mode 100644 index 065f3c725227ab63a6543ad31c916eff27453611..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 245aed398952ec3211d9e0ec469b5f816bc074ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 4f99e62ada530dae2d3841e101c4a82537414f6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 899c39c603a41bceeb3d394375c0023aed62f7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 6205b45b19b8e05c06814c1edee1efc2916a88b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index cb7a5badd688ba469d19c6a53e21b3b91abc2f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index be1747e2406e0fd75c13e4f76dbd1c5874c387cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 9f7c1896f85b53b94a91e0dfda6631303dc56c7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 index 12a975d16bc99e72f32b8657b00826065b65aa4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@<O00001
--- a/browser/themes/windows/preferences/preferences.css +++ b/browser/themes/windows/preferences/preferences.css @@ -1,66 +1,15 @@ /* # -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- # 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/. */ -/* Global Styles */ -#BrowserPreferences radio[pane] { - list-style-image: url("chrome://browser/skin/preferences/Options.png"); - padding: 5px 3px 1px; -} - -radio[pane=paneMain] { - -moz-image-region: rect(0, 32px, 32px, 0); -} - -radio[pane=paneTabs] { - -moz-image-region: rect(0, 64px, 32px, 32px); -} - -#BrowserPreferences radio[pane=paneSearch] { - list-style-image: url("chrome://browser/skin/search-pref.png"); -} - -radio[pane=paneContent] { - -moz-image-region: rect(0, 96px, 32px, 64px); -} - -radio[pane=paneApplications] { - -moz-image-region: rect(0, 128px, 32px, 96px); -} - -radio[pane=panePrivacy] { - -moz-image-region: rect(0, 160px, 32px, 128px); -} - -radio[pane=paneSecurity] { - -moz-image-region: rect(0, 192px, 32px, 160px); -} - -radio[pane=paneAdvanced] { - -moz-image-region: rect(0, 224px, 32px, 192px); -} - -radio[pane=paneSync] { - list-style-image: url("chrome://browser/skin/preferences/Options-sync.png") !important; -} - -/* These lines should be removed as part of fixing bug 1140495 */ -label.small { - font-size: smaller; -} - -#tabPrefsBox { - margin: 6px; -} - /* General Pane */ #useFirefoxSync, #getStarted { font-size: 90%; } #isNotDefaultLabel { @@ -68,37 +17,16 @@ label.small { } /* Content Pane */ #translationAttributionImage { width: 70px; cursor: pointer; } -/* Applications Pane */ -#BrowserPreferences[animated="true"] #handlersView { - height: 25em; -} - -#BrowserPreferences[animated="false"] #handlersView { - -moz-box-flex: 1; -} - -/* Privacy Pane */ - -/* styles for the link elements copied from .text-link in global.css */ -.inline-link { - color: -moz-nativehyperlinktext; - text-decoration: none; -} - -.inline-link:hover { - text-decoration: underline; -} - /* Modeless Window Dialogs */ .windowDialog, .windowDialog prefpane { padding: 0; } .contentPane { margin: 9px 8px 5px;
--- a/devtools/client/inspector/markup/markup.js +++ b/devtools/client/inspector/markup/markup.js @@ -10,20 +10,24 @@ const {Cc, Ci} = require("chrome"); // Page size for pageup/pagedown const PAGE_SIZE = 10; const DEFAULT_MAX_CHILDREN = 100; const COLLAPSE_DATA_URL_REGEX = /^data.+base64/; const COLLAPSE_DATA_URL_LENGTH = 60; const NEW_SELECTION_HIGHLIGHTER_TIMER = 1000; -const DRAG_DROP_AUTOSCROLL_EDGE_DISTANCE = 50; -const DRAG_DROP_MIN_AUTOSCROLL_SPEED = 5; -const DRAG_DROP_MAX_AUTOSCROLL_SPEED = 15; +const DRAG_DROP_AUTOSCROLL_EDGE_MAX_DISTANCE = 50; +const DRAG_DROP_AUTOSCROLL_EDGE_RATIO = 0.1; +const DRAG_DROP_MIN_AUTOSCROLL_SPEED = 2; +const DRAG_DROP_MAX_AUTOSCROLL_SPEED = 8; const DRAG_DROP_MIN_INITIAL_DISTANCE = 10; +const DRAG_DROP_HEIGHT_TO_SPEED = 500; +const DRAG_DROP_HEIGHT_TO_SPEED_MIN = 0.5; +const DRAG_DROP_HEIGHT_TO_SPEED_MAX = 1; const AUTOCOMPLETE_POPUP_PANEL_ID = "markupview_autoCompletePopup"; const ATTR_COLLAPSE_ENABLED_PREF = "devtools.markup.collapseAttributes"; const ATTR_COLLAPSE_LENGTH_PREF = "devtools.markup.collapseAttributeLength"; const PREVIEW_MAX_DIM_PREF = "devtools.inspector.imagePreviewTooltipSize"; // Contains only void (without end tag) HTML elements const HTML_VOID_ELEMENTS = [ "area", "base", "br", "col", "command", "embed", "hr", "img", "input", "keygen", "link", "meta", "param", "source", @@ -247,49 +251,70 @@ MarkupView.prototype = { /** * Executed on each mouse-move while a node is being dragged in the view. * Auto-scrolls the view to reveal nodes below the fold to drop the dragged * node in. */ _autoScroll: function (event) { let docEl = this.doc.documentElement; - if (this._autoScrollInterval) { - clearInterval(this._autoScrollInterval); + if (this._autoScrollAnimationFrame) { + this.win.cancelAnimationFrame(this._autoScrollAnimationFrame); } // Auto-scroll when the mouse approaches top/bottom edge. let fromBottom = docEl.clientHeight - event.pageY + this.win.scrollY; let fromTop = event.pageY - this.win.scrollY; - - if (fromBottom <= DRAG_DROP_AUTOSCROLL_EDGE_DISTANCE) { - // Map our distance from 0-50 to 5-15 range so the speed is kept in a - // range not too fast, not too slow. + let edgeDistance = Math.min(DRAG_DROP_AUTOSCROLL_EDGE_MAX_DISTANCE, + docEl.clientHeight * DRAG_DROP_AUTOSCROLL_EDGE_RATIO); + + // The smaller the screen, the slower the movement. + let heightToSpeedRatio = + Math.max(DRAG_DROP_HEIGHT_TO_SPEED_MIN, + Math.min(DRAG_DROP_HEIGHT_TO_SPEED_MAX, + docEl.clientHeight / DRAG_DROP_HEIGHT_TO_SPEED)); + + if (fromBottom <= edgeDistance) { + // Map our distance range to a speed range so that the speed is not too + // fast or too slow. let speed = map( fromBottom, - 0, DRAG_DROP_AUTOSCROLL_EDGE_DISTANCE, + 0, edgeDistance, DRAG_DROP_MIN_AUTOSCROLL_SPEED, DRAG_DROP_MAX_AUTOSCROLL_SPEED); - this._autoScrollInterval = setInterval(() => { - docEl.scrollTop -= speed - DRAG_DROP_MAX_AUTOSCROLL_SPEED; - }, 0); + this._runUpdateLoop(() => { + docEl.scrollTop -= heightToSpeedRatio * + (speed - DRAG_DROP_MAX_AUTOSCROLL_SPEED); + }); } - if (fromTop <= DRAG_DROP_AUTOSCROLL_EDGE_DISTANCE) { + if (fromTop <= edgeDistance) { let speed = map( fromTop, - 0, DRAG_DROP_AUTOSCROLL_EDGE_DISTANCE, + 0, edgeDistance, DRAG_DROP_MIN_AUTOSCROLL_SPEED, DRAG_DROP_MAX_AUTOSCROLL_SPEED); - this._autoScrollInterval = setInterval(() => { - docEl.scrollTop += speed - DRAG_DROP_MAX_AUTOSCROLL_SPEED; - }, 0); + this._runUpdateLoop(() => { + docEl.scrollTop += heightToSpeedRatio * + (speed - DRAG_DROP_MAX_AUTOSCROLL_SPEED); + }); } }, + /** + * Run a loop on the requestAnimationFrame. + */ + _runUpdateLoop: function (update) { + let loop = () => { + update(); + this._autoScrollAnimationFrame = this.win.requestAnimationFrame(loop); + }; + loop(); + }, + _onMouseClick: function (event) { // From the target passed here, let's find the parent MarkupContainer // and ask it if the tooltip should be shown let parentNode = event.target; let container; while (parentNode !== this.doc.body) { if (parentNode.container) { container = parentNode.container; @@ -304,18 +329,18 @@ MarkupView.prototype = { container._buildEventTooltipContent(event.target, this.eventDetailsTooltip); } }, _onMouseUp: function () { this.indicateDropTarget(null); this.indicateDragTarget(null); - if (this._autoScrollInterval) { - clearInterval(this._autoScrollInterval); + if (this._autoScrollAnimationFrame) { + this.win.cancelAnimationFrame(this._autoScrollAnimationFrame); } }, _onCollapseAttributesPrefChange: function () { this.collapseAttributes = Services.prefs.getBoolPref(ATTR_COLLAPSE_ENABLED_PREF); this.collapseAttributeLength = Services.prefs.getIntPref(ATTR_COLLAPSE_LENGTH_PREF); @@ -331,18 +356,18 @@ MarkupView.prototype = { if (container.isDragging) { container.cancelDragging(); break; } } this.indicateDropTarget(null); this.indicateDragTarget(null); - if (this._autoScrollInterval) { - clearInterval(this._autoScrollInterval); + if (this._autoScrollAnimationFrame) { + this.win.cancelAnimationFrame(this._autoScrollAnimationFrame); } }, _hoveredNode: null, /** * Show a NodeFront's container as being hovered * @@ -358,18 +383,18 @@ MarkupView.prototype = { this.getContainer(this._hoveredNode).hovered = false; } this.getContainer(nodeFront).hovered = true; this._hoveredNode = nodeFront; }, _onMouseLeave: function () { - if (this._autoScrollInterval) { - clearInterval(this._autoScrollInterval); + if (this._autoScrollAnimationFrame) { + this.win.cancelAnimationFrame(this._autoScrollAnimationFrame); } if (this.isDragging) { return; } this._hideBoxModel(true); if (this._hoveredNode) { this.getContainer(this._hoveredNode).hovered = false; @@ -1879,16 +1904,17 @@ MarkupContainer.prototype = { * Which template to render for this container */ initialize: function (markupView, node, templateID) { this.markup = markupView; this.node = node; this.undo = this.markup.undo; this.win = this.markup._frame.contentWindow; this.id = "treeitem-" + markupContainerID++; + this.htmlElt = this.win.document.documentElement; // The template will fill the following properties this.elt = null; this.expander = null; this.tagState = null; this.tagLine = null; this.children = null; this.markup.template(templateID, this); @@ -2180,20 +2206,22 @@ MarkupContainer.prototype = { set isDragging(isDragging) { let rootElt = this.markup.getContainer(this.markup._rootNode).elt; this._isDragging = isDragging; this.markup.isDragging = isDragging; this.tagLine.setAttribute("aria-grabbed", isDragging); if (isDragging) { + this.htmlElt.classList.add("dragging"); this.elt.classList.add("dragging"); this.markup.doc.body.classList.add("dragging"); rootElt.setAttribute("aria-dropeffect", "move"); } else { + this.htmlElt.classList.remove("dragging"); this.elt.classList.remove("dragging"); this.markup.doc.body.classList.remove("dragging"); rootElt.setAttribute("aria-dropeffect", "none"); } }, get isDragging() { return this._isDragging; @@ -2520,16 +2548,17 @@ MarkupContainer.prototype = { this.elt.removeEventListener("dblclick", this._onToggle, false); this.tagLine.removeEventListener("keydown", this._onKeyDown, true); if (this.win) { this.win.removeEventListener("mouseup", this._onMouseUp, true); this.win.removeEventListener("mousemove", this._onMouseMove, true); } this.win = null; + this.htmlElt = null; if (this.expander) { this.expander.removeEventListener("click", this._onToggle, false); } // Recursively destroy children containers let firstChild = this.children.firstChild; while (firstChild) {
--- a/devtools/client/inspector/markup/test/browser.ini +++ b/devtools/client/inspector/markup/test/browser.ini @@ -1,16 +1,17 @@ [DEFAULT] tags = devtools subsuite = devtools support-files = actor_events_form.js doc_markup_anonymous.html doc_markup_dragdrop.html - doc_markup_dragdrop_autoscroll.html + doc_markup_dragdrop_autoscroll_01.html + doc_markup_dragdrop_autoscroll_02.html doc_markup_edit.html doc_markup_events1.html doc_markup_events2.html doc_markup_events3.html doc_markup_events_form.html doc_markup_events_jquery.html doc_markup_events-overflow.html doc_markup_flashing.html @@ -60,17 +61,18 @@ skip-if = os == "mac" # Full keyboard na skip-if = e10s # scratchpad.xul is not loading in e10s window [browser_markup_anonymous_03.js] [browser_markup_anonymous_04.js] [browser_markup_copy_image_data.js] subsuite = clipboard [browser_markup_css_completion_style_attribute_01.js] [browser_markup_css_completion_style_attribute_02.js] [browser_markup_css_completion_style_attribute_03.js] -[browser_markup_dragdrop_autoscroll.js] +[browser_markup_dragdrop_autoscroll_01.js] +[browser_markup_dragdrop_autoscroll_02.js] [browser_markup_dragdrop_distance.js] [browser_markup_dragdrop_draggable.js] [browser_markup_dragdrop_dragRootNode.js] [browser_markup_dragdrop_escapeKeyPress.js] [browser_markup_dragdrop_invalidNodes.js] [browser_markup_dragdrop_reorder.js] [browser_markup_dragdrop_tooltip.js] [browser_markup_events1.js]
rename from devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll.js rename to devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_01.js --- a/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll.js +++ b/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_01.js @@ -1,73 +1,51 @@ /* vim: set ts=2 et sw=2 tw=80: */ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; // Test that dragging a node near the top or bottom edge of the markup-view -// auto-scrolls the view. +// auto-scrolls the view on a large toolbox. -const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll.html"; +const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll_01.html"; add_task(function* () { + // Set the toolbox as large as it would get. The toolbox automatically shrinks + // to not overflow to window. + yield pushPref("devtools.toolbox.footer.height", 10000); + let {inspector} = yield openInspectorForURL(TEST_URL); let markup = inspector.markup; let viewHeight = markup.doc.documentElement.clientHeight; info("Pretend the markup-view is dragging"); markup.isDragging = true; info("Simulate a mousemove on the view, at the bottom, and expect scrolling"); - let onScrolled = waitForScrollStop(markup); + let onScrolled = waitForScrollStop(markup.doc); markup._onMouseMove({ preventDefault: () => {}, target: markup.doc.body, pageY: viewHeight }); let bottomScrollPos = yield onScrolled; ok(bottomScrollPos > 0, "The view was scrolled down"); info("Simulate a mousemove at the top and expect more scrolling"); - onScrolled = waitForScrollStop(markup); + onScrolled = waitForScrollStop(markup.doc); markup._onMouseMove({ preventDefault: () => {}, target: markup.doc.body, pageY: 0 }); let topScrollPos = yield onScrolled; ok(topScrollPos < bottomScrollPos, "The view was scrolled up"); is(topScrollPos, 0, "The view was scrolled up to the top"); info("Simulate a mouseup to stop dragging"); markup._onMouseUp(); }); - -/** - * Waits until the element has not scrolled for 30 consecutive frames. - */ -function* waitForScrollStop(markup) { - let el = markup.doc.documentElement; - let win = markup.doc.defaultView; - let lastScrollTop = el.scrollTop; - let stopFrameCount = 0; - while (stopFrameCount < 30) { - // Wait for a frame. - yield new Promise(resolve => win.requestAnimationFrame(resolve)); - - // Check if the element has scrolled. - if (lastScrollTop == el.scrollTop) { - // No scrolling since the last frame. - stopFrameCount++; - } else { - // The element has scrolled. Reset the frame counter. - stopFrameCount = 0; - lastScrollTop = el.scrollTop; - } - } - - return lastScrollTop; -}
new file mode 100644 --- /dev/null +++ b/devtools/client/inspector/markup/test/browser_markup_dragdrop_autoscroll_02.js @@ -0,0 +1,50 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Test that dragging a node near the top or bottom edge of the markup-view +// auto-scrolls the view on a small toolbox. + +const TEST_URL = URL_ROOT + "doc_markup_dragdrop_autoscroll_02.html"; + +add_task(function* () { + // Set the toolbox to very small in size. + yield pushPref("devtools.toolbox.footer.height", 150); + + let {inspector} = yield openInspectorForURL(TEST_URL); + let markup = inspector.markup; + let viewHeight = markup.doc.documentElement.clientHeight; + + info("Pretend the markup-view is dragging"); + markup.isDragging = true; + + info("Simulate a mousemove on the view, at the bottom, and expect scrolling"); + let onScrolled = waitForScrollStop(markup.doc); + + markup._onMouseMove({ + preventDefault: () => {}, + target: markup.doc.body, + pageY: viewHeight + }); + + let bottomScrollPos = yield onScrolled; + ok(bottomScrollPos > 0, "The view was scrolled down"); + + info("Simulate a mousemove at the top and expect more scrolling"); + onScrolled = waitForScrollStop(markup.doc); + + markup._onMouseMove({ + preventDefault: () => {}, + target: markup.doc.body, + pageY: 0 + }); + + let topScrollPos = yield onScrolled; + ok(topScrollPos < bottomScrollPos, "The view was scrolled up"); + is(topScrollPos, 0, "The view was scrolled up to the top"); + + info("Simulate a mouseup to stop dragging"); + markup._onMouseUp(); +});
new file mode 100644 --- /dev/null +++ b/devtools/client/inspector/markup/test/doc_markup_dragdrop_autoscroll_01.html @@ -0,0 +1,87 @@ +<!DOCTYPE HTML> +<html> +<!-- +https://bugzilla.mozilla.org/show_bug.cgi?id=858038 +https://bugzilla.mozilla.org/show_bug.cgi?id=1226898 +--> +<head> + <meta charset="utf-8"> + <title>Test for Bug 858038 and 1226898 - Autoscroll</title> +</head> +<body> + <div id="first"></div> + <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=858038">Mozilla Bug 858038</a> + <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1226898">Mozilla Bug 1226898</a> + <p id="display">Test</p> + <div id="content" style="display: none"> + + </div> + + <!-- Make sure the markup-view has enough nodes shown by default that it has a scrollbar --> + + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> +</body> +</html>
rename from devtools/client/inspector/markup/test/doc_markup_dragdrop_autoscroll.html rename to devtools/client/inspector/markup/test/doc_markup_dragdrop_autoscroll_02.html --- a/devtools/client/inspector/markup/test/doc_markup_dragdrop_autoscroll.html +++ b/devtools/client/inspector/markup/test/doc_markup_dragdrop_autoscroll_02.html @@ -1,20 +1,22 @@ <!DOCTYPE HTML> <html> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=858038 +https://bugzilla.mozilla.org/show_bug.cgi?id=1226898 --> <head> <meta charset="utf-8"> - <title>Test for Bug 858038 - Autoscroll</title> + <title>Test for Bug 858038 and 1226898 - Autoscroll</title> </head> <body> <div id="first"></div> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=858038">Mozilla Bug 858038</a> + <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1226898">Mozilla Bug 1226898</a> <p id="display">Test</p> <div id="content" style="display: none"> </div> <!-- Make sure the markup-view has enough nodes shown by default that it has a scrollbar --> <div></div> @@ -42,10 +44,20 @@ https://bugzilla.mozilla.org/show_bug.cg <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> + <div></div> </body> </html>
--- a/devtools/client/inspector/markup/test/head.js +++ b/devtools/client/inspector/markup/test/head.js @@ -579,8 +579,34 @@ function* simulateNodeDrop(inspector, se * the MarkupContainer for this node. * @param {Number} xOffset Optional x offset to drag by. * @param {Number} yOffset Optional y offset to drag by. */ function* simulateNodeDragAndDrop(inspector, selector, xOffset, yOffset) { yield simulateNodeDrag(inspector, selector, xOffset, yOffset); yield simulateNodeDrop(inspector, selector); } + +/** + * Waits until the element has not scrolled for 30 consecutive frames. + */ +function* waitForScrollStop(doc) { + let el = doc.documentElement; + let win = doc.defaultView; + let lastScrollTop = el.scrollTop; + let stopFrameCount = 0; + while (stopFrameCount < 30) { + // Wait for a frame. + yield new Promise(resolve => win.requestAnimationFrame(resolve)); + + // Check if the element has scrolled. + if (lastScrollTop == el.scrollTop) { + // No scrolling since the last frame. + stopFrameCount++; + } else { + // The element has scrolled. Reset the frame counter. + stopFrameCount = 0; + lastScrollTop = el.scrollTop; + } + } + + return lastScrollTop; +}
--- a/devtools/client/themes/markup.css +++ b/devtools/client/themes/markup.css @@ -31,16 +31,20 @@ body { min-width: 100%; } /* Don't display a parent-child outline for the root elements */ #root > ul > li > .children { background: none; } +html.dragging { + overflow-x: hidden; +} + body.dragging .tag-line { cursor: grabbing; } #root-wrapper:after { content: ""; display: block; clear: both;
new file mode 100644 --- /dev/null +++ b/devtools/client/webconsole/new-console-output/components/grip-message-body.js @@ -0,0 +1,30 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 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/. */ + +"use strict"; + +// React +const { + PropTypes +} = require("devtools/client/shared/vendor/react"); +const { createFactories } = require("devtools/client/shared/components/reps/rep-utils"); +const { Rep } = createFactories(require("devtools/client/shared/components/reps/rep")); +const { Grip } = require("devtools/client/shared/components/reps/grip"); + +GripMessageBody.displayName = "GripMessageBody"; + +GripMessageBody.propTypes = { + grip: PropTypes.object.isRequired, +}; + +function GripMessageBody(props) { + return Rep({ + object: props.grip, + defaultRep: Grip + }); +} + +module.exports.GripMessageBody = GripMessageBody;
--- a/devtools/client/webconsole/new-console-output/components/message-types/console-api-call.js +++ b/devtools/client/webconsole/new-console-output/components/message-types/console-api-call.js @@ -7,65 +7,55 @@ "use strict"; // React & Redux const { createFactory, DOM: dom, PropTypes } = require("devtools/client/shared/vendor/react"); +const GripMessageBody = createFactory(require("devtools/client/webconsole/new-console-output/components/grip-message-body").GripMessageBody); const MessageRepeat = createFactory(require("devtools/client/webconsole/new-console-output/components/message-repeat").MessageRepeat); const MessageIcon = createFactory(require("devtools/client/webconsole/new-console-output/components/message-icon").MessageIcon); ConsoleApiCall.displayName = "ConsoleApiCall"; ConsoleApiCall.propTypes = { message: PropTypes.object.isRequired, }; function ConsoleApiCall(props) { const { message } = props; - const messageBody = - dom.span({className: "message-body devtools-monospace"}, - formatTextContent(message.data)); + + const counter = message.data.counter; + const messageBody = counter ? + `${counter.label}: ${counter.count}` : + message.data.arguments.map((arg) => GripMessageBody({grip: arg})); + const icon = MessageIcon({severity: message.severity}); const repeat = MessageRepeat({repeat: message.repeat}); - const children = [ - messageBody, - repeat - ]; // @TODO Use of "is" is a temporary hack to get the category and severity // attributes to be applied. There are targeted in webconsole's CSS rules, // so if we remove this hack, we have to modify the CSS rules accordingly. return dom.div({ class: "message cm-s-mozilla", is: "fdt-message", category: message.category, severity: message.severity }, + // @TODO add timestamp + // @TODO add indent if necessary icon, dom.span({className: "message-body-wrapper"}, dom.span({}, dom.span({className: "message-flex-body"}, - children + dom.span({className: "message-body devtools-monospace"}, + messageBody + ), + repeat ) ) ) ); } -function formatTextContent(data) { - return data.arguments.map(function (arg, i, arr) { - if (data.counter) { - let {label, count} = data.counter; - arg = `${label}: ${count}`; - } - - const str = dom.span({className: "console-string"}, arg); - if (i < arr.length - 1) { - return [str, " "]; - } - return str; - }); -} - module.exports.ConsoleApiCall = ConsoleApiCall;
deleted file mode 100644 --- a/devtools/client/webconsole/new-console-output/components/message-types/date-preview.js +++ /dev/null @@ -1,60 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 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/. */ - -"use strict"; - -// React & Redux -const { - createFactory, - DOM: dom, - PropTypes -} = require("devtools/client/shared/vendor/react"); - -const VariablesViewLink = createFactory(require("devtools/client/webconsole/new-console-output/components/variables-view-link").VariablesViewLink); -const MessageIcon = createFactory(require("devtools/client/webconsole/new-console-output/components/message-icon").MessageIcon); - -DatePreview.displayName = "DatePreview"; - -DatePreview.propTypes = { - data: PropTypes.object.isRequired, -}; - -function DatePreview(props) { - const { data, category, severity } = props; - const { preview } = data; - - const dateString = new Date(preview.timestamp).toISOString(); - const textNodes = [ - VariablesViewLink({ - objectActor: data, - label: "Date" - }), - dom.span({ className: "cm-string-2" }, ` ${dateString}`) - ]; - const icon = MessageIcon({ severity }); - - // @TODO Use of "is" is a temporary hack to get the category and severity - // attributes to be applied. There are targeted in webconsole's CSS rules, - // so if we remove this hack, we have to modify the CSS rules accordingly. - return dom.div({ - class: "message cm-s-mozilla", - is: "fdt-message", - category: category, - severity: severity - }, - icon, - dom.span({ - className: "message-body-wrapper message-body devtools-monospace" - }, dom.span({}, - dom.span({ className: "class-Date" }, - textNodes - ) - ) - ) - ); -} - -module.exports.DatePreview = DatePreview;
--- a/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js +++ b/devtools/client/webconsole/new-console-output/components/message-types/evaluation-result.js @@ -4,39 +4,46 @@ * 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"; // React & Redux const { createFactory, + DOM: dom, PropTypes } = require("devtools/client/shared/vendor/react"); +const GripMessageBody = createFactory(require("devtools/client/webconsole/new-console-output/components/grip-message-body").GripMessageBody); +const MessageIcon = createFactory(require("devtools/client/webconsole/new-console-output/components/message-icon").MessageIcon); EvaluationResult.displayName = "EvaluationResult"; EvaluationResult.propTypes = { message: PropTypes.object.isRequired, }; function EvaluationResult(props) { const { message } = props; - let PreviewComponent = getPreviewComponent(message.data); + const icon = MessageIcon({severity: message.severity}); - return PreviewComponent({ - data: message.data, + // @TODO Use of "is" is a temporary hack to get the category and severity + // attributes to be applied. There are targeted in webconsole's CSS rules, + // so if we remove this hack, we have to modify the CSS rules accordingly. + return dom.div({ + class: "message cm-s-mozilla", + is: "fdt-message", category: message.category, severity: message.severity - }); -} - -function getPreviewComponent(data) { - if (typeof data.class != "undefined") { - switch (data.class) { - case "Date": - return createFactory(require("devtools/client/webconsole/new-console-output/components/message-types/date-preview").DatePreview); - } - } - return createFactory(require("devtools/client/webconsole/new-console-output/components/message-types/default-renderer").DefaultRenderer); + }, + // @TODO add timestamp + // @TODO add indent if needed with console.group + icon, + dom.span( + {className: "message-body-wrapper message-body devtools-monospace"}, + dom.span({}, + GripMessageBody({grip: message.data}) + ) + ) + ); } module.exports.EvaluationResult = EvaluationResult;
--- a/devtools/client/webconsole/new-console-output/components/message-types/moz.build +++ b/devtools/client/webconsole/new-console-output/components/message-types/moz.build @@ -1,12 +1,11 @@ # vim: set filetype=python: # 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/. DevToolsModules( 'console-api-call.js', - 'date-preview.js', 'default-renderer.js', 'evaluation-result.js', 'page-error.js', )
--- a/devtools/client/webconsole/new-console-output/components/moz.build +++ b/devtools/client/webconsole/new-console-output/components/moz.build @@ -4,13 +4,14 @@ # file, You can obtain one at http://mozilla.org/MPL/2.0/. DIRS += [ 'message-types' ] DevToolsModules( 'console-output.js', + 'grip-message-body.js', 'message-container.js', 'message-icon.js', 'message-repeat.js', 'variables-view-link.js' )
--- a/devtools/client/webconsole/new-console-output/test/components/chrome.ini +++ b/devtools/client/webconsole/new-console-output/test/components/chrome.ini @@ -1,13 +1,12 @@ [DEFAULT] support-files = head.js [test_console-api-call.html] [test_console-api-call_repeat.html] -[test_date-preview.html] [test_evaluation-result.html] [test_message-icon.html] [test_message-container.html] [test_message-repeat.html] [test_page-error.html]
--- a/devtools/client/webconsole/new-console-output/test/components/head.js +++ b/devtools/client/webconsole/new-console-output/test/components/head.js @@ -27,22 +27,24 @@ var { require: browserRequire } = Browse let ReactDOM = browserRequire("devtools/client/shared/vendor/react-dom"); let React = browserRequire("devtools/client/shared/vendor/react"); var TestUtils = React.addons.TestUtils; let testCommands = new Map(); testCommands.set("console.log()", { command: "console.log('foobar', 'test')", commandType: "consoleAPICall", - expectedText: "foobar test" + // @TODO should output: foobar test + expectedText: "\"foobar\"\"test\"" }); testCommands.set("new Date()", { command: "new Date(448156800000)", commandType: "evaluationResult", - expectedText: "Date 1984-03-15T00:00:00.000Z" + // @TODO should output: Date 1984-03-15T00:00:00.000Z + expectedText: "1984-03-15T00:00:00.000Z" }); testCommands.set("pageError", { command: null, commandType: "pageError", expectedText: "ReferenceError: asdf is not defined" }); function* getPacket(command, type = "evaluationResult") {
--- a/devtools/client/webconsole/new-console-output/test/components/test_console-api-call.html +++ b/devtools/client/webconsole/new-console-output/test/components/test_console-api-call.html @@ -7,55 +7,52 @@ <script type="application/javascript;version=1.8" src="head.js"></script> <!-- Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ --> </head> <body> <p>Test for ConsoleApiCall component</p> <script type="text/javascript;version=1.8"> +const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages"); +const { ConsoleApiCall } = require("devtools/client/webconsole/new-console-output/components/message-types/console-api-call"); + window.onload = Task.async(function* () { - const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages"); - const { ConsoleApiCall } = require("devtools/client/webconsole/new-console-output/components/message-types/console-api-call"); + yield testConsoleLog(); + yield testConsoleCount(); + SimpleTest.finish() +}); + +function testConsoleLog() { const packet = yield getPacket("console.log('foobar', 'test')", "consoleAPICall"); const message = prepareMessage(packet); const rendered = renderComponent(ConsoleApiCall, {message}); const messageBody = getMessageBody(rendered); - const consoleStringNodes = getConsoleStringNodes(messageBody); + // @TODO should output: foobar test + is(messageBody.textContent, "\"foobar\"\"test\"", "ConsoleApiCall outputs expected text"); + + const consoleStringNodes = messageBody.querySelectorAll(".objectBox"); is(consoleStringNodes.length, 2, "ConsoleApiCall outputs expected HTML structure"); - is(messageBody.textContent, "foobar test", "ConsoleApiCall outputs expected text"); +} +function testConsoleCount() { for (let i = 0; i < 3; i++) { - const countPacket = yield getPacket("console.count('bar')", "consoleAPICall"); - const countMessage = prepareMessage(countPacket); - const countRendered = renderComponent(ConsoleApiCall, {message: countMessage}); - testConsoleCountRenderedElement(countRendered, `bar: ${i + 1}`); + const packet = yield getPacket("console.count('bar')", "consoleAPICall"); + const message = prepareMessage(packet); + const rendered = renderComponent(ConsoleApiCall, {message: message}); + const messageBody = getMessageBody(rendered); + + const expected = `bar: ${i + 1}`; + is(messageBody.textContent, expected, + "console.count has the expected text content: ${expected}"); } - - SimpleTest.finish() -}); +} function getMessageBody(renderedComponent) { - const queryPath = "div.message.cm-s-mozilla span span.message-flex-body " + - "span.message-body.devtools-monospace"; + const queryPath = "div.message.cm-s-mozilla span span.message-flex-body span.message-body.devtools-monospace"; return renderedComponent.querySelector(queryPath); } -function getConsoleStringNodes(messageBody) { - return messageBody.querySelectorAll("span.console-string"); -} - -function testConsoleCountRenderedElement(renderedComponent, expectedTextContent) { - info("Testing console.count rendered element"); - - const messageBody = getMessageBody(renderedComponent); - const consoleStringNodes = getConsoleStringNodes(messageBody); - - is(consoleStringNodes.length, 1, - "console.count rendered element has the expected HTML structure"); - is(messageBody.textContent, expectedTextContent, - "console.count rendered element has the expected text content"); -} </script> </body> </html>
--- a/devtools/client/webconsole/new-console-output/test/components/test_console-api-call_repeat.html +++ b/devtools/client/webconsole/new-console-output/test/components/test_console-api-call_repeat.html @@ -18,17 +18,18 @@ window.onload = Task.async(function* () const packet = yield getPacket("console.log('foobar', 'test')", "consoleAPICall"); const message = prepareMessage(packet); message.repeat = 107; const rendered = renderComponent(ConsoleApiCall, {message}); const messageBodyPath = "span > span.message-flex-body > span.message-body.devtools-monospace"; const messageBody = rendered.querySelectorAll(messageBodyPath); - is(messageBody[0].textContent, "foobar test", "ConsoleApiCall outputs expected text for repeated message"); + // @TODO Expected output should be: foobar test + is(messageBody[0].textContent, "\"foobar\"\"test\"", "ConsoleApiCall outputs expected text for repeated message"); const repeatPath = "span > span.message-flex-body > span.message-body.devtools-monospace + span.message-repeats"; const repeat = rendered.querySelectorAll(repeatPath); is(repeat[0].textContent, `${message.repeat}`, "ConsoleApiCall outputs correct repeat count"); SimpleTest.finish() }); </script>
deleted file mode 100644 --- a/devtools/client/webconsole/new-console-output/test/components/test_date-preview.html +++ /dev/null @@ -1,41 +0,0 @@ -<!DOCTYPE HTML> -<html lang="en"> -<head> - <meta charset="utf8"> - <title>Test for DatePreview component</title> - <script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> - <script type="application/javascript;version=1.8" src="head.js"></script> - <!-- Any copyright is dedicated to the Public Domain. - - http://creativecommons.org/publicdomain/zero/1.0/ --> -</head> -<body> -<p>Test for DatePreview component</p> - -<script type="text/javascript;version=1.8"> -window.onload = Task.async(function* () { - const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages"); - const { DatePreview } = require("devtools/client/webconsole/new-console-output/components/message-types/date-preview"); - - const testCommand = testCommands.get("new Date()"); - const packet = yield getPacket(testCommand.command, testCommand.commandType); - const message = prepareMessage(packet); - const props = { - data: message.data, - severity: message.severity, - category: message.category, - }; - const rendered = renderComponent(DatePreview, props); - - const queryPathBase = "div.message.cm-s-mozilla span.message-body-wrapper.message-body.devtools-monospace span span.class-Date"; - - const preview = rendered.querySelectorAll(queryPathBase); - is(preview[0].textContent, testCommand.expectedText, "DatePreview outputs expected text"); - - const link = rendered.querySelectorAll(`${queryPathBase} a[draggable=false][href="#"].cm-variable`); - is(link.length, 1, "DatePreview outputs the variables view link"); - - SimpleTest.finish() -}); -</script> -</body> -</html>
--- a/devtools/client/webconsole/new-console-output/test/components/test_evaluation-result.html +++ b/devtools/client/webconsole/new-console-output/test/components/test_evaluation-result.html @@ -10,61 +10,37 @@ </head> <body> <p>Test for EvaluationResult component</p> <script type="text/javascript;version=1.8"> window.onload = Task.async(function* () { const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages"); const { - EvaluationResult, - getPreviewComponent + EvaluationResult } = require("devtools/client/webconsole/new-console-output/components/message-types/evaluation-result"); - yield testFullRender(); - yield testGetPreviewComponent(); + yield testDate(); SimpleTest.finish() /** - * Test that passing in a message correctly wires up all the children. - * - * The different combinations of children are tested in separate per-component - * tests. This test just ensures that this component pipes data to its children. + * Test that evaluation result correctly outputs date results. */ - function testFullRender() { - const testValue = testCommands.get("new Date()"); - const packet = yield getPacket(testValue.command, testValue.commandType); + function testDate() { + const testCommand = testCommands.get("new Date()"); + const packet = yield getPacket(testCommand.command, testCommand.commandType); const message = prepareMessage(packet); const props = { message }; const rendered = renderComponent(EvaluationResult, props); - ok(rendered.textContent.includes(testValue.expectedText), - "EvaluationResult pipes data to its children as expected"); -} + const queryPathBase = "div.message.cm-s-mozilla span.message-body-wrapper.message-body.devtools-monospace span .objectLink"; - /** - * Test that getPreviewComponent() returns correct component for each object type. - */ - function testGetPreviewComponent() { - const testValues = [ - { - commandObj: testCommands.get("new Date()"), - expectedComponent: require("devtools/client/webconsole/new-console-output/components/message-types/date-preview").DatePreview - } - ]; - - for (let testValue of testValues) { - const { commandObj, expectedComponent } = testValue; - const packet = yield getPacket(commandObj.command, commandObj.commandType); - const message = prepareMessage(packet); - const rendered = shallowRenderComponent(EvaluationResult, {message}); - is(rendered.type, expectedComponent, - `EvaluationResult nests ${expectedComponent} based on command: ${commandObj.command}`); - } + const preview = rendered.querySelectorAll(queryPathBase); + is(preview[0].textContent, testCommand.expectedText, "EvaluationResult outputs expected text"); } }); </script> </body> </html>
--- a/devtools/client/webconsole/new-console-output/utils/messages.js +++ b/devtools/client/webconsole/new-console-output/utils/messages.js @@ -78,17 +78,21 @@ function prepareMessage(packet) { if (data.warning || data.strict) { severity = SEVERITY_CLASS_FRAGMENTS[SEVERITY_WARNING]; } else if (data.info) { severity = SEVERITY_CLASS_FRAGMENTS[SEVERITY_LOG]; } break; case "evaluationResult": default: - data = Object.assign({}, packet.result); + if (typeof packet.result === "object") { + data = Object.assign({}, packet.result); + } else { + data = packet.result; + } allowRepeating = true; category = CATEGORY_CLASS_FRAGMENTS[CATEGORY_OUTPUT]; messageType = "EvaluationResult"; repeat = 1; repeatId = getRepeatId(data); severity = SEVERITY_CLASS_FRAGMENTS[SEVERITY_LOG]; break; }
--- a/devtools/server/actors/webconsole.js +++ b/devtools/server/actors/webconsole.js @@ -215,18 +215,17 @@ WebConsoleActor.prototype = * @private * @param nsIDOMWindow window * The window to store on the actor (can be null). */ _handleNewWindow: function WCA__handleNewWindow(window) { if (window) { if (this._hadChromeWindow) { - let contextChangedMsg = WebConsoleActor.l10n.getStr("evaluationContextChanged"); - Services.console.logStringMessage(contextChangedMsg); + Services.console.logStringMessage('Webconsole context has changed'); } this._lastChromeWindow = Cu.getWeakReference(window); this._hadChromeWindow = true; } else { this._lastChromeWindow = null; } },
--- a/mobile/android/base/java/org/mozilla/gecko/gcm/GcmInstanceIDListenerService.java +++ b/mobile/android/base/java/org/mozilla/gecko/gcm/GcmInstanceIDListenerService.java @@ -23,13 +23,13 @@ public class GcmInstanceIDListenerServic * InstanceID provider. */ @Override public void onTokenRefresh() { Log.d("GeckoPushGCM", "Token refresh request received. Processing on background thread."); ThreadUtils.postToBackgroundThread(new Runnable() { @Override public void run() { - PushService.getInstance().onRefresh(); + PushService.getInstance(GcmInstanceIDListenerService.this).onRefresh(); } }); } }
--- a/mobile/android/base/java/org/mozilla/gecko/gcm/GcmMessageListenerService.java +++ b/mobile/android/base/java/org/mozilla/gecko/gcm/GcmMessageListenerService.java @@ -25,14 +25,14 @@ public class GcmMessageListenerService e * @param bundle Data bundle containing message data as key/value pairs. */ @Override public void onMessageReceived(final String from, final Bundle bundle) { Log.d("GeckoPushGCM", "Message received. Processing on background thread."); ThreadUtils.postToBackgroundThread(new Runnable() { @Override public void run() { - PushService.getInstance().onMessageReceived( + PushService.getInstance(GcmMessageListenerService.this).onMessageReceived( GcmMessageListenerService.this, bundle); } }); } }
--- a/mobile/android/base/java/org/mozilla/gecko/push/PushService.java +++ b/mobile/android/base/java/org/mozilla/gecko/push/PushService.java @@ -61,19 +61,19 @@ public class PushService implements Bund "PushServiceAndroidGCM:Uninitialized", "PushServiceAndroidGCM:RegisterUserAgent", "PushServiceAndroidGCM:UnregisterUserAgent", "PushServiceAndroidGCM:SubscribeChannel", "PushServiceAndroidGCM:UnsubscribeChannel", "History:GetPrePathLastVisitedTimeMilliseconds", }; - public static synchronized PushService getInstance() { + public static synchronized PushService getInstance(Context context) { if (sInstance == null) { - throw new IllegalStateException("PushService not yet created!"); + onCreate(context); } return sInstance; } @ReflectionTarget public static synchronized void onCreate(Context context) { if (sInstance != null) { throw new IllegalStateException("PushService already created!");
--- a/toolkit/themes/linux/global/in-content/common.css +++ b/toolkit/themes/linux/global/in-content/common.css @@ -85,18 +85,17 @@ xul|checkbox:not([disabled="true"]):hove color: var(--in-content-text-color); } xul|*.numberbox-input-box { -moz-appearance: none; border-width: 0; } -xul|*.text-link:-moz-focusring, -xul|*.inline-link:-moz-focusring { +xul|*.text-link:-moz-focusring { border: 1px dotted -moz-DialogText; } xul|menulist:-moz-focusring > xul|*.menulist-label-box, xul|radio[focused="true"] > xul|*.radio-label-box, html|input[type="checkbox"]:-moz-focusring + html|label:before, xul|checkbox:-moz-focusring > xul|*.checkbox-label-box { outline: 1px dotted;
--- a/toolkit/themes/osx/global/in-content/common.css +++ b/toolkit/themes/osx/global/in-content/common.css @@ -71,18 +71,17 @@ xul|*.numberbox-input-box { border-width: 0; } xul|description { font-size: 1.25rem; line-height: 22px; } -xul|*.text-link:-moz-focusring, -xul|*.inline-link:-moz-focusring { +xul|*.text-link:-moz-focusring { color: var(--in-content-link-highlight); text-decoration: underline; box-shadow: none; } xul|button:-moz-focusring, xul|menulist:-moz-focusring, xul|checkbox:-moz-focusring > .checkbox-check,
--- a/toolkit/themes/shared/in-content/common.inc.css +++ b/toolkit/themes/shared/in-content/common.inc.css @@ -446,36 +446,33 @@ html|input[type="text"]:disabled, html|textarea:disabled, xul|textbox[disabled="true"] { opacity: 0.5; } /* Links */ html|a, -.text-link, -.inline-link { +.text-link { color: var(--in-content-link-color); text-decoration: none; } html|a:hover, -.text-link:hover, -.inline-link:hover { +.text-link:hover { color: var(--in-content-link-color-hover); text-decoration: underline; } html|a:visited { color: var(--in-content-link-color-visited); } html|a:hover:active, -.text-link:hover:active, -.inline-link:hover:active { +.text-link:hover:active { color: var(--in-content-link-color-active); text-decoration: none; } /* Checkboxes and radio buttons */ /* Hide the actual checkbox */ html|input[type="checkbox"] {
--- a/toolkit/themes/windows/global/in-content/common.css +++ b/toolkit/themes/windows/global/in-content/common.css @@ -59,17 +59,16 @@ xul|*.checkbox-icon { /* Never draw a border for the focusring, use outline instead */ xul|*.button-box, xul|*.menulist-label-box, xul|*.radio-label-box, xul|*.checkbox-label-box { border-style: none; } -xul|*.inline-link:-moz-focusring, xul|button:-moz-focusring > xul|*.button-box, xul|menulist:-moz-focusring > xul|*.menulist-label-box, xul|radio[focused="true"] > xul|*.radio-label-box, html|input[type="checkbox"]:-moz-focusring + html|label:before, xul|checkbox:-moz-focusring > xul|*.checkbox-label-box { outline: 1px dotted; }