web-dev-qa-db-ja.com

Chromiumの「キオスクモード」の技術的な説明はどこにありますか?

コマンドライン引数で有効にしたChromiumの「kioskモード」が私の目的に適しているかどうかを評価しようとしています。

--kiosk引数の効果に関する正確な技術的説明はどこにありますか?

これらのいずれかが役立ちます:

  • chromiumのソースツリーにあるコメント付きのコードへのリンク
  • 公式ウィキページまたは公式ブログ投稿へのリンク
  • chromiumの課題追跡システムの課題へのリンク

ありがとう

4
wool.in.silver

明確化

Chromeには2つの異なる概念があり、どちらも名前kioskモードを使用します。

  1. デスクトップOS(Windows、Mac OS X、Linuxなど)で従来のWebブラウザとしてChromeを実行すると、コマンドライン引数--kioskが渡され、Webブラウザがで実行される場合があります。いわゆるkioskモード
  2. Chromeアプリはそれ自体が キオスクアプリ であると宣言する場合があり、ChromeOSデバイスはそのアプリをキオスクモード

これらの2つの概念は完全に無関係です!

混乱を避けるために、私はそれらをそれぞれ次のように呼びます。

  1. デスクトップキオスクモード、および
  2. ChromeOSキオスクモード

この質問では、デスクトップキオスクモードの技術的な説明を求めました。


ChromeOSキオスクモード

Googleの戦略は、Chromeをアプリの配信メカニズムにすることです。

これは、単に「より優れたWebブラウザーを作成する」よりもはるかに深い戦略であり、Chromeの設計上の決定の多くに情報を提供します。

たとえば、他のブラウザとは異なり、Chromeをフルスクリーンで実行している場合、Chromeはブラウザコントロール(進む/戻る、アドレスバーなど)を表示しません。このようなコントロールを追加するリクエストは 拒否 です。これは、リッチWebアプリケーションが独自のナビゲーションメタファーを提供するという目標と矛盾するためです。

ChromeOSキオスクモードは公式にサポートされている機能であり、この分野でのGoogleのより広範な戦略と一致しています。

あなたはそれに関する技術情報をウェブ上で見つけることができます。この機能には、課題トラッカーにラベルがあります。人々はそれを使ってソフトウェアをうまく​​構築しているようです。

批判的に:あなたはそれについて推論することができます、そしてそれが次のバージョンで突然壊れたり消えたりしないという期待があります。


デスクトップキオスクモード

見た目にもかかわらず、これは公式にサポートされている機能ではありません。

オンラインで情報が見つからない理由は、そのような情報が存在しないためです。

この機能は、Internet Explorerの既存の機能を模倣するために、2009年後半にパッチとして最初に受け入れられました( #23145を参照 )。

私はソースコードを閲覧し、現在(少なくとも)次のことを行っていることを発見しました。

  • フルスクリーンを強制します(そして通知「バブル」を抑制します)
  • 開発者ツールを無効にする
  • コンテキストメニューを無効にする
  • 追加の権限(場所など)のリクエストを抑制します

ただし、次のこともあります。

  • キーボードショートカットによるナビゲーション(戻る/進む)を抑制しません
  • キーボードショートカットを介してクリップボードのアクションを抑制しません
  • 印刷を抑制しません
  • ズームを抑制しません
  • 等.

基本的にデスクトップキオスクモードがどのように機能するかについての定義はありません(つまり、要件の正式な分析はありません) 、それは明らかに所有権がほとんどないコードベースに横たわっているUIハックの集まりです。

(Windowsでのみ実行される)唯一のテストカバレッジは次のとおりです。

IN_PROC_BROWSER_TEST_F(KioskModeTest, MAYBE_EnableKioskModeTest) {
  // Check if browser is in fullscreen mode.
  ASSERT_TRUE(browser()->window()->IsFullscreen());
  ASSERT_FALSE(browser()->window()->IsFullscreenBubbleVisible());
}

したがって、バージョン間に多くのリグレッション(例: #470265#552778 )があるのは当然のことです。

要件がなく、テストカバレッジがない場合、ブラウザとオペレーティングシステムの境界に沿って問題が発生する可能性があり、その境界は非常に大きくなります。

入力方法(オンスクリーンキーボードなど)はキオスクにとって特に興味深いものですが、バージョン間でリグレッション(例: #491516 )があります。

印刷は特に悪い領域です。複雑さを倍増させる追加のコマンドライン引数(例:--kiosk-printing--disable-print-preview)があり、バグトラッカーにはこの領域のリグレッションが散らばっています。

Mac OS XのキオスクAPIと統合する試みはありません。これにより、ドックなどへのアクセスが妨げられます。

興味深いことに、コマンドライン引数がサイレントに失敗する可能性があるため、デスクトップキオスクモードであることを保証することはできません( #566496 )。

最も厄介な側面は、コードに所有者がいないことです。課題追跡システムのコメントを見ると、ほとんどの開発者はデスクトップキオスクモードが存在することさえ知らないようです! ChromeOSキオスクモードと混同されることが多く、バグのラベルが誤っています。 「十分にサポートされていない」とさまざまに説明されており、単に削除する必要があるという提案( #470265 )もあります。この機能に対する漠然とした愛情を表現する唯一のChromiumdev 'は [email protected] です。

私はもっ​​と興味深い分野を見始めていません。例:

  • セーフブラウジングとどのように相互作用しますか?
  • Chrome拡張機能とどのように相互作用しますか?
  • ユーザーが証明書の問題があるページにアクセスした場合はどうなりますか?
  • ソフトウェアの更新メカニズムにどのように影響しますか?

結論

システムで--kioskフラグ(デスクトップキオスクモード)を使用しないしない

  • そのようなシステムのセキュリティについて推論することはできません
  • Chromeを更新すると、システムが破損する可能性があります

Chromeエコシステムを使用してキオスクシステムを構築する場合は、ChromeOSを使用することをお勧めします。

4
wool.in.silver

Chromiumのソースコードは、 " インデックスが作成され、Webで入手可能 "です。これがまさにこの理由によるものです。

コード検索 を使用すると、 プロジェクト全体 に対してkioskを検索できます。

最初の検索 私が使用したものの1つの抜粋で、興味があるかもしれませんが、

  // In kiosk mode, we want to always be fullscreen, so switch to that now.
  if (base::CommandLine::ForCurrentProcess()->HasSwitch(switches::kKioskMode) ||
      base::CommandLine::ForCurrentProcess()->HasSwitch(
          switches::kStartFullscreen)) {
    // It's possible for there to be no browser window, e.g. if someone
    // specified a non-sensical combination of options
    // ("--kiosk --no_startup_window"); do nothing in that case.
    Browser* browser = BrowserList::GetInstance()->GetLastActive();
    if (browser)
      chrome::ToggleFullscreenMode(browser);
  }
1
root