| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ANDROID_HUNG_RENDERER_INFOBAR_DELEGATE_H_ |
| #define CHROME_BROWSER_ANDROID_HUNG_RENDERER_INFOBAR_DELEGATE_H_ |
| |
| #include "base/macros.h" |
| #include "components/infobars/core/confirm_infobar_delegate.h" |
| |
| namespace content { |
| class RenderProcessHost; |
| } |
| |
| class InfoBarService; |
| |
| // A hung renderer infobar is shown when the when the renderer is deemed |
| // unresponsive. The infobar provides the user with a choice of either |
| // waiting for the renderer to regain responsiveness, or killing the |
| // renderer immediately. This class provides the resources necessary to |
| // display such an infobar, also logging the action taken by the user |
| // (if any) for UMA purposes. |
| class HungRendererInfoBarDelegate : public ConfirmInfoBarDelegate { |
| public: |
| // Creates a hung renderer InfoBar, adding it to the provided |
| // |infobar_service|. The |render_process_host| will be used to kill the |
| // renderer process if the user so chooses. |
| static void Create(InfoBarService* infobar_service, |
| content::RenderProcessHost* render_process_host); |
| |
| // Called if the renderer regains responsiveness before the infobar is |
| // dismissed. |
| void OnRendererResponsive(); |
| |
| private: |
| // Keep these values in alignment with their histograms.xml counterparts. |
| enum Event { |
| WAIT_CLICKED = 0, |
| KILL_CLICKED, |
| CLOSE_CLICKED, |
| RENDERER_BECAME_RESPONSIVE, |
| TAB_CLOSED, |
| EVENT_COUNT |
| }; |
| |
| explicit HungRendererInfoBarDelegate( |
| content::RenderProcessHost* render_process_host); |
| ~HungRendererInfoBarDelegate() override; |
| |
| // ConfirmInfoBarDelegate: |
| infobars::InfoBarDelegate::InfoBarIdentifier GetIdentifier() const override; |
| void InfoBarDismissed() override; |
| HungRendererInfoBarDelegate* AsHungRendererInfoBarDelegate() override; |
| int GetIconId() const override; |
| base::string16 GetMessageText() const override; |
| base::string16 GetButtonLabel(InfoBarButton button) const override; |
| bool Accept() override; |
| bool Cancel() override; |
| |
| void LogEvent(Event event); |
| |
| // Used to terminate the renderer process if the user clicks the kill button. |
| content::RenderProcessHost* render_process_host_; |
| |
| bool terminal_event_logged_for_uma_; |
| |
| DISALLOW_COPY_AND_ASSIGN(HungRendererInfoBarDelegate); |
| }; |
| |
| #endif // CHROME_BROWSER_ANDROID_HUNG_RENDERER_INFOBAR_DELEGATE_H_ |