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

Side by Side Diff: chrome/browser/ui/pdf/pdf_unsupported_feature.cc

Issue 10910168: Separate plugin_metadata from plugin_installer, thread-safe plugin_finder (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: .. Created 8 years, 2 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
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/ui/pdf/pdf_unsupported_feature.h" 5 #include "chrome/browser/ui/pdf/pdf_unsupported_feature.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "base/values.h" 9 #include "base/values.h"
10 #include "base/version.h" 10 #include "base/version.h"
11 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h" 11 #include "chrome/browser/api/infobars/confirm_infobar_delegate.h"
12 #include "chrome/browser/chrome_plugin_service_filter.h" 12 #include "chrome/browser/chrome_plugin_service_filter.h"
13 #include "chrome/browser/infobars/infobar_tab_helper.h" 13 #include "chrome/browser/infobars/infobar_tab_helper.h"
14 #include "chrome/browser/lifetime/application_lifetime.h" 14 #include "chrome/browser/lifetime/application_lifetime.h"
15 #include "chrome/browser/plugins/plugin_finder.h" 15 #include "chrome/browser/plugins/plugin_finder.h"
16 #include "chrome/browser/plugins/plugin_installer.h" 16 #include "chrome/browser/plugins/plugin_metadata.h"
17 #include "chrome/browser/plugins/plugin_prefs.h" 17 #include "chrome/browser/plugins/plugin_prefs.h"
18 #include "chrome/browser/prefs/pref_service.h" 18 #include "chrome/browser/prefs/pref_service.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/renderer_preferences_util.h" 20 #include "chrome/browser/renderer_preferences_util.h"
21 #include "chrome/browser/tab_contents/tab_util.h" 21 #include "chrome/browser/tab_contents/tab_util.h"
22 #include "chrome/browser/ui/pdf/open_pdf_in_reader_prompt_delegate.h" 22 #include "chrome/browser/ui/pdf/open_pdf_in_reader_prompt_delegate.h"
23 #include "chrome/browser/ui/pdf/pdf_tab_helper.h" 23 #include "chrome/browser/ui/pdf/pdf_tab_helper.h"
24 #include "chrome/browser/ui/tab_contents/tab_contents.h" 24 #include "chrome/browser/ui/tab_contents/tab_contents.h"
25 #include "chrome/common/chrome_content_client.h" 25 #include "chrome/common/chrome_content_client.h"
26 #include "chrome/common/jstemplate_builder.h" 26 #include "chrome/common/jstemplate_builder.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 if (!reader_installed_) { 284 if (!reader_installed_) {
285 content::RecordAction( 285 content::RecordAction(
286 UserMetricsAction("PDF_InstallReaderInfoBarShown")); 286 UserMetricsAction("PDF_InstallReaderInfoBarShown"));
287 return; 287 return;
288 } 288 }
289 289
290 content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown")); 290 content::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown"));
291 reader_webplugininfo_ = *reader; 291 reader_webplugininfo_ = *reader;
292 292
293 #if defined(ENABLE_PLUGIN_INSTALLATION) 293 #if defined(ENABLE_PLUGIN_INSTALLATION)
294 PluginInstaller* installer = 294 PluginMetadata* plugin_metadata =
295 plugin_finder->FindPluginWithIdentifier("adobe-reader"); 295 plugin_finder->GetPluginMetadata(reader_webplugininfo_);
296 296
297 reader_vulnerable_ = 297 reader_vulnerable_ = plugin_metadata->GetSecurityStatus(*reader) !=
298 installer->GetSecurityStatus(*reader) != 298 PluginMetadata::SECURITY_STATUS_UP_TO_DATE;
299 PluginInstaller::SECURITY_STATUS_UP_TO_DATE;
300 #else 299 #else
301 NOTREACHED(); 300 NOTREACHED();
302 #endif 301 #endif
303 } 302 }
304 303
305 PDFUnsupportedFeaturePromptDelegate::~PDFUnsupportedFeaturePromptDelegate() { 304 PDFUnsupportedFeaturePromptDelegate::~PDFUnsupportedFeaturePromptDelegate() {
306 } 305 }
307 306
308 string16 PDFUnsupportedFeaturePromptDelegate::GetMessageText() const { 307 string16 PDFUnsupportedFeaturePromptDelegate::GetMessageText() const {
309 return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_MESSAGE); 308 return l10n_util::GetStringUTF16(IDS_PDF_BUBBLE_MESSAGE);
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 } 357 }
359 358
360 void PDFUnsupportedFeaturePromptDelegate::Cancel() { 359 void PDFUnsupportedFeaturePromptDelegate::Cancel() {
361 content::RecordAction(reader_installed_ ? 360 content::RecordAction(reader_installed_ ?
362 UserMetricsAction("PDF_UseReaderInfoBarCancel") : 361 UserMetricsAction("PDF_UseReaderInfoBarCancel") :
363 UserMetricsAction("PDF_InstallReaderInfoBarCancel")); 362 UserMetricsAction("PDF_InstallReaderInfoBarCancel"));
364 } 363 }
365 364
366 void GotPluginsCallback(int process_id, 365 void GotPluginsCallback(int process_id,
367 int routing_id, 366 int routing_id,
368 PluginFinder* plugin_finder,
369 const std::vector<webkit::WebPluginInfo>& plugins) { 367 const std::vector<webkit::WebPluginInfo>& plugins) {
370 WebContents* web_contents = 368 WebContents* web_contents =
371 tab_util::GetWebContentsByID(process_id, routing_id); 369 tab_util::GetWebContentsByID(process_id, routing_id);
372 if (!web_contents) 370 if (!web_contents)
373 return; 371 return;
374 372
375 TabContents* tab = TabContents::FromWebContents(web_contents); 373 TabContents* tab = TabContents::FromWebContents(web_contents);
376 if (!tab) 374 if (!tab)
377 return; 375 return;
378 376
379 string16 reader_group_name(ASCIIToUTF16(PluginGroup::kAdobeReaderGroupName)); 377 string16 reader_group_name(ASCIIToUTF16(PluginGroup::kAdobeReaderGroupName));
380 // If the Reader plugin is disabled by policy, don't prompt them. 378 // If the Reader plugin is disabled by policy, don't prompt them.
381 PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(tab->profile()); 379 PluginPrefs* plugin_prefs = PluginPrefs::GetForProfile(tab->profile());
382 if (plugin_prefs->PolicyStatusForPlugin(reader_group_name) == 380 if (plugin_prefs->PolicyStatusForPlugin(reader_group_name) ==
383 PluginPrefs::POLICY_DISABLED) { 381 PluginPrefs::POLICY_DISABLED) {
384 return; 382 return;
385 } 383 }
386 384
387 const webkit::WebPluginInfo* reader = NULL; 385 const webkit::WebPluginInfo* reader = NULL;
386 PluginFinder* plugin_finder = PluginFinder::GetInstance();
388 for (size_t i = 0; i < plugins.size(); ++i) { 387 for (size_t i = 0; i < plugins.size(); ++i) {
389 PluginInstaller* installer = plugin_finder->GetPluginInstaller(plugins[i]); 388 PluginMetadata* plugin_metadata =
390 if (reader_group_name == installer->name()) { 389 plugin_finder->GetPluginMetadata(plugins[i]);
390 if (reader_group_name == plugin_metadata->name()) {
391 DCHECK(!reader); 391 DCHECK(!reader);
392 reader = &plugins[i]; 392 reader = &plugins[i];
393 } 393 }
394 } 394 }
395 395
396 scoped_ptr<OpenPDFInReaderPromptDelegate> prompt( 396 scoped_ptr<OpenPDFInReaderPromptDelegate> prompt(
397 new PDFUnsupportedFeaturePromptDelegate(tab, reader, plugin_finder)); 397 new PDFUnsupportedFeaturePromptDelegate(tab, reader, plugin_finder));
398 PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents); 398 PDFTabHelper* pdf_tab_helper = PDFTabHelper::FromWebContents(web_contents);
399 pdf_tab_helper->ShowOpenInReaderPrompt(prompt.Pass()); 399 pdf_tab_helper->ShowOpenInReaderPrompt(prompt.Pass());
400 } 400 }
401 401
402 void GotPluginFinderCallback(int process_id,
403 int routing_id,
404 PluginFinder* plugin_finder) {
405 PluginService::GetInstance()->GetPlugins(
406 base::Bind(&GotPluginsCallback, process_id, routing_id,
407 base::Unretained(plugin_finder)));
408 }
409
410 } // namespace 402 } // namespace
411 403
412 void PDFHasUnsupportedFeature(content::WebContents* web_contents) { 404 void PDFHasUnsupportedFeature(content::WebContents* web_contents) {
413 #if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION) 405 #if defined(OS_WIN) && defined(ENABLE_PLUGIN_INSTALLATION)
414 // Only works for Windows for now. For Mac, we'll have to launch the file 406 // Only works for Windows for now. For Mac, we'll have to launch the file
415 // externally since Adobe Reader doesn't work inside Chrome. 407 // externally since Adobe Reader doesn't work inside Chrome.
416 PluginFinder::Get(base::Bind(&GotPluginFinderCallback, 408 PluginService::GetInstance()->GetPlugins(base::Bind(&GotPluginsCallback,
417 web_contents->GetRenderProcessHost()->GetID(), 409 web_contents->GetRenderProcessHost()->GetID(),
418 web_contents->GetRenderViewHost()->GetRoutingID())); 410 web_contents->GetRenderViewHost()->GetRoutingID()));
419 #endif 411 #endif
420 } 412 }
OLDNEW
« no previous file with comments | « chrome/browser/renderer_host/plugin_info_message_filter.cc ('k') | chrome/browser/ui/webui/plugins_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698