summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/all.gyp1
-rw-r--r--chrome/BUILD.gn10
-rw-r--r--chrome/DEPS1
-rw-r--r--chrome/app/chrome_main_delegate.cc11
-rw-r--r--chrome/browser/chromeos/file_manager/open_with_browser.cc5
-rw-r--r--chrome/browser/extensions/component_loader.cc7
-rw-r--r--chrome/browser/printing/print_preview_dialog_controller.cc5
-rw-r--r--chrome/browser/printing/print_preview_pdf_generated_browsertest.cc103
-rw-r--r--chrome/browser/resources/pdf/pdf_extension_test.cc5
-rw-r--r--chrome/child/pdf_child_init.cc23
-rw-r--r--chrome/chrome.isolate2
-rw-r--r--chrome/chrome_dll.gypi13
-rw-r--r--chrome/chrome_dll_bundle.gypi4
-rw-r--r--chrome/chrome_exe.gypi19
-rw-r--r--chrome/chrome_tests.gypi1
-rw-r--r--chrome/chrome_tests_unit.gypi3
-rw-r--r--chrome/common/chrome_content_client.cc72
-rw-r--r--chrome/common/chrome_content_client.h8
-rw-r--r--chrome/common/chrome_content_client_constants.cc6
-rw-r--r--chrome/common/chrome_paths.cc15
-rw-r--r--chrome/common/chrome_paths.h1
-rw-r--r--chrome/test/BUILD.gn2
-rw-r--r--chrome/utility/chrome_content_utility_client.cc4
-rw-r--r--chrome/utility/printing_handler.cc201
-rw-r--r--chrome/utility/printing_handler.h2
-rw-r--r--pdf/BUILD.gn30
-rw-r--r--pdf/Info.plist44
-rw-r--r--pdf/pdf.cc157
-rw-r--r--pdf/pdf.def7
-rw-r--r--pdf/pdf.gyp127
-rw-r--r--pdf/pdf.h89
-rw-r--r--pdf/pdf.rc104
32 files changed, 263 insertions, 819 deletions
diff --git a/build/all.gyp b/build/all.gyp
index 90c01205..8556aa7 100644
--- a/build/all.gyp
+++ b/build/all.gyp
@@ -750,7 +750,6 @@
'dependencies': [
'../chrome/chrome_syzygy.gyp:chrome_dll_syzygy',
'../content/content_shell_and_tests.gyp:content_shell_syzyasan',
- '../pdf/pdf.gyp:pdf_syzyasan',
],
'conditions': [
['chrome_multiple_dll==1', {
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn
index 2f4ed9e..6deb300 100644
--- a/chrome/BUILD.gn
+++ b/chrome/BUILD.gn
@@ -154,10 +154,8 @@ if (!is_android && (!is_win || link_chrome_on_windows)) {
# TODO(GYP) some stuff from GYP including chrome_multiple_dll.
}
- if (!is_mac) {
- # On Mac this is done in chrome_dll.gypi.
- datadeps += [ "//pdf" ]
- # TODO(GYP) pdf linux symbols
+ if (enable_plugins) {
+ deps += [ "//pdf" ]
}
}
} # !is_android
@@ -241,6 +239,10 @@ if (!is_win || link_chrome_on_windows) {
#}],
# TODO(GYP) Lots of other stuff in the OS=="mac" block.
}
+
+ if (enable_plugins) {
+ deps += [ "//pdf" ]
+ }
}
}
diff --git a/chrome/DEPS b/chrome/DEPS
index 9c95992..e014b07 100644
--- a/chrome/DEPS
+++ b/chrome/DEPS
@@ -2,6 +2,7 @@ include_rules = [
"+crypto",
"+gpu",
"+net",
+ "+pdf",
"+printing",
"+sql",
# Browser, renderer, common and tests access V8 for various purposes.
diff --git a/chrome/app/chrome_main_delegate.cc b/chrome/app/chrome_main_delegate.cc
index 608d513..7a84022 100644
--- a/chrome/app/chrome_main_delegate.cc
+++ b/chrome/app/chrome_main_delegate.cc
@@ -119,6 +119,11 @@
#include "remoting/client/plugin/pepper_entrypoints.h"
#endif
+#if defined(ENABLE_PLUGINS) && (defined(CHROME_MULTIPLE_DLL_CHILD) || \
+ !defined(CHROME_MULTIPLE_DLL_BROWSER))
+#include "pdf/pdf.h"
+#endif
+
#if !defined(CHROME_MULTIPLE_DLL_BROWSER)
#include "chrome/child/pdf_child_init.h"
@@ -826,6 +831,12 @@ void ChromeMainDelegate::SandboxInitialized(const std::string& process_type) {
nacl_plugin::PPP_InitializeModule,
nacl_plugin::PPP_ShutdownModule);
#endif
+#if defined(ENABLE_PLUGINS)
+ ChromeContentClient::SetPDFEntryFunctions(
+ chrome_pdf::PPP_GetInterface,
+ chrome_pdf::PPP_InitializeModule,
+ chrome_pdf::PPP_ShutdownModule);
+#endif
#endif
}
diff --git a/chrome/browser/chromeos/file_manager/open_with_browser.cc b/chrome/browser/chromeos/file_manager/open_with_browser.cc
index 974b34a..7384caf 100644
--- a/chrome/browser/chromeos/file_manager/open_with_browser.cc
+++ b/chrome/browser/chromeos/file_manager/open_with_browser.cc
@@ -21,6 +21,7 @@
#include "chrome/browser/ui/browser_tabstrip.h"
#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h"
+#include "chrome/common/chrome_content_client.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "content/public/browser/browser_thread.h"
@@ -86,8 +87,8 @@ bool IsPepperPluginEnabled(Profile* profile,
bool IsPdfPluginEnabled(Profile* profile) {
DCHECK(profile);
- base::FilePath plugin_path;
- PathService::Get(chrome::FILE_PDF_PLUGIN, &plugin_path);
+ base::FilePath plugin_path = base::FilePath::FromUTF8Unsafe(
+ ChromeContentClient::kPDFPluginPath);
return IsPepperPluginEnabled(profile, plugin_path);
}
diff --git a/chrome/browser/extensions/component_loader.cc b/chrome/browser/extensions/component_loader.cc
index 3841dba..2ee4816 100644
--- a/chrome/browser/extensions/component_loader.cc
+++ b/chrome/browser/extensions/component_loader.cc
@@ -626,12 +626,7 @@ void ComponentLoader::AddDefaultComponentExtensionsWithBackgroundPages(
#endif // defined(GOOGLE_CHROME_BUILD)
#if defined(ENABLE_PLUGINS)
- base::FilePath pdf_path;
- content::PluginService* plugin_service =
- content::PluginService::GetInstance();
- if (switches::OutOfProcessPdfEnabled() &&
- PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_path) &&
- plugin_service->GetRegisteredPpapiPluginInfo(pdf_path)) {
+ if (switches::OutOfProcessPdfEnabled()) {
if (switches::PdfMaterialUIEnabled())
Add(IDR_PDF_MANIFEST_MATERIAL, base::FilePath(FILE_PATH_LITERAL("pdf")));
else
diff --git a/chrome/browser/printing/print_preview_dialog_controller.cc b/chrome/browser/printing/print_preview_dialog_controller.cc
index 1075f61..ad996d3 100644
--- a/chrome/browser/printing/print_preview_dialog_controller.cc
+++ b/chrome/browser/printing/print_preview_dialog_controller.cc
@@ -52,9 +52,8 @@ namespace {
void EnableInternalPDFPluginForContents(WebContents* preview_dialog) {
// Always enable the internal PDF plugin for the print preview page.
- base::FilePath pdf_plugin_path;
- if (!PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_plugin_path))
- return;
+ base::FilePath pdf_plugin_path = base::FilePath::FromUTF8Unsafe(
+ ChromeContentClient::kPDFPluginPath);
content::WebPluginInfo pdf_plugin;
if (!content::PluginService::GetInstance()->GetPluginInfoByPath(
diff --git a/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc b/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
index 367a92d..f6a9321 100644
--- a/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
+++ b/chrome/browser/printing/print_preview_pdf_generated_browsertest.cc
@@ -22,7 +22,6 @@
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/run_loop.h"
-#include "base/scoped_native_library.h"
#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/printing/print_preview_dialog_controller.h"
@@ -39,6 +38,7 @@
#include "content/public/test/browser_test_utils.h"
#include "ipc/ipc_message_macros.h"
#include "net/base/filename_util.h"
+#include "pdf/pdf.h"
#include "printing/pdf_render_settings.h"
#include "printing/units.h"
#include "ui/gfx/codec/png_codec.h"
@@ -323,33 +323,6 @@ class PrintPreviewPdfGeneratedBrowserTest : public InProcessBrowserTest {
ASSERT_TRUE(pdf_file.IsValid());
}
- // Initializes function pointers from the PDF library. Called once when the
- // test starts. The library is closed when the browser test ends.
- void InitPdfFunctions() {
- base::FilePath pdf_module_path;
-
- ASSERT_TRUE(PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_module_path));
- ASSERT_TRUE(base::PathExists(pdf_module_path));
- pdf_lib_.Reset(base::LoadNativeLibrary(pdf_module_path, NULL));
-
- ASSERT_TRUE(pdf_lib_.is_valid());
- pdf_to_bitmap_func_ =
- reinterpret_cast<PDFPageToBitmapProc>(
- pdf_lib_.GetFunctionPointer("RenderPDFPageToBitmap"));
-
- pdf_doc_info_func_ =
- reinterpret_cast<GetPDFDocInfoProc>(
- pdf_lib_.GetFunctionPointer("GetPDFDocInfo"));
-
- pdf_page_size_func_ =
- reinterpret_cast<GetPDFPageSizeByIndexProc>(
- pdf_lib_.GetFunctionPointer("GetPDFPageSizeByIndex"));
-
- ASSERT_TRUE(pdf_to_bitmap_func_);
- ASSERT_TRUE(pdf_doc_info_func_);
- ASSERT_TRUE(pdf_page_size_func_);
- }
-
// Converts the PDF to a PNG file so that the layout test can do an image
// diff on this image and a reference image.
void PdfToPng() {
@@ -360,10 +333,10 @@ class PrintPreviewPdfGeneratedBrowserTest : public InProcessBrowserTest {
std::string pdf_data;
ASSERT_TRUE(base::ReadFileToString(pdf_file_save_path_, &pdf_data));
- ASSERT_TRUE(pdf_doc_info_func_(pdf_data.data(),
- pdf_data.size(),
- &num_pages,
- &max_width_in_points));
+ ASSERT_TRUE(chrome_pdf::GetPDFDocInfo(pdf_data.data(),
+ pdf_data.size(),
+ &num_pages,
+ &max_width_in_points));
ASSERT_GT(num_pages, 0);
double max_width_in_pixels =
@@ -371,11 +344,11 @@ class PrintPreviewPdfGeneratedBrowserTest : public InProcessBrowserTest {
for (int i = 0; i < num_pages; ++i) {
double width_in_points, height_in_points;
- ASSERT_TRUE(pdf_page_size_func_(pdf_data.data(),
- pdf_data.size(),
- i,
- &width_in_points,
- &height_in_points));
+ ASSERT_TRUE(chrome_pdf::GetPDFPageSizeByIndex(pdf_data.data(),
+ pdf_data.size(),
+ i,
+ &width_in_points,
+ &height_in_points));
double width_in_pixels = ConvertUnitDouble(
width_in_points, kPointsPerInch, kDpi);
@@ -405,15 +378,15 @@ class PrintPreviewPdfGeneratedBrowserTest : public InProcessBrowserTest {
std::vector<uint8_t> page_bitmap_data(
kColorChannels * settings.area().size().GetArea());
- ASSERT_TRUE(pdf_to_bitmap_func_(pdf_data.data(),
- pdf_data.size(),
- i,
- page_bitmap_data.data(),
- settings.area().size().width(),
- settings.area().size().height(),
- settings.dpi(),
- settings.dpi(),
- true));
+ ASSERT_TRUE(chrome_pdf::RenderPDFPageToBitmap(
+ pdf_data.data(),
+ pdf_data.size(),
+ i,
+ page_bitmap_data.data(),
+ settings.area().size().width(),
+ settings.area().size().height(),
+ settings.dpi(),
+ true));
FillPng(&page_bitmap_data,
width_in_pixels,
max_width_in_pixels,
@@ -572,41 +545,6 @@ class PrintPreviewPdfGeneratedBrowserTest : public InProcessBrowserTest {
scoped_ptr<PrintPreviewObserver> print_preview_observer_;
base::FilePath pdf_file_save_path_;
- // These typedefs are function pointers to pdflib functions that give
- // information about the PDF as a whole and about specific pages.
-
- // Converts the PDF to a bitmap.
- typedef bool (*PDFPageToBitmapProc)(const void* pdf_buffer,
- int pdf_buffer_size,
- int page_number,
- void* bitmap_buffer,
- int bitmap_width,
- int bitmap_height,
- int dpi_x,
- int dpi_y,
- bool autorotate);
-
- // Gets the page count and maximum page width of the PDF in points.
- typedef bool (*GetPDFDocInfoProc)(const void* pdf_buffer,
- int buffer_size,
- int* pages_count,
- double* max_page_width);
-
- // Gets the dimensions of a specific page within a PDF.
- typedef bool (*GetPDFPageSizeByIndexProc)(const void* pdf_buffer,
- int buffer_size,
- int index,
- double* width,
- double* height);
-
- // Instantiations of the function pointers described above.
- PDFPageToBitmapProc pdf_to_bitmap_func_;
- GetPDFDocInfoProc pdf_doc_info_func_;
- GetPDFPageSizeByIndexProc pdf_page_size_func_;
-
- // Used to open up the pdf plugin, which contains the functions above.
- base::ScopedNativeLibrary pdf_lib_;
-
// Vector for storing the PNG to be sent to the layout test framework.
// TODO(ivandavid): Eventually change this to uint32_t and make everything
// work with that. It might be a bit tricky to fix everything to work with
@@ -641,8 +579,7 @@ IN_PROC_BROWSER_TEST_F(PrintPreviewPdfGeneratedBrowserTest,
// to send data to the browser test. Writing "EOF\n" to |std::cout| indicates
// that whatever block of data that the test was expecting has been completely
// sent. Sometimes EOF is printed to stderr because the test will expect it
- // from stderr in addition to stdout for certain blocks of data.
- InitPdfFunctions();
+ // from stderr in addition to stdout for certain blocks of data.=
SetupStdinAndSavePath();
while (true) {
diff --git a/chrome/browser/resources/pdf/pdf_extension_test.cc b/chrome/browser/resources/pdf/pdf_extension_test.cc
index 6a56a91..d89c474 100644
--- a/chrome/browser/resources/pdf/pdf_extension_test.cc
+++ b/chrome/browser/resources/pdf/pdf_extension_test.cc
@@ -41,11 +41,6 @@ class PDFExtensionTest : public ExtensionApiTest {
}
void RunTestsInFile(std::string filename, std::string pdf_filename) {
- base::FilePath pdf_path;
- ASSERT_TRUE(PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_path));
- ASSERT_TRUE(
- content::PluginService::GetInstance()->GetRegisteredPpapiPluginInfo(
- pdf_path));
ExtensionService* service = extensions::ExtensionSystem::Get(
profile())->extension_service();
service->component_loader()->Add(IDR_PDF_MANIFEST,
diff --git a/chrome/child/pdf_child_init.cc b/chrome/child/pdf_child_init.cc
index ac17072..338403c 100644
--- a/chrome/child/pdf_child_init.cc
+++ b/chrome/child/pdf_child_init.cc
@@ -59,15 +59,20 @@ void InitializePDF() {
#if defined(OS_WIN)
// Need to patch a few functions for font loading to work correctly. This can
// be removed once we switch PDF to use Skia.
- base::FilePath pdf;
- if (PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf) &&
- base::PathExists(pdf)) {
- g_iat_patch_createdca.Patch(pdf.value().c_str(), "gdi32.dll", "CreateDCA",
- CreateDCAPatch);
- g_iat_patch_get_font_data.Patch(pdf.value().c_str(), "gdi32.dll",
- "GetFontData", GetFontDataPatch);
- }
-#endif
+ HMODULE current_module = NULL;
+ wchar_t current_module_name[MAX_PATH];
+ CHECK(GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS,
+ reinterpret_cast<LPCWSTR>(InitializePDF),
+ &current_module));
+ DWORD result = GetModuleFileNameW(current_module, current_module_name,
+ MAX_PATH);
+ if (!result || result == MAX_PATH)
+ return;
+ g_iat_patch_createdca.Patch(current_module_name, "gdi32.dll", "CreateDCA",
+ CreateDCAPatch);
+ g_iat_patch_get_font_data.Patch(current_module_name, "gdi32.dll",
+ "GetFontData", GetFontDataPatch);
+#endif // OS_WIN
}
} // namespace chrome
diff --git a/chrome/chrome.isolate b/chrome/chrome.isolate
index 9ebce29..64ae230 100644
--- a/chrome/chrome.isolate
+++ b/chrome/chrome.isolate
@@ -8,7 +8,6 @@
'files': [
'<(PRODUCT_DIR)/libffmpegsumo.so',
'<(PRODUCT_DIR)/libosmesa.so',
- '<(PRODUCT_DIR)/libpdf.so',
],
},
}],
@@ -88,7 +87,6 @@
'<(PRODUCT_DIR)/ffmpegsumo.dll',
'<(PRODUCT_DIR)/libexif.dll',
'<(PRODUCT_DIR)/osmesa.dll',
- '<(PRODUCT_DIR)/pdf.dll',
],
},
}],
diff --git a/chrome/chrome_dll.gypi b/chrome/chrome_dll.gypi
index 024f34d..0885668 100644
--- a/chrome/chrome_dll.gypi
+++ b/chrome/chrome_dll.gypi
@@ -256,6 +256,11 @@
'../content/content.gyp:content_app_browser',
],
}],
+ ['chrome_multiple_dll==0 and enable_plugins==1', {
+ 'dependencies': [
+ '../pdf/pdf.gyp:pdf',
+ ],
+ }],
['cld_version==1', {
'dependencies': [
'<(DEPTH)/third_party/cld/cld.gyp:cld',
@@ -278,9 +283,6 @@
# sets -order_file.
'ORDER_FILE': 'app/framework.order',
},
- 'dependencies': [
- '../pdf/pdf.gyp:pdf',
- ],
'include_dirs': [
'<(grit_out_dir)',
],
@@ -372,6 +374,11 @@
}],
]
}],
+ ['enable_plugins==1', {
+ 'dependencies': [
+ '../pdf/pdf.gyp:pdf',
+ ],
+ }],
],
}, # target chrome_child_dll
],
diff --git a/chrome/chrome_dll_bundle.gypi b/chrome/chrome_dll_bundle.gypi
index c522f2f..dd01c01 100644
--- a/chrome/chrome_dll_bundle.gypi
+++ b/chrome/chrome_dll_bundle.gypi
@@ -76,7 +76,6 @@
# Bring in pdfsqueeze and run it on all pdfs
'../build/temp_gyp/pdfsqueeze.gyp:pdfsqueeze',
'../crypto/crypto.gyp:crypto',
- '../pdf/pdf.gyp:pdf',
# On Mac, Flash gets put into the framework, so we need this
# dependency here. flash_player.gyp will copy the Flash bundle
# into PRODUCT_DIR.
@@ -147,9 +146,6 @@
},
{
'destination': '<(PRODUCT_DIR)/$(CONTENTS_FOLDER_PATH)/Internet Plug-Ins',
- 'files': [
- '<(PRODUCT_DIR)/PDF.plugin',
- ],
'conditions': [
['disable_nacl!=1', {
'conditions': [
diff --git a/chrome/chrome_exe.gypi b/chrome/chrome_exe.gypi
index 46c84f9..2713e9b 100644
--- a/chrome/chrome_exe.gypi
+++ b/chrome/chrome_exe.gypi
@@ -190,6 +190,11 @@
'../build/linux/system.gyp:xext',
],
}],
+ ['enable_plugins==1', {
+ 'dependencies': [
+ '../pdf/pdf.gyp:pdf',
+ ],
+ }],
],
'sources': [
'app/chrome_dll_resource.h',
@@ -428,20 +433,6 @@
# NOTE: chrome/app/theme/chromium/BRANDING and
# chrome/app/theme/google_chrome/BRANDING have the short name
# "chrome" etc.; should we try to extract from there instead?
-
- # CrOS does this in a separate build step.
- ['OS=="linux" and chromeos==0 and linux_dump_symbols==1', {
- 'dependencies': [
- '../pdf/pdf.gyp:pdf_linux_symbols',
- ],
- }], # OS=="linux" and chromeos==0 and linux_dump_symbols==1
- # Android doesn't use pdfium.
- ['OS!="android"', {
- 'dependencies': [
- # On Mac, this is done in chrome_dll.gypi.
- '../pdf/pdf.gyp:pdf',
- ],
- }], # OS=="android"
],
'dependencies': [
'../components/components.gyp:startup_metric_utils',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index fcc837a..5a2a068 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1451,7 +1451,6 @@
'../net/net.gyp:net',
'../net/net.gyp:net_resources',
'../net/net.gyp:net_test_support',
- '../pdf/pdf.gyp:pdf',
'../ppapi/ppapi_internal.gyp:ppapi_tests',
'../skia/skia.gyp:skia',
'../sync/sync.gyp:sync',
diff --git a/chrome/chrome_tests_unit.gypi b/chrome/chrome_tests_unit.gypi
index b96db22..1f17749 100644
--- a/chrome/chrome_tests_unit.gypi
+++ b/chrome/chrome_tests_unit.gypi
@@ -1986,6 +1986,9 @@
'test/ppapi/ppapi_test.cc',
'test/ppapi/ppapi_test.h',
],
+ 'dependencies': [
+ '../pdf/pdf.gyp:pdf',
+ ],
}],
['enable_plugins==1 and disable_nacl==0', {
'dependencies': [
diff --git a/chrome/common/chrome_content_client.cc b/chrome/common/chrome_content_client.cc
index 587b2aa..21df9e0 100644
--- a/chrome/common/chrome_content_client.cc
+++ b/chrome/common/chrome_content_client.cc
@@ -64,11 +64,8 @@
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 |
@@ -95,6 +92,10 @@ 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)
content::PepperPluginInfo::GetInterfaceFunc g_remoting_get_interface;
@@ -133,43 +134,25 @@ content::PepperPluginInfo::PPP_ShutdownModuleFunc g_nacl_shutdown_module;
// not marked internal, aside from being automatically registered, they're just
// regular plugins).
void ComputeBuiltInPlugins(std::vector<content::PepperPluginInfo>* plugins) {
- // 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;
+ 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);
+
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
@@ -454,6 +437,17 @@ void ChromeContentClient::SetNaClEntryFunctions(
}
#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());
diff --git a/chrome/common/chrome_content_client.h b/chrome/common/chrome_content_client.h
index 968db7c..fd00d31 100644
--- a/chrome/common/chrome_content_client.h
+++ b/chrome/common/chrome_content_client.h
@@ -22,6 +22,7 @@ std::string GetUserAgent();
class ChromeContentClient : public content::ContentClient {
public:
static const char* const kPDFPluginName;
+ static const char* const kPDFPluginPath;
static const char* const kRemotingViewerPluginPath;
// The methods below are called by child processes to set the function
@@ -42,6 +43,13 @@ class ChromeContentClient : public content::ContentClient {
content::PepperPluginInfo::PPP_ShutdownModuleFunc shutdown_module);
#endif
+#if defined(ENABLE_PLUGINS)
+ static void SetPDFEntryFunctions(
+ content::PepperPluginInfo::GetInterfaceFunc get_interface,
+ content::PepperPluginInfo::PPP_InitializeModuleFunc initialize_module,
+ content::PepperPluginInfo::PPP_ShutdownModuleFunc shutdown_module);
+#endif
+
void SetActiveURL(const GURL& url) override;
void SetGpuInfo(const gpu::GPUInfo& gpu_info) override;
void AddPepperPlugins(
diff --git a/chrome/common/chrome_content_client_constants.cc b/chrome/common/chrome_content_client_constants.cc
index aeda534..f0a59f8 100644
--- a/chrome/common/chrome_content_client_constants.cc
+++ b/chrome/common/chrome_content_client_constants.cc
@@ -4,6 +4,12 @@
#include "chrome/common/chrome_content_client.h"
+#if defined(GOOGLE_CHROME_BUILD)
const char* const ChromeContentClient::kPDFPluginName = "Chrome PDF Viewer";
+#else
+const char* const ChromeContentClient::kPDFPluginName = "Chromium PDF Viewer";
+#endif
+const char* const ChromeContentClient::kPDFPluginPath =
+ "internal-pdf-viewer";
const char* const ChromeContentClient::kRemotingViewerPluginPath =
"internal-remoting-viewer";
diff --git a/chrome/common/chrome_paths.cc b/chrome/common/chrome_paths.cc
index af56236..9537376 100644
--- a/chrome/common/chrome_paths.cc
+++ b/chrome/common/chrome_paths.cc
@@ -50,16 +50,6 @@ const base::FilePath::CharType kPepperFlashDebuggerBaseDirectory[] =
FILE_PATH_LITERAL("Macromed\\Flash");
#endif
-// File name of the internal PDF plugin on different platforms.
-const base::FilePath::CharType kInternalPDFPluginFileName[] =
-#if defined(OS_WIN)
- FILE_PATH_LITERAL("pdf.dll");
-#elif defined(OS_MACOSX)
- FILE_PATH_LITERAL("PDF.plugin");
-#else // Linux and Chrome OS
- FILE_PATH_LITERAL("libpdf.so");
-#endif
-
const base::FilePath::CharType kInternalNaClPluginFileName[] =
FILE_PATH_LITERAL("internal-nacl-plugin");
@@ -294,11 +284,6 @@ bool PathProvider(int key, base::FilePath* result) {
return false;
cur = cur.Append(chrome::kPepperFlashPluginFilename);
break;
- case chrome::FILE_PDF_PLUGIN:
- if (!GetInternalPluginsDirectory(&cur))
- return false;
- cur = cur.Append(kInternalPDFPluginFileName);
- break;
case chrome::FILE_EFFECTS_PLUGIN:
if (!GetInternalPluginsDirectory(&cur))
return false;
diff --git a/chrome/common/chrome_paths.h b/chrome/common/chrome_paths.h
index a22600e..34c85fb 100644
--- a/chrome/common/chrome_paths.h
+++ b/chrome/common/chrome_paths.h
@@ -83,7 +83,6 @@ enum {
// matter the file exists or not.
FILE_PEPPER_FLASH_PLUGIN, // Full path to the bundled Pepper Flash plugin
// file.
- FILE_PDF_PLUGIN, // Full path to the internal PDF plugin file.
FILE_NACL_PLUGIN, // Full path to the internal NaCl plugin file.
DIR_PNACL_BASE, // Full path to the base dir for PNaCl.
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn
index 4389f3e..1c24f05 100644
--- a/chrome/test/BUILD.gn
+++ b/chrome/test/BUILD.gn
@@ -176,6 +176,7 @@ source_set("test_support") {
"ppapi/ppapi_test.cc",
"ppapi/ppapi_test.h",
]
+ deps += [ "//pdf" ]
}
if (use_ash) {
@@ -247,7 +248,6 @@ if (!is_android && (!is_win || link_chrome_on_windows)) {
"//net",
"//net:net_resources",
"//net:test_support",
- "//pdf",
#"//ppapi:ppapi_tests", # TODO(GYP) this doesn't exist yet.
"//skia",
diff --git a/chrome/utility/chrome_content_utility_client.cc b/chrome/utility/chrome_content_utility_client.cc
index e06aebc..843b1f3 100644
--- a/chrome/utility/chrome_content_utility_client.cc
+++ b/chrome/utility/chrome_content_utility_client.cc
@@ -166,10 +166,6 @@ void ChromeContentUtilityClient::PreSandboxStartup() {
extensions::ExtensionsHandler::PreSandboxStartup();
#endif
-#if defined(ENABLE_PRINT_PREVIEW) || defined(OS_WIN)
- PrintingHandler::PreSandboxStartup();
-#endif
-
#if defined(ENABLE_MDNS)
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kUtilityProcessEnableMDns)) {
diff --git a/chrome/utility/printing_handler.cc b/chrome/utility/printing_handler.cc
index 3dd8e92..9e282ad 100644
--- a/chrome/utility/printing_handler.cc
+++ b/chrome/utility/printing_handler.cc
@@ -13,6 +13,7 @@
#include "chrome/utility/cloud_print/bitmap_image.h"
#include "chrome/utility/cloud_print/pwg_encoder.h"
#include "content/public/utility/utility_thread.h"
+#include "pdf/pdf.h"
#include "printing/page_range.h"
#include "printing/pdf_render_settings.h"
@@ -36,180 +37,12 @@ void ReleaseProcessIfNeeded() {
content::UtilityThread::Get()->ReleaseProcessIfNeeded();
}
-class PdfFunctionsBase {
- public:
- PdfFunctionsBase() : render_pdf_to_bitmap_func_(NULL),
- get_pdf_doc_info_func_(NULL) {}
-
- bool Init() {
- base::FilePath pdf_module_path;
- if (!PathService::Get(chrome::FILE_PDF_PLUGIN, &pdf_module_path) ||
- !base::PathExists(pdf_module_path)) {
- return false;
- }
-
- pdf_lib_.Reset(base::LoadNativeLibrary(pdf_module_path, NULL));
- if (!pdf_lib_.is_valid()) {
- LOG(WARNING) << "Couldn't load PDF plugin";
- return false;
- }
-
- render_pdf_to_bitmap_func_ =
- reinterpret_cast<RenderPDFPageToBitmapProc>(
- pdf_lib_.GetFunctionPointer("RenderPDFPageToBitmap"));
- LOG_IF(WARNING, !render_pdf_to_bitmap_func_) <<
- "Missing RenderPDFPageToBitmap";
-
- get_pdf_doc_info_func_ =
- reinterpret_cast<GetPDFDocInfoProc>(
- pdf_lib_.GetFunctionPointer("GetPDFDocInfo"));
- LOG_IF(WARNING, !get_pdf_doc_info_func_) << "Missing GetPDFDocInfo";
-
- if (!render_pdf_to_bitmap_func_ || !get_pdf_doc_info_func_ ||
- !PlatformInit(pdf_module_path, pdf_lib_)) {
- Reset();
- }
-
- return IsValid();
- }
-
- bool IsValid() const {
- return pdf_lib_.is_valid();
- }
-
- void Reset() {
- pdf_lib_.Reset(NULL);
- }
-
- bool RenderPDFPageToBitmap(const void* pdf_buffer,
- int pdf_buffer_size,
- int page_number,
- void* bitmap_buffer,
- int bitmap_width,
- int bitmap_height,
- int dpi_x,
- int dpi_y,
- bool autorotate) {
- if (!render_pdf_to_bitmap_func_)
- return false;
- return render_pdf_to_bitmap_func_(pdf_buffer, pdf_buffer_size, page_number,
- bitmap_buffer, bitmap_width,
- bitmap_height, dpi_x, dpi_y, autorotate);
- }
-
- bool GetPDFDocInfo(const void* pdf_buffer,
- int buffer_size,
- int* page_count,
- double* max_page_width) {
- if (!get_pdf_doc_info_func_)
- return false;
- return get_pdf_doc_info_func_(pdf_buffer, buffer_size, page_count,
- max_page_width);
- }
-
- protected:
- virtual bool PlatformInit(
- const base::FilePath& pdf_module_path,
- const base::ScopedNativeLibrary& pdf_lib) {
- return true;
- }
-
- private:
- // Exported by PDF plugin.
- typedef bool (*RenderPDFPageToBitmapProc)(const void* pdf_buffer,
- int pdf_buffer_size,
- int page_number,
- void* bitmap_buffer,
- int bitmap_width,
- int bitmap_height,
- int dpi_x,
- int dpi_y,
- bool autorotate);
- typedef bool (*GetPDFDocInfoProc)(const void* pdf_buffer,
- int buffer_size, int* page_count,
- double* max_page_width);
-
- RenderPDFPageToBitmapProc render_pdf_to_bitmap_func_;
- GetPDFDocInfoProc get_pdf_doc_info_func_;
-
- base::ScopedNativeLibrary pdf_lib_;
- DISALLOW_COPY_AND_ASSIGN(PdfFunctionsBase);
-};
-
-#if defined(OS_WIN)
-
-class PdfFunctionsWin : public PdfFunctionsBase {
- public:
- PdfFunctionsWin() : render_pdf_to_dc_func_(NULL) {
- }
-
- bool PlatformInit(
- const base::FilePath& pdf_module_path,
- const base::ScopedNativeLibrary& pdf_lib) override {
- render_pdf_to_dc_func_ =
- reinterpret_cast<RenderPDFPageToDCProc>(
- pdf_lib.GetFunctionPointer("RenderPDFPageToDC"));
- LOG_IF(WARNING, !render_pdf_to_dc_func_) << "Missing RenderPDFPageToDC";
-
- return render_pdf_to_dc_func_ != NULL;
- }
-
- bool RenderPDFPageToDC(const void* pdf_buffer,
- int buffer_size,
- int page_number,
- HDC dc,
- int dpi_x,
- int dpi_y,
- int bounds_origin_x,
- int bounds_origin_y,
- int bounds_width,
- int bounds_height,
- bool fit_to_bounds,
- bool stretch_to_bounds,
- bool keep_aspect_ratio,
- bool center_in_bounds,
- bool autorotate) {
- if (!render_pdf_to_dc_func_)
- return false;
- return render_pdf_to_dc_func_(pdf_buffer, buffer_size, page_number,
- dc, dpi_x, dpi_y, bounds_origin_x,
- bounds_origin_y, bounds_width, bounds_height,
- fit_to_bounds, stretch_to_bounds,
- keep_aspect_ratio, center_in_bounds,
- autorotate);
- }
-
- private:
- // Exported by PDF plugin.
- typedef bool (*RenderPDFPageToDCProc)(
- const void* pdf_buffer, int buffer_size, int page_number, HDC dc,
- int dpi_x, int dpi_y, int bounds_origin_x, int bounds_origin_y,
- int bounds_width, int bounds_height, bool fit_to_bounds,
- bool stretch_to_bounds, bool keep_aspect_ratio, bool center_in_bounds,
- bool autorotate);
- RenderPDFPageToDCProc render_pdf_to_dc_func_;
-
- DISALLOW_COPY_AND_ASSIGN(PdfFunctionsWin);
-};
-
-typedef PdfFunctionsWin PdfFunctions;
-#else // OS_WIN
-typedef PdfFunctionsBase PdfFunctions;
-#endif // OS_WIN
-
-base::LazyInstance<PdfFunctions> g_pdf_lib = LAZY_INSTANCE_INITIALIZER;
-
} // namespace
PrintingHandler::PrintingHandler() {}
PrintingHandler::~PrintingHandler() {}
-// static
-void PrintingHandler::PreSandboxStartup() {
- g_pdf_lib.Get().Init();
-}
-
bool PrintingHandler::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(PrintingHandler, message)
@@ -282,9 +115,6 @@ void PrintingHandler::OnRenderPDFPagesToPWGRaster(
#if defined(OS_WIN)
int PrintingHandler::LoadPDF(base::File pdf_file) {
- if (!g_pdf_lib.Get().IsValid())
- return 0;
-
int64 length64 = pdf_file.GetLength();
if (length64 <= 0 || length64 > std::numeric_limits<int>::max())
return 0;
@@ -295,7 +125,7 @@ int PrintingHandler::LoadPDF(base::File pdf_file) {
return 0;
int total_page_count = 0;
- if (!g_pdf_lib.Get().GetPDFDocInfo(
+ if (!chrome_pdf::GetPDFDocInfo(
&pdf_data_.front(), pdf_data_.size(), &total_page_count, NULL)) {
return 0;
}
@@ -324,13 +154,12 @@ bool PrintingHandler::RenderPdfPageToMetafile(int page_number,
// The underlying metafile is of type Emf and ignores the arguments passed
// to StartPage.
metafile.StartPage(gfx::Size(), gfx::Rect(), 1);
- if (!g_pdf_lib.Get().RenderPDFPageToDC(
+ if (!chrome_pdf::RenderPDFPageToDC(
&pdf_data_.front(),
pdf_data_.size(),
page_number,
metafile.context(),
pdf_rendering_settings_.dpi(),
- pdf_rendering_settings_.dpi(),
pdf_rendering_settings_.area().x(),
pdf_rendering_settings_.area().y(),
pdf_rendering_settings_.area().width(),
@@ -356,9 +185,6 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
const printing::PwgRasterSettings& bitmap_settings,
base::File bitmap_file) {
bool autoupdate = true;
- if (!g_pdf_lib.Get().IsValid())
- return false;
-
base::File::Info info;
if (!pdf_file.GetInfo(&info) || info.size <= 0 ||
info.size > std::numeric_limits<int>::max())
@@ -370,8 +196,8 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
return false;
int total_page_count = 0;
- if (!g_pdf_lib.Get().GetPDFDocInfo(data.data(), data_size,
- &total_page_count, NULL)) {
+ if (!chrome_pdf::GetPDFDocInfo(data.data(), data_size,
+ &total_page_count, NULL)) {
return false;
}
@@ -392,15 +218,14 @@ bool PrintingHandler::RenderPDFPagesToPWGRaster(
page_number = total_page_count - 1 - page_number;
}
- if (!g_pdf_lib.Get().RenderPDFPageToBitmap(data.data(),
- data_size,
- page_number,
- image.pixel_data(),
- image.size().width(),
- image.size().height(),
- settings.dpi(),
- settings.dpi(),
- autoupdate)) {
+ if (!chrome_pdf::RenderPDFPageToBitmap(data.data(),
+ data_size,
+ page_number,
+ image.pixel_data(),
+ image.size().width(),
+ image.size().height(),
+ settings.dpi(),
+ autoupdate)) {
return false;
}
diff --git a/chrome/utility/printing_handler.h b/chrome/utility/printing_handler.h
index cc490ba..341a358 100644
--- a/chrome/utility/printing_handler.h
+++ b/chrome/utility/printing_handler.h
@@ -27,8 +27,6 @@ class PrintingHandler : public UtilityMessageHandler {
PrintingHandler();
~PrintingHandler() override;
- static void PreSandboxStartup();
-
// IPC::Listener:
bool OnMessageReceived(const IPC::Message& message) override;
diff --git a/pdf/BUILD.gn b/pdf/BUILD.gn
index b028290..4ecd961 100644
--- a/pdf/BUILD.gn
+++ b/pdf/BUILD.gn
@@ -4,8 +4,7 @@
pdf_engine = 0 # 0 PDFium
-# TODO(GYP) need support for loadable modules
-shared_library("pdf") {
+static_library("pdf") {
sources = [
"button.h",
"button.cc",
@@ -35,7 +34,6 @@ shared_library("pdf") {
"paint_manager.h",
"pdf.cc",
"pdf.h",
- "pdf.rc",
"progress_control.cc",
"progress_control.h",
"pdf_engine.h",
@@ -45,8 +43,6 @@ shared_library("pdf") {
"resource_consts.h",
"thumbnail_control.cc",
"thumbnail_control.h",
- "../components/ui/zoom/page_zoom_constants.cc",
- "../content/common/page_zoom.cc",
]
if (pdf_engine == 0) {
@@ -68,33 +64,15 @@ shared_library("pdf") {
}
if (is_win) {
- defines = [ "COMPILE_CONTENT_STATICALLY" ]
cflags = [ "/wd4267" ] # TODO(jschuh) size_t to int truncations.
}
- if (is_mac) {
- # TODO(GYP)
- #'mac_bundle': 1,
- #'product_name': 'PDF',
- #'product_extension': 'plugin',
- ## Strip the shipping binary of symbols so "Foxit" doesn't appear in
- ## the binary. Symbols are stored in a separate .dSYM.
- #'variables': {
- # 'mac_real_dsym': 1,
- #},
- #'sources+': [
- # 'Info.plist'
- #]
- #'xcode_settings': {
- # 'INFOPLIST_FILE': 'Info.plist',
- #},
- }
-
deps = [
"//base",
+ "//components/ui/zoom:ui_zoom",
+ "//content/public/common",
"//net",
- "//ppapi:ppapi_cpp",
+ "//ppapi:ppapi_internal_module",
"//third_party/pdfium",
]
}
-# TODO(GYP) pdf_linux_symbols target.
diff --git a/pdf/Info.plist b/pdf/Info.plist
deleted file mode 100644
index 9f3dfdf..0000000
--- a/pdf/Info.plist
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>English</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>org.chromium.pdf_plugin</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>BRPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>CFPlugInDynamicRegisterFunction</key>
- <string></string>
- <key>CFPlugInDynamicRegistration</key>
- <string>NO</string>
- <key>WebPluginDescription</key>
- <string>Chrome PDF Viewer</string>
- <key>WebPluginMIMETypes</key>
- <dict>
- <key>application/pdf</key>
- <dict>
- <key>WebPluginExtensions</key>
- <array>
- <string>pdf</string>
- </array>
- <key>WebPluginTypeDescription</key>
- <string>Acrobat Portable Document Format</string>
- </dict>
- </dict>
- <key>WebPluginName</key>
- <string>Chrome PDF Viewer</string>
-</dict>
-</plist>
diff --git a/pdf/pdf.cc b/pdf/pdf.cc
index d6c9863..7aba412 100644
--- a/pdf/pdf.cc
+++ b/pdf/pdf.cc
@@ -13,73 +13,12 @@
#include "pdf/instance.h"
#include "pdf/out_of_process_instance.h"
#include "ppapi/c/ppp.h"
+#include "ppapi/cpp/private/internal_module.h"
#include "ppapi/cpp/private/pdf.h"
#include "v8/include/v8.h"
bool g_sdk_initialized_via_pepper = false;
-// The Mac release builds discard CreateModule and the entire PDFModule
-// definition because they are not referenced here. This causes the Pepper
-// exports (PPP_GetInterface etc) to not be exported. So we force the linker
-// to include this code by using __attribute__((used)).
-#if __GNUC__ >= 4
-#define PDF_USED __attribute__((used))
-#else
-#define PDF_USED
-#endif
-
-#if defined(OS_WIN)
-
-void HandleInvalidParameter(const wchar_t* expression,
- const wchar_t* function,
- const wchar_t* file,
- unsigned int line,
- uintptr_t reserved) {
- // Do the same as Chrome's CHECK(false) which is undefined.
- ::base::debug::BreakDebugger();
- return;
-}
-
-void HandlePureVirtualCall() {
- // Do the same as Chrome's CHECK(false) which is undefined.
- ::base::debug::BreakDebugger();
- return;
-}
-
-
-BOOL APIENTRY DllMain(HMODULE module, DWORD reason_for_call, LPVOID reserved) {
- if (reason_for_call == DLL_PROCESS_ATTACH) {
- // On windows following handlers work only inside module. So breakpad in
- // chrome.dll does not catch that. To avoid linking related code or
- // duplication breakpad_win.cc::InitCrashReporter() just catch errors here
- // and crash in a way interceptable by breakpad of parent module.
- _set_invalid_parameter_handler(HandleInvalidParameter);
- _set_purecall_handler(HandlePureVirtualCall);
-
-#if defined(ARCH_CPU_X86_64) && _MSC_VER <= 1800
- // VS2013's CRT only checks the existence of FMA3 instructions, not the
- // enabled-ness of them at the OS level (this is fixed in VS2015). We force
- // off usage of FMA3 instructions in the CRT to avoid using that path and
- // hitting illegal instructions when running on CPUs that support FMA3, but
- // OSs that don't. Because we use the static library CRT we have to call
- // this function once in each DLL.
- // See http://crbug.com/436603.
- _set_FMA3_enable(0);
-#endif // ARCH_CPU_X86_64 && _MSC_VER <= 1800
- }
- return TRUE;
-}
-
-#endif
-
-namespace pp {
-
-PDF_USED Module* CreateModule() {
- return new chrome_pdf::PDFModule();
-}
-
-} // namespace pp
-
namespace chrome_pdf {
PDFModule::PDFModule() {
@@ -117,49 +56,37 @@ pp::Instance* PDFModule::CreateInstance(PP_Instance instance) {
return new Instance(instance);
}
-} // namespace chrome_pdf
-extern "C" {
+// Implementation of Global PPP functions ---------------------------------
+int32_t PPP_InitializeModule(PP_Module module_id,
+ PPB_GetInterface get_browser_interface) {
+ PDFModule* module = new PDFModule();
+ if (!module->InternalInit(module_id, get_browser_interface)) {
+ delete module;
+ return PP_ERROR_FAILED;
+ }
+
+ pp::InternalSetModuleSingleton(module);
+ return PP_OK;
+}
+
+void PPP_ShutdownModule() {
+ delete pp::Module::Get();
+ pp::InternalSetModuleSingleton(NULL);
+}
+
+const void* PPP_GetInterface(const char* interface_name) {
+ if (!pp::Module::Get())
+ return NULL;
+ return pp::Module::Get()->GetPluginInterface(interface_name);
+}
-// TODO(sanjeevr): It might make sense to provide more stateful wrappers over
-// the internal PDF SDK (such as LoadDocument, LoadPage etc). Determine if we
-// need to provide this.
-// Wrapper exports over the PDF engine that can be used by an external module
-// such as Chrome (since Chrome cannot directly pull in PDFium sources).
#if defined(OS_WIN)
-// |pdf_buffer| is the buffer that contains the entire PDF document to be
-// rendered.
-// |buffer_size| is the size of |pdf_buffer| in bytes.
-// |page_number| is the 0-based index of the page to be rendered.
-// |dc| is the device context to render into.
-// |dpi_x| and |dpi_y| are the x and y resolutions respectively. If either
-// value is -1, the dpi from the DC will be used.
-// |bounds_origin_x|, |bounds_origin_y|, |bounds_width| and |bounds_height|
-// specify a bounds rectangle within the DC in which to render the PDF
-// page.
-// |fit_to_bounds| specifies whether the output should be shrunk to fit the
-// supplied bounds if the page size is larger than the bounds in any
-// dimension. If this is false, parts of the PDF page that lie outside
-// the bounds will be clipped.
-// |stretch_to_bounds| specifies whether the output should be stretched to fit
-// the supplied bounds if the page size is smaller than the bounds in any
-// dimension.
-// If both |fit_to_bounds| and |stretch_to_bounds| are true, then
-// |fit_to_bounds| is honored first.
-// |keep_aspect_ratio| If any scaling is to be done is true, this flag
-// specifies whether the original aspect ratio of the page should be
-// preserved while scaling.
-// |center_in_bounds| specifies whether the final image (after any scaling is
-// done) should be centered within the given bounds.
-// |autorotate| specifies whether the final image should be rotated to match
-// the output bound.
-// Returns false if the document or the page number are not valid.
-PP_EXPORT bool RenderPDFPageToDC(const void* pdf_buffer,
+bool RenderPDFPageToDC(const void* pdf_buffer,
int buffer_size,
int page_number,
HDC dc,
- int dpi_x,
- int dpi_y,
+ int dpi,
int bounds_origin_x,
int bounds_origin_y,
int bounds_width,
@@ -177,8 +104,8 @@ PP_EXPORT bool RenderPDFPageToDC(const void* pdf_buffer,
scoped_ptr<chrome_pdf::PDFEngineExports> engine_exports(
chrome_pdf::PDFEngineExports::Create());
chrome_pdf::PDFEngineExports::RenderingSettings settings(
- dpi_x, dpi_y, pp::Rect(bounds_origin_x, bounds_origin_y, bounds_width,
- bounds_height),
+ dpi, dpi, pp::Rect(bounds_origin_x, bounds_origin_y, bounds_width,
+ bounds_height),
fit_to_bounds, stretch_to_bounds, keep_aspect_ratio, center_in_bounds,
autorotate);
bool ret = engine_exports->RenderPDFPageToDC(pdf_buffer, buffer_size,
@@ -191,9 +118,6 @@ PP_EXPORT bool RenderPDFPageToDC(const void* pdf_buffer,
#endif // OS_WIN
-// |page_count| and |max_page_width| are optional and can be NULL.
-// Returns false if the document is not valid.
-PDF_USED PP_EXPORT
bool GetPDFDocInfo(const void* pdf_buffer,
int buffer_size, int* page_count,
double* max_page_width) {
@@ -211,16 +135,6 @@ bool GetPDFDocInfo(const void* pdf_buffer,
return ret;
}
-// Gets the dimensions of a specific page in a document.
-// |pdf_buffer| is the buffer that contains the entire PDF document to be
-// rendered.
-// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
-// |page_number| is the page number that the function will get the dimensions
-// of.
-// |width| is the output for the width of the page in points.
-// |height| is the output for the height of the page in points.
-// Returns false if the document or the page number are not valid.
-PDF_USED PP_EXPORT
bool GetPDFPageSizeByIndex(const void* pdf_buffer,
int pdf_buffer_size, int page_number,
double* width, double* height) {
@@ -237,19 +151,6 @@ bool GetPDFPageSizeByIndex(const void* pdf_buffer,
return ret;
}
-// Renders PDF page into 4-byte per pixel BGRA color bitmap.
-// |pdf_buffer| is the buffer that contains the entire PDF document to be
-// rendered.
-// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
-// |page_number| is the 0-based index of the page to be rendered.
-// |bitmap_buffer| is the output buffer for bitmap.
-// |bitmap_width| is the width of the output bitmap.
-// |bitmap_height| is the height of the output bitmap.
-// |dpi| is the resolutions.
-// |autorotate| specifies whether the final image should be rotated to match
-// the output bound.
-// Returns false if the document or the page number are not valid.
-PDF_USED PP_EXPORT
bool RenderPDFPageToBitmap(const void* pdf_buffer,
int pdf_buffer_size,
int page_number,
@@ -275,4 +176,4 @@ bool RenderPDFPageToBitmap(const void* pdf_buffer,
return ret;
}
-} // extern "C"
+} // namespace chrome_pdf
diff --git a/pdf/pdf.def b/pdf/pdf.def
deleted file mode 100644
index b36918b..0000000
--- a/pdf/pdf.def
+++ /dev/null
@@ -1,7 +0,0 @@
-LIBRARY pdf
-
-EXPORTS
- NP_GetEntryPoints @1
- NP_Initialize @2
- NP_Shutdown @3
-
diff --git a/pdf/pdf.gyp b/pdf/pdf.gyp
index 0225921..d49a0f1 100644
--- a/pdf/pdf.gyp
+++ b/pdf/pdf.gyp
@@ -3,28 +3,18 @@
'chromium_code': 1,
'pdf_engine%': 0, # 0 PDFium
},
- 'target_defaults': {
- 'cflags': [
- '-fPIC',
- ],
- },
'targets': [
{
'target_name': 'pdf',
- 'type': 'loadable_module',
- 'msvs_guid': '647863C0-C7A3-469A-B1ED-AD7283C34BED',
+ 'type': 'static_library',
'dependencies': [
'../base/base.gyp:base',
+ '../components/components.gyp:ui_zoom',
+ '../content/content.gyp:content_common',
'../net/net.gyp:net',
- '../ppapi/ppapi.gyp:ppapi_cpp',
+ '../ppapi/ppapi.gyp:ppapi_internal_module',
'../third_party/pdfium/pdfium.gyp:pdfium',
],
- 'xcode_settings': {
- 'INFOPLIST_FILE': 'Info.plist',
- },
- 'mac_framework_dirs': [
- '$(SDKROOT)/System/Library/Frameworks/ApplicationServices.framework/Frameworks',
- ],
'ldflags': [ '-L<(PRODUCT_DIR)',],
'sources': [
'button.h',
@@ -55,7 +45,6 @@
'paint_manager.h',
'pdf.cc',
'pdf.h',
- 'pdf.rc',
'progress_control.cc',
'progress_control.h',
'pdf_engine.h',
@@ -65,8 +54,6 @@
'resource_consts.h',
'thumbnail_control.cc',
'thumbnail_control.h',
- '../components/ui/zoom/page_zoom_constants.cc',
- '../content/common/page_zoom.cc',
],
'conditions': [
['pdf_engine==0', {
@@ -86,117 +73,11 @@
'pdfium/pdfium_range.h',
],
}],
- ['OS!="win"', {
- 'sources!': [
- 'pdf.rc',
- ],
- }],
- ['OS=="mac"', {
- 'mac_bundle': 1,
- 'product_name': 'PDF',
- 'product_extension': 'plugin',
- # Strip the shipping binary of symbols so "Foxit" doesn't appear in
- # the binary. Symbols are stored in a separate .dSYM.
- 'variables': {
- 'mac_real_dsym': 1,
- },
- 'sources+': [
- 'Info.plist'
- ],
- }],
['OS=="win"', {
- 'defines': [
- 'COMPILE_CONTENT_STATICALLY',
- ],
# TODO(jschuh): crbug.com/167187 fix size_t to int truncations.
'msvs_disabled_warnings': [ 4267, ],
}],
- ['OS=="linux"', {
- 'configurations': {
- 'Release_Base': {
- #'cflags': [ '-fno-weak',], # get rid of symbols that strip doesn't remove.
- # Don't do this for now since official builder will take care of it. That
- # way symbols can still be uploaded to the crash server.
- #'ldflags': [ '-s',], # strip local symbols from binary.
- },
- },
- }],
],
},
],
- 'conditions': [
- # CrOS has a separate step to do this.
- ['OS=="linux" and chromeos==0',
- { 'targets': [
- {
- 'target_name': 'pdf_linux_symbols',
- 'type': 'none',
- 'conditions': [
- ['linux_dump_symbols==1', {
- 'actions': [
- {
- 'action_name': 'dump_symbols',
- 'inputs': [
- '<(DEPTH)/build/linux/dump_app_syms',
- '<(PRODUCT_DIR)/dump_syms',
- '<(PRODUCT_DIR)/libpdf.so',
- ],
- 'outputs': [
- '<(PRODUCT_DIR)/libpdf.so.breakpad.<(target_arch)',
- ],
- 'action': ['<(DEPTH)/build/linux/dump_app_syms',
- '<(PRODUCT_DIR)/dump_syms',
- '<(linux_strip_binary)',
- '<(PRODUCT_DIR)/libpdf.so',
- '<@(_outputs)'],
- 'message': 'Dumping breakpad symbols to <(_outputs)',
- 'process_outputs_as_sources': 1,
- },
- ],
- 'dependencies': [
- 'pdf',
- '../breakpad/breakpad.gyp:dump_syms',
- ],
- }],
- ],
- },
- ],
- },], # OS=="linux" and chromeos==0
- ['OS=="win" and fastbuild==0 and target_arch=="ia32" and syzyasan==1', {
- 'variables': {
- 'dest_dir': '<(PRODUCT_DIR)/syzygy',
- },
- 'targets': [
- {
- 'target_name': 'pdf_syzyasan',
- 'type': 'none',
- 'sources' : [],
- 'dependencies': [
- 'pdf',
- ],
- # Instrument PDFium with SyzyAsan.
- 'actions': [
- {
- 'action_name': 'Instrument PDFium with SyzyAsan',
- 'inputs': [
- '<(PRODUCT_DIR)/pdf.dll',
- ],
- 'outputs': [
- '<(dest_dir)/pdf.dll',
- '<(dest_dir)/pdf.dll.pdb',
- ],
- 'action': [
- 'python',
- '<(DEPTH)/chrome/tools/build/win/syzygy/instrument.py',
- '--mode', 'asan',
- '--input_executable', '<(PRODUCT_DIR)/pdf.dll',
- '--input_symbol', '<(PRODUCT_DIR)/pdf.dll.pdb',
- '--destination_dir', '<(dest_dir)',
- ],
- },
- ],
- },
- ],
- }], # OS=="win" and fastbuild==0 and target_arch=="ia32" and syzyasan==1
- ],
}
diff --git a/pdf/pdf.h b/pdf/pdf.h
index d797bbb..37e72e5 100644
--- a/pdf/pdf.h
+++ b/pdf/pdf.h
@@ -5,6 +5,7 @@
#ifndef PDF_PDF_H_
#define PDF_PDF_H_
+#include "ppapi/c/ppb.h"
#include "ppapi/cpp/module.h"
namespace chrome_pdf {
@@ -19,6 +20,94 @@ class PDFModule : public pp::Module {
virtual pp::Instance* CreateInstance(PP_Instance instance);
};
+int PPP_InitializeModule(PP_Module module_id,
+ PPB_GetInterface get_browser_interface);
+void PPP_ShutdownModule();
+const void* PPP_GetInterface(const char* interface_name);
+
+#if defined(OS_WIN)
+// |pdf_buffer| is the buffer that contains the entire PDF document to be
+// rendered.
+// |buffer_size| is the size of |pdf_buffer| in bytes.
+// |page_number| is the 0-based index of the page to be rendered.
+// |dc| is the device context to render into.
+// |dpi| and |dpi_y| is the resolution. If the value is -1, the dpi from the DC
+// will be used.
+// |bounds_origin_x|, |bounds_origin_y|, |bounds_width| and |bounds_height|
+// specify a bounds rectangle within the DC in which to render the PDF
+// page.
+// |fit_to_bounds| specifies whether the output should be shrunk to fit the
+// supplied bounds if the page size is larger than the bounds in any
+// dimension. If this is false, parts of the PDF page that lie outside
+// the bounds will be clipped.
+// |stretch_to_bounds| specifies whether the output should be stretched to fit
+// the supplied bounds if the page size is smaller than the bounds in any
+// dimension.
+// If both |fit_to_bounds| and |stretch_to_bounds| are true, then
+// |fit_to_bounds| is honored first.
+// |keep_aspect_ratio| If any scaling is to be done is true, this flag
+// specifies whether the original aspect ratio of the page should be
+// preserved while scaling.
+// |center_in_bounds| specifies whether the final image (after any scaling is
+// done) should be centered within the given bounds.
+// |autorotate| specifies whether the final image should be rotated to match
+// the output bound.
+// Returns false if the document or the page number are not valid.
+bool RenderPDFPageToDC(const void* pdf_buffer,
+ int buffer_size,
+ int page_number,
+ HDC dc,
+ int dpi,
+ int bounds_origin_x,
+ int bounds_origin_y,
+ int bounds_width,
+ int bounds_height,
+ bool fit_to_bounds,
+ bool stretch_to_bounds,
+ bool keep_aspect_ratio,
+ bool center_in_bounds,
+ bool autorotate);
+#endif
+// |page_count| and |max_page_width| are optional and can be NULL.
+// Returns false if the document is not valid.
+bool GetPDFDocInfo(const void* pdf_buffer,
+ int buffer_size, int* page_count,
+ double* max_page_width);
+
+// Gets the dimensions of a specific page in a document.
+// |pdf_buffer| is the buffer that contains the entire PDF document to be
+// rendered.
+// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
+// |page_number| is the page number that the function will get the dimensions
+// of.
+// |width| is the output for the width of the page in points.
+// |height| is the output for the height of the page in points.
+// Returns false if the document or the page number are not valid.
+bool GetPDFPageSizeByIndex(const void* pdf_buffer,
+ int pdf_buffer_size, int page_number,
+ double* width, double* height);
+
+// Renders PDF page into 4-byte per pixel BGRA color bitmap.
+// |pdf_buffer| is the buffer that contains the entire PDF document to be
+// rendered.
+// |pdf_buffer_size| is the size of |pdf_buffer| in bytes.
+// |page_number| is the 0-based index of the page to be rendered.
+// |bitmap_buffer| is the output buffer for bitmap.
+// |bitmap_width| is the width of the output bitmap.
+// |bitmap_height| is the height of the output bitmap.
+// |dpi| is the resolutions.
+// |autorotate| specifies whether the final image should be rotated to match
+// the output bound.
+// Returns false if the document or the page number are not valid.
+bool RenderPDFPageToBitmap(const void* pdf_buffer,
+ int pdf_buffer_size,
+ int page_number,
+ void* bitmap_buffer,
+ int bitmap_width,
+ int bitmap_height,
+ int dpi,
+ bool autorotate);
+
} // namespace chrome_pdf
#endif // PDF_PDF_H_
diff --git a/pdf/pdf.rc b/pdf/pdf.rc
deleted file mode 100644
index 50cb295..0000000
--- a/pdf/pdf.rc
+++ /dev/null
@@ -1,104 +0,0 @@
-// Microsoft Visual C++ generated resource script.
-//
-#include "resource.h"
-
-#define APSTUDIO_READONLY_SYMBOLS
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 2 resource.
-//
-#include "afxres.h"
-
-/////////////////////////////////////////////////////////////////////////////
-#undef APSTUDIO_READONLY_SYMBOLS
-
-/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
-
-#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
-#ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
-#endif //_WIN32
-
-#ifdef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// TEXTINCLUDE
-//
-
-1 TEXTINCLUDE
-BEGIN
- "resource.h\0"
-END
-
-2 TEXTINCLUDE
-BEGIN
- "#include ""afxres.h""\r\n"
- "\0"
-END
-
-3 TEXTINCLUDE
-BEGIN
- "\r\n"
- "\0"
-END
-
-#endif // APSTUDIO_INVOKED
-
-
-/////////////////////////////////////////////////////////////////////////////
-//
-// Version
-//
-
-VS_VERSION_INFO VERSIONINFO
- FILEVERSION 1,0,0,1
- PRODUCTVERSION 1,0,0,1
- FILEFLAGSMASK 0x17L
-#ifdef _DEBUG
- FILEFLAGS 0x1L
-#else
- FILEFLAGS 0x0L
-#endif
- FILEOS 0x4L
- FILETYPE 0x2L
- FILESUBTYPE 0x0L
-BEGIN
- BLOCK "StringFileInfo"
- BEGIN
- BLOCK "040904e4"
- BEGIN
- VALUE "FileDescription", "Chrome PDF Viewer"
- VALUE "FileVersion", "1, 0, 0, 1"
- VALUE "InternalName", "pdf"
- VALUE "LegalCopyright", "Copyright (C) 2010"
- VALUE "MIMEType", "application/pdf"
- VALUE "FileExtents", "pdf"
- VALUE "FileOpenName", "Acrobat Portable Document Format"
- VALUE "OriginalFilename", "pdf.dll"
- VALUE "ProductName", "Chrome PDF Viewer"
- VALUE "ProductVersion", "1, 0, 0, 1"
- END
- END
- BLOCK "VarFileInfo"
- BEGIN
- VALUE "Translation", 0x409, 1252
- END
-END
-
-#endif // English (U.S.) resources
-/////////////////////////////////////////////////////////////////////////////
-
-
-
-#ifndef APSTUDIO_INVOKED
-/////////////////////////////////////////////////////////////////////////////
-//
-// Generated from the TEXTINCLUDE 3 resource.
-//
-
-
-/////////////////////////////////////////////////////////////////////////////
-#endif // not APSTUDIO_INVOKED
-