1. 程式人生 > >谷歌瀏覽器的原始碼分析 4

谷歌瀏覽器的原始碼分析 4

關於對話方塊,主要實現了讓使用者檢視當前軟體的版本、軟體資訊和檢查升級的功能。因此這個類主要繼續ChromeViews::View類、ChromeViews::DialogDelegateGoogleUpdateStatusListener。其中ChromeViews::View實現視窗的佈局和顯示問題,ChromeViews::DialogDelegate實現了事件響應,或者視窗某時是否可以顯示按鈕的問題,GoogleUpdateStatusListener是用來實現接收更新程式狀態資訊。

 

 

這個類的宣告如下:

class AboutChromeView : public ChromeViews::View,

                        public ChromeViews::DialogDelegate,

                       

public GoogleUpdateStatusListener {

 public:

  explicit AboutChromeView(Profile* profile);

  virtual ~AboutChromeView();

 

 

  // Initialize the controls on the dialog.

  void Init();

 

 

  // Overridden from ChromeViews::View:

 

virtual void GetPreferredSize(CSize *out);

  virtual void Layout();

  virtual void ViewHierarchyChanged(bool is_add,

                                    ChromeViews::View* parent,

                                    ChromeViews::View* child);

 

 

  // Overridden from ChromeViews::DialogDelegate:

  virtual int GetDialogButtons() const;

  virtual std::wstring GetDialogButtonLabel(DialogButton button) const;

  virtual bool IsDialogButtonEnabled(DialogButton button) const;

  virtual bool IsDialogButtonVisible(DialogButton button) const;

  virtual bool CanResize() const;

  virtual bool CanMaximize() const;

  virtual bool IsAlwaysOnTop() const;

  virtual bool HasAlwaysOnTopMenu() const;

  virtual bool IsModal() const;

  virtual std::wstring GetWindowTitle() const;

  virtual bool Accept();

  virtual ChromeViews::View* GetContentsView();

 

 

  // Overridden from GoogleUpdateStatusListener:

  virtual void OnReportResults(GoogleUpdateUpgradeResult result,

                               GoogleUpdateErrorCode error_code,

                               const std::wstring& version);

 

 

 private:

  // The visible state of the Check For Updates button.

  enum CheckButtonStatus {

    CHECKBUTTON_HIDDEN = 0,

    CHECKBUTTON_DISABLED,

    CHECKBUTTON_ENABLED,

  };

 

 

  // Update the UI to show the status of the upgrade.

  void UpdateStatus(GoogleUpdateUpgradeResult result,

                    GoogleUpdateErrorCode error_code);

 

 

  Profile* profile_;

 

 

  // UI elements on the dialog.

  ChromeViews::ImageView* about_dlg_background_;

  ChromeViews::Label* about_title_label_;

  ChromeViews::TextField* version_label_;

  ChromeViews::TextField* main_text_label_;

  // UI elements we add to the parent view.

  scoped_ptr<ChromeViews::Throbber> throbber_;

  ChromeViews::ImageView success_indicator_;

  ChromeViews::ImageView update_available_indicator_;

  ChromeViews::ImageView timeout_indicator_;

  ChromeViews::Label update_label_;

 

 

  // Keeps track of the visible state of the Check For Updates button.

  CheckButtonStatus check_button_status_;

 

 

  // The class that communicates with Google Update to find out if an update is

  // available and asks it to start an upgrade.

  GoogleUpdate* google_updater_;

 

 

  // Our current version.

  std::wstring current_version_;

 

 

  // The version Google Update reports is available to us.

  std::wstring new_version_available_;

 

 

  DISALLOW_EVIL_CONSTRUCTORS(AboutChromeView);

};

 

 

通過關於對話方塊的分析,可以理解到chrome瀏覽器視窗基本組成,以及視窗繼承關係,還有事件的響應方式。前面三次分析,主要是入門的分析,也是瞭解這麼一個大工程的一種手段。比如測試整個工程是否可以編譯,是否可以修改程式碼等等。後面的分析會以瀏覽器輸入HTTP連線開始,直到開啟網頁顯示為一個主線,做一個基本的分析。

 

 

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://www.cnblogs.com/captainbed