OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/hung_plugin_tab_helper.h" | 5 #include "chrome/browser/ui/hung_plugin_tab_helper.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/process.h" | 9 #include "base/process.h" |
10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 break; | 115 break; |
116 } | 116 } |
117 ++iter; | 117 ++iter; |
118 } | 118 } |
119 // Ignore the case where we didn't find the plugin, it may have terminated | 119 // Ignore the case where we didn't find the plugin, it may have terminated |
120 // before this function could run. | 120 // before this function could run. |
121 } | 121 } |
122 | 122 |
123 } // namespace | 123 } // namespace |
124 | 124 |
125 class HungPluginTabHelper::InfoBarDelegate : public ConfirmInfoBarDelegate { | 125 class HungPluginInfoBarDelegate : public ConfirmInfoBarDelegate { |
126 public: | 126 public: |
127 InfoBarDelegate(HungPluginTabHelper* helper, | 127 HungPluginInfoBarDelegate(HungPluginTabHelper* helper, |
128 InfoBarService* infobar_service, | 128 InfoBarService* infobar_service, |
129 int plugin_child_id, | 129 int plugin_child_id, |
130 const string16& plugin_name); | 130 const string16& plugin_name); |
131 virtual ~InfoBarDelegate(); | 131 virtual ~HungPluginInfoBarDelegate(); |
132 | 132 |
133 // ConfirmInfoBarDelegate: | 133 // ConfirmInfoBarDelegate: |
134 virtual gfx::Image* GetIcon() const OVERRIDE; | 134 virtual gfx::Image* GetIcon() const OVERRIDE; |
135 virtual string16 GetMessageText() const OVERRIDE; | 135 virtual string16 GetMessageText() const OVERRIDE; |
136 virtual int GetButtons() const OVERRIDE; | 136 virtual int GetButtons() const OVERRIDE; |
137 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; | 137 virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; |
138 virtual bool Accept() OVERRIDE; | 138 virtual bool Accept() OVERRIDE; |
139 | 139 |
140 private: | 140 private: |
141 HungPluginTabHelper* helper_; | 141 HungPluginTabHelper* helper_; |
142 int plugin_child_id_; | 142 int plugin_child_id_; |
143 | 143 |
144 string16 message_; | 144 string16 message_; |
145 string16 button_text_; | 145 string16 button_text_; |
146 gfx::Image* icon_; | 146 gfx::Image* icon_; |
147 }; | 147 }; |
148 | 148 |
149 HungPluginTabHelper::InfoBarDelegate::InfoBarDelegate( | 149 HungPluginInfoBarDelegate::HungPluginInfoBarDelegate( |
150 HungPluginTabHelper* helper, | 150 HungPluginTabHelper* helper, |
151 InfoBarService* infobar_service, | 151 InfoBarService* infobar_service, |
152 int plugin_child_id, | 152 int plugin_child_id, |
153 const string16& plugin_name) | 153 const string16& plugin_name) |
154 : ConfirmInfoBarDelegate(infobar_service), | 154 : ConfirmInfoBarDelegate(infobar_service), |
155 helper_(helper), | 155 helper_(helper), |
156 plugin_child_id_(plugin_child_id) { | 156 plugin_child_id_(plugin_child_id) { |
157 message_ = l10n_util::GetStringFUTF16(IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR, | 157 message_ = l10n_util::GetStringFUTF16(IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR, |
158 plugin_name); | 158 plugin_name); |
159 button_text_ = l10n_util::GetStringUTF16( | 159 button_text_ = l10n_util::GetStringUTF16( |
160 IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR_KILLBUTTON); | 160 IDS_BROWSER_HANGMONITOR_PLUGIN_INFOBAR_KILLBUTTON); |
161 icon_ = &ResourceBundle::GetSharedInstance().GetNativeImageNamed( | 161 icon_ = &ResourceBundle::GetSharedInstance().GetNativeImageNamed( |
162 IDR_INFOBAR_PLUGIN_CRASHED); | 162 IDR_INFOBAR_PLUGIN_CRASHED); |
163 } | 163 } |
164 | 164 |
165 HungPluginTabHelper::InfoBarDelegate::~InfoBarDelegate() { | 165 HungPluginInfoBarDelegate::~HungPluginInfoBarDelegate() { |
166 } | 166 } |
167 | 167 |
168 gfx::Image* HungPluginTabHelper::InfoBarDelegate::GetIcon() const { | 168 gfx::Image* HungPluginInfoBarDelegate::GetIcon() const { |
169 return icon_; | 169 return icon_; |
170 } | 170 } |
171 | 171 |
172 string16 HungPluginTabHelper::InfoBarDelegate::GetMessageText() const { | 172 string16 HungPluginInfoBarDelegate::GetMessageText() const { |
173 return message_; | 173 return message_; |
174 } | 174 } |
175 | 175 |
176 int HungPluginTabHelper::InfoBarDelegate::GetButtons() const { | 176 int HungPluginInfoBarDelegate::GetButtons() const { |
177 return BUTTON_OK; | 177 return BUTTON_OK; |
178 } | 178 } |
179 | 179 |
180 string16 HungPluginTabHelper::InfoBarDelegate::GetButtonLabel( | 180 string16 HungPluginInfoBarDelegate::GetButtonLabel(InfoBarButton button) const { |
181 InfoBarButton button) const { | |
182 return button_text_; | 181 return button_text_; |
183 } | 182 } |
184 | 183 |
185 bool HungPluginTabHelper::InfoBarDelegate::Accept() { | 184 bool HungPluginInfoBarDelegate::Accept() { |
186 helper_->KillPlugin(plugin_child_id_); | 185 helper_->KillPlugin(plugin_child_id_); |
187 return true; | 186 return true; |
188 } | 187 } |
189 | 188 |
190 // ----------------------------------------------------------------------------- | 189 // ----------------------------------------------------------------------------- |
191 | 190 |
192 HungPluginTabHelper::PluginState::PluginState(const FilePath& p, | 191 HungPluginTabHelper::PluginState::PluginState(const FilePath& p, |
193 const string16& n) | 192 const string16& n) |
194 : path(p), | 193 : path(p), |
195 name(n), | 194 name(n), |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 const content::NotificationSource& source, | 266 const content::NotificationSource& source, |
268 const content::NotificationDetails& details) { | 267 const content::NotificationDetails& details) { |
269 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); | 268 DCHECK_EQ(chrome::NOTIFICATION_TAB_CONTENTS_INFOBAR_REMOVED, type); |
270 | 269 |
271 // Note: do not dereference. The InfoBarContainer will delete the object when | 270 // Note: do not dereference. The InfoBarContainer will delete the object when |
272 // it gets this notification, we only remove our tracking info, if we have | 271 // it gets this notification, we only remove our tracking info, if we have |
273 // any. | 272 // any. |
274 // | 273 // |
275 // TODO(pkasting): This comment will be incorrect and should be removed once | 274 // TODO(pkasting): This comment will be incorrect and should be removed once |
276 // InfoBars own their delegates. | 275 // InfoBars own their delegates. |
277 ::InfoBarDelegate* delegate = | 276 InfoBarDelegate* delegate = |
278 content::Details<InfoBarRemovedDetails>(details)->first; | 277 content::Details<InfoBarRemovedDetails>(details)->first; |
279 | 278 |
280 for (PluginStateMap::iterator i = hung_plugins_.begin(); | 279 for (PluginStateMap::iterator i = hung_plugins_.begin(); |
281 i != hung_plugins_.end(); ++i) { | 280 i != hung_plugins_.end(); ++i) { |
282 PluginState* state = i->second.get(); | 281 PluginState* state = i->second.get(); |
283 if (state->info_bar == delegate) { | 282 if (state->info_bar == delegate) { |
284 state->info_bar = NULL; | 283 state->info_bar = NULL; |
285 | 284 |
286 // Schedule the timer to re-show the infobar if the plugin continues to be | 285 // Schedule the timer to re-show the infobar if the plugin continues to be |
287 // hung. | 286 // hung. |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 ShowBar(child_id, found->second.get()); | 355 ShowBar(child_id, found->second.get()); |
357 } | 356 } |
358 | 357 |
359 void HungPluginTabHelper::ShowBar(int child_id, PluginState* state) { | 358 void HungPluginTabHelper::ShowBar(int child_id, PluginState* state) { |
360 InfoBarService* infobar_service = | 359 InfoBarService* infobar_service = |
361 InfoBarService::FromWebContents(web_contents()); | 360 InfoBarService::FromWebContents(web_contents()); |
362 if (!infobar_service) | 361 if (!infobar_service) |
363 return; | 362 return; |
364 | 363 |
365 DCHECK(!state->info_bar); | 364 DCHECK(!state->info_bar); |
366 state->info_bar = new InfoBarDelegate(this, infobar_service, | 365 state->info_bar = new HungPluginInfoBarDelegate(this, infobar_service, |
367 child_id, state->name); | 366 child_id, state->name); |
368 infobar_service->AddInfoBar(state->info_bar); | 367 infobar_service->AddInfoBar(state->info_bar); |
369 } | 368 } |
370 | 369 |
371 void HungPluginTabHelper::CloseBar(PluginState* state) { | 370 void HungPluginTabHelper::CloseBar(PluginState* state) { |
372 InfoBarService* infobar_service = | 371 InfoBarService* infobar_service = |
373 InfoBarService::FromWebContents(web_contents()); | 372 InfoBarService::FromWebContents(web_contents()); |
374 if (!infobar_service) | 373 if (!infobar_service) |
375 return; | 374 return; |
376 | 375 |
377 if (state->info_bar) { | 376 if (state->info_bar) { |
378 infobar_service->RemoveInfoBar(state->info_bar); | 377 infobar_service->RemoveInfoBar(state->info_bar); |
379 state->info_bar = NULL; | 378 state->info_bar = NULL; |
380 } | 379 } |
381 } | 380 } |
OLD | NEW |