Hi again,
A few can likely be easily upstreamed, mostly null pointers checks, the problem is rediscovering them among the 1444 patched files.
A large number of changes is addition of our features. Examples are:
* Two tab bars (android)
* Our own editable search engines, which is a major rewrite of the relevant code in chromium.
* Speed dial on mobile
* Our own synced feature (Notes), which causes one set of irritating merge conflicts in the static assert for number of sync types)
* Added new fields to bookmark items
* Use platform media to play back video (originally from Opera)
Quite a lot of the changes we have made are workarounds of how we want to stuff, including:
* changing the UI theme of the Android and IOS
* How to handle tabs in our own JS-based GUI
Some patches are fixes to make building and our own features work, e.g.:
* we disabled a recent remote-build action addition in build/config/BUILDCONFIG.gn, It broke our updates of targets
* freezing the Mac SDK version (occasionally needed; we don't use an hermetic SDK for Mac/IOS)
* make message_compiler.py, midl.py work
* Use Vivaldi's version number a lot of places, not Chromium's
* Changing application names from "chrome" to "vivaldi"
* Had to make extensive changes in the tools/grit code to replace Google, Chromium etc product names and company names with "Vivaldi", including in translations We have our own system to override strings and translations in the GRD and XTB files. Changing the files themselves is too costly, especially wrt to merge conflicts; we tried it. I would prefer that you remove all product names from the strings and translations, and replace with an argument based on the branding. You can keep strings like "Google Pay" and similar ones that mention specific products.
* Have to hook in our own extra functionality, like replacing ChromeMainDelegate with our own VivaldiMainDelegate; make sure Vivaldi code is disabled in the unit tests, etc.
to mention a few.
We currently also have two reverts of upstream changes, related to
https://crbug.com/1426950 and
https://crbug.com/1337134; the latter is likely to be a permanent revert, since the devs have so far refused to undo the change. The other has been fixed AFAICT, but not in my current branch point.
In a number of cases we could probably reduce patches slightly, provided that we could add our own override classes that are produced by our own factories that override the standard ones, e.g. the Sync Engine (we use a hack inside the factory to build our own Sync Engine object). In a number of cases that is currently completely out of the question because the classes are NOT created by a factory, but directly with new/make_unique allocations in the code, meaning it is not practical to override the classes.
I do have several active upstream reviews, most of which have been sitting idle for over two *years* because the reviewers have not decided to accept them. That does not give much confidence that anything major we should choose to upstream will be accepted.
Two of those upstreams are an improvement to the hermetic SDK system and a proof-of-concept suggestion for making it easier to customize some parts of the build, such as application name.
At present I have started a new multistage update process, by first rebasing to main as of last Wednesday (5711). It took 3.5 days to complete the rebase (185 conflicted files in 600 commits, the largest conflict batch had 19 broken files, a most less than 5), another 2 plus to get it compiling on Windows (still working on Linux and Mac).
However, something that changed in the Extension system completely broke our GUI on Windows (and presumably Lin/Mac), so the GUI does not launch, at all.
We will probably spend all of this week fixing issues, and into next week.
Later, once you branch, I will rebase up on top of that.
FYI, a few stats: As mentioned there are 1444 updated files, in ~600 commits (and those have been repeatedly squashed to reduce the multi-conflict potential, last time was last week). The -U0 diff is 44K lines, 2 MB; with context 72K lines, 3MB. At all of this is after as much as practical have been moved up into our own module, mostly new functions.