3

Я пытаюсь оценить, подходит ли "режим киоска" Chromium, включенный через аргумент командной строки, для моих целей.

Где я могу найти точное техническое описание эффекта аргумента --kiosk ?

Любой из них будет полезен:

  • ссылка на закомментированный кусок кода в исходном дереве Chromium
  • ссылка на официальную вики-страницу или официальное сообщение в блоге
  • ссылка на проблему в трекере Chromium

Спасибо

2 ответа2

3

Disambiguation

В Chrome есть две разные концепции, каждая из которых использует режим названия киоска.

  1. При запуске Chrome в качестве традиционного веб-браузера на настольной ОС (т. Е. Windows, Mac OS X, Linux) может быть передан аргумент командной строки --kiosk , в результате чего веб-браузер будет работать в так называемом режиме киоска.
  2. Приложение Chrome может объявить себя приложением Kiosk , а устройство ChromeOS может быть настроено для запуска этого приложения в режиме киоска.

Эти два понятия совершенно не связаны!

Чтобы избежать путаницы, я буду обозначать их соответственно как:

  1. режим рабочего стола и
  2. Режим киоска ChromeOS.

Этот вопрос задан для технического описания режима настольного киоска.


Режим ChromeOS Kiosk

Помните, что стратегия Google заключается в том, чтобы Chrome был механизмом доставки приложений.

Это гораздо более глубокая стратегия, чем просто «сделать лучший веб-браузер», и она дает информацию о многих дизайнерских решениях в Chrome.

Например, в отличие от других браузеров, Chrome не отображает элементы управления браузером (вперед / назад, адресную строку и т.д.) При работе в полноэкранном режиме Chrome. Запросы на добавление таких элементов управления отклоняются, поскольку они вступают в противоречие с целью создания многофункциональных веб-приложений, предоставляющих собственную навигационную метафору.

Режим киоска ChromeOS является официально поддерживаемой функцией и соответствует более широкой стратегии Google в этой области.

Вы можете найти техническую информацию об этом в Интернете; у функции есть метка в трекере проблем; люди, кажется, успешно создают программное обеспечение с его помощью.

Критически: вы можете рассуждать об этом, и есть ожидание, что он не внезапно сломается или исчезнет в следующей версии.


Режим настольного киоска

Несмотря на внешность, это не официально поддерживаемая функция.

Причина того, что в Интернете нет информации, заключается в том, что такой информации не существует.

Эта функция была первоначально принята как исправление в конце 2009 года (см. # 23145), чтобы имитировать существующую функцию в Internet Explorer.

Я просмотрел исходный код и обнаружил, что он в настоящее время делает (по крайней мере) эти вещи:

  • заставить полноэкранный режим (и подавить уведомление «пузырь»)
  • отключить инструменты разработчика
  • отключить контекстное меню
  • подавить запросы на дополнительные разрешения (например, местоположение)

Однако это также:

  • не подавляет навигацию (назад / вперед) с помощью сочетания клавиш
  • не подавляет действия буфера обмена с помощью сочетания клавиш
  • не подавляет печать
  • не подавляет масштабирование
  • и т.п.

В основном нет определения того, как должен функционировать режим киоска рабочего стола (то есть нет формального анализа требований), это просто набор хаков 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), которые увеличивают сложность, и средство отслеживания ошибок изобилует регрессиями в этой области.

Не делается попытки интеграции с API-интерфейсом киоска Mac OS X, который препятствовал бы доступу к док-станции и т.д.

Интересно, что вы не можете гарантировать, что находитесь даже в режиме киоска на рабочем столе, поскольку аргумент командной строки может завершиться сбоем (# 566496).

Наиболее тревожным аспектом является то, что у кода просто нет владельца. Просматривая комментарии к трекерам, большинство разработчиков, кажется, не знают, что режим киоска на рабочем столе даже существует! Это часто путают с режимом киоска ChromeOS с ошибками, помеченными неправильно. Он по-разному описывается как "не очень хорошо поддерживаемый", и даже есть предположение (# 470265), что его следует просто удалить. Единственный разработчик Chromium, который выражает смутную привязанность к этой функции, - это pkasting@chromium.org.

Я не начал смотреть на более интересные области, например:

  • как это взаимодействует с безопасным просмотром?
  • как это взаимодействует с расширениями Chrome?
  • Что делать, если пользователь заходит на страницу с проблемой сертификата?
  • как это влияет на механизм обновления программного обеспечения?

Заключение

Не используйте флаг --kiosk (настольный режим киоска) в вашей системе.

  • Вы не можете рассуждать о безопасности такой системы
  • обновления Chrome могут сломать вашу систему

Если вы хотите использовать экосистему Chrome для построения системы киосков, лучше использовать ChromeOS.

1

Исходный код Chromium по этой причине « проиндексирован и доступен в Интернете ».

Используя поиск кода, вы можете искать kiosk по всему проекту.

Выдержка из одного из первых поисков, которые я использовал, которые могут вас заинтересовать,

  // 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);
  }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .