question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

[BUG] ERROR: method 'Target.enable' is not supported Firefox custom build.

See original GitHub issue

Context:

Playwright Version: latest Operating System: Linux Extra: Custom Firefox linux build (works by hand)

Code Snippet

const playwright = require('playwright');

(async () => {
  for (const browserType of ['firefox',]) {
    const browser = await playwright[browserType].launch({
      headless: false,
      dumpio: true,
    });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('http://whatsmyuseragent.org/');
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

Describe the bug

My problem arises when using a custom Mozilla build but following playwright scripts and mozilla documentation. Address Sanitizer. File mozconfig by default is

# Combined .mozconfig file for ASan on Linux+Mac
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-ff-asan

# Enable ASan specific code and build workarounds
ac_add_options --enable-address-sanitizer

# Add ASan to our compiler flags
export CFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC"
export CXXFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC"

# Additionally, we need the ASan flag during linking. Normally, our C/CXXFLAGS would
# be used during linking as well but there is at least one place in our build where
# our CFLAGS are not added during linking.
# Note: The use of this flag causes Clang to automatically link the ASan runtime :)
export LDFLAGS="-fsanitize=address"

# These three are required by ASan
ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
ac_add_options --disable-elf-hack

# Keep symbols to symbolize ASan traces later
export MOZ_DEBUG_SYMBOLS=1
ac_add_options --enable-debug-symbols
ac_add_options --disable-install-strip

# Settings for an opt build (preferred)
# The -gline-tables-only ensures that all the necessary debug information for ASan
# is present, but the rest is stripped so the resulting binaries are smaller.
ac_add_options --enable-optimize="-O2 -gline-tables-only"
ac_add_options --disable-debug

# Settings for a debug+opt build
#ac_add_options --enable-optimize
#ac_add_options --enable-debug

# ASan specific options on Linux
ac_add_options --enable-valgrind

Build process as described Contributing Browser Patches

$ ./browser_patches/prepare_checkout.sh firefox checkout
$ ./path/checkout/mach bootstrap // to ensure satisfied dependencies.
$ ./browser_patches/firefox/build.sh 
$ ./path/checkout/mach run // to ensure build works fine
$ ./browser_patches/firefox/archive.sh .. //saved zip and cp it to core path and replace original folder of firefox or defined by 'executablePath' in script.

Commented new build config to disable crash reporter …/local-firefox/linux-1029/firefox/playwright.cfg if not firefox shows a dialog at start “contact administrator…” (it is disabled in mozconfig “ac_add_options --disable-crashreporter” anyway)

//lockPref("toolkit.crashreporter.enabled", false);
..
//Components.classes["@mozilla.org/toolkit/crash-reporter;1"].getService(Components.interfaces.nsICrashReporter).submitReports = false;

Error if not commented in ‘dumpio’:

JavaScript error: playwright.cfg, line 235: TypeError: Components.classes['@mozilla.org/toolkit/crash-reporter;1'] is undefined
Firefox AddressSanitizer build is done, it works fine because I use it for my testsuite manually. But if I use it with the playwright script, opens Firefox and visually does nothing and throw this error :

1583842611731	addons.webextension.doh-rollout@mozilla.org	WARN	Loading extension 'doh-rollout@mozilla.org': Reading manifest: Invalid extension permission: networkStatus
1583842612448	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: mozillaAddons
1583842612448	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: telemetry
1583842612448	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: resource://pdf.js/
1583842612449	addons.webextension.screenshots@mozilla.org	WARN	Loading extension 'screenshots@mozilla.org': Reading manifest: Invalid extension permission: about:reader*
[2020-03-10T12:16:53Z ERROR audio_thread_priority::rt_linux] setrlimit64: 1
Juggler listening on ws://127.0.0.1:39135/74fcf71e-37f4-4a0c-b17d-69890b3676e4
(node:21256) UnhandledPromiseRejectionWarning: Error: Protocol error (Target.enable): ERROR: method 'Target.enable' is not supported _dispatch@chrome://juggler/content/protocol/Dispatcher.js:96:15

    at Promise (/home/lupin/node_modules/playwright-core/lib/firefox/ffConnection.js:54:63)
    at new Promise (<anonymous>)
    at FFConnection.send (/home/lupin/node_modules/playwright-core/lib/firefox/ffConnection.js:53:16)
    at Function.connect (/home/lupin/node_modules/playwright-core/lib/firefox/ffBrowser.js:49:26)
    at Firefox.launch (/home/lupin/node_modules/playwright-core/lib/server/firefox.js:54:53)
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:21256) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:21256) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

This part t’s not important, same line with default playwright firefox build and works fine with script attached

[2020-03-10T12:16:53Z ERROR audio_thread_priority::rt_linux] setrlimit64: 1 it’s not important, same line with default playwright firefox build and works fine with script attached) Any help to locate and fix this issue? I use Firefox with Address Sanitizer to commit fixes and ensure no memory corruptions are introduced.

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:6 (2 by maintainers)

github_iconTop GitHub Comments

1reaction
ghostcommented, Mar 11, 2020

I’m on Ubuntu 18.04. Can you try running this?

It has been building for 40 minutes, so I have not replied before. I close it and open it if it doesn’t work when it’s done. Thank you!

0reactions
zyscodercommented, Jan 4, 2021

@lupinhex So here are the things I did:

  1. Got a tip-of-tree checkout of playwight: git clone https://github.com/microsoft/playwright
  2. change dir into playwright: cd playwright
  3. Ran npm install to get all dependencies
  4. Ran //browser_patches/prepare_checkout.sh firefox to get a firefox checkout
  5. Put the following in //browser_patches/firefox/checkout/.mozconfig
# Combined .mozconfig file for ASan on Linux+Mac
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/objdir-ff-asan

# Enable ASan specific code and build workarounds
ac_add_options --enable-address-sanitizer

# Add ASan to our compiler flags
export CFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC"
export CXXFLAGS="-fsanitize=address -Dxmalloc=myxmalloc -fPIC"

# Additionally, we need the ASan flag during linking. Normally, our C/CXXFLAGS would
# be used during linking as well but there is at least one place in our build where
# our CFLAGS are not added during linking.
# Note: The use of this flag causes Clang to automatically link the ASan runtime :)
export LDFLAGS="-fsanitize=address"

# These three are required by ASan
ac_add_options --disable-jemalloc
ac_add_options --disable-crashreporter
ac_add_options --disable-elf-hack

# Keep symbols to symbolize ASan traces later
export MOZ_DEBUG_SYMBOLS=1
ac_add_options --enable-debug-symbols
ac_add_options --disable-install-strip

# Settings for an opt build (preferred)
# The -gline-tables-only ensures that all the necessary debug information for ASan
# is present, but the rest is stripped so the resulting binaries are smaller.
ac_add_options --enable-optimize="-O2 -gline-tables-only"
ac_add_options --disable-debug

# Settings for a debug+opt build
#ac_add_options --enable-optimize
#ac_add_options --enable-debug

# ASan specific options on Linux
ac_add_options --enable-valgrind
  1. Ran //browser_patches/firefox/build.sh to compile firefox
  2. I did not run the //browser_patches/firefox/archive.sh.
  3. I put the following file in the root of playwright checkout:
// NOTICE: requiring playwright from source
const playwright = require('.');

(async () => {
  for (const browserType of ['firefox',]) {
    const browser = await playwright[browserType].launch({
      // NOTICE: using executablePath to run local build
      executablePath: "/home/aslushnikov/prog/playwright/browser_patches/firefox/checkout/obj-x86_64-pc-linux-gnu/dist/bin/firefox",
      headless: false,
      dumpio: true,
    });
    const context = await browser.newContext();
    const page = await context.newPage();
    await page.goto('http://whatsmyuseragent.org/');
    await page.screenshot({ path: `example-${browserType}.png` });
    await browser.close();
  }
})();

Running this script worked fine for me. I didn’t even do anything with crash reporter in preferences.

I’m on Ubuntu 18.04. Can you try running this?

I recently stuck in the same problem too. I think your steps have some mistakes. You put the .mozconfig in the //browser_patches/firefox/checkout/ first, and then run //browser_patches/firefox/build.sh. I noticed that the script //browser_patches/firefox/build.sh would rewrite .mozconfig, causing that your firefox is not built with the original configure (The one with asan). To verify this, you can have a look at the .mozconfig after you run build.sh to build firefox. I modified the build.sh script:

#!/bin/bash
set -e
set +x

RUST_VERSION="1.47.0"
CBINDGEN_VERSION="0.15.0"
# Certain minimal SDK Version is required by firefox
MACOS_SDK_VERSION="10.12"
# XCode version can be determined from https://en.wikipedia.org/wiki/Xcode
XCODE_VERSION_WITH_REQUIRED_SDK_VERSION="8.3.3"

trap "cd $(pwd -P)" EXIT

cd "$(dirname $0)"
SCRIPT_FOLDER="$(pwd -P)"

if [[ ! -z "${FF_CHECKOUT_PATH}" ]]; then
  cd "${FF_CHECKOUT_PATH}"
  echo "WARNING: checkout path from FF_CHECKOUT_PATH env: ${FF_CHECKOUT_PATH}"
else
  cd "checkout"
fi


if [[ "$(uname)" == "Darwin" ]]; then
  # Firefox currently does not build on 10.15 out of the box - it requires SDK for 10.12.
  # Make sure the SDK is out there.
  if ! [[ -d $HOME/SDK-archive/MacOSX${MACOS_SDK_VERSION}.sdk ]]; then
    echo "As of Dec 2020, Firefox does not build on Mac without ${MACOS_SDK_VERSION} SDK."
    echo "Download XCode ${XCODE_VERSION_WITH_REQUIRED_SDK_VERSION} from https://developer.apple.com/download/more/ and"
    echo "extract SDK to $HOME/SDK-archive/MacOSX${MACOS_SDK_VERSION}.sdk"
    echo ""
    echo "More info: https://firefox-source-docs.mozilla.org/setup/macos_build.html"
    exit 1
  else
    echo "-- configuting .mozconfig with ${MACOS_SDK_VERSION} SDK path"
    echo "ac_add_options --with-macos-sdk=$HOME/SDK-archive/MacOSX${MACOS_SDK_VERSION}.sdk/" > .mozconfig
  fi
  echo "-- building on Mac"
elif [[ "$(uname)" == "Linux" ]]; then
  echo "-- building on Linux"
  echo "ac_add_options --disable-av1" > .mozconfig
elif [[ "$(uname)" == MINGW* ]]; then
  DLL_FILE=""
  if [[ $1 == "--win64" ]]; then
    echo "-- building win64 build on MINGW"
    echo "ac_add_options --target=x86_64-pc-mingw32" > .mozconfig
    echo "ac_add_options --host=x86_64-pc-mingw32" >> .mozconfig
    DLL_FILE=$("C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -find '**\Redist\MSVC\*\x64\**\vcruntime140.dll')
  else
    echo "-- building win32 build on MINGW"
    DLL_FILE=$("C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -latest -find '**\Redist\MSVC\*\x86\**\vcruntime140.dll')
  fi
  WIN32_REDIST_DIR=$(dirname "$DLL_FILE")
  if ! [[ -d $WIN32_REDIST_DIR ]]; then
    echo "ERROR: cannot find MS VS C++ redistributable $WIN32_REDIST_DIR"
    exit 1;
  fi
  echo "export WIN32_REDIST_DIR=\"$WIN32_REDIST_DIR\"" >> .mozconfig
else
  echo "ERROR: cannot upload on this platform!" 1>&2
  exit 1;
fi

#OBJ_FOLDER="obj-build-playwright"
OBJ_FOLDER="objdir-ff-asan"
echo "mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/${OBJ_FOLDER}" >> .mozconfig
echo "ac_add_options --enable-address-sanitizer" >> .mozconfig
echo "export CFLAGS=\"-fsanitize=address -Dxmalloc=myxmalloc -fPIC\"" >> .mozconfig
echo "export CXXFLAGS=\"-fsanitize=address -Dxmalloc=myxmalloc -fPIC\"" >> .mozconfig
echo "export LDFLAGS=\"-fsanitize=address\"" >> .mozconfig
echo "ac_add_options --disable-jemalloc" >> .mozconfig
echo "ac_add_options --disable-crashreporter" >> .mozconfig
echo "ac_add_options --disable-elf-hack" >> .mozconfig
echo "export MOZ_DEBUG_SYMBOLS=1" >> .mozconfig
echo "ac_add_options --enable-debug-symbols" >> .mozconfig
echo "ac_add_options --disable-install-strip" >> .mozconfig
echo "ac_add_options --enable-optimize=\"-O2 -gline-tables-only\"" >> .mozconfig
echo "ac_add_options --disable-debug" >> .mozconfig
echo "ac_add_options --enable-valgrind" >> .mozconfig

if ! [[ -f "$HOME/.mozbuild/_virtualenvs/mach/bin/python" ]]; then
  ./mach create-mach-environment
fi

if [[ $1 == "--juggler" ]]; then
  ./mach build faster
else
  # TODO: rustup is not in the PATH on Windows
  if command -v rustup >/dev/null; then
    # We manage Rust version ourselves.
    echo "-- Using rust v${RUST_VERSION}"
    rustup install "${RUST_VERSION}"
    rustup default "${RUST_VERSION}"
  fi

  # TODO: cargo is not in the PATH on Windows
  if command -v cargo >/dev/null; then
    echo "-- Using cbindgen v${CBINDGEN_VERSION}"
    cargo install cbindgen --version "${CBINDGEN_VERSION}"
  fi
  ./mach build
fi

if [[ "$(uname)" == "Darwin" ]]; then
  node "${SCRIPT_FOLDER}"/install-preferences.js $PWD/${OBJ_FOLDER}/dist
else
  node "${SCRIPT_FOLDER}"/install-preferences.js $PWD/${OBJ_FOLDER}/dist/bin
fi

and then run build.sh. After that I run my firefox with //browser_patches/checkout/mach run but error occurs: Screenshot from 2021-01-04 20-48-53

Read more comments on GitHub >

github_iconTop Results From Across the Web

[BUG] ERROR: method 'Target.enable' is not supported Firefox ...
It allows testing Chromium, Firefox and WebKit with a single API. - [BUG] ERROR: method 'Target.enable' is not supported Firefox custom build.
Read more >
1315309 - Error when building firefox from source using custom
This is a regression from bug 1303184. catlee: can you please take a look? Somewhere you'll need to plug in MOZ_APP_NAME for the...
Read more >
event.path is undefined running in Firefox - Stack Overflow
In Chrome I get the name with path. In Firefox I tried with composedPath, but it returns a different value. For solving my...
Read more >
Firefox - ArchWiki
In order to create a system-wide configuration, follow the steps outlined in Customizing Firefox Using AutoConfig: 1. Create /usr/lib/firefox/ ...
Read more >
Firefox - Gentoo Wiki
Systems with Wayland support should not have issues with screen tearing. If WebRender is enabled, then the problem could be with the video...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found