diff --git a/browser/components/extensions/test/browser/browser-common.ini b/browser/components/extensions/test/browser/browser-common.ini index 1ae78777aba3..55e11d30d7af 100644 --- a/browser/components/extensions/test/browser/browser-common.ini +++ b/browser/components/extensions/test/browser/browser-common.ini @@ -60,7 +60,7 @@ skip-if = (debug && os == 'linux' && bits == 32) || (os == 'win' && !debug) # Bu [browser_ext_browserAction_popup_preload.js] skip-if = (os == 'win' && !debug) || (verify && debug && (os == 'mac')) # bug 1352668 [browser_ext_browserAction_popup_resize.js] -skip-if = (os == 'mac' && debug) # Bug 1482004, also fails in test-verify +skip-if = (os == 'mac' || os == 'win' || os == 'linux') || (verify && debug) #Bug 1482004,1483701 [browser_ext_browserAction_simple.js] [browser_ext_browserAction_telemetry.js] [browser_ext_browserAction_theme_icons.js] diff --git a/devtools/client/debugger/new/test/mochitest/browser.ini b/devtools/client/debugger/new/test/mochitest/browser.ini index 1bf51600fe1b..549ead677bfd 100644 --- a/devtools/client/debugger/new/test/mochitest/browser.ini +++ b/devtools/client/debugger/new/test/mochitest/browser.ini @@ -592,6 +592,7 @@ support-files = examples/fetch.js examples/doc-xhr.html examples/doc-xhr-run-to-completion.html + examples/doc-scroll-run-to-completion.html examples/sum/sum.js examples/sum/sum.min.js examples/sum/sum.min.js.map @@ -650,6 +651,8 @@ support-files = examples/script-switching-02.js examples/script-switching-01.js examples/times2.js + examples/doc-windowless-workers.html + examples/simple-worker.js examples/doc_rr_basic.html examples/doc_rr_continuous.html examples/doc_rr_logs.html @@ -662,6 +665,7 @@ support-files = skip-if = (os == "win" && ccov) # Bug 1453549 [browser_dbg-xhr-breakpoints.js] [browser_dbg-xhr-run-to-completion.js] +[browser_dbg-scroll-run-to-completion.js] [browser_dbg-sourcemapped-scopes.js] skip-if = ccov || (verify && debug && (os == 'linux')) # Bug 1441545 [browser_dbg-sourcemapped-stepping.js] @@ -762,6 +766,7 @@ skip-if = os == "win" skip-if = os == "win" [browser_dbg-wasm-sourcemaps.js] skip-if = true +[browser_dbg-windowless-workers.js] [browser_dbg_rr_breakpoints-01.js] skip-if = os != "mac" || debug || !nightly_build [browser_dbg_rr_breakpoints-02.js] diff --git a/devtools/client/debugger/new/test/mochitest/browser_dbg-scroll-run-to-completion.js b/devtools/client/debugger/new/test/mochitest/browser_dbg-scroll-run-to-completion.js new file mode 100644 index 000000000000..b2128c489013 --- /dev/null +++ b/devtools/client/debugger/new/test/mochitest/browser_dbg-scroll-run-to-completion.js @@ -0,0 +1,19 @@ +/* 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 . */ + +add_task(async function() { + const dbg = await initDebugger("doc-scroll-run-to-completion.html"); + invokeInTab("pauseOnce", "doc-scroll-run-to-completion.html"); + await waitForPaused(dbg); + assertPausedLocation(dbg); + + const threadClient = dbg.toolbox.threadClient; + await checkEvaluateInTopFrame(threadClient, 'window.scrollBy(0, 10);', undefined); + + // checkEvaluateInTopFrame does an implicit resume for some reason. + await waitForPaused(dbg); + + resume(dbg); + await once(Services.ppmm, "test passed"); +}); diff --git a/devtools/client/debugger/new/test/mochitest/browser_dbg-windowless-workers.js b/devtools/client/debugger/new/test/mochitest/browser_dbg-windowless-workers.js new file mode 100644 index 000000000000..5610a28a4b05 --- /dev/null +++ b/devtools/client/debugger/new/test/mochitest/browser_dbg-windowless-workers.js @@ -0,0 +1,45 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test basic windowless worker functionality: the main thread and worker can be +// separately controlled from the same debugger. +add_task(async function() { + await pushPref("devtools.debugger.features.windowless-workers", true); + + const dbg = await initDebugger("doc-windowless-workers.html"); + const mainThread = dbg.toolbox.threadClient.actor; + + const workers = await getWorkers(dbg); + ok(workers.length == 1, "Got one worker"); + const workerThread = workers[0].actor; + + const mainThreadSource = findSource(dbg, "doc-windowless-workers.html"); + const workerSource = findSource(dbg, "simple-worker.js"); + + assertNotPaused(dbg); + + await dbg.actions.breakOnNext(); + await waitForPaused(dbg, "doc-windowless-workers.html"); + + // We should be paused at the timer in doc-windowless-workers.html + assertPausedAtSourceAndLine(dbg, mainThreadSource.id, 9); + + await dbg.actions.selectThread(workerThread); + assertNotPaused(dbg); + + await dbg.actions.breakOnNext(); + await waitForPaused(dbg, "simple-worker.js"); + + // We should be paused at the timer in simple-worker.js + assertPausedAtSourceAndLine(dbg, workerSource.id, 3); + + await stepOver(dbg); + assertPausedAtSourceAndLine(dbg, workerSource.id, 4); + + await dbg.actions.selectThread(mainThread); + + await stepOver(dbg); + assertPausedAtSourceAndLine(dbg, mainThreadSource.id, 10); +}); diff --git a/devtools/client/debugger/new/test/mochitest/examples/doc-scroll-run-to-completion.html b/devtools/client/debugger/new/test/mochitest/examples/doc-scroll-run-to-completion.html new file mode 100644 index 000000000000..6cc7f123ab78 --- /dev/null +++ b/devtools/client/debugger/new/test/mochitest/examples/doc-scroll-run-to-completion.html @@ -0,0 +1,27 @@ + + + + + diff --git a/devtools/client/debugger/new/test/mochitest/examples/doc-windowless-workers.html b/devtools/client/debugger/new/test/mochitest/examples/doc-windowless-workers.html new file mode 100644 index 000000000000..d745e9921e2a --- /dev/null +++ b/devtools/client/debugger/new/test/mochitest/examples/doc-windowless-workers.html @@ -0,0 +1,19 @@ + + + + + + +Hello World! + + diff --git a/devtools/client/debugger/new/test/mochitest/examples/simple-worker.js b/devtools/client/debugger/new/test/mochitest/examples/simple-worker.js new file mode 100644 index 000000000000..b9c806fa8f88 --- /dev/null +++ b/devtools/client/debugger/new/test/mochitest/examples/simple-worker.js @@ -0,0 +1,7 @@ +var count = 0; +function timer() { + var n = ++count; + console.log("WORKER SAYS HELLO! " + n); +} + +setInterval(timer, 1000); diff --git a/devtools/client/debugger/new/test/mochitest/helpers.js b/devtools/client/debugger/new/test/mochitest/helpers.js index b9d37fd55dae..242eef122303 100644 --- a/devtools/client/debugger/new/test/mochitest/helpers.js +++ b/devtools/client/debugger/new/test/mochitest/helpers.js @@ -405,6 +405,34 @@ function isPaused(dbg) { return !!isPaused(getState()); } +// Make sure the debugger is paused at a certain source ID and line. +function assertPausedAtSourceAndLine(dbg, expectedSourceId, expectedLine) { + assertPaused(dbg); + + const { + selectors: { getWorkers, getFrames }, + getState + } = dbg; + + const frames = getFrames(getState()); + ok(frames.length >= 1, "Got at least one frame"); + const { sourceId, line } = frames[0].location; + ok(sourceId == expectedSourceId, "Frame has correct source"); + ok(line == expectedLine, "Frame has correct line"); +} + +// Get any workers associated with the debugger. +async function getWorkers(dbg) { + await dbg.actions.updateWorkers(); + + const { + selectors: { getWorkers }, + getState + } = dbg; + + return getWorkers(getState()).toJS(); +} + async function waitForLoadedScopes(dbg) { const scopes = await waitForElement(dbg, "scopes"); // Since scopes auto-expand, we can assume they are loaded when there is a tree node diff --git a/devtools/client/webconsole/test/mochitest/browser.ini b/devtools/client/webconsole/test/mochitest/browser.ini index d2fcb9780a79..c53fd2ef8bdc 100644 --- a/devtools/client/webconsole/test/mochitest/browser.ini +++ b/devtools/client/webconsole/test/mochitest/browser.ini @@ -168,7 +168,7 @@ support-files = skip-if = true # Bug 1437843 [browser_console_consolejsm_output.js] [browser_console_context_menu_entries.js] -skip-if = (os == "linux" && (debug || ccov)) # Bug 1440059 +skip-if = os == "linux" # Bug 1440059, disabled for all build types [browser_console_dead_objects.js] [browser_console_devtools_loader_exception.js] [browser_console_error_source_click.js] diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index a4cb043e8a46..99dc5b3d08e9 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -8202,7 +8202,7 @@ bool nsContentUtils::IsThirdPartyWindowOrChannel(nsPIDOMWindowInner* aWindow, if (aWindow) { nsresult rv = thirdPartyUtil->IsThirdPartyWindow(aWindow->GetOuterWindow(), aURI, &thirdParty); - if (NS_WARN_IF(NS_FAILED(rv))) { + if (NS_FAILED(rv)) { // Ideally we would do something similar to the channel code path here, // but existing code depends on this behaviour. return false; diff --git a/dom/html/test/mochitest.ini b/dom/html/test/mochitest.ini index 85f38785d7d0..b122e3045f5f 100644 --- a/dom/html/test/mochitest.ini +++ b/dom/html/test/mochitest.ini @@ -536,7 +536,7 @@ skip-if = toolkit == 'android' #bug 811644 [test_bug340017.xhtml] [test_bug359657.html] [test_bug369370.html] -skip-if = toolkit == "android" || toolkit == "windows" # disabled on Windows because of bug 1234520 +skip-if = toolkit == "android" || toolkit == "windows" || os == 'linux' # disabled on Windows because of bug 1234520, disabled on linux bug 1258103 [test_bug380383.html] [test_bug402680.html] [test_bug403868.html] diff --git a/dom/smil/nsSMILFloatType.cpp b/dom/smil/SMILFloatType.cpp similarity index 65% rename from dom/smil/nsSMILFloatType.cpp rename to dom/smil/SMILFloatType.cpp index 78ba493aeb0e..46753d6acee4 100644 --- a/dom/smil/nsSMILFloatType.cpp +++ b/dom/smil/SMILFloatType.cpp @@ -4,51 +4,52 @@ * 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/. */ -#include "nsSMILFloatType.h" +#include "SMILFloatType.h" #include "nsSMILValue.h" #include "nsDebug.h" #include -void nsSMILFloatType::Init(nsSMILValue& aValue) const { +namespace mozilla { + +void SMILFloatType::Init(nsSMILValue& aValue) const { MOZ_ASSERT(aValue.IsNull(), "Unexpected value type"); aValue.mU.mDouble = 0.0; aValue.mType = this; } -void nsSMILFloatType::Destroy(nsSMILValue& aValue) const { +void SMILFloatType::Destroy(nsSMILValue& aValue) const { MOZ_ASSERT(aValue.mType == this, "Unexpected SMIL value"); aValue.mU.mDouble = 0.0; aValue.mType = nsSMILNullType::Singleton(); } -nsresult nsSMILFloatType::Assign(nsSMILValue& aDest, - const nsSMILValue& aSrc) const { +nsresult SMILFloatType::Assign(nsSMILValue& aDest, + const nsSMILValue& aSrc) const { MOZ_ASSERT(aDest.mType == aSrc.mType, "Incompatible SMIL types"); MOZ_ASSERT(aDest.mType == this, "Unexpected SMIL value"); aDest.mU.mDouble = aSrc.mU.mDouble; return NS_OK; } -bool nsSMILFloatType::IsEqual(const nsSMILValue& aLeft, - const nsSMILValue& aRight) const { +bool SMILFloatType::IsEqual(const nsSMILValue& aLeft, + const nsSMILValue& aRight) const { MOZ_ASSERT(aLeft.mType == aRight.mType, "Incompatible SMIL types"); MOZ_ASSERT(aLeft.mType == this, "Unexpected type for SMIL value"); return aLeft.mU.mDouble == aRight.mU.mDouble; } -nsresult nsSMILFloatType::Add(nsSMILValue& aDest, - const nsSMILValue& aValueToAdd, - uint32_t aCount) const { +nsresult SMILFloatType::Add(nsSMILValue& aDest, const nsSMILValue& aValueToAdd, + uint32_t aCount) const { MOZ_ASSERT(aValueToAdd.mType == aDest.mType, "Trying to add invalid types"); MOZ_ASSERT(aValueToAdd.mType == this, "Unexpected source type"); aDest.mU.mDouble += aValueToAdd.mU.mDouble * aCount; return NS_OK; } -nsresult nsSMILFloatType::ComputeDistance(const nsSMILValue& aFrom, - const nsSMILValue& aTo, - double& aDistance) const { +nsresult SMILFloatType::ComputeDistance(const nsSMILValue& aFrom, + const nsSMILValue& aTo, + double& aDistance) const { MOZ_ASSERT(aFrom.mType == aTo.mType, "Trying to compare different types"); MOZ_ASSERT(aFrom.mType == this, "Unexpected source type"); @@ -60,10 +61,10 @@ nsresult nsSMILFloatType::ComputeDistance(const nsSMILValue& aFrom, return NS_OK; } -nsresult nsSMILFloatType::Interpolate(const nsSMILValue& aStartVal, - const nsSMILValue& aEndVal, - double aUnitDistance, - nsSMILValue& aResult) const { +nsresult SMILFloatType::Interpolate(const nsSMILValue& aStartVal, + const nsSMILValue& aEndVal, + double aUnitDistance, + nsSMILValue& aResult) const { MOZ_ASSERT(aStartVal.mType == aEndVal.mType, "Trying to interpolate different types"); MOZ_ASSERT(aStartVal.mType == this, "Unexpected types for interpolation"); @@ -76,3 +77,5 @@ nsresult nsSMILFloatType::Interpolate(const nsSMILValue& aStartVal, return NS_OK; } + +} // namespace mozilla diff --git a/dom/smil/nsSMILFloatType.h b/dom/smil/SMILFloatType.h similarity index 89% rename from dom/smil/nsSMILFloatType.h rename to dom/smil/SMILFloatType.h index 8236fafaedf5..eaaceedb722e 100644 --- a/dom/smil/nsSMILFloatType.h +++ b/dom/smil/SMILFloatType.h @@ -10,11 +10,13 @@ #include "mozilla/Attributes.h" #include "nsISMILType.h" -class nsSMILFloatType : public nsISMILType { +namespace mozilla { + +class SMILFloatType : public nsISMILType { public: // Singleton for nsSMILValue objects to hold onto. - static nsSMILFloatType* Singleton() { - static nsSMILFloatType sSingleton; + static SMILFloatType* Singleton() { + static SMILFloatType sSingleton; return &sSingleton; } @@ -38,7 +40,9 @@ class nsSMILFloatType : public nsISMILType { private: // Private constructor: prevent instances beyond my singleton. - constexpr nsSMILFloatType() {} + constexpr SMILFloatType() {} }; +} // namespace mozilla + #endif // NS_SMILFLOATTYPE_H_ diff --git a/dom/smil/moz.build b/dom/smil/moz.build index 821bd41ccffd..27848682ccf0 100644 --- a/dom/smil/moz.build +++ b/dom/smil/moz.build @@ -44,7 +44,6 @@ UNIFIED_SOURCES += [ 'nsSMILCompositor.cpp', 'nsSMILCSSProperty.cpp', 'nsSMILCSSValueType.cpp', - 'nsSMILFloatType.cpp', 'nsSMILInstanceTime.cpp', 'nsSMILInterval.cpp', 'nsSMILKeySpline.cpp', @@ -59,6 +58,7 @@ UNIFIED_SOURCES += [ 'nsSMILValue.cpp', 'SMILBoolType.cpp', 'SMILEnumType.cpp', + 'SMILFloatType.cpp', 'SMILIntegerType.cpp', 'SMILStringType.cpp', 'TimeEvent.cpp', diff --git a/dom/svg/nsSVGLength2.cpp b/dom/svg/nsSVGLength2.cpp index 3dc9fa9aabf6..68d474ad16bf 100644 --- a/dom/svg/nsSVGLength2.cpp +++ b/dom/svg/nsSVGLength2.cpp @@ -11,7 +11,7 @@ #include "mozilla/dom/SVGViewportElement.h" #include "nsContentUtils.h" // NS_ENSURE_FINITE #include "nsIFrame.h" -#include "nsSMILFloatType.h" +#include "SMILFloatType.h" #include "nsSMILValue.h" #include "nsSVGAttrTearoffTable.h" #include "nsSVGIntegrationUtils.h" @@ -436,7 +436,7 @@ nsresult nsSVGLength2::SMILLength::ValueFromString( return NS_ERROR_DOM_SYNTAX_ERR; } - nsSMILValue val(nsSMILFloatType::Singleton()); + nsSMILValue val(SMILFloatType::Singleton()); val.mU.mDouble = value * mVal->GetPixelsPerUnit(mSVGElement, unitType); aValue = val; aPreventCachingOfSandwich = @@ -448,7 +448,7 @@ nsresult nsSVGLength2::SMILLength::ValueFromString( } nsSMILValue nsSVGLength2::SMILLength::GetBaseValue() const { - nsSMILValue val(nsSMILFloatType::Singleton()); + nsSMILValue val(SMILFloatType::Singleton()); val.mU.mDouble = mVal->GetBaseValue(mSVGElement); return val; } @@ -462,9 +462,9 @@ void nsSVGLength2::SMILLength::ClearAnimValue() { } nsresult nsSVGLength2::SMILLength::SetAnimValue(const nsSMILValue& aValue) { - NS_ASSERTION(aValue.mType == nsSMILFloatType::Singleton(), + NS_ASSERTION(aValue.mType == SMILFloatType::Singleton(), "Unexpected type to assign animated value"); - if (aValue.mType == nsSMILFloatType::Singleton()) { + if (aValue.mType == SMILFloatType::Singleton()) { return mVal->SetAnimValue(float(aValue.mU.mDouble), mSVGElement); } return NS_OK; diff --git a/dom/svg/nsSVGNumber2.cpp b/dom/svg/nsSVGNumber2.cpp index 9af2c27c40a9..0abeb6a1d9c1 100644 --- a/dom/svg/nsSVGNumber2.cpp +++ b/dom/svg/nsSVGNumber2.cpp @@ -7,7 +7,7 @@ #include "nsSVGNumber2.h" #include "mozilla/Attributes.h" #include "nsContentUtils.h" // NS_ENSURE_FINITE -#include "nsSMILFloatType.h" +#include "SMILFloatType.h" #include "nsSMILValue.h" #include "nsSVGAttrTearoffTable.h" #include "SVGContentUtils.h" @@ -126,7 +126,7 @@ nsresult nsSVGNumber2::SMILNumber::ValueFromString( return NS_ERROR_DOM_SYNTAX_ERR; } - nsSMILValue val(nsSMILFloatType::Singleton()); + nsSMILValue val(SMILFloatType::Singleton()); val.mU.mDouble = value; aValue = val; aPreventCachingOfSandwich = false; @@ -135,7 +135,7 @@ nsresult nsSVGNumber2::SMILNumber::ValueFromString( } nsSMILValue nsSVGNumber2::SMILNumber::GetBaseValue() const { - nsSMILValue val(nsSMILFloatType::Singleton()); + nsSMILValue val(SMILFloatType::Singleton()); val.mU.mDouble = mVal->mBaseVal; return val; } @@ -149,9 +149,9 @@ void nsSVGNumber2::SMILNumber::ClearAnimValue() { } nsresult nsSVGNumber2::SMILNumber::SetAnimValue(const nsSMILValue& aValue) { - NS_ASSERTION(aValue.mType == nsSMILFloatType::Singleton(), + NS_ASSERTION(aValue.mType == SMILFloatType::Singleton(), "Unexpected type to assign animated value"); - if (aValue.mType == nsSMILFloatType::Singleton()) { + if (aValue.mType == SMILFloatType::Singleton()) { mVal->SetAnimValue(float(aValue.mU.mDouble), mSVGElement); } return NS_OK;