Как делается Яндекс.Браузер — Михаил Лопаткин
DESCRIPTION
Ни для кого не секрет, что Яндекс.Браузер стоит «на плечах гигантов» — проектов Chromium и Blink/Webkit. Разработчики Яндекса внесли огромное количество правок в исходный код Chromium, чтобы сделать Браузер быстрее и удобнее. Но браузер не должен забывать свои корни: необходимо регулярно обновлять унаследованные исходные коды, чтобы, например, исправлять проблемы безопасности. Мы поговорим о том, что делают разработчики Яндекса, чтобы в основе кода Браузера всегда лежала свежая версия Chromium, но при этом не терялись существующие правки. Это касается как организации процесса разработки, так и практики написания кода.TRANSCRIPT
![Page 1: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/1.jpg)
![Page 2: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/2.jpg)
![Page 3: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/3.jpg)
▌
▌
![Page 4: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/4.jpg)
![Page 5: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/5.jpg)
![Page 6: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/6.jpg)
![Page 7: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/7.jpg)
✓✓
✓
![Page 8: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/8.jpg)
![Page 9: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/9.jpg)
![Page 10: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/10.jpg)
![Page 11: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/11.jpg)
![Page 12: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/12.jpg)
│
![Page 13: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/13.jpg)
![Page 14: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/14.jpg)
││
![Page 15: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/15.jpg)
![Page 16: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/16.jpg)
▌
![Page 17: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/17.jpg)
▌
![Page 18: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/18.jpg)
![Page 19: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/19.jpg)
![Page 20: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/20.jpg)
│
![Page 21: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/21.jpg)
![Page 22: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/22.jpg)
![Page 23: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/23.jpg)
![Page 24: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/24.jpg)
│││││
![Page 25: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/25.jpg)
![Page 26: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/26.jpg)
![Page 27: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/27.jpg)
![Page 28: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/28.jpg)
││
![Page 29: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/29.jpg)
![Page 30: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/30.jpg)
#ifndef UPSTREAM_HEADER_H_ #define UPSTREAM_HEADER_H _ … class SomeClass{ … Some upstream implementation } #endif
![Page 31: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/31.jpg)
#ifndef UPSTREAM_HEADER_H_ #define UPSTREAM_HEADER_H _ #include “yandex/new_header.h” #if 0 … class SomeClass{ … Some upstream implementation } #endif #endif
![Page 32: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/32.jpg)
#ifndef YANDEX_NEW_HEADER_H_ #define YANDEX_NEW_HEADER_H _ … class SomeClass{ … Some implementation from Yandex } #endif
![Page 33: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/33.jpg)
│
![Page 34: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/34.jpg)
class Foo { void doSomething() { // doing stuff // ... // still doing // lots of upstream code } }
![Page 35: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/35.jpg)
class StuffDoer { void doStuff() { // doing stuff // ... // still doing } }
![Page 36: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/36.jpg)
class Foo { StuffDoer mDoer; void doSomething() { mDoer.doStuff(); // lots of upstream code } }
![Page 37: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/37.jpg)
![Page 38: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/38.jpg)
class SomeManager { void methodOne() { … } void methodTwo() { … } }
![Page 39: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/39.jpg)
interface IManager { void methodOne(); void methodTwo(); }
![Page 40: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/40.jpg)
class SomeManager implements IManager { void methodOne() { … } void methodTwo() { … } }
![Page 41: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/41.jpg)
class YandexManager implements IManager { void methodOne() { … } void methodTwo() { … } }
![Page 42: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/42.jpg)
class SomeManager { void originalMethod(Foo foo) { … } }
![Page 43: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/43.jpg)
class SomeManager { void originalMethod(Foo foo, Bar bar) { // original stuff // stuff with Bar } }
![Page 44: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/44.jpg)
class SomeManager { void originalMethod(Foo foo, Bar bar) { // original stuff // stuff with Bar } void originalMethod(Foo foo) { originalMethod(foo, SOME_DEFAULT_BAR); } }
![Page 45: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/45.jpg)
class Base { void originalMethod(Foo foo) { … } } class YandexDerived extends Base { void originalMethod(Foo foo, Bar bar) { … } }
![Page 46: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/46.jpg)
class Base { void originalMethod(Foo foo, Bar bar) { … } } class YandexDerived extends Base { void originalMethod(Foo foo, Bar bar) { … } }
![Page 47: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/47.jpg)
class Base { void originalMethodForked(Foo foo, Bar bar) { originalMethod(foo) } void originalMethod(Foo foo) { … } } class YandexDerived extends Base { void originalMethodForked(Foo foo, Bar bar)
![Page 48: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/48.jpg)
![Page 49: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/49.jpg)
▌
▌
if (i > 0) { if (i != 0) { … } }
![Page 50: Как делается Яндекс.Браузер — Михаил Лопаткин](https://reader034.vdocument.in/reader034/viewer/2022042614/559c1e601a28abc2298b46ab/html5/thumbnails/50.jpg)
▌
▌