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

Когда мы впервые реализовали расширение браузера GoLinks, мы использовали ключевое слово go для запуска поиска golinks в браузере. Это позволяло пользователям просто набирать go, а затем пробел, чтобы активировать функцию поиска.

Для этого мы добавили ключевое слово в свойство «омнибокс» в файле манифеста нашего расширения.

// manifest.json
"omnibox": {
    "keyword": "go",
}

Эта функция поиска golinks омнибокса - мощная функция, которую наши пользователи любят и продолжают использовать. Функция отлично работала, за исключением одного конкретного случая использования. Если вы хотите выполнить поиск в Google для чего-либо, что начинается с go, это вызовет поиск в омнибоксе GoLinks и не даст вам выполнить поиск в Google.

Go - очень распространенное слово для поиска, если вы пишете код на golang или ищете другие элементы, связанные с go.

  • "Синтаксис переключения языка"
  • "Иди, финансируй меня"
  • "иди вперед"
  • «Давай, папа»
  • "Go Blue!"

Каждый из этих запросов запускал функцию поиска омнибокса GoLinks и мешал нашим пользователям выполнять свою работу. Поэтому нам пришлось искать решение.

Наше решение состояло в том, чтобы изменить термин go на go /, чтобы гарантировать, что функция омнибокса срабатывает намеренно. Он также имел тот же синтаксис, что и go / link, так что это было правильное решение. Это исправление отлично работало в Chrome, однако из-за него Firefox выдавал ошибку и предотвращал загрузку расширения.

В Chrome вам разрешено использовать специальные символы в ключевом слове, запускающем функцию омнибокса, однако в Firefox 62.0 добавление косой черты приведет к появлению этого сообщения: There was an error during installation: Extension is invalid. Итак, мы зарегистрировали ошибку в Mozilla, поскольку стандарт веб-расширений должен допускать такое поведение.

Мы продолжали получать жалобы клиентов на пользователей, которые ищут синтаксисы «golang» или кампании «иди, спонсируй меня», и им пришлось бы удалить расширение, чтобы искать элементы, связанные с «go». Ошибка была отмечена сообществом Mozilla как с низким приоритетом (P3), однако для нас это была проблема с высоким приоритетом.

Он также был отмечен как первая ошибка хороших, за которой следовала ссылка о том, как внести свой вклад, если кто-то захочет устранить эту ошибку. Итак, как и любая хорошая команда инженеров, мы спланировали способ решения этой проблемы напрямую для наших клиентов: исправив ошибку в Firefox.

Мы поняли, что непосредственное исправление ошибки было более проактивным подходом к решению проблемы, чем ожидание, пока кто-то другой исправит проблему. Firefox - это браузер с открытым исходным кодом, поэтому любой может зайти и исправить любые проблемы в невыполненной работе, в том числе такие инженерные группы, как мы. Никто из нас никогда раньше не работал над написанием кода для браузера, но когда у ваших клиентов возникает проблема, вы должны сделать все, что в ваших силах, чтобы решить их проблему.

В нашей команде мы используем обычное программное обеспечение для контроля версий: Git. Однако, чтобы внести свой вклад в Firefox, вы должны использовать систему управления версиями Mercurial. После загрузки репозитория вы можете запустить команду сборки для сборки браузера. Первая компиляция заняла очень много времени, поэтому мы позволили ей работать на ночь.

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

После внесения изменений в код и проведения тестов мы отправили изменения в Phabricator, программное обеспечение, используемое для проверки кода.



Отсюда мы провели обычную проверку кода с сообществом. Рецензент Роб Ву предложил упростить наше регулярное выражение.

С необходимыми правками наш код был одобрен.

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

Когда ревизия была готова к размещению, она была объединена в мастер и была готова к выпуску в будущей версии.

Для нас это было здорово, но была небольшая проблема, которая помешала нам представить новую функцию нашим пользователям. Исправление было теперь доступно в 65.0a1, который является альфа-версией Firefox Nightly, но все наши пользователи использовали последнюю общедоступную версию, которая на тот момент была 63.0.3.

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

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

Весь этот процесс занял около 3-4 месяцев, чтобы пройти от выявления ошибки до выпуска исправления для общедоступной функции, но мы продвинулись так быстро, как только могли, когда узнали, что у клиентов есть проблема.

Если вы в настоящее время являетесь пользователем GoLinks, обязательно ознакомьтесь с новой функцией омнибокса, которая запускается с помощью go / в адресной строке Chrome и Firefox.

Если вы не являетесь пользователем GoLinks, зарегистрируйтесь сегодня на https://www.golinks.io/ и узнайте, как компании повышают производительность и улучшают взаимодействие внутри своих организаций.

TwitterLinkedinInstagramFacebookYoutubeG2GitHub