الحلقة 15: أداء "جو مايسون" في مونتريال، PQ (تشرين الثاني/نوفمبر 2020)
الحلقات السابقة
يُعد Chrome مشروعًا كبيرًا يضم العديد من الأنظمة الفرعية. من الشائع العثور على التعليمات البرمجية تمت كتابتها لمكون واحد من شأنه أن يكون مفيدًا في مكان آخر، ولكنه قد يكون مخفيًا القيود. حرصًا على أمانك، يجب الحدّ من الوصول الخارجي إلى الوظائف الخطيرة. على سبيل المثال، دالة مخصصة مضبوطة وفقًا لاحتياجات أداء محددة:
// Blazing fast for 2-char strings, O(n^3) otherwise.
std::string ConcatShortStringsFast(const std::string& a, const std::string& b);
هناك عدة طرق لتقييد الوصول. رمز إيقاف قواعد مستوى رؤية GN خارج المكوِّن عن الاعتماد على أحد الأهداف. الأهداف التلقائية هي مرئية للجميع، ولكن يمكنك تعديل ذلك:
# In components/restricted_component/BUILD.gn
visibility = [
# Applies to all targets in this file.
# Only the given targets can depend on them.
"//components/restricted_component:*",
"//components/authorized_other_component:a_single_target",
]
source_set("internal") {
# This dangerous target should be locked down even more.
visibility = [ "//components/restricted_component:privileged_target" ]
}
تم التحقّق من صحة بيانات إذن الوصول باستخدام الأداة gn check
، والتي يتم تشغيلها كجزء
من كل إصدار GN.
آلية أخرى هي DEPS include_rules
، وهي تحدّ من الوصول إلى ملفات العناوين.
يكتسب كل دليل include_rules
من العنصر الرئيسي، ويمكن تعديله.
في ملف DEPS
الخاص بها. جميع ملفات العناوين مضمّنة من مصادر خارجية
يجب أن يسمح include_rules
بالأدلة.
# In //components/authorized_other_component/DEPS
include_rules = [
# Common directories like //base are inherited from
# //components/DEPS or //DEPS. Also allow includes from
# restricted_component, but not restricted_component/internal.
"+components/restricted_component",
"-components/restricted_component/internal",
# But do allow a single header from internal, for testing.
"+components/restricted_component/internal/test_support.h",
]
للتأكد من أن هذه التبعيات مناسبة، يمكن أن تضيف التغييرات التي تضيف دليل
إلى include_rules
عن طريق استخدام OWNERS
لهذا الدليل. لا
تلزم الموافقة لتقييد دليل باستخدام include_rules
! يمكنك
التأكد من أن كل شخص يغير المكون يتذكر عدم استخدام عناصر معينة
العناوين من خلال إضافة include_rule
لضبط عرض أسعارها.
تم التحقّق من include_rules
من خلال الإرسال المسبق، لذا لن تظهر لك أي
إلى أن تحاول تحميل التغيير. لاختبار include_rules
بدون
جارٍ التحميل، شغِّل buildtools/checkdeps/checkdeps.py <directory>
.