Chromiumにシークレット"タブ"を追加する

今回の目標

Chromeを使っていて、閲覧履歴を残したくない、というときありますよね。
そんなときに活躍するのが「シークレットウィンドウ」なのですが、 普通のブラウザとシークレットモードのブラウザを分けて開かなくてはなりません。
...不便じゃないですか?不便ですよね。はい。
ということで今回はChromiumにシークレット"タブ"を追加してみようと思います。

まずはシークレットウィンドウに関連する部分を探す

いきなり変更を加えると言ってもChromiumソースコードは膨大な量なのでどこから手を付けていいか見当も付きません。
まずは関係ありそうなところをChromium Code Searchで探ってみましょう。

シークレットモードは内部では"Incognito"と言うようなのでnewincognitowindowで検索してみると、
f:id:glycelery:20181025155432p:plain あった。(実は探すのめっちゃ苦労したけどそれは内緒)

見てみるとその下にはちょうどNewTabなんて関数も。
f:id:glycelery:20181025155944p:plain

この2つを組み合わせればシークレットタブを作れちゃうのでは?

NewWindowとNewIncognitoWindowを見比べてみると、プリプロセッサ指令の違いはあるものの大きな違いは
GetOriginalProfile()かGetOffTheRecordProfile()かの違い。

これを踏まえてNewIncognitoTabを作ってみる。

コードを書き換えていく

タブを開くときにbrowserのprofileごと書き換えちゃおうという強引な発想。
ただbrowserのprofileは書き換えられないようconst定義がされていたのでそれを外しついでにセッターを定義。

またこのままだと続けて開くタブが全てシークレットモードになってしまうためNewTabにGetOriginalProfile()の処理を追加。

そしてチェックを一つ外す。

さて、なかなか強引だができたんじゃなかろうか...?
ということで試しにシークレットウィンドウを開くボタンをシークレットタブに割り当てて実行してみる。

とりあえずテスト

...こんな適当な変更で動いてしまった。
履歴もしっかり残らないしログイン情報も残らない。

f:id:glycelery:20181026112949p:plain


今回はテスト的にシークレットウィンドウボタンに割り当てましたが
次回は"シークレットタブを開く"コマンドを追加して、見た目をそれっぽくしていきます。