| Index: chrome/common/chrome_content_client.cc
|
| diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc
|
| index c8fb2ae65c145995aded39f837d61e96c678d6ab..587b2aaa95fbbfc17b23b3e353873ca54bcfd98f 100644
|
| --- a/chrome/common/chrome_content_client.cc
|
| +++ b/chrome/common/chrome_content_client.cc
|
| @@ -64,8 +64,11 @@
|
| namespace {
|
|
|
| #if defined(ENABLE_PLUGINS)
|
| +const char kPDFPluginMimeType[] = "application/pdf";
|
| const char kPDFPluginExtension[] = "pdf";
|
| const char kPDFPluginDescription[] = "Portable Document Format";
|
| +const char kPDFPluginPrintPreviewMimeType[] =
|
| + "application/x-google-chrome-print-preview-pdf";
|
| const char kPDFPluginOutOfProcessMimeType[] =
|
| "application/x-google-chrome-pdf";
|
| const uint32 kPDFPluginPermissions = ppapi::PERMISSION_PRIVATE |
|
| @@ -91,10 +94,6 @@
|
| const char kGTalkPluginDescription[] = "Google Talk Plugin";
|
| const uint32 kGTalkPluginPermissions = ppapi::PERMISSION_PRIVATE |
|
| ppapi::PERMISSION_DEV;
|
| -
|
| -content::PepperPluginInfo::GetInterfaceFunc g_pdf_get_interface;
|
| -content::PepperPluginInfo::PPP_InitializeModuleFunc g_pdf_initialize_module;
|
| -content::PepperPluginInfo::PPP_ShutdownModuleFunc g_pdf_shutdown_module;
|
|
|
| #if defined(ENABLE_REMOTING)
|
|
|
| @@ -134,25 +133,43 @@
|
| // not marked internal, aside from being automatically registered, they're just
|
| // regular plugins).
|
| void ComputeBuiltInPlugins(std::vector<content::PepperPluginInfo>* plugins) {
|
| - content::PepperPluginInfo pdf_info;
|
| - pdf_info.is_internal = true;
|
| - pdf_info.is_out_of_process = true;
|
| - pdf_info.name = ChromeContentClient::kPDFPluginName;
|
| - pdf_info.description = kPDFPluginDescription;
|
| - pdf_info.path = base::FilePath::FromUTF8Unsafe(
|
| - ChromeContentClient::kPDFPluginPath);
|
| - content::WebPluginMimeType pdf_mime_type(
|
| - kPDFPluginOutOfProcessMimeType,
|
| - kPDFPluginExtension,
|
| - kPDFPluginDescription);
|
| - pdf_info.mime_types.push_back(pdf_mime_type);
|
| - pdf_info.internal_entry_points.get_interface = g_pdf_get_interface;
|
| - pdf_info.internal_entry_points.initialize_module = g_pdf_initialize_module;
|
| - pdf_info.internal_entry_points.shutdown_module = g_pdf_shutdown_module;
|
| - pdf_info.permissions = kPDFPluginPermissions;
|
| - plugins->push_back(pdf_info);
|
| -
|
| + // PDF.
|
| + //
|
| + // Once we're sandboxed, we can't know if the PDF plugin is available or not;
|
| + // but (on Linux) this function is always called once before we're sandboxed.
|
| + // So the first time through test if the file is available and then skip the
|
| + // check on subsequent calls if yes.
|
| + static bool skip_pdf_file_check = false;
|
| base::FilePath path;
|
| + if (PathService::Get(chrome::FILE_PDF_PLUGIN, &path)) {
|
| + if (skip_pdf_file_check || base::PathExists(path)) {
|
| + content::PepperPluginInfo pdf;
|
| + pdf.path = path;
|
| + pdf.name = ChromeContentClient::kPDFPluginName;
|
| + if (switches::OutOfProcessPdfEnabled()) {
|
| + pdf.is_out_of_process = true;
|
| + content::WebPluginMimeType pdf_mime_type(kPDFPluginOutOfProcessMimeType,
|
| + kPDFPluginExtension,
|
| + kPDFPluginDescription);
|
| + pdf.mime_types.push_back(pdf_mime_type);
|
| + // TODO(raymes): Make print preview work with out of process PDF.
|
| + } else {
|
| + content::WebPluginMimeType pdf_mime_type(kPDFPluginMimeType,
|
| + kPDFPluginExtension,
|
| + kPDFPluginDescription);
|
| + content::WebPluginMimeType print_preview_pdf_mime_type(
|
| + kPDFPluginPrintPreviewMimeType,
|
| + kPDFPluginExtension,
|
| + kPDFPluginDescription);
|
| + pdf.mime_types.push_back(pdf_mime_type);
|
| + pdf.mime_types.push_back(print_preview_pdf_mime_type);
|
| + }
|
| + pdf.permissions = kPDFPluginPermissions;
|
| + plugins->push_back(pdf);
|
| +
|
| + skip_pdf_file_check = true;
|
| + }
|
| + }
|
|
|
| #if !defined(DISABLE_NACL)
|
| // Handle Native Client just like the PDF plugin. This means that it is
|
| @@ -437,17 +454,6 @@
|
| }
|
| #endif
|
|
|
| -#if defined(ENABLE_PLUGINS)
|
| -void ChromeContentClient::SetPDFEntryFunctions(
|
| - content::PepperPluginInfo::GetInterfaceFunc get_interface,
|
| - content::PepperPluginInfo::PPP_InitializeModuleFunc initialize_module,
|
| - content::PepperPluginInfo::PPP_ShutdownModuleFunc shutdown_module) {
|
| - g_pdf_get_interface = get_interface;
|
| - g_pdf_initialize_module = initialize_module;
|
| - g_pdf_shutdown_module = shutdown_module;
|
| -}
|
| -#endif
|
| -
|
| void ChromeContentClient::SetActiveURL(const GURL& url) {
|
| base::debug::SetCrashKeyValue(crash_keys::kActiveURL,
|
| url.possibly_invalid_spec());
|
|
|