How to downgrade from Chrome 35 to 34 without losing data?

4

3

After upgrading Chromium from 34 to 35, the usability of Chromium went downhill. So I decided to downgrade Chromium. Fortunately, the previous version of Chromium was still somewhere on my disk, so downgrading (in ArchLinux) was as simple as:

sudo pacman -U /var/cache/pacman/pkg/chromium-34.0.1847.137-1-x86_64.pkg.tar.xz

After running the previous command, Chromium did start, but unfortunately, I kept getting bugged by the following message on start-up:

Your profile can not be used because it is from a newer version of Google Chrome. Some features may be unavailable. Please specify a different profile directory or use a newer version of Chrome.

One way to get rid of this message is to delete ~/.config/chromium/Default/Web Data, but this also caused my search engine keywords to disappear.

How can I downgrade Chromium without losing any data?

Note: I'm using Linux, but this problem is platform-independent. Feel free to answer from the perspective of a non-Linux operating system such as Windows.

Rob W

Posted 2014-05-23T14:31:23.900

Reputation: 1 473

Yeah, because it's practical to backup your whole system and all your data every few hours when Google releases a new version… well, maybe if you're Google. – Synetech – 2018-05-09T06:23:53.547

Just out of curiosity.. Do you really want to run an outdated browser version forever now? This has quite a few security implications. – slhck – 2014-05-23T16:31:56.637

@slhck No, just until the UX bugs are fixed. After upgrading, I got random visual artifacts, bad font rendering in the UI, random black rectangles, and dragging bugs (http://crbug.com/376761). This is even worse than the JavaScript and devtools bugs in Chromium 33 (which I skipped as well). If the bug doesn't get resolved within two release cycles, I will run my own compiled version of Chromium with Aura disabled.

– Rob W – 2014-05-23T16:39:00.610

In the future, you might find this is a lot easier, if you make a backup of your system/data before you upgrade. – Zoredache – 2014-05-23T18:03:50.347

Answers

8

Note: Close Chrome and back up your profile before messing with it!

Web Data is a SQLite database, so I used the sqlite3 program to open the database.

  1. What is the current version of the "Web Data" database? (run SELECT * from meta;)

    sqlite> SELECT * FROM meta;
    Default Search Provider ID|34
    last_compatible_version|55
    version|55
    Builtin Keyword Version|70
  2. The emphasized rows in the previous output refer to internal database version numbers in Chromium. For every version, you can find the relevant migration codes in Chromium's source code (autofill_table.cc). Specifically, take a look at the AutofillTable::MigrateToVersion method. Since my database version is 55, I looked at "case 55"

    case 55:
          *update_compatible_version = true;
          return MigrateToVersion55MergeAutofillDatesTable();

    After finding out this method, I was almost ready to write a SQLite query to reverse the migration.

  3. Using the knowledge from the previous step (and the original schema from a different table on another computer), I constructed the following query (copy-paste the query to sqlite3):
    Note: This query is specific to downgrading Chrome 35 to 34!

    CREATE TABLE autofill_v54 (
        name VARCHAR,
        value VARCHAR,
        value_lower VARCHAR,
        pair_id INTEGER PRIMARY KEY,
        count INTEGER DEFAULT 1);
    CREATE TABLE autofill_dates (
        pair_id INTEGER DEFAULT 0,
        date_created INTEGER DEFAULT 0);        
    
    INSERT INTO autofill_v54 (
        name,
        value,
        value_lower,
        count
    ) SELECT name, value, value_lower, count FROM autofill;
    
    INSERT INTO autofill_dates (
        pair_id,
        date_created
    ) SELECT pair_id, date_created
      FROM autofill_v54 a54 JOIN autofill a USING (name, value);
    
    DROP TABLE autofill;
    ALTER TABLE autofill_v54 RENAME TO autofill;
    
    CREATE INDEX autofill_name ON autofill (name);
    CREATE INDEX autofill_name_value_lower ON autofill (name, value_lower);
    
  4. After reverting the migration, you can safely lower the database version:

    UPDATE meta SET value='54' WHERE key='version' OR
                                     key = 'last_compatible_version';
    
  5. Close the database using .quit

After completing all of these steps, I started Chromium, there were no annoying popups and all profile data was still intact!

Rob W

Posted 2014-05-23T14:31:23.900

Reputation: 1 473

Actually, it works from newer versions of chrome too, it will recreate the version 54, which was used in chrome 34 and then re-update to the newer version; of course, it is likely to quit at some point, and may not fix everything, but it does get rid of the popups. (reverted from version 40 to 33.0.1750 to get flash drm working) – Perkins – 2014-12-17T20:20:55.057

0

I confirm: the solution with sqlite3 works fine !

I'm an Ubuntu user (14.04), but I tried this method not with chromium but with google-chrome-stable.

I've downgraded chrome from 35 to 34 because there is no way for running java applet in the release 35. :-(

sudo apt-get purge google-chrome-stable
sudo rm -f /etc/apt/sources.list.d/google-chrome.list*
sudo apt-get update
cd ~/Downloads
wget http://95.31.35.30/chrome/pool/main/g/google-chrome-stable/google-chrome-stable_34.0.1847.137-1_amd64.deb

By removing this source, google-chrome will no longer update automatically. I have installed the release 34 from nautilus with gdebi. You can install gdebi with:

sudo apt-get install gdebi

The problem starts here... Message = 'Your profile can not be used because it is from a newer...'
You can install sqlite3 like this:

sudo apt-get install sqlite3

to execute the solution above (provided by Rob W), do:

cd ~/.config/google-chrome/Default
sqlite3 Web\ Data

After that, simply copy/paste the steps 1, 3, 4, 5 given by Rob W.
Hope this help. ;-)

smillien62

Posted 2014-05-23T14:31:23.900

Reputation: 101