How to find or pick a suitable Chrome/Chromium revision number? - puppeteer

I couldn't figure out a nice way to determine a suitable revision number to use with Puppeteer Sharp.
What I did was use the version lookup feature on the "OmahaProxy - Google Chrome" site. I looked-up the version of Chrome I'm running on my computer. [That seems like a reasonable starting point.] I assumed (guessed) that the "Branch Base Position" shown in the version info was a revision number.
I then opened the Chromium continuous builds archive and looked for a build for the revision around the revision number I found from the "OmahaProxy" site.
Is there a better way to find or pick a suitable revision number?

Puppeteer is always bundled with a specific revision of a specific version. I usually check the release information on Github where the expected Chromium version and revision is specified. For example:
v1.17.0
Big Changes
Chromium 76.0.3803.0 (r662092)
Then to download the right one,
Go to Chromium browser snapshots
Choose the directory of your platform (e.g., Linux_x64)
Copy the revision number into the "Filter:" field without the "r" (e.g., 662092)
Download the .zip file you need.
Additional info
The URL template below can be just plugged in with the right information:
https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=<platform>/<revision>/
For example:
https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Linux_x64/662092/
The most common issue on Linux is missing dependencies, and the Puppeteer "Troubleshooting" document specifies all the Linux dependencies. (See apt instructions for Ubuntu.)
curl needs -L when downloading on the console. See Stackoverflow thread.
When one is using puppeteer-core,
you will then need to call puppeteer.connect(\[options\]) or
puppeteer.launch(\[options\]) with an explicit executablePath
option.
(from puppeteer vs puppeteer-core)

Puppeteer requires number which correspond Chromium browser build snapshot number. You can get the latest snapshot number here:
https://www.googleapis.com/download/storage/v1/b/chromium-browser-snapshots/o/Win_x64%2FLAST_CHANGE?generation=1528272852044880&alt=media
or you can view all available snapshots here:
https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win_x64/

Related

Trouble finding / building WebRTC targets in Chrome source

I am building chrome m99 milestone and cannot seem to find where it builds the webrtc library which it uses. when you goto webrtc.org its all chrome javascript examples of its usage case, but in reality native servers must stream this to make real use of it for low latency apps. certainly we arent packaging chrome apps on the server for this purpose, nor would it be possible to actually access video buffers efficiently using that.
i've attempted to build with targets webrtc, //gen/third_party/webrtc, i've attempted to gen directly in the webrtc dir (in third_party) which has a BUILD.gn, but you cannot. it errors and says there are missing build files:
C:\src\chromium\src\third_party\webrtc>gn gen out/Debug
ERROR at //.gn:9:1: Unable to load "C:/src/chromium/src/third_party/webrtc/build/dotfile_settings.gni".
import("//build/dotfile_settings.gni")
I see in its BUILD.gn it has a 'build_with_chromium' boolean but does not seem any way to do that. the last doc i saw on this was from 2017 in a blog post, and the libwebrtc project he used is no longer maintained. the guy went commercial but essentially it gloms together a bunch of .o's into a lib but none of the third party structure is the same anymore in m99.
inside chromium checkout:
# fetch branch head info so that we can checkout m99
# https://chromiumdash.appspot.com/branches (4844 branch ref = m99)
gclient sync --with_branch_heads --with_tags
git fetch
git checkout -b branch_4844 branch-heads/4844
gclient sync --with_branch_heads --with_tags
# use depot_tools of our own (in PATH)
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
# is_component_build=true disables webrtc as i'm noticing in the main build in chrome, so i set it to false to be sure (i believe its false by default)
gn gen out/Default --args="is_component_build=false symbol_level=0 is_debug=true"
autoninja -C out/Default chrome
since chrome uses webrtc it should be built, but who knows where the objs are?
in libwebrtc (no longer maintained) circa m62 or so they selected these binaries for producing a lib:
file(GLOB_RECURSE _OBJ_EXCLUDED
${WEBRTC_OUTPUT_DIR}/obj/third_party/yasm/gen*/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/third_party/yasm/re2c/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/third_party/yasm/yasm/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protoc/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/third_party/protobuf/protobuf_full/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/webrtc/examples/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/webrtc/tools/*${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/webrtc/modules/video_capture/video_capture/video_capture_external${_OBJ_EXT}
${WEBRTC_OUTPUT_DIR}/obj/webrtc/modules/video_capture/video_capture/device_info_external${_OBJ_EXT})
it was made at a time where webrtc could be built on its own, but it just does not seem to be the case anymore unless there is a magical '1-2-3' that could build the hard work of these great
people who seem to not want to expose a library?
I've attempted to give it webrtc, /third_party/webrtc, //gen/third_party/webrtc. no avail it is just completely inaccessible as-is.
openwebrtc is not maintained, nor is libwebrtc which glommed this all together.

How to find out in which Chromium version a commit was shipped

For example I need to know when this commit, that resolved this issue, was released to be able to support newer and older Chrome versions.
Chromium's current version is specified in this file: chrome/VERSION So you will have to look at that file, to find out in which version that commit is present. For example, the link you have posted points to commit id: 277a0c8 which can be seen in that page and if you click that commit id which points to: https://chromium.googlesource.com/chromium/src/+/277a0c817996a9ea0617a410d356d57e1cf8d548
So in your case if you look at this file: https://chromium.googlesource.com/chromium/src/+/277a0c817996a9ea0617a410d356d57e1cf8d548/chrome/VERSION, that commit was merged in Chromium version 81.0.4035.0
Hope that helps
Another way is to use the Chromium Dash service:
https://chromiumdash.appspot.com/commits?commit=277a0c817996a9ea0617a410d356d57e1cf8d548&platform=Linux

Force Chrome Extension version change via Group Policy

I have a Chrome extension that is listed as Private on the Webstore because I need different customers to be able to be on different versions of the extension at the same time. I am trying to use Group Policy to allow customers to force Chrome to install the extension on all of their user's machines (connected by an Active Directory Domain). As described here:
http://dev.chromium.org/administrators/policy-list-3#ExtensionInstallForcelist
I have this process mostly working but with one big catch. I cannot get Chrome to update the extension in place without first uninstalling the extension altogether.
Specifically: While Chrome is running, I can use Group policy to install Version 1 of an extension, then uninstall it, then install Version 2 of the same extension. However, when I install Version 1, then point the update.xml file to Version 2 of the .crx (or even change the policy to a whole new update.xml pointing to Version 2) the extension will stay at Version 1 and will not install Version 2.
Here is what I have tried so far with no success:
After going to Chrome://policy and confirming that the new GPO pointing to Version 2 of the extension is recognized by Chrome:
I have tried restarting Chrome.
I have tried going to chrome://extensions, checking "Developer Mode, and clicking the "Update Extension Now" button.
I have tried launching Chrome from command line with the extensions-update-frequency parameter set to 30, 60, and 300 seconds.
I have tried leaving for lunch after setting the policy with Chrome running and not touching it or letting the computer lock for >2 hours hoping it would automatically update given time.
For all of these, Version 1 of the extension remains installed. I have triple checked that the new policy is pointing to a valid Version 2 of the extension (and this is confirmed because Version 2 will install if I disable the policy first then enable it pointing to Version 2).
Does anyone know why this could be happening?
Thanks!
make sure version number is bigger.
Manifest - Version
One to four dot-separated integers identifying the version of this extension. A couple of rules apply to the integers: they must be between 0 and 65535, inclusive, and non-zero integers can't start with 0. For example, 99999 and 032 are both invalid.
Here are some examples of valid versions:
"version": "1"
"version": "1.0"
"version": "2.10.2"
"version": "3.1.2.4567"
The autoupdate system compares versions to determine whether an installed extension needs to be updated. If the published extension has a newer version string than the installed extension, then the extension is automatically updated.
The comparison starts with the leftmost integers. If those integers are equal, the integers to the right are compared, and so on. For example, 1.2.0 is a newer version than 1.1.9.9999.
A missing integer is equal to zero. For example, 1.1.9.9999 is newer than 1.1.
For more information, see Autoupdating.
Version Name
In addition to the version field, which is used for update purposes, version_name can be set to a descriptive version string and will be used for display purposes if present.
Here are some examples of version names:
"version_name": "1.0 beta"
"version_name": "build rc2"
"version_name": "3.1.2.4567"
If no version_name is present, the version field will be used for display purposes as well.

chrome "aw, snap" crash, but can't see crash log in chrome://crashes but see DMP generated, so what is the quickest way to interpret this DMP file

I can see my page get crash(see aw, snap page) with 20% proprobility after 10 mins(otherwise it runs well like forever)
so I tried:
1) CPU and memory check with task manager, and see no increasing(so no leakage).
2) enable crush log in the chrome://settings/
result:
2.1) see still nothing in the chrome://crashes page, not even a crush ID (0 crashes).
2.2) see nothing in the folder under path
C:/%User%/AppData/Local/Google/CrashReports (nothing in) nor
C:/%User%/AppData/Local/Google/Chrome/User Data/Crash Reports (folder not exist)
2.3) but indeed see DMP in the:
C:/%User%/AppData/Local/Google/Chrome/User Data/CrashPads/reports
but seems they are not readable, and it also seems not the correct address for crash logs
3) can get chrome log either by command line arguments, or using sawbuck, but found nothing but only 2 errors, one for sawbuck itself, and another saying can't send the report to google.
So the questions are:
1) are those DMP the crash logs(the default Dir for dump file has been changed for chrome v50)
2) how can I abstract information out of the DMP file, if chrome://crashes page shows nothing (for chrome on windows)
p.s. 2 usage pages are found at https://www.chromium.org/developers/decoding-crash-dumps
https://www.chromium.org/developers/crash-reports
but seems it's not for windows without a recompile of chrome's component, is there any 3rd party tools to interpret the DMP file?
env informations:
chrome version: 50.0.2661.02 m
; Host OS: windows 10
The crash dumps (.dmp files) in C:\Users\<user>\AppData\Local\Google\Chrome\User Data\Crashpad\reports can be read by standard Windows debuggers. WinDbg is one tool (provided by Microsoft) for analysing these dumps; it's not going to win any beauty contents, but it's powerful and gets the job done. The recommended way to obtain it is, somewhat bizarrely, the Windows Driver Kit.
You'll need debugging symbols to make sense of the results, and these aren't included in standard builds of Chrome. To get symbols for both Chrome and the Windows runtime, set the following as your Symbols path:
SRV*c:\symbols*https://msdl.microsoft.com/download/symbols;SRV*c:\symbols*https://chromium-browser-symsrv.commondatastorage.googleapis.com
There are numerous resources on using WinDbg on the web; this cheat sheet contains some useful commands to get you started.

How do I get a file off google-api-java-client?

OK i want download the the following open source code: http://code.google.com/p/google-api-java-client/source/browse/calendar-v2-atom-android-sample/?repo=samples
I am lead to believe you need to use mercurial for this but have yet to find a tutorial on how. Why is there not a download zip file type thing for this?
I am using eclipse.
How do I get this example?
You can get each file individually by clicking it then right-click "View raw file" in the right column and choose "Save" (which may say something slightly different depending on your browser.)
I don't know about this project, but usually you can download the samples in the zips on the downloads tab
If you want to do it faster than that, you can find a Mercurial client for most operating systems at https://www.mercurial-scm.org/downloads.
Once you have Mercurial installed, running the command
hg clone https://code.google.com/p/google-api-java-client.samples/ google-api-java-client-samples
will give you a full copy of the current version in the current directory.