Как делается Яндекс.Браузер — Михаил Лопаткин

51

description

Ни для кого не секрет, что Яндекс.Браузер стоит «на плечах гигантов» — проектов Chromium и Blink/Webkit. Разработчики Яндекса внесли огромное количество правок в исходный код Chromium, чтобы сделать Браузер быстрее и удобнее. Но браузер не должен забывать свои корни: необходимо регулярно обновлять унаследованные исходные коды, чтобы, например, исправлять проблемы безопасности. Мы поговорим о том, что делают разработчики Яндекса, чтобы в основе кода Браузера всегда лежала свежая версия Chromium, но при этом не терялись существующие правки. Это касается как организации процесса разработки, так и практики написания кода.

Transcript of Как делается Яндекс.Браузер — Михаил Лопаткин

Page 1: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 2: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 3: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 4: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 5: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 6: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 7: Как делается Яндекс.Браузер — Михаил Лопаткин

✓✓

Page 8: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 9: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 10: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 11: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 12: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 13: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 14: Как делается Яндекс.Браузер — Михаил Лопаткин

││

Page 15: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 16: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 17: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 18: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 19: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 20: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 21: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 22: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 23: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 24: Как делается Яндекс.Браузер — Михаил Лопаткин

│││││

Page 25: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 26: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 27: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 28: Как делается Яндекс.Браузер — Михаил Лопаткин

││

Page 29: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 30: Как делается Яндекс.Браузер — Михаил Лопаткин

#ifndef UPSTREAM_HEADER_H_ #define UPSTREAM_HEADER_H _ … class SomeClass{ … Some upstream implementation } #endif

Page 31: Как делается Яндекс.Браузер — Михаил Лопаткин

#ifndef UPSTREAM_HEADER_H_ #define UPSTREAM_HEADER_H _ #include “yandex/new_header.h” #if 0 … class SomeClass{ … Some upstream implementation } #endif #endif

Page 32: Как делается Яндекс.Браузер — Михаил Лопаткин

#ifndef YANDEX_NEW_HEADER_H_ #define YANDEX_NEW_HEADER_H _ … class SomeClass{ … Some implementation from Yandex } #endif

Page 33: Как делается Яндекс.Браузер — Михаил Лопаткин

Page 34: Как делается Яндекс.Браузер — Михаил Лопаткин

class Foo { void doSomething() { // doing stuff // ... // still doing // lots of upstream code } }

Page 35: Как делается Яндекс.Браузер — Михаил Лопаткин

class StuffDoer { void doStuff() { // doing stuff // ... // still doing } }

Page 36: Как делается Яндекс.Браузер — Михаил Лопаткин

class Foo { StuffDoer mDoer; void doSomething() { mDoer.doStuff(); // lots of upstream code } }

Page 37: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 38: Как делается Яндекс.Браузер — Михаил Лопаткин

class SomeManager { void methodOne() { … } void methodTwo() { … } }

Page 39: Как делается Яндекс.Браузер — Михаил Лопаткин

interface IManager { void methodOne(); void methodTwo(); }

Page 40: Как делается Яндекс.Браузер — Михаил Лопаткин

class SomeManager implements IManager { void methodOne() { … } void methodTwo() { … } }

Page 41: Как делается Яндекс.Браузер — Михаил Лопаткин

class YandexManager implements IManager { void methodOne() { … } void methodTwo() { … } }

Page 42: Как делается Яндекс.Браузер — Михаил Лопаткин

class SomeManager { void originalMethod(Foo foo) { … } }

Page 43: Как делается Яндекс.Браузер — Михаил Лопаткин

class SomeManager { void originalMethod(Foo foo, Bar bar) { // original stuff // stuff with Bar } }

Page 44: Как делается Яндекс.Браузер — Михаил Лопаткин

class SomeManager { void originalMethod(Foo foo, Bar bar) { // original stuff // stuff with Bar } void originalMethod(Foo foo) { originalMethod(foo, SOME_DEFAULT_BAR); } }

Page 45: Как делается Яндекс.Браузер — Михаил Лопаткин

class Base { void originalMethod(Foo foo) { … } } class YandexDerived extends Base { void originalMethod(Foo foo, Bar bar) { … } }

Page 46: Как делается Яндекс.Браузер — Михаил Лопаткин

class Base { void originalMethod(Foo foo, Bar bar) { … } } class YandexDerived extends Base { void originalMethod(Foo foo, Bar bar) { … } }

Page 47: Как делается Яндекс.Браузер — Михаил Лопаткин

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: Как делается Яндекс.Браузер — Михаил Лопаткин
Page 49: Как делается Яндекс.Браузер — Михаил Лопаткин

if (i > 0) { if (i != 0) { … } }

Page 50: Как делается Яндекс.Браузер — Михаил Лопаткин