AOSPに置いてある標準ウェブブラウザアプリの実装についてのメモ

本当にメモです
もしブラウザアプリを作るとなった時は必要になる知識かもしれませんが、普通は必要ないです。

ここにおいてあるブラウザがどんな作りになっているのか(Chromeになってから放置されている)
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser

# AOSPのブラウザアプリのクラス図
色んなイベントが来たら大体Controllerに渡して処理を行う
Controller=神。(ただViewがUiとして分離できているのでそれでもいいかも？？)
![image](https://qiita-image-store.s3.amazonaws.com/0/27388/d2756fd5-1a3a-87d9-ff8b-d38b3f0a8638.png)


# ウェブブラウザを作る場合に必要となりそうなもの
実際ウェブブラウザって履歴管理やブックマークなどを除いて、何が必要なんだろう結構いろいろあるなというメモ
実際に作る場合はOS毎に対応状況が異なるのでうまく処理しつつやる必要がある

* 初期設定
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/BrowserSettings.java#250

* URLスキーマの管理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/UrlHandler.java#68



以下、Tabクラスの実装のだいたいはControllerクラスに移譲されている
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Controller.java

* Basic認証ダイアログ
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#599
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Controller.java#1008

* SSLエラーのときのダイアログ
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#514
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/PageDialogsHandler.java#278

* ファイルアップロード
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#1004
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/UploadHandler.java#69

* ファイルダウンロード処理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#1141
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/DownloadHandler.java#58

* スクリーンキャプチャ(タブに表示する)
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#1839

* 位置情報のパーミッションダイアログ
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#901

* 開いていたpostのページを戻るなどでもう一度postするときに表示するダイアログ
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#450

* プログレス管理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#792

* Faviconの管理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#810

* AppleTouchIconの管理(Webページ内にある大きなアイコン)
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#816

* WebStrageの大きさの管理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#854

* pauseやresumeの管理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#1427

* 新しいタブができる時の処理
https://android.googlesource.com/platform/packages/apps/Browser/+/refs/heads/master/src/com/android/browser/Tab.java#672

### クラス図のdotファイル
全く関係ないですが、初めてGraphvizでクラス図を書いてみたので元データ置いておきます(後で他のクラス図書くときに使うかも)
https://gist.github.com/takahirom/75f40a180b1d5a4c287e