Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(479)

Side by Side Diff: chrome/browser/plugins/plugin_observer.cc

Issue 11644059: Change infobar creation to use a public static Create() method on the infobar delegate classes. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/plugins/plugin_observer.h" 5 #include "chrome/browser/plugins/plugin_observer.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/stl_util.h" 9 #include "base/stl_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 14 matching lines...) Expand all
25 #include "content/public/browser/render_view_host.h" 25 #include "content/public/browser/render_view_host.h"
26 #include "content/public/browser/web_contents.h" 26 #include "content/public/browser/web_contents.h"
27 #include "content/public/browser/web_contents_delegate.h" 27 #include "content/public/browser/web_contents_delegate.h"
28 #include "grit/generated_resources.h" 28 #include "grit/generated_resources.h"
29 #include "grit/theme_resources.h" 29 #include "grit/theme_resources.h"
30 #include "ui/base/l10n/l10n_util.h" 30 #include "ui/base/l10n/l10n_util.h"
31 #include "ui/base/resource/resource_bundle.h" 31 #include "ui/base/resource/resource_bundle.h"
32 #include "webkit/plugins/webplugininfo.h" 32 #include "webkit/plugins/webplugininfo.h"
33 33
34 #if defined(ENABLE_PLUGIN_INSTALLATION) 34 #if defined(ENABLE_PLUGIN_INSTALLATION)
35 #if defined(OS_WIN)
36 #include "base/win/metro.h"
37 #endif
35 #include "chrome/browser/plugins/plugin_installer.h" 38 #include "chrome/browser/plugins/plugin_installer.h"
36 #include "chrome/browser/plugins/plugin_installer_observer.h" 39 #include "chrome/browser/plugins/plugin_installer_observer.h"
37 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" 40 #include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h"
38 #endif // defined(ENABLE_PLUGIN_INSTALLATION) 41 #endif // defined(ENABLE_PLUGIN_INSTALLATION)
39 42
40 #if defined(OS_WIN)
41 #include "base/win/metro.h"
42 #endif
43
44 using content::OpenURLParams; 43 using content::OpenURLParams;
45 using content::PluginService; 44 using content::PluginService;
46 using content::Referrer; 45 using content::Referrer;
47 using content::WebContents; 46 using content::WebContents;
48 47
49 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PluginObserver); 48 DEFINE_WEB_CONTENTS_USER_DATA_KEY(PluginObserver);
50 49
51 namespace { 50 namespace {
52 51
53 #if defined(ENABLE_PLUGIN_INSTALLATION) 52 #if defined(ENABLE_PLUGIN_INSTALLATION)
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
182 #endif 181 #endif
183 } 182 }
184 183
185 void PluginObserver::PluginCrashed(const FilePath& plugin_path) { 184 void PluginObserver::PluginCrashed(const FilePath& plugin_path) {
186 DCHECK(!plugin_path.value().empty()); 185 DCHECK(!plugin_path.value().empty());
187 186
188 string16 plugin_name = 187 string16 plugin_name =
189 PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path); 188 PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path);
190 gfx::Image* icon = &ResourceBundle::GetSharedInstance().GetNativeImageNamed( 189 gfx::Image* icon = &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
191 IDR_INFOBAR_PLUGIN_CRASHED); 190 IDR_INFOBAR_PLUGIN_CRASHED);
192 InfoBarService* infobar_service = 191 SimpleAlertInfoBarDelegate::Create(
193 InfoBarService::FromWebContents(web_contents()); 192 InfoBarService::FromWebContents(web_contents()), icon,
194 infobar_service->AddInfoBar( 193 l10n_util::GetStringFUTF16(IDS_PLUGIN_CRASHED_PROMPT, plugin_name), true);
195 new SimpleAlertInfoBarDelegate(
196 infobar_service,
197 icon,
198 l10n_util::GetStringFUTF16(IDS_PLUGIN_CRASHED_PROMPT, plugin_name),
199 true));
200 } 194 }
201 195
202 bool PluginObserver::OnMessageReceived(const IPC::Message& message) { 196 bool PluginObserver::OnMessageReceived(const IPC::Message& message) {
203 IPC_BEGIN_MESSAGE_MAP(PluginObserver, message) 197 IPC_BEGIN_MESSAGE_MAP(PluginObserver, message)
204 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedOutdatedPlugin, 198 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedOutdatedPlugin,
205 OnBlockedOutdatedPlugin) 199 OnBlockedOutdatedPlugin)
206 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedUnauthorizedPlugin, 200 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_BlockedUnauthorizedPlugin,
207 OnBlockedUnauthorizedPlugin) 201 OnBlockedUnauthorizedPlugin)
208 #if defined(ENABLE_PLUGIN_INSTALLATION) 202 #if defined(ENABLE_PLUGIN_INSTALLATION)
209 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FindMissingPlugin, 203 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_FindMissingPlugin,
(...skipping 10 matching lines...) Expand all
220 214
221 IPC_MESSAGE_UNHANDLED(return false) 215 IPC_MESSAGE_UNHANDLED(return false)
222 IPC_END_MESSAGE_MAP() 216 IPC_END_MESSAGE_MAP()
223 217
224 return true; 218 return true;
225 } 219 }
226 220
227 void PluginObserver::OnBlockedUnauthorizedPlugin( 221 void PluginObserver::OnBlockedUnauthorizedPlugin(
228 const string16& name, 222 const string16& name,
229 const std::string& identifier) { 223 const std::string& identifier) {
230 InfoBarService* infobar_service = 224 UnauthorizedPluginInfoBarDelegate::Create(
231 InfoBarService::FromWebContents(web_contents()); 225 InfoBarService::FromWebContents(web_contents()),
232 infobar_service->AddInfoBar( 226 Profile::FromBrowserContext(web_contents()->GetBrowserContext())->
233 new UnauthorizedPluginInfoBarDelegate( 227 GetHostContentSettingsMap(),
234 infobar_service, 228 name, identifier);
235 Profile::FromBrowserContext(web_contents()->GetBrowserContext())->
236 GetHostContentSettingsMap(),
237 name, identifier));
238 } 229 }
239 230
240 void PluginObserver::OnBlockedOutdatedPlugin(int placeholder_id, 231 void PluginObserver::OnBlockedOutdatedPlugin(int placeholder_id,
241 const std::string& identifier) { 232 const std::string& identifier) {
242 #if defined(ENABLE_PLUGIN_INSTALLATION) 233 #if defined(ENABLE_PLUGIN_INSTALLATION)
243 PluginFinder* finder = PluginFinder::GetInstance(); 234 PluginFinder* finder = PluginFinder::GetInstance();
244 // Find plugin to update. 235 // Find plugin to update.
245 PluginInstaller* installer = NULL; 236 PluginInstaller* installer = NULL;
246 scoped_ptr<PluginMetadata> plugin; 237 scoped_ptr<PluginMetadata> plugin;
247 if (!finder->FindPluginWithIdentifier(identifier, &installer, &plugin)) { 238 if (!finder->FindPluginWithIdentifier(identifier, &installer, &plugin)) {
248 NOTREACHED(); 239 NOTREACHED();
249 return; 240 return;
250 } 241 }
251 242
252 plugin_placeholders_[placeholder_id] = 243 plugin_placeholders_[placeholder_id] =
253 new PluginPlaceholderHost(this, placeholder_id, 244 new PluginPlaceholderHost(this, placeholder_id,
254 plugin->name(), installer); 245 plugin->name(), installer);
255 InfoBarService* infobar_service = 246 OutdatedPluginInfoBarDelegate::Create(
256 InfoBarService::FromWebContents(web_contents()); 247 InfoBarService::FromWebContents(web_contents()), installer,
257 infobar_service->AddInfoBar( 248 plugin.Pass());
258 OutdatedPluginInfoBarDelegate::Create(web_contents(),
259 installer, plugin.Pass()));
260 #else 249 #else
261 // If we don't support third-party plug-in installation, we shouldn't have 250 // If we don't support third-party plug-in installation, we shouldn't have
262 // outdated plug-ins. 251 // outdated plug-ins.
263 NOTREACHED(); 252 NOTREACHED();
264 #endif // defined(ENABLE_PLUGIN_INSTALLATION) 253 #endif // defined(ENABLE_PLUGIN_INSTALLATION)
265 } 254 }
266 255
267 #if defined(ENABLE_PLUGIN_INSTALLATION) 256 #if defined(ENABLE_PLUGIN_INSTALLATION)
268 void PluginObserver::OnFindMissingPlugin(int placeholder_id, 257 void PluginObserver::OnFindMissingPlugin(int placeholder_id,
269 const std::string& mime_type) { 258 const std::string& mime_type) {
270 std::string lang = "en-US"; // Oh yes. 259 std::string lang = "en-US"; // Oh yes.
271 scoped_ptr<PluginMetadata> plugin_metadata; 260 scoped_ptr<PluginMetadata> plugin_metadata;
272 PluginInstaller* installer = NULL; 261 PluginInstaller* installer = NULL;
273 bool found_plugin = PluginFinder::GetInstance()->FindPlugin( 262 bool found_plugin = PluginFinder::GetInstance()->FindPlugin(
274 mime_type, lang, &installer, &plugin_metadata); 263 mime_type, lang, &installer, &plugin_metadata);
275 if (!found_plugin) { 264 if (!found_plugin) {
276 Send(new ChromeViewMsg_DidNotFindMissingPlugin(placeholder_id)); 265 Send(new ChromeViewMsg_DidNotFindMissingPlugin(placeholder_id));
277 return; 266 return;
278 } 267 }
279 DCHECK(installer); 268 DCHECK(installer);
280 DCHECK(plugin_metadata.get()); 269 DCHECK(plugin_metadata.get());
281 270
282 plugin_placeholders_[placeholder_id] = 271 plugin_placeholders_[placeholder_id] =
283 new PluginPlaceholderHost(this, placeholder_id, 272 new PluginPlaceholderHost(this, placeholder_id,
284 plugin_metadata->name(), 273 plugin_metadata->name(),
285 installer); 274 installer);
286 PluginInstallerInfoBarDelegate::InstallCallback callback = 275 PluginInstallerInfoBarDelegate::Create(
276 InfoBarService::FromWebContents(web_contents()), installer,
277 plugin_metadata.Pass(),
287 base::Bind(&PluginObserver::InstallMissingPlugin, 278 base::Bind(&PluginObserver::InstallMissingPlugin,
288 weak_ptr_factory_.GetWeakPtr(), installer); 279 weak_ptr_factory_.GetWeakPtr(), installer));
289 InfoBarService* infobar_service =
290 InfoBarService::FromWebContents(web_contents());
291 InfoBarDelegate* delegate;
292 #if !defined(OS_WIN)
293 delegate = PluginInstallerInfoBarDelegate::Create(
294 infobar_service, installer, plugin_metadata.Pass(), callback);
295 #else
296 delegate = base::win::IsMetroProcess() ?
297 new PluginMetroModeInfoBarDelegate(
298 infobar_service,
299 PluginMetroModeInfoBarDelegate::MISSING_PLUGIN,
300 plugin_metadata->name()) :
301 PluginInstallerInfoBarDelegate::Create(
302 infobar_service, installer, plugin_metadata.Pass(), callback);
303 #endif
304 infobar_service->AddInfoBar(delegate);
305 } 280 }
306 281
307 void PluginObserver::InstallMissingPlugin( 282 void PluginObserver::InstallMissingPlugin(
308 PluginInstaller* installer, 283 PluginInstaller* installer,
309 const PluginMetadata* plugin_metadata) { 284 const PluginMetadata* plugin_metadata) {
310 if (plugin_metadata->url_for_display()) { 285 if (plugin_metadata->url_for_display()) {
311 installer->OpenDownloadURL(plugin_metadata->plugin_url(), web_contents()); 286 installer->OpenDownloadURL(plugin_metadata->plugin_url(), web_contents());
312 } else { 287 } else {
313 TabModalConfirmDialog::Create( 288 TabModalConfirmDialog::Create(
314 new ConfirmInstallDialogDelegate( 289 new ConfirmInstallDialogDelegate(
(...skipping 19 matching lines...) Expand all
334 GURL(chrome::kAboutPluginsURL), 309 GURL(chrome::kAboutPluginsURL),
335 content::Referrer(web_contents()->GetURL(), 310 content::Referrer(web_contents()->GetURL(),
336 WebKit::WebReferrerPolicyDefault), 311 WebKit::WebReferrerPolicyDefault),
337 NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_AUTO_BOOKMARK, false)); 312 NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_AUTO_BOOKMARK, false));
338 } 313 }
339 314
340 void PluginObserver::OnCouldNotLoadPlugin(const FilePath& plugin_path) { 315 void PluginObserver::OnCouldNotLoadPlugin(const FilePath& plugin_path) {
341 g_browser_process->metrics_service()->LogPluginLoadingError(plugin_path); 316 g_browser_process->metrics_service()->LogPluginLoadingError(plugin_path);
342 string16 plugin_name = 317 string16 plugin_name =
343 PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path); 318 PluginService::GetInstance()->GetPluginDisplayNameByPath(plugin_path);
344 InfoBarService* infobar_service = 319 SimpleAlertInfoBarDelegate::Create(
345 InfoBarService::FromWebContents(web_contents()); 320 InfoBarService::FromWebContents(web_contents()),
346 infobar_service->AddInfoBar(new SimpleAlertInfoBarDelegate(
347 infobar_service,
348 &ResourceBundle::GetSharedInstance().GetNativeImageNamed( 321 &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
349 IDR_INFOBAR_PLUGIN_CRASHED), 322 IDR_INFOBAR_PLUGIN_CRASHED),
350 l10n_util::GetStringFUTF16(IDS_PLUGIN_INITIALIZATION_ERROR_PROMPT, 323 l10n_util::GetStringFUTF16(IDS_PLUGIN_INITIALIZATION_ERROR_PROMPT,
351 plugin_name), 324 plugin_name),
352 true /* auto_expire */)); 325 true /* auto_expire */);
353 } 326 }
354 327
355 void PluginObserver::OnNPAPINotSupported(const std::string& identifier) { 328 void PluginObserver::OnNPAPINotSupported(const std::string& identifier) {
356 #if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION) 329 #if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
357 DCHECK(base::win::IsMetroProcess()); 330 DCHECK(base::win::IsMetroProcess());
358 Profile* profile = 331 Profile* profile =
359 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 332 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
360 if (profile->IsOffTheRecord()) 333 if (profile->IsOffTheRecord())
361 return; 334 return;
362 HostContentSettingsMap* content_settings = 335 HostContentSettingsMap* content_settings =
363 profile->GetHostContentSettingsMap(); 336 profile->GetHostContentSettingsMap();
364 if (content_settings->GetContentSetting( 337 if (content_settings->GetContentSetting(
365 web_contents()->GetURL(), 338 web_contents()->GetURL(),
366 web_contents()->GetURL(), 339 web_contents()->GetURL(),
367 CONTENT_SETTINGS_TYPE_METRO_SWITCH_TO_DESKTOP, 340 CONTENT_SETTINGS_TYPE_METRO_SWITCH_TO_DESKTOP,
368 std::string()) == CONTENT_SETTING_BLOCK) 341 std::string()) == CONTENT_SETTING_BLOCK)
369 return; 342 return;
370 343
371 scoped_ptr<PluginMetadata> plugin; 344 scoped_ptr<PluginMetadata> plugin;
372 if (!PluginFinder::GetInstance()->FindPluginWithIdentifier( 345 if (!PluginFinder::GetInstance()->FindPluginWithIdentifier(
373 identifier, NULL, &plugin)) { 346 identifier, NULL, &plugin)) {
374 NOTREACHED(); 347 NOTREACHED();
375 return; 348 return;
376 } 349 }
377 350
378 InfoBarService* infobar_service = 351 PluginMetroModeInfoBarDelegate::Create(
379 InfoBarService::FromWebContents(web_contents()); 352 InfoBarService::FromWebContents(web_contents()),
380 infobar_service->AddInfoBar( 353 PluginMetroModeInfoBarDelegate::DESKTOP_MODE_REQUIRED, plugin->name());
381 new PluginMetroModeInfoBarDelegate(
382 infobar_service,
383 PluginMetroModeInfoBarDelegate::DESKTOP_MODE_REQUIRED,
384 plugin->name()));
385 #else 354 #else
386 NOTREACHED(); 355 NOTREACHED();
387 #endif 356 #endif
388 } 357 }
OLDNEW
« no previous file with comments | « chrome/browser/plugins/plugin_infobar_delegates.cc ('k') | chrome/browser/ssl/ssl_tab_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698