Biên dịch mã nguồn Chromium và phân tích mã cơ bản

Bối cảnh

Khi sử dụng Chrome trong môi trường điều khiển từ xa, các phím chức năng F1-F12 thường xuyên xung đột. Mặc dù có thể sử dụng tiện ích mở rộng như Tampermonkey để chặn sự kiện bàn phím, nhưng các phím hệ thống như F11 không thể xử lý ở tầng JavaScript. Giải pháp phần mềm chỉnh sửa phím bên thứ ba tồn tại hạn chế về độ chính xác và phạm vi ảnh hưởng.

Tải và biên dịch mã nguồn

Tài liệu chính thức của Chromium là tài nguyên quan trọng nhất. Trong môi trường mạng đặc biệt, cần lưu ý:

  • Cấu hình proxy hệ thống
  • Sử dụng gclient sync để tiếp tục tải gián đoạn
  • Xử lý giao thức gs://

Tùy chọn --no-history giảm đáng kể dung lượng tải. Khi gặp lỗi tham số, sửa tập tin depot_tools/fetch.py:

def parse_arguments(cmd_args):
  if len(cmd_args) < 2:
    show_usage('Yêu cầu chỉ định cấu hình')
  if cmd_args[1] in ('-h', '--help'):
    show_usage()
  
  dry_exec = False
  disable_hooks = False
  shallow_clone = True  # Thay đổi giá trị mặc định
  overwrite = False
  
  idx = 1
  while idx < len(cmd_args):
    param = cmd_args[idx]
    if not param.startswith('-'):
      break
      
    if param in ('-n', '--dry-run'):
      dry_exec = True
    elif param == '--nohooks':
      disable_hooks = True
    elif param == '--no-history':
      shallow_clone = True
    elif param == '--force':
      overwrite = True
    else:
      show_usage(f'Tùy chọn không hợp lệ: {param}')
    
    idx += 1

Quá trình biên dịch với lệnh autoninja -C out\Default chrome trên hệ thống Core i5-7500, 16GB RAM mất khoảng 6 giờ.

Điều chỉnh xử lý phím tắt

Phương pháp tìm kiếm từ khóa "F11" cho kết quả quá rộng. Sau khi loại trừ các tập tin kiểm thử và tài nguyên, tập tin fullscreen_control_host.cc được xác định liên quan đến chế độ toàn màn hình. Tài liệu "Life of a mouse click" cung cấp gợi ý về luồng xử lý sự kiện bàn phím.

Phân tích mã nguồn dẫn đến lớp FullscreenController với các phương thức quan trọng:

void FullscreenController::InternalExitFullscreen();
void FullscreenController::TabExitFullscreen(WebContents* content);

Thiết lập breakpoint tại InternalExitFullscreen() xác nhận F11 kích hoạt phương thức này. Chỉnh sửa logic xử lý tại đây vô hiệu hóa thành công phím F11. Quá trình biên dịch tăng tốc mất 10 phút và 5GB bộ nhớ.

Nhận định

Kiến trúc Chromium thể hiện nguyên lý thiết kế mô-đun rõ ràng, đặc biệt trong cơ chế render và quản lý tiện ích. Cơ chế hiển thị bảng HTML (<table>) cung cấp giải pháp linh hoạt cho bài toán định dạng ô phức tạp.

Thẻ: Chromium biên_dịch_mã_nguồn phím_tắt chế_độ_toàn_màn_hình F11

Đăng vào ngày 6 tháng 7 lúc 18:04