| Index: pdf/pdf.cc
|
| diff --git a/pdf/pdf.cc b/pdf/pdf.cc
|
| index d6c9863df7b1f319218f8ef698051f4e93f28aa3..500562f2500c49f0a04903a345d9a4f8086bcb17 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
|
| +
|
| +// 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);
|
| +}
|
|
|
| -extern "C" {
|
| -
|
| -// 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
|
|
|